debian/changelog | 2 debian/control | 1 debian/patches/030_no_fade_in_staticswicher.patch | 12 debian/patches/056_Preserve-DESTDIR-if-no-override-in-COMPIZ_DESTDIR.patch | 22 debian/patches/060_move_checks_to_compiz.patch | 196 - debian/patches/065_add_bailer_and_detection_plugins.patch | 652 ++++ debian/patches/085_add_grid_plugin.patch | 1461 ++++++++++ debian/patches/086_new_grid_defaults.patch | 49 debian/patches/series | 5 debian/rules | 9 debian/source/local-options | 2 11 files changed, 2200 insertions(+), 211 deletions(-)
New commits: commit 784abdee22139d95eb1e7a9cec04d1a8accc7437 Author: Sean Finney <[email protected]> Date: Sat Feb 26 22:43:37 2011 +0000 Prepare new upload diff --git a/debian/changelog b/debian/changelog index ecb8ce6..e57eb08 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -compiz (0.9.2.1+git20110226-1) experimental; urgency=low +compiz (0.9.2.1+git20110226.f059fae9-1) experimental; urgency=low [ Sean Finney ] * Incorporate Janos Guljas' compiz packaging work, thanks! commit 6e9d7f78e86d9d53aec87b665dfb706c1433fa36 Author: Sean Finney <[email protected]> Date: Sun Feb 27 00:23:46 2011 +0000 Cleanup leftover .pot file in clean target diff --git a/debian/rules b/debian/rules index cd2efcc..b583b80 100755 --- a/debian/rules +++ b/debian/rules @@ -11,6 +11,11 @@ DEFAULT_PLUGINS = "core bailer detection composite opengl decor mousepoll vpswit %: dh $@ +clean: + dh clean + # upstream build leaves this around + rm -f po/compiz.pot + override_dh_auto_configure: # currently, segfault if CMAKE_BUILD_TYPE=Release dh_auto_configure -- -DCOMPIZ_BUILD_WITH_RPATH=FALSE -DCOMPIZ_DEFAULT_PLUGINS=\"$(DEFAULT_PLUGINS)\" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCOMPIZ_PACKAGING_ENABLED=TRUE commit ee1eb7fabb2faa084d1a32ddc383a977d996d1e4 Author: Sean Finney <[email protected]> Date: Sat Feb 26 17:46:43 2011 +0000 Add unapply-patches and abort-on-upstream-changes to source local-options This should allow tools like git-buildpackage to remain happy with the new 3.0 (quilt) format. If you're using git-buildpackage, you might also want to have cleaner = debuild clean && rm -rf .pc in your ~/.gbp.conf until #591858 is fixed. diff --git a/debian/source/local-options b/debian/source/local-options new file mode 100644 index 0000000..9cdfca9 --- /dev/null +++ b/debian/source/local-options @@ -0,0 +1,2 @@ +unapply-patches +abort-on-upstream-changes commit f0b2e5bf112a200bdf55f9f807dc21da25dbf1e6 Author: Sean Finney <[email protected]> Date: Sat Feb 26 16:43:19 2011 +0000 Add missing build dep on libglibmm-2.4-dev diff --git a/debian/control b/debian/control index 659747e..9c6002e 100644 --- a/debian/control +++ b/debian/control @@ -8,6 +8,7 @@ Build-Depends: cmake (>= 2.6), debhelper (>= 7.0.50~), intltool, libtool, libdbus-glib-1-dev, libgconf2-dev, libgl1-mesa-dev (>= 6.5.1) | libgl-dev, libglib2.0-dev, libgnome-desktop-dev, libboost1.42-dev, libboost-serialization1.42-dev, + libglibmm-2.4-dev, libgnomeui-dev, libgnome-window-settings-dev, libgtk2.0-dev, libice-dev (>= 1:1.0.1), libmetacity-dev (>= 1:2.30.0), libpango1.0-dev, libpng12-dev | libpng-dev, librsvg2-dev, commit 72dd7ed370a58e90a062450c0a5af8edc7acce5f Author: Sean Finney <[email protected]> Date: Sat Feb 26 16:16:29 2011 +0000 Update list of default plugins and cmake configuration options diff --git a/debian/rules b/debian/rules index 4308488..cd2efcc 100755 --- a/debian/rules +++ b/debian/rules @@ -6,14 +6,14 @@ CORE_ABIVERSION := $(shell sed -rn 's/^\#define[[:space:]]+CORE_ABIVERSION[[:space:]]+//p' include/core/core.h ) -DEFAULT_PLUGINS = "core composite opengl decor mousepoll scale expo move compiztoolbox place wall ezoom staticswitcher resize wobbly cube rotate 3d cubeaddon" +DEFAULT_PLUGINS = "core bailer detection composite opengl decor mousepoll vpswitch regex animation snap expo move compiztoolbox place grid gnomecompat wall ezoom workarounds staticswitcher resize fade scale session" %: dh $@ override_dh_auto_configure: # currently, segfault if CMAKE_BUILD_TYPE=Release - dh_auto_configure -- -DCOMPIZ_BUILD_WITH_RPATH=FALSE -DCOMPIZ_DEFAULT_PLUGINS=\"$(DEFAULT_PLUGINS)\" -DCMAKE_BUILD_TYPE=Debug -DCOMPIZ_PACKAGING_ENABLED=TRUE + dh_auto_configure -- -DCOMPIZ_BUILD_WITH_RPATH=FALSE -DCOMPIZ_DEFAULT_PLUGINS=\"$(DEFAULT_PLUGINS)\" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCOMPIZ_PACKAGING_ENABLED=TRUE override_dh_install: # cmake findcompiz_install use COMPIZ_DESTDIR and using COMPIZ_DESTDIR and commit c60d5ec32e62e4ab5bea7b2945c4ce97acf9f40f Author: Sean Finney <[email protected]> Date: Sat Feb 26 15:29:33 2011 +0000 Synchronize patches with ubuntu 1:0.9.4-0ubuntu1 diff --git a/debian/patches/030_no_fade_in_staticswicher.patch b/debian/patches/030_no_fade_in_staticswicher.patch new file mode 100644 index 0000000..00fe917 --- /dev/null +++ b/debian/patches/030_no_fade_in_staticswicher.patch @@ -0,0 +1,12 @@ +Index: compiz-0.9.2.1+glibmainloop2/plugins/fade/fade.xml.in +=================================================================== +--- compiz-0.9.2.1+glibmainloop2.orig/plugins/fade/fade.xml.in 2010-12-06 12:23:04.705212002 +0100 ++++ compiz-0.9.2.1+glibmainloop2/plugins/fade/fade.xml.in 2010-12-06 12:23:23.761212002 +0100 +@@ -9,6 +9,7 @@ + </requirement> + <relation type="after"> + <plugin>decor</plugin> ++ <plugin>staticswitcher</plugin> + </relation> + <relation type="before"> + <plugin>cube</plugin> diff --git a/debian/patches/060_move_checks_to_compiz.patch b/debian/patches/060_move_checks_to_compiz.patch index 6313e2c..32258c6 100644 --- a/debian/patches/060_move_checks_to_compiz.patch +++ b/debian/patches/060_move_checks_to_compiz.patch @@ -3,202 +3,29 @@ # running compiz. However, this duplicated several checks that compiz # runs on its own and was slow due to being a shell script. # . -# This patch adds checks for blacklisted video cards, software rendering, -# running a GNOME failsafe session, and will restart with --indirect-rendering -# if it cannot find GLX_EXT_texture_from_pixmap. It makes all of these checks -# as well as the ones compiz already runs launch a fallback WM if they fail. -# . # This patch adds in default options and plugins if none are provided on # the command line so running `compiz` continues to work like expected. # Forwarded: not-needed # Origin: Ubuntu # Author: Travis Watkins <[email protected]> -Index: compiz-0.9.0+jasonglibbranch1/plugins/opengl/src/screen.cpp -=================================================================== ---- compiz-0.9.0+jasonglibbranch1.orig/plugins/opengl/src/screen.cpp 2010-10-04 00:36:06.000000000 +0200 -+++ compiz-0.9.0+jasonglibbranch1/plugins/opengl/src/screen.cpp 2010-11-05 16:12:14.273534001 +0100 -@@ -94,6 +94,7 @@ - GLfloat diffuseLight[] = { 0.9f, 0.9f, 0.9f, 0.9f }; - GLfloat light0Position[] = { -0.5f, 0.5f, -9.0f, 1.0f }; - XWindowAttributes attr; -+ const char *glRenderer; - - if (indirectRendering) - { -@@ -183,6 +184,34 @@ - if (!strstr (glxExtensions, "GLX_EXT_texture_from_pixmap") || - !GL::bindTexImage || !GL::releaseTexImage) - { -+ /* try again with indirect rendering */ -+ if (!indirectRendering) -+ { -+ char **copy; -+ -+ copy = (char **)malloc ((programArgc + 2) * sizeof (char *)); -+ for (i = 0; i < programArgc; i++) -+ { -+ copy[i] = strdup (programArgv[i]); -+ } -+ copy[i++] = "--indirect-rendering"; -+ copy[i] = NULL; -+ execvp (programName, copy); -+ -+ /* if we made it here execvp failed */ -+ for (i = 0; copy[i] != NULL; i++) -+ { -+ free (copy[i]); -+ } -+ free (copy); -+ -+ compLogMessage ("core", CompLogLevelFatal, -+ "Failed to launch with --indirect-rendering"); -+ XFree (visinfo); -+ -+ return; -+ } -+ - compLogMessage ("opengl", CompLogLevelFatal, - "GLX_EXT_texture_from_pixmap is missing"); - GL::textureFromPixmap = false; -@@ -225,6 +254,18 @@ - setFailed (); - return; - } -+ -+ glRenderer = (const char *) glGetString (GL_RENDERER); -+ if (glRenderer != NULL && -+ (strcmp (glRenderer, "Software Rasterizer") == 0 || -+ strcmp (glRenderer, "Mesa X11") == 0)) -+ { -+ compLogMessage ("core", CompLogLevelFatal, -+ "Software rendering detected."); -+ -+ setFailed (); -+ return; -+ } - - if (strstr (glExtensions, "GL_ARB_texture_non_power_of_two")) - GL::textureNonPowerOfTwo = true; -Index: compiz-0.9.0+jasonglibbranch1/src/main.cpp +Index: compiz-0.9.4/src/main.cpp =================================================================== ---- compiz-0.9.0+jasonglibbranch1.orig/src/main.cpp 2010-10-04 00:36:06.000000000 +0200 -+++ compiz-0.9.0+jasonglibbranch1/src/main.cpp 2010-11-05 16:12:24.437534001 +0100 -@@ -59,6 +59,13 @@ - - unsigned int pluginClassHandlerIndex = 0; - -+char *blacklist[] = { -+ "8086:3577", /* Intel 830MG, 845G (LP: #259385) */ -+ "8086:2562", -+ -+ NULL -+}; -+ - static void - usage (void) - { -@@ -79,6 +86,28 @@ - programName); - } - -+void -+launchFallbackWM (void) -+{ -+ char *fallback = NULL; -+ -+ if (getenv ("KDE_FULL_SESSION") != NULL) -+ fallback = "kwin"; -+ else if (getenv ("GNOME_DESKTOP_SESSION_ID") != NULL) -+ fallback = "metacity"; -+ else if (access ("/usr/bin/xfwm4", F_OK) == 0) -+ fallback = "xfwm4"; -+ -+ printf ("\nLaunching fallback window manager\n"); -+ if (fallback != NULL) -+ execlp (fallback, fallback, "--replace", (char *)NULL); -+ else -+ execlp ("xterm", "xterm", (char *)NULL); -+ -+ /* we should never get here but if we do just exit */ -+ exit (EXIT_FAILURE); -+} -+ - static void - signalHandler (int sig) - { -@@ -107,16 +136,42 @@ - int i; - bool disableSm = false; - char *clientId = NULL; -+ char *command; - - programName = argv[0]; - programArgc = argc; - programArgv = argv; - -+ if (getenv ("GNOME_DESKTOP_SESSION_ID") != NULL && -+ strcmp (getenv ("GNOME_DESKTOP_SESSION_ID"), "Failsafe") == 0) -+ { -+ printf ("Detected GNOME failsafe session.\n"); -+ launchFallbackWM (); -+ } -+ -+ for (i = 0; blacklist[i] != NULL; i++) -+ { -+ asprintf (&command, "lspci -n | grep -q %s", blacklist[i]); -+ if (system(command) == 0) -+ { -+ printf ("Blacklisted PCI ID %s detected\n", blacklist[i]); -+ launchFallbackWM (); -+ } -+ free (command); -+ } -+ - signal (SIGHUP, signalHandler); - signal (SIGCHLD, signalHandler); - signal (SIGINT, signalHandler); - signal (SIGTERM, signalHandler); - -+ /* if no options are passed run with defaults */ -+ if (argc == 1) -+ { -+ useDesktopHints = false; -+ replaceCurrentWm = true; -+ } -+ - for (i = 1; i < argc; i++) - { - if (!strcmp (argv[i], "--help")) -@@ -183,14 +238,18 @@ +--- compiz-0.9.4.orig/src/main.cpp 2011-02-24 10:27:13.000000000 +0100 ++++ compiz-0.9.4/src/main.cpp 2011-02-24 11:17:38.142752891 +0100 +@@ -170,6 +170,10 @@ } } + /* add in default plugins if none are given */ + if (plugins.size () == 0) -+ plugins.push_back ("ccp"); ++ plugins.push_back ("ccp"); + - screen = new CompScreen (); - if (!screen) -- return 1; -+ launchFallbackWM (); - - modHandler = new ModifierHandler (); - - if (!modHandler) -- return 1; -+ launchFallbackWM (); + initialPlugins = plugins; - if (!plugins.empty ()) - { -@@ -211,12 +270,22 @@ - } - - if (!screen->init (displayName)) -- return 1; -+ launchFallbackWM (); - - modHandler->updateModifierMappings (); + return true; +@@ -226,7 +230,16 @@ + return false; if (!disableSm) + { @@ -209,9 +36,8 @@ Index: compiz-0.9.0+jasonglibbranch1/src/main.cpp + clientId = strdup (desktop_autostart_id); + unsetenv ("DESKTOP_AUTOSTART_ID"); + } -+ CompSession::init (clientId); + } - screen->eventLoop (); - + return true; + } diff --git a/debian/patches/065_add_bailer_and_detection_plugins.patch b/debian/patches/065_add_bailer_and_detection_plugins.patch new file mode 100644 index 0000000..6b7ac73 --- /dev/null +++ b/debian/patches/065_add_bailer_and_detection_plugins.patch @@ -0,0 +1,652 @@ +## Description: add some description +## Origin/Author: add some origin or author +## Bug: bug URL +Index: compiz-0.9.2.1+glibmainloop4/plugins/bailer/CMakeLists.txt +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ compiz-0.9.2.1+glibmainloop4/plugins/bailer/CMakeLists.txt 2011-01-25 13:31:48.235567002 +0100 +@@ -0,0 +1,5 @@ ++find_package (Compiz REQUIRED) ++ ++include (CompizPlugin) ++ ++compiz_plugin (bailer) +Index: compiz-0.9.2.1+glibmainloop4/plugins/bailer/bailer.xml.in +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ compiz-0.9.2.1+glibmainloop4/plugins/bailer/bailer.xml.in 2011-01-25 13:31:48.235567002 +0100 +@@ -0,0 +1,82 @@ ++<compiz> ++ <plugin name="bailer" useBcop="true"> ++ <_short>Bailer</_short> ++ <_long>Take decisive action if something is affecting the experience</_long> ++ <category>Utility</category> ++ <deps> ++ <relation type="before"> ++ <plugin>composite</plugin> ++ <plugin>opengl</plugin> ++ </relation> ++ </deps> ++ <options> ++ <option name="fatal_fallback_mode" type="int"> ++ <_short>Fatal fallback mode</_short> ++ <_long>How best to handle a fatal fallback</_long> ++ <min>0</min> ++ <max>3</max> ++ <default>2</default> ++ <desc> ++ <value>0</value> ++ <_name>No action</_name> ++ </desc> ++ <desc> ++ <value>1</value> ++ <_name>Reduced functionality mode</_name> ++ </desc> ++ <desc> ++ <value>2</value> ++ <_name>Detect session fallback</_name> ++ </desc> ++ <desc> ++ <value>3</value> ++ <_name>Execute custom fallback</_name> ++ </desc> ++ </option> ++ <option name="custom_fallback_window_manager" type="string"> ++ <_short>Custom fallback window manager command</_short> ++ <_long>Command to execute when selecting to do a custom fallback</_long> ++ </option> ++ <option name="custom_alternative_shell" type="string"> ++ <_short>Custom alternative shell command</_short> ++ <_long>If compiz is providing a shell and it can't load, an alternative shell will be launched. This is to override the alternative shell detection</_long> ++ </option> ++ <option name="poor_performance_fallback" type="int"> ++ <_short>Poor performance fallback</_short> ++ <_long>What do do when plugins indicate that performance is reading poor levels</_long> ++ <desc> ++ <value>0</value> ++ <_name>No action</_name> ++ </desc> ++ <desc> ++ <value>1</value> ++ <_name>Launch fatal fallback</_name> ++ </desc> ++ <desc> ++ <value>2</value> ++ <_name>Unload a custom list of plugins</_name> ++ </desc> ++ <desc> ++ <value>3</value> ++ <_name>Reduced functionality mode</_name> ++ </desc> ++ <min>0</min> ++ <max>2</max> ++ <default>0</default> ++ </option> ++ <option name="bad_performance_threshold" type="int"> ++ <_short>Bad performance threshold</_short> ++ <_long>How much bad performance to tolerate before taking decisive action</_long> ++ <min>0</min> ++ <max>300</max> ++ <default>50</default> ++ </option> ++ <option name="bad_plugins" type="list"> ++ <_short>Bad Plugins</_short> ++ <_long>Plugins to unload in case the session is being impacted</_long> ++ <default></default> ++ <type>string</type> ++ </option> ++ </options> ++ </plugin> ++</compiz> +Index: compiz-0.9.2.1+glibmainloop4/plugins/bailer/src/bailer.cpp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ compiz-0.9.2.1+glibmainloop4/plugins/bailer/src/bailer.cpp 2011-01-25 13:34:27.007567000 +0100 +@@ -0,0 +1,277 @@ ++/** ++ * Compiz bailer plugin ++ * ++ * bailer.cpp ++ * ++ * Copyright (c) 2010 Canonical Ltd ++ * ++ * This plugin should be thought of as a "manager" plugin for compiz ++ * it handles signals by various other plugins (eg handleCompizEvent) ++ * and then takes decisive action on those signals when appropriate ++ * based on the configuration. ++ * ++ * For example, it will handle signals from plugins that someone is ++ * doing something stupid and terminate the offending plugin, ++ * or handle signals that performance is poor, wait a little while ++ * and then take decisive action to restore the user experience. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 3 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * AUTHORS: Didier Roche <[email protected]> ++ * Sam Spilsbury <[email protected]> ++ */ ++ ++#include "bailer.h" ++ ++COMPIZ_PLUGIN_20090315 (bailer, BailerPluginVTable); ++ ++static CompString reducedFunctionalityUnload[] = {"opengl", "composite"}; ++static CompString compizShellUnload[] = {"unityshell"}; ++static CompString noARBUnload[] = {"colorfilter", "blur", "bicubic", "water", "reflex"}; ++static CompString noComplexUnload[] = {"blur", "water"}; ++ ++/* ++ * BailerScreen::detectFallbackWM () ++ * ++ * Reads the session environment propeties and tries to detect ++ * which fallback window manager would be appropriate to launch here ++ * ++ * returns: a CompString with the fallback wm command ++ * ++ */ ++CompString ++BailerScreen::detectFallbackWM () ++{ ++ if (getenv ("KDE_FULL_SESSION") != NULL) ++ return "kwin --replace"; ++ else if (getenv ("GNOME_DESKTOP_SESSION_ID") != NULL) ++ return "metacity --replace"; ++ else if (access ("/usr/bin/xfwm4", F_OK) == 0) ++ return "xfwm4 --replace"; ++ ++ return ""; ++} ++ ++/* ++ * BailerScreen::ensureShell ++ * ++ * Because compiz might be providing the panel shell or whatever ++ * (eg, Ubuntu's Unity plugin), we need to ensure that our desktop ++ * services come back when compiz goes away or when the Compiz ++ * shell(s) can't run. ++ * ++ */ ++void ++BailerScreen::ensureShell () ++{ ++ ++ CompString alternative_shell = optionGetCustomAlternativeShell(); ++ compLogMessage ("bailer", ++ CompLogLevelInfo, ++ "Ensuring a shell for your session"); ++ ++ /* FIXME: will be nicer to get the detection module at start and so, not loading plugin rather ++ than unloading them, isn't it? */ ++ unloadPlugins (compizShellUnload); ++ ++ if (strcmp (alternative_shell.c_str (), "") != 0) ++ { ++ compLogMessage ("bailer", ++ CompLogLevelInfo, ++ "Custom shell set: no detection magic: %s", alternative_shell.c_str ()); ++ screen->runCommand (alternative_shell.c_str ()); ++ return; ++ } ++ ++ if (getenv ("GDMSESSION") != NULL && (strcmp (getenv ("GDMSESSION"), "gnome") == 0)) { ++ screen->runCommand ("gnome-panel"); ++ } ++} ++ ++/* ++ * BailerScreen::doUnload ++ * ++ * Unload given plugins at the top of the main loop ++ * ++ */ ++bool ++BailerScreen::doUnload (std::vector <CompString> plugins) ++{ ++ foreach (CompString &plugin, plugins) ++ { ++ CompPlugin *p = CompPlugin::find (plugin.c_str ()); ++ ++ if (p) ++ (*loaderUnloadPlugin) (p); ++ } ++ ++ return false; ++} ++ ++/* ++ * BailerScreen::unloadPlugins ++ * ++ * Add plugins to the unload timer so that we don't unload stuff ++ * during wrapped function calls ++ * ++ */ ++void ++BailerScreen::unloadPlugins (CompString *plugins) ++{ ++ std::vector <CompString> pv (plugins, plugins + sizeof (plugins) / sizeof (*plugins)); ++ ++ mSafeUnloadTimer.stop (); ++ mSafeUnloadTimer.setCallback (boost::bind (&BailerScreen::doUnload, this, pv)); ++ mSafeUnloadTimer.start (); ++} ++ ++void ++BailerScreen::unloadPlugins (std::vector <CompString> plugins) ++{ ++ mSafeUnloadTimer.stop (); ++ mSafeUnloadTimer.setCallback (boost::bind (&BailerScreen::doUnload, this, plugins)); ++ mSafeUnloadTimer.start (); ++} ++ ++ ++/* ++ * BailerScreen::doFallback () ++ * ++ * Do the actual fallback if a plugin asks for it ++ * ++ */ ++void ++BailerScreen::doFatalFallback () ++{ ++ switch (optionGetFatalFallbackMode ()) ++ { ++ case BailerOptions::FatalFallbackModeReducedFunctionalityMode: ++ unloadPlugins (reducedFunctionalityUnload); break; ++ case BailerOptions::FatalFallbackModeDetectSessionFallback: ++ ensureShell (); ++ screen->runCommand (detectFallbackWM ().c_str ()); ++ exit (EXIT_FAILURE); ++ break; ++ case BailerOptions::FatalFallbackModeExecuteCustomFallback: ++ ensureShell (); ++ screen->runCommand (optionGetCustomFallbackWindowManager ().c_str ()); ++ exit (EXIT_FAILURE); ++ case BailerOptions::FatalFallbackModeNoAction: ++ default: ++ break; ++ } ++} ++ ++/* ++ * BailerScreen::doPerformanceFallback ++ * ++ * Not as bad as a fatal fallback, but try to recover from bad ++ * performance if a plugin thinks we are not doing so well. ++ * ++ */ ++void ++BailerScreen::doPerformanceFallback () ++{ ++ switch (optionGetPoorPerformanceFallback ()) ++ { ++ case BailerScreen::PoorPerformanceFallbackLaunchFatalFallback: ++ doFatalFallback (); ++ break; ++ case BailerScreen::PoorPerformanceFallbackUnloadACustomListOfPlugins: ++ { ++ CompOption::Value::Vector vv = optionGetBadPlugins (); ++ std::vector <CompString> pv; ++ ++ foreach (CompOption::Value &v, vv) ++ pv.push_back (v.s ()); ++ ++ unloadPlugins (pv); ++ ++ break; ++ } ++ case BailerScreen::PoorPerformanceFallbackReducedFunctionalityMode: ++ unloadPlugins (reducedFunctionalityUnload); break; ++ case BailerScreen::PoorPerformanceFallbackNoAction: ++ default: ++ break; ++ } ++} ++ ++/* ++ * BailerScreen::changeSessionType ++ * ++ * Unloads and loads plugins depending on what kind of session we wanted ++ * ++ */ ++void ++BailerScreen::changeSessionType (SessionType type) ++{ ++ switch (type) ++ { ++ case SessionType2D: ++ unloadPlugins (reducedFunctionalityUnload); ++ break; ++ case SessionType3DNoARB: ++ unloadPlugins (noARBUnload); ++ break; ++ case SessionType3DNoComplex: ++ unloadPlugins (noComplexUnload); ++ break; ++ case SessionType3DFull: ++ default: ++ break; ++ } ++} ++ ++/* ++ * BailerScreen::handleCompizEvent ++ * ++ * Checks the compiz event screen if some plugin is screaming for help ++ * ++ */ ++void ++BailerScreen::handleCompizEvent (const char *plugin, const char *event, ++ CompOption::Vector &options) ++{ ++ if (strcmp (plugin, "composite") == 0) ++ { ++ if (strcmp (event, "poor_performance") == 0) ++ { ++ mPoorPerformanceCount++; ++ if (mPoorPerformanceCount > optionGetBadPerformanceThreshold ()) ++ doPerformanceFallback (); ++ } ++ } ++ ++ if (strcmp (event, "fatal_fallback") == 0) ++ doFatalFallback (); ++ ++ if (strcmp (event, "ensure_shell") == 0) ++ ensureShell (); ++ ++ screen->handleCompizEvent (plugin, event, options); ++} ++ ++BailerScreen::BailerScreen (CompScreen *s) : ++ PluginClassHandler <BailerScreen, CompScreen> (s), ++ mPoorPerformanceCount (0) ++{ ++ ScreenInterface::setHandler (s); ++} ++ ++bool ++BailerPluginVTable::init () ++{ ++ if (!CompPlugin::checkPluginABI ("core", CORE_ABIVERSION)) ++ return false; ++ ++ return true; ++} +Index: compiz-0.9.2.1+glibmainloop4/plugins/bailer/src/bailer.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ compiz-0.9.2.1+glibmainloop4/plugins/bailer/src/bailer.h 2011-01-25 13:31:48.235567002 +0100 +@@ -0,0 +1,86 @@ ++/** ++ * Compiz bailer plugin ++ * ++ * bailer.h ++ * ++ * Copyright (c) 2010 Canonical Ltd ++ * ++ * This plugin should be thought of as a "manager" plugin for compiz ++ * it handles signals by various other plugins (eg handleCompizEvent) ++ * and then takes decisive action on those signals when appropriate ++ * based on the configuration. ++ * ++ * For example, it will handle signals from plugins that someone is ++ * doing something stupid and terminate the offending plugin, ++ * or handle signals that performance is poor, wait a little while ++ * and then take decisive action to restore the user experience. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 3 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * AUTHORS: Didier Roche <[email protected]> ++ * Sam Spilsbury <[email protected]> ++ */ ++ ++#include <core/core.h> ++#include <core/pluginclasshandler.h> ++#include <core/timer.h> ++ ++#include "bailer_options.h" ++ ++class BailerScreen : ++ public PluginClassHandler <BailerScreen, CompScreen>, ++ public ScreenInterface, ++ public BailerOptions ++{ ++ public: ++ ++ BailerScreen (CompScreen *); ++ ++ void ++ handleCompizEvent (const char *, const char *, ++ CompOption::Vector &options); ++ ++ private: ++ ++ typedef enum ++ { ++ SessionType2D = 0, ++ SessionType3DNoARB, ++ SessionType3DNoComplex, ++ SessionType3DFull ++ } SessionType; ++ ++ int mPoorPerformanceCount; ++ CompTimer mSafeUnloadTimer; ++ ++ CompString detectFallbackWM (); ++ void ensureShell (); ++ ++ void doFatalFallback (); ++ void doPerformanceFallback (); ++ ++ void changeSessionType (SessionType); ++ ++ void unloadPlugins (CompString *); ++ void unloadPlugins (std::vector <CompString> ); ++ bool doUnload (std::vector <CompString>); ++}; ++ ++#define BAILER_SCREEN(s) \ ++ BailerScreen *bs = BailerScreen::get (s); ++ ++class BailerPluginVTable : ++ public CompPlugin::VTableForScreen <BailerScreen> ++{ ++ public: ++ ++ bool init (); ++}; +Index: compiz-0.9.2.1+glibmainloop4/plugins/detection/CMakeLists.txt +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ compiz-0.9.2.1+glibmainloop4/plugins/detection/CMakeLists.txt 2011-01-25 13:31:48.235567002 +0100 +@@ -0,0 +1,5 @@ ++find_package (Compiz REQUIRED) ++ ++include (CompizPlugin) ++ ++compiz_plugin (detection) +Index: compiz-0.9.2.1+glibmainloop4/plugins/detection/detection.xml.in +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ compiz-0.9.2.1+glibmainloop4/plugins/detection/detection.xml.in 2011-01-25 13:31:48.239567002 +0100 +@@ -0,0 +1,28 @@ ++<compiz> ++ <plugin name="detection" useBcop="true"> ++ <_short>Detection</_short> ++ <_long>Do a bit more clever hardware etc detection</_long> ++ <deps> ++ <relation type="before"> ++ <plugin>composite</plugin> ++ <plugin>opengl</plugin> ++ </relation> ++ <relation type="after"> ++ <plugin>bailer</plugin> ++ </relation> ++ </deps> ++ <category>Utility</category> ++ <options> ++ <option name="detect_bad_pci" type="bool"> ++ <_short>Detect known bad PCI ids</_short> ++ <_long>Fallback when known bad PCI ids are detected</_long> ++ <default>true</default> ++ </option> ++ <option name="detect_bad_drivers" type="bool"> ++ <_short>Detect known bad drivers</_short> ++ <_long>Fallback when known bad drivers are detected</_long> ++ <default>true</default> ++ </option> ++ </options> ++ </plugin> ++</compiz> +Index: compiz-0.9.2.1+glibmainloop4/plugins/detection/src/detection.cpp +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ compiz-0.9.2.1+glibmainloop4/plugins/detection/src/detection.cpp 2011-01-25 13:31:48.239567002 +0100 +@@ -0,0 +1,74 @@ ++/** ++ * Compiz detection plugin ++ * ++ * detection.cpp ++ * ++ * Copyright (c) 2010 Canonical Ltd ++ * ++ * This plugin should does some quick extra checks to make sure we ++ * are not running on quirky hardware or drivers. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 3 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * AUTHORS: Didier Roche <[email protected]> ++ * Sam Spilsbury <[email protected]> ++ */ ++ ++#include "detection.h" ++ ++COMPIZ_PLUGIN_20090315 (detection, DetectionPluginVTable); ++ ++static CompString HW_accell_blacklisted[] = { ++ "8086:3577", /* Intel 830MG, 845G (LP: #259385) */ ++ "8086:2562" ++}; ++ ++bool ++DetectionScreen::doDetection () ++{ ++ CompOption::Vector o (0); ++ ++ /* first, take care about the blacklisted cards */ ++ for (unsigned int i = 0; i < 2; i++) ++ { ++ CompString cmd = "lspci -n | grep -q " + HW_accell_blacklisted[i]; ++ ++ if (system (cmd.c_str ()) == 0 && optionGetDetectBadPci ()) ++ { ++ compLogMessage ("detection", ++ CompLogLevelFatal, ++ "Accelerated blacklisted PCI ID %s detected", ++ HW_accell_blacklisted[i].c_str ()); ++ ++ screen->handleCompizEvent ("detection", "fatal_fallback", o); ++ } ++ } ++ ++ return false; ++} ++ ++DetectionScreen::DetectionScreen (CompScreen *s) : ++ PluginClassHandler <DetectionScreen, CompScreen> (s) ++{ ++ CompTimer::CallBack cb = boost::bind (&DetectionScreen::doDetection, ++ this); ++ ++ mDetectionTimer.start (cb, 0, 0); ++} ++ ++bool ++DetectionPluginVTable::init () ++{ ++ if (!CompPlugin::checkPluginABI ("core", CORE_ABIVERSION)) ++ return false; ++ ++ return true; ++} +Index: compiz-0.9.2.1+glibmainloop4/plugins/detection/src/detection.h +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ compiz-0.9.2.1+glibmainloop4/plugins/detection/src/detection.h 2011-01-25 13:31:48.239567002 +0100 +@@ -0,0 +1,52 @@ ++/** ++ * Compiz detection plugin ++ * ++ * detection.h ++ * ++ * Copyright (c) 2010 Canonical Ltd ++ * ++ * This plugin should does some quick extra checks to make sure we ++ * are not running on quirky hardware or drivers. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 3 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

