compiz: Changes to 'debian-unstable'
debian/changelog | 63 ++
debian/compiz-gtk.links | 1
debian/patches/010-disable-child-window-clipping.patch | 42 +
debian/patches/012_snap-by-default.patch | 14
debian/patches/013-add-cursor-theme-support.patch | 243 +++++++++
debian/patches/014-fix-gtk-window-decorator-no-argb-crash.patch | 49 +
debian/patches/014_fix-no-border-window-shadow.patch | 4
debian/patches/015_draw_dock_shadows_on_desktop.patch | 85 +++
debian/patches/015_optional-fbo.patch | 5
debian/patches/016_call_glxwaitx_before_drawing.patch | 17
debian/patches/017_always_unredirect_screensaver_on_nvidia.patch | 32 +
debian/patches/018_use_metacity_settings.patch | 16
debian/patches/020_fix_focus.patch | 81 +++
debian/patches/029_default_options.patch | 143 +++++
debian/patches/030_from_git_crash_fix_multiscreen.patch | 45 +
debian/patches/031_from_git_fix_gnome_keybindings.patch | 43 +
debian/patches/035_ignore_workspaces.patch | 19
debian/patches/037_fullscreen_stacking_fixes.patch | 17
debian/patches/049-damage-report-non-empty.patch | 83 +++
debian/patches/050_stacking.patch | 16
debian/patches/060_move_checks_to_compiz.patch | 264 +++++++++
debian/patches/061_KWD_stubs.patch | 17
debian/patches/562027-fix-gconf-ftbfs.patch | 9
debian/patches/series | 40 -
debian/patches/ubuntu/010-disable-child-window-clipping.patch | 41 -
debian/patches/ubuntu/013-add-cursor-theme-support.patch | 239 ---------
debian/patches/ubuntu/014-fix-gtk-window-decorator-no-argb-crash.patch | 44 -
debian/patches/ubuntu/014_fix-no-border-window-shadow.patch | 21
debian/patches/ubuntu/015_draw_dock_shadows_on_desktop.patch | 82 ---
debian/patches/ubuntu/016_call_glxwaitx_before_drawing.patch | 13
debian/patches/ubuntu/017_always_unredirect_screensaver_on_nvidia.patch | 28 -
debian/patches/ubuntu/018_use_metacity_settings.patch | 13
debian/patches/ubuntu/020_fix_focus.patch | 81 ---
debian/patches/ubuntu/029_default_options | 133 -----
debian/patches/ubuntu/030_from_git_crash_fix_multiscreen.patch | 45 -
debian/patches/ubuntu/031_from_git_fix_gnome_keybindings.patch | 43 -
debian/patches/ubuntu/035_ignore_workspaces | 13
debian/patches/ubuntu/037_fullscreen_stacking_fixes.patch | 16
debian/patches/ubuntu/049-damage-report-non-empty.patch | 81 ---
debian/patches/ubuntu/050_stacking.patch | 13
debian/patches/ubuntu/060_move_checks_to_compiz.patch | 265 ----------
debian/patches/ubuntu/061_KWD_stubs.patch | 13
debian/patches/ubuntu/090_profiling | 118 ----
debian/patches/ubuntu/099-autogen.patch | 12
debian/patches/ubuntu/series | 20
45 files changed, 1317 insertions(+), 1365 deletions(-)
New commits:
commit 46f472a364f12e150ba12329b21e6e2c873d4b95
Author: Sean Finney <seanius@debian.org>
Date: Wed Feb 3 21:57:45 2010 +0100
Prepare changelog for 0.8.4-1
diff --git a/debian/changelog b/debian/changelog
index 471394a..7f2033a 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,66 @@
+compiz (0.8.4-1) unstable; urgency=low
+
+ * New upstream release.
+
+ [ Sean Finney ]
+ * Fix FTBFS: "gconf/gconf-client.h: No such file or directory"
+ - thanks to Sebastian Harl <tokkee@debian.org> (Closes: #562027, #562438)
+ * Add compiz-decorator symlink for compatibility with ubuntu systems.
+ * Make all patches DEP-3 formatted.
+ * No longer keep the ubuntu patches logically separated from ours
+ * Enable 010-disable-child-window-clipping.patch, as there's an ABI bump.
+ Also, massage the patch a little so that it applies cleanly.
+ * Synchronize ubuntu patches from 0.8.4-0ubuntu10
+ * 015_draw_dock_shadows_on_desktop.patch:
+ - change decoration plugin to draw dock shadows only on the
+ desktop window instead of on top of all other windows
+ * 016_call_glxwaitx_before_drawing.patch:
+ - Call glXWaitX before we start drawing to make sure X is done
+ handling rendering calls. Suggested by Michel Dänzer to ensure
+ we don't have any rendering glitches.
+ * 017_always_unredirect_screensaver_on_nvidia.patch:
+ - always unredirect gnome-screensaver when using nvidia, workaround
+ for LP #160264 while still disabling unredirect fullscreen
+ windows for nvidia users
+ * 020_fix_focus.patch:
+ - give back the focus to the previous focused window (LP: #455900)
+ * 030_from_git_crash_fix_multiscreen.patch:
+ - merge commit 24dea72a395071b533dcf66b2eef37b20522cbba to fix
+ crash with wobbly windows in a multi screen setup
+ * 031_from_git_fix_gnome_keybindings.patch:
+ - fix gnome keybindings (terminal key)
+ * 060_move_checks_to_compiz.patch:
+ - add all relevant checks from compiz-manager to compiz itself
+ Compiz already checks for almost everything it needs so there is no
+ need to check twice.
+ * 061_KWD_stubs.patch (updated locally to remove fuzz):
+ - Horrible hack to define empty stubs for some new pure virtual
+ functions in KWD::Window, to fix FTBFS.
+ * The following patches have been updated to cleanly apply:
+ * 014-fix-gtk-window-decorator-no-argb-crash.patch
+ * 015_optional-fbo.patch
+ * ubuntu/010-disable-child-window-clipping.patch
+ * ubuntu/013-add-cursor-theme-support.patch
+ * ubuntu/018_use_metacity_settings.patch
+ * ubuntu/029_default_options
+ * ubuntu/035_ignore_workspaces
+ * ubuntu/037_fullscreen_stacking_fixes.patch
+ * ubuntu/049-damage-report-non-empty.patch
+ * ubuntu/050_stacking.patch
+ * Transition from compiz-manager to compiz binary for /usr/bin/compiz
+ * Remove all patches to the embedded compiz-manager script
+ * 028_compiz_manager_blacklist
+ * 029_compiz_manager_decoration.patch
+ * 029_compiz_manager_nvidia_settings.patch
+ * 030_compiz_manager_multi_display
+ * 031_compiz_manager_extra_blacklist_support
+ * 032_compiz_manager_add_gnomecompat
+ * 033_compiz_manager_xdg_dirs
+ * 042-compiz-manager-default-plugin
+ * 046_compiz_manager_second_screen.patch
+
+ -- Sean Finney <seanius@debian.org> Thu, 11 Feb 2010 20:17:39 +0100
+
compiz (0.8.2-6) unstable; urgency=low
* Add libxcursor-dev build-dep as required by patch
commit 93e263fd7bcc79d381c9f7741b4d99671a3f3c71
Author: Sean Finney <seanius@debian.org>
Date: Thu Feb 11 20:06:26 2010 +0100
Update debian/patches/disable-child-window-clipping.patch to remove fuzz.
diff --git a/debian/patches/010-disable-child-window-clipping.patch b/debian/patches/010-disable-child-window-clipping.patch
index d1b858b..0807f32 100644
--- a/debian/patches/010-disable-child-window-clipping.patch
+++ b/debian/patches/010-disable-child-window-clipping.patch
@@ -1,9 +1,11 @@
Author: Matthew Garrett <mjg59@srcf.ucam.org>
Description: Disable clipping of child windows
+ * This patch was modified to apply cleanly in 0.8.4-1
+Last-Modified: Thu, 11 Feb 2010 20:06:12 +0100
Origin: vendor, ubuntu (1:0.3.6-1ubuntu10)
--- compiz.orig/src/display.c
+++ compiz/src/display.c
-@@ -2234,6 +2234,23 @@ addDisplay (const char *name)
+@@ -2194,6 +2194,23 @@ addDisplay (const char *name)
lastScreen = ScreenCount (dpy) - 1;
}
@@ -36,5 +38,5 @@ Origin: vendor, ubuntu (1:0.3.6-1ubuntu10)
+ Window glIncludeInferiorsOwner;
+
Window activeWindow;
- Window nextActiveWindow;
+ Window below;
commit da37f41e8a3d1a3f2607731fd2cd6c600b3e79d5
Author: Sean Finney <seanius@debian.org>
Date: Thu Feb 11 19:36:15 2010 +0100
update some debian default in the default options patch
diff --git a/debian/patches/029_default_options.patch b/debian/patches/029_default_options.patch
index 56fcb5c..05c573d 100644
--- a/debian/patches/029_default_options.patch
+++ b/debian/patches/029_default_options.patch
@@ -11,10 +11,16 @@ Description: Various default settings
* Increase drop-shadow radius from 8 to 9.
* Set default decorator to /usr/bin/compiz-decorator.
* Change default colors for faces in cube plugin.
- * Add ubuntu logo for top face of cube.
- * Use placement mode 2 for placement plugin.
- * Use default resize mode 2 in resize plugin.
+ * Use "Smart" placement mode (2) by default for placement plugin.
+ * Use "Rectangle" resize mode (2) by default for resize plugin.
* Add exception to not fade notify-osd windows in fade plugin.
+ .
+ The following changes from the original Ubuntu patch were modified:
+ * Use slightly more Debianish/Gnomeish colors for the cube face top.
+ The following changes from the original Ubuntu patch were not included:
+ * Add Ubuntu logo for top face of cube.
+ The following changes were introduced to the Debian version of this patch:
+ * Add Debian logo for top face of cube.
Origin: vendor, ubuntu (1:0.6.0+git20071006-0ubuntu1) or perhaps earlier.
--- compiz.orig/metadata/core.xml.in.in
+++ compiz/metadata/core.xml.in.in
@@ -85,9 +91,9 @@ Origin: vendor, ubuntu (1:0.6.0+git20071006-0ubuntu1) or perhaps earlier.
- <red>0xfefe</red>
- <green>0xffff</green>
- <blue>0xc7c7</blue>
-+ <red>0xcdcd</red>
-+ <green>0xbebe</green>
-+ <blue>0x7070</blue>
++ <red>0x4545</red>
++ <green>0x9a9a</green>
++ <blue>0xf4f4</blue>
</default>
</option>
<subgroup>
@@ -98,7 +104,7 @@ Origin: vendor, ubuntu (1:0.6.0+git20071006-0ubuntu1) or perhaps earlier.
- <default>
- <value>freedesktop</value>
- </default>
-+ <default><value>/usr/share/gdm/themes/Human/ubuntu.png</value></default>
++ <default><value>/usr/share/images/desktop-base/debian-blueish-wallpaper-640x480.png</value></default>
</option>
<option name="adjust_image" type="bool">
<_short>Adjust Image</_short>
commit 7559913fa794d2844ef7dfe86ab9d47f92f42fa0
Author: Sean Finney <seanius@debian.org>
Date: Thu Feb 11 19:59:29 2010 +0100
No longer keep the ubuntu patches logically separated from ours
Avoid the artifical partition between ubuntu patches and our own; it only
makes merging back and forth more difficult in the long run.
Conflicts:
debian/patches/series
diff --git a/debian/patches/010-disable-child-window-clipping.patch b/debian/patches/010-disable-child-window-clipping.patch
new file mode 100644
index 0000000..d1b858b
--- /dev/null
+++ b/debian/patches/010-disable-child-window-clipping.patch
@@ -0,0 +1,40 @@
+Author: Matthew Garrett <mjg59@srcf.ucam.org>
+Description: Disable clipping of child windows
+Origin: vendor, ubuntu (1:0.3.6-1ubuntu10)
+--- compiz.orig/src/display.c
++++ compiz/src/display.c
+@@ -2234,6 +2234,23 @@ addDisplay (const char *name)
+ lastScreen = ScreenCount (dpy) - 1;
+ }
+
++ {
++ XSetWindowAttributes attr;
++ Atom atom;
++
++ attr.override_redirect = TRUE;
++ d->glIncludeInferiorsOwner =
++ XCreateWindow (dpy, XRootWindow (dpy, 0),
++ -100, -100, 1, 1, 0,
++ CopyFromParent, CopyFromParent,
++ CopyFromParent,
++ CWOverrideRedirect,
++ &attr);
++
++ atom = XInternAtom (dpy, "_COMPIZ_GL_INCLUDE_INFERIORS", False);
++ XSetSelectionOwner(dpy, atom, d->glIncludeInferiorsOwner, CurrentTime);
++ }
++
+ for (i = firstScreen; i <= lastScreen; i++)
+ {
+ Window newWmSnOwner = None, newCmSnOwner = None;
+--- compiz.orig/include/compiz-core.h
++++ compiz/include/compiz-core.h
+@@ -1028,6 +1028,8 @@ struct _CompDisplay {
+
+ GLenum textureFilter;
+
++ Window glIncludeInferiorsOwner;
++
+ Window activeWindow;
+ Window nextActiveWindow;
+
diff --git a/debian/patches/013-add-cursor-theme-support.patch b/debian/patches/013-add-cursor-theme-support.patch
new file mode 100644
index 0000000..dd15503
--- /dev/null
+++ b/debian/patches/013-add-cursor-theme-support.patch
@@ -0,0 +1,243 @@
+Author: Sebastien Bacher <seb128@canonical.com>
+Description: add cursor theme and size support
+Origin: vendor, ubuntu (1:0.3.6-1ubuntu4)
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/86184
+--- compiz.orig/configure.ac
++++ compiz/configure.ac
+@@ -123,6 +123,7 @@ COMPIZ_REQUIRES="xcomposite \
+ xdamage \
+ xrandr \
+ xinerama \
++ xcursor \
+ ice \
+ sm \
+ libxml-2.0 \
+--- compiz.orig/gtk/window-decorator/gtk-window-decorator.c
++++ compiz/gtk/window-decorator/gtk-window-decorator.c
+@@ -30,6 +30,7 @@
+ #include <X11/cursorfont.h>
+ #include <X11/extensions/Xrender.h>
+ #include <X11/Xregion.h>
++#include <X11/Xcursor/Xcursor.h>
+
+ #ifndef GDK_DISABLE_DEPRECATED
+ #define GDK_DISABLE_DEPRECATED
+@@ -83,6 +84,14 @@
+ #include <metacity-private/theme.h>
+ #endif
+
++#define GNOME_MOUSE_DIR "/desktop/gnome/peripherals/mouse"
++
++#define GNOME_CURSOR_THEME_KEY \
++ GNOME_MOUSE_DIR "/cursor_theme"
++
++#define GNOME_CURSOR_SIZE_KEY \
++ GNOME_MOUSE_DIR "/cursor_size"
++
+ #define METACITY_GCONF_DIR "/apps/metacity/general"
+
+ #define COMPIZ_USE_SYSTEM_FONT_KEY \
+@@ -146,6 +155,13 @@
+ #define WHEEL_ACTION_KEY \
+ GCONF_DIR "/mouse_wheel_action"
+
++#define COMPIZ_GCONF_DIR2 "/apps/compiz/general/allscreens/options"
++#define COMPIZ_CURSOR_THEME_KEY \
++ COMPIZ_GCONF_DIR2 "/cursor_theme"
++
++#define COMPIZ_CURSOR_SIZE_KEY \
++ COMPIZ_GCONF_DIR2 "/cursor_size"
++
+ #define DBUS_DEST "org.freedesktop.compiz"
+ #define DBUS_PATH "/org/freedesktop/compiz/decoration/allscreens"
+ #define DBUS_INTERFACE "org.freedesktop.compiz"
+@@ -6491,6 +6507,44 @@ button_layout_changed (GConfClient *clie
+ return FALSE;
+ }
+
++ static void
++cursor_theme_changed (GConfClient *client)
++{
++ gchar *theme;
++ gint size;
++
++ theme = gconf_client_get_string(client, GNOME_CURSOR_THEME_KEY, NULL);
++ size = gconf_client_get_int(client, GNOME_CURSOR_SIZE_KEY, NULL);
++
++ gconf_client_set_string(client, COMPIZ_CURSOR_THEME_KEY, theme, NULL);
++
++ gconf_client_set_int(client, COMPIZ_CURSOR_SIZE_KEY, size, NULL);
++
++ if (theme && strlen(theme))
++ {
++ gint i, j;
++ GdkDisplay *gdkdisplay = gdk_display_get_default ();
++ Display *xdisplay = gdk_x11_display_get_xdisplay (gdkdisplay);
++
++
++ XcursorSetTheme (xdisplay, theme);
++ XcursorSetDefaultSize (xdisplay, size);
++
++ for (i = 0; i < 3; i++)
++ {
++ for (j = 0; j < 3; j++)
++ {
++ if (cursor[i][j].shape != XC_left_ptr)
++ {
++ XFreeCursor (xdisplay, cursor[i][j].cursor);
++ cursor[i][j].cursor =
++ XCreateFontCursor (xdisplay, cursor[i][j].shape);
++ }
++ }
++ }
++ }
++}
++
+ static void
+ value_changed (GConfClient *client,
+ const gchar *key,
+@@ -6569,6 +6623,11 @@ value_changed (GConfClient *client,
+ if (theme_opacity_changed (client))
+ changed = TRUE;
+ }
++ else if (strcmp (key, GNOME_CURSOR_THEME_KEY) == 0 ||
++ strcmp (key, GNOME_CURSOR_SIZE_KEY) == 0)
++ {
++ cursor_theme_changed (client);
++ }
+
+ if (changed)
+ decorations_changed (data);
+@@ -6732,6 +6791,11 @@ init_settings (WnckScreen *screen)
+ NULL);
+
+ gconf_client_add_dir (gconf,
++ GNOME_MOUSE_DIR,
++ GCONF_CLIENT_PRELOAD_ONELEVEL,
++ NULL);
++
++ gconf_client_add_dir (gconf,
+ COMPIZ_GCONF_DIR1,
+ GCONF_CLIENT_PRELOAD_ONELEVEL,
+ NULL);
+@@ -6740,6 +6804,9 @@ init_settings (WnckScreen *screen)
+ "value_changed",
+ G_CALLBACK (value_changed),
+ screen);
++
++ cursor_theme_changed(gconf);
++
+ #elif USE_DBUS_GLIB
+ DBusConnection *connection;
+ DBusMessage *reply;
+--- compiz.orig/metadata/core.xml.in.in
++++ compiz/metadata/core.xml.in.in
+@@ -35,6 +35,18 @@
+ <min>0</min>
+ <max>10000</max>
+ </option>
++ <option name="cursor_theme" type="string">
++ <_short>Cursor theme</_short>
++ <_long>Cursor theme name</_long>
++ <default></default>
++ </option>
++ <option name="cursor_size" type="int">
++ <_short>Cursor size</_short>
++ <_long>Size of the cursor</_long>
++ <default>18</default>
++ <min>8</min>
++ <max>128</max>
++ </option>
+ <option name="ping_delay" type="int">
+ <_short>Ping Delay</_short>
+ <_long>Interval between ping messages</_long>
+--- compiz.orig/src/display.c
++++ compiz/src/display.c
+@@ -41,6 +41,8 @@
+ #include <X11/extensions/Xcomposite.h>
+ #include <X11/extensions/Xrandr.h>
+ #include <X11/extensions/shape.h>
++#include <X11/Xcursor/Xcursor.h>
++#include <X11/cursorfont.h>
+
+ #include <compiz-core.h>
+
+@@ -474,6 +476,32 @@ shade (CompDisplay *d,
+ return TRUE;
+ }
+
++static void
++compDisplaySetCursorTheme (CompDisplay *display)
++{
++ char *theme = display->opt[COMP_DISPLAY_OPTION_CURSOR_THEME].value.s;
++ int size = display->opt[COMP_DISPLAY_OPTION_CURSOR_SIZE].value.i;
++
++ if (theme && strlen(theme))
++ {
++ CompScreen *s;
++
++ XcursorSetTheme (display->display, theme);
++ XcursorSetDefaultSize (display->display, size);
++ for (s = display->screens; s; s = s->next)
++ {
++ XFreeCursor (display->display, s->normalCursor);
++ s->busyCursor = XCreateFontCursor (display->display, XC_watch);
++ XFlush (display->display);
++
++ XFreeCursor (display->display, s->normalCursor);
++ s->normalCursor = XCreateFontCursor (display->display, XC_left_ptr);
++ XDefineCursor (display->display, s->root, s->normalCursor);
++ XFlush (display->display);
++ }
++ }
++}
++
+ const CompMetadataOptionInfo coreDisplayOptionInfo[COMP_DISPLAY_OPTION_NUM] = {
+ { "abi", "int", 0, 0, 0 },
+ { "active_plugins", "list", "<type>string</type>", 0, 0 },
+@@ -510,7 +538,9 @@ const CompMetadataOptionInfo coreDisplay
+ { "toggle_window_shaded_key", "key", 0, shade, 0 },
+ { "ignore_hints_when_maximized", "bool", 0, 0, 0 },
+ { "ping_delay", "int", "<min>1000</min>", 0, 0 },
+- { "edge_delay", "int", "<min>0</min>", 0, 0 }
++ { "edge_delay", "int", "<min>0</min>", 0, 0 },
++ { "cursor_theme", "string", 0, 0, 0 },
++ { "cursor_size", "int", 0, 0, 0 }
+ };
+
+ CompOption *
+@@ -661,6 +691,20 @@ setDisplayOption (CompPlugin *plugin,
+ return TRUE;
+ }
+ break;
++ case COMP_DISPLAY_OPTION_CURSOR_THEME:
++ if (compSetStringOption(o, value))
++ {
++ compDisplaySetCursorTheme(display);
++ return TRUE;
++ }
++ break;
++ case COMP_DISPLAY_OPTION_CURSOR_SIZE:
++ if (compSetIntOption(o, value))
++ {
++ compDisplaySetCursorTheme(display);
++ return TRUE;
++ }
++ break;
+ default:
+ if (compSetDisplayOption (display, o, value))
+ return TRUE;
+--- compiz.orig/include/compiz-core.h
++++ compiz/include/compiz-core.h
+@@ -776,7 +776,10 @@ removeFileWatch (CompFileWatchHandle han
+ #define COMP_DISPLAY_OPTION_IGNORE_HINTS_WHEN_MAXIMIZED 31
+ #define COMP_DISPLAY_OPTION_PING_DELAY 32
+ #define COMP_DISPLAY_OPTION_EDGE_DELAY 33
+-#define COMP_DISPLAY_OPTION_NUM 34
++#define COMP_DISPLAY_OPTION_CURSOR_THEME 34
++#define COMP_DISPLAY_OPTION_CURSOR_SIZE 35
++#define COMP_DISPLAY_OPTION_NUM 36
++
+
+ typedef void (*HandleEventProc) (CompDisplay *display,
+ XEvent *event);
diff --git a/debian/patches/014-fix-gtk-window-decorator-no-argb-crash.patch b/debian/patches/014-fix-gtk-window-decorator-no-argb-crash.patch
new file mode 100644
index 0000000..aa8a270
--- /dev/null
+++ b/debian/patches/014-fix-gtk-window-decorator-no-argb-crash.patch
@@ -0,0 +1,49 @@
+Author: Sebastien Bacher <seb128@canonical.com>
+Description: Fix decorator crash when ARGB isn't enabled
+ Fix gtk-window-decorator crash when ARGB isn't enabled and only
+ that, in this case window-decoration are invisible
+Origin: vendor, ubuntu (1:0.3.6-1ubuntu9)
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/94140
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/82205
+--- compiz.orig/gtk/window-decorator/gtk-window-decorator.c
++++ compiz/gtk/window-decorator/gtk-window-decorator.c
+@@ -1918,10 +1918,8 @@ meta_draw_window_decoration (decor_t *d)
+
+ size = MAX (fgeom.top_height, fgeom.bottom_height);
+
+- if (rect.width && size)
++ if (rect.width && size && (pixmap = create_pixmap (rect.width, size)))
+ {
+- pixmap = create_pixmap (rect.width, size);
+-
+ cr = gdk_cairo_create (GDK_DRAWABLE (pixmap));
+ gdk_cairo_set_source_color_alpha (cr, &bg_color, bg_alpha);
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+@@ -2020,10 +2018,8 @@ meta_draw_window_decoration (decor_t *d)
+
+ size = MAX (fgeom.left_width, fgeom.right_width);
+
+- if (size && rect.height)
++ if (size && rect.height && (pixmap = create_pixmap (size, rect.height)))
+ {
+- pixmap = create_pixmap (size, rect.height);
+-
+ cr = gdk_cairo_create (GDK_DRAWABLE (pixmap));
+ gdk_cairo_set_source_color_alpha (cr, &bg_color, bg_alpha);
+ cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE);
+@@ -3320,9 +3316,12 @@ update_window_decoration_icon (WnckWindo
+ g_object_ref (G_OBJECT (d->icon_pixbuf));
+
+ d->icon_pixmap = pixmap_new_from_pixbuf (d->icon_pixbuf);
+- cr = gdk_cairo_create (GDK_DRAWABLE (d->icon_pixmap));
+- d->icon = cairo_pattern_create_for_surface (cairo_get_target (cr));
+- cairo_destroy (cr);
++ if (d->icon_pixmap)
++ {
++ cr = gdk_cairo_create (GDK_DRAWABLE (d->icon_pixmap));
++ d->icon = cairo_pattern_create_for_surface (cairo_get_target (cr));
++ cairo_destroy (cr);
++ }
+ }
+ }
+
diff --git a/debian/patches/015_draw_dock_shadows_on_desktop.patch b/debian/patches/015_draw_dock_shadows_on_desktop.patch
new file mode 100644
index 0000000..d9a7ec0
--- /dev/null
+++ b/debian/patches/015_draw_dock_shadows_on_desktop.patch
@@ -0,0 +1,85 @@
+Author: Travis Watkins <amaranth@ubuntu.com>
+Description: Change decoration plugin dock shadow drawing behavior
+ change decoration plugin to draw dock shadows only on the
+ desktop window instead of on top of all other windows
+Origin: vendor, ubuntu (1:0.8.2-0ubuntu16)
+--- compiz.orig/plugins/decoration.c
++++ compiz/plugins/decoration.c
+@@ -190,6 +190,11 @@ decorDrawWindow (CompWindow *w,
+ status = (*w->screen->drawWindow) (w, transform, attrib, region, mask);
+ WRAP (ds, w->screen, drawWindow, decorDrawWindow);
+
++ /* we wait to draw dock shadows until we get to the lowest
++ desktop window in the stack */
++ if (w->type & CompWindowTypeDockMask)
++ return status;
++
+ if (mask & PAINT_WINDOW_TRANSFORMED_MASK)
+ region = &infiniteRegion;
+
+@@ -226,6 +231,65 @@ decorDrawWindow (CompWindow *w,
+ attrib, mask);
+ }
+
++ if (w->type & CompWindowTypeDesktopMask)
++ {
++ /* we only want to draw on the lowest desktop window, find it and see
++ if we the window we have is it */
++ CompWindow *window = w->screen->windows;
++ for (window = w->screen->windows; window; window = window->next)
++ {
++ if (window->type & CompWindowTypeDesktopMask)
++ {
++ if (window == w)
++ break;
++ else
++ return status;
++ }
++ }
++
++ /* drawing dock shadows now */
++ for (window = w->screen->windows; window; window = window->next)
++ {
++ if (window->type & CompWindowTypeDockMask && !window->destroyed && !window->invisible)
++ {
++ DECOR_WINDOW (window);
++
++ if (dw->wd && region->numRects)
++ {
++ WindowDecoration *wd = dw->wd;
++ REGION box;
++ int i;
++
++ mask |= PAINT_WINDOW_BLEND_MASK;
++
++ box.rects = &box.extents;
++ box.numRects = 1;
++
++ window->vCount = window->indexCount = 0;
++
++ for (i = 0; i < wd->nQuad; i++)
++ {
++ box.extents = wd->quad[i].box;
++
++ if (box.extents.x1 < box.extents.x2 &&
++ box.extents.y1 < box.extents.y2)
++ {
++ (*window->screen->addWindowGeometry) (window,
++ &wd->quad[i].matrix, 1,
++ &box,
++ region);
++ }
++ }
++
++ if (window->vCount)
++ (*window->screen->drawWindowTexture) (window,
++ &wd->decor->texture->texture,
++ attrib, mask);
++ }
++ }
++ }
++ }
++
+ return status;
+ }
+
diff --git a/debian/patches/016_call_glxwaitx_before_drawing.patch b/debian/patches/016_call_glxwaitx_before_drawing.patch
new file mode 100644
index 0000000..3af8d05
--- /dev/null
+++ b/debian/patches/016_call_glxwaitx_before_drawing.patch
@@ -0,0 +1,17 @@
+Author: Travis Watkins <amaranth@ubuntu.com>
+Description: Call glXWaitX before we start drawing
+ Call glXWaitX before we start drawing to make sure X is done
+ handling rendering calls. Suggested by Michel Dänzer to ensure
+ we don't have any rendering glitches.
+Origin: vendor, ubuntu (1:0.8.3+git20090917-0ubuntu3)
+--- compiz.orig/src/display.c
++++ compiz/src/display.c
+@@ -1537,6 +1537,8 @@ eventLoop (void)
+ timeDiff = 0;
+
+ makeScreenCurrent (s);
++ /* make sure X is ready for us to draw */
++ glXWaitX ();
+
+ if (s->slowAnimations)
+ {
diff --git a/debian/patches/017_always_unredirect_screensaver_on_nvidia.patch b/debian/patches/017_always_unredirect_screensaver_on_nvidia.patch
new file mode 100644
index 0000000..15656ee
--- /dev/null
+++ b/debian/patches/017_always_unredirect_screensaver_on_nvidia.patch
@@ -0,0 +1,32 @@
+Author: Travis Watkins <amaranth@ubuntu.com>
+Description: Always unredirect gnome-screensaver when using nvidia
+ Workaround for LP #160264 while still disabling unredirect fullscreen
+ windows for nvidia users
+Origin: vendor, ubuntu (1:0.8.3+git20090917-0ubuntu4)
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/compiz/+bug/160264
+--- compiz.orig/src/paint.c
++++ compiz/src/paint.c
+@@ -262,6 +262,7 @@ paintOutputRegion (CompScreen *sc
+ CompTransform vTransform;
+ int offX, offY;
+ Region clip = region;
++ int dontcare;
+
+ if (!tmpRegion)
+ {
+@@ -341,8 +342,14 @@ paintOutputRegion (CompScreen *sc
+ XSubtractRegion (tmpRegion, w->region, tmpRegion);
+
+ /* unredirect top most fullscreen windows. */
++ /* if the fullscreen window is gnome-screensaver and we're
++ on nvidia we want to always unredirect even if this
++ option is disabled to work around LP #160264 */
+ if (count == 0 &&
+- screen->opt[COMP_SCREEN_OPTION_UNREDIRECT_FS].value.b)
++ (screen->opt[COMP_SCREEN_OPTION_UNREDIRECT_FS].value.b ||
++ (w->resName && !strcmp(w->resName, "gnome-screensaver") &&
++ XQueryExtension (screen->display->display, "NV-GLX",
++ &dontcare, &dontcare, &dontcare))))
+ {
+ if (XEqualRegion (w->region, &screen->region) &&
+ !REGION_NOT_EMPTY (tmpRegion))
diff --git a/debian/patches/018_use_metacity_settings.patch b/debian/patches/018_use_metacity_settings.patch
new file mode 100644
index 0000000..03eb58b
--- /dev/null
+++ b/debian/patches/018_use_metacity_settings.patch
@@ -0,0 +1,16 @@
+Author: Michael Vogt <michael.vogt@ubuntu.com>
+Description: Use metacity control center applet instead of compiz one.
+ The rationale is that the ccp backend will transparently work with the
+ metacity options under gnome.
+Origin: vendor, ubuntu (1:0.5.1+git20070618-0ubuntu2)
+--- compiz.orig/gtk/gnome/compiz.desktop.in
++++ compiz/gtk/gnome/compiz.desktop.in
+@@ -5,7 +5,7 @@ _Name=Compiz
+ Exec=compiz
+ NoDisplay=true
+ # name of loadable control center module
+-X-GNOME-WMSettingsModule=compiz
++X-GNOME-WMSettingsModule=metacity
+ # autostart phase
+ X-GNOME-Autostart-Phase=WindowManager
+ X-GNOME-Provides=windowmanager
diff --git a/debian/patches/020_fix_focus.patch b/debian/patches/020_fix_focus.patch
new file mode 100644
index 0000000..1d2f179
--- /dev/null
+++ b/debian/patches/020_fix_focus.patch
@@ -0,0 +1,81 @@
+Index: compiz-0.8.4/include/compiz-core.h
+===================================================================
+--- compiz-0.8.4.orig/include/compiz-core.h 2009-11-01 11:14:28.704773780 -0600
++++ compiz-0.8.4/include/compiz-core.h 2009-11-01 11:15:04.254773783 -0600
+@@ -142,6 +142,7 @@
+ #define CompWindowStateBelowMask (1 << 10)
+ #define CompWindowStateDemandsAttentionMask (1 << 11)
+ #define CompWindowStateDisplayModalMask (1 << 12)
++#define CompWindowStateUnmanagingMask (1 << 13)
+
+ #define MAXIMIZE_STATE (CompWindowStateMaximizedHorzMask | \
+ CompWindowStateMaximizedVertMask)
+Index: compiz-0.8.4/src/event.c
+===================================================================
+--- compiz-0.8.4.orig/src/event.c 2009-11-01 11:14:04.764750121 -0600
++++ compiz-0.8.4/src/event.c 2009-11-01 11:15:04.254773783 -0600
+@@ -1366,13 +1366,14 @@
+ }
+ else /* X -> Withdrawn */
+ {
++ unsigned int newState = w->state;
++
+ /* Iconic -> Withdrawn */
+ if (w->state & CompWindowStateHiddenMask)
+ {
+ w->minimized = FALSE;
+
+- changeWindowState (w,
+- w->state & ~CompWindowStateHiddenMask);
++ newState &= ~CompWindowStateHiddenMask;
+
+ updateClientListForScreen (w->screen);
+ }
+@@ -1380,6 +1381,12 @@
+ if (!w->attrib.override_redirect)
+ setWmState (d, WithdrawnState, w->id);
+
++ if (w->managed)
++ newState |= CompWindowStateUnmanagingMask;
++
++ changeWindowState (w, newState);
++
++ w->managed = FALSE;
+ w->placed = FALSE;
+ }
+
+Index: compiz-0.8.4/src/window.c
+===================================================================
+--- compiz-0.8.4.orig/src/window.c 2009-11-01 11:14:04.774749786 -0600
++++ compiz-0.8.4/src/window.c 2009-11-01 11:15:04.264770655 -0600
+@@ -2554,7 +2554,7 @@
+ if (w->unmapRefCnt > 0)
+ return;
+
+- if (w->managed && !w->placed) /* only for managed and closed windows */
++ if (w->state & CompWindowStateUnmanagingMask)
+ {
+ XWindowChanges xwc;
+ unsigned int xwcm;
+@@ -2573,7 +2573,7 @@
+ if (xwcm)
+ configureXWindow (w, xwcm, &xwc);
+
+- w->managed = FALSE;
++ changeWindowState (w, w->state & ~CompWindowStateUnmanagingMask);
+ }
+
+ if (w->struts)
+@@ -2948,6 +2948,12 @@
+ if (!w->managed)
+ return FALSE;
+
++ if (w->destroyed)
++ return FALSE;
++
++ if (w->state & CompWindowStateUnmanagingMask)
++ return FALSE;
++
+ if (!onCurrentDesktop (w))
+ return FALSE;
+
diff --git a/debian/patches/029_default_options.patch b/debian/patches/029_default_options.patch
new file mode 100644
index 0000000..56fcb5c
--- /dev/null
+++ b/debian/patches/029_default_options.patch
@@ -0,0 +1,137 @@
+Author: Michael Vogt <michael.vogt@ubuntu.com>
+Description: Various default settings
+ Changes in various defaults. From what I can tell (these were originally
+ from ubuntu, but I (the debian maintainer) will do my best to summarize
+ them below).
+ .
+ * Desktop Horizontal virtual size of 2 instead of 4.
+ * Sync to vblank: false by default.
+ * Make an exception to focus prevention matching for PolicyKit windows.
+ * Remove top-right hotcorner from scale plugin by default.
+ * Increase drop-shadow radius from 8 to 9.
+ * Set default decorator to /usr/bin/compiz-decorator.
+ * Change default colors for faces in cube plugin.
+ * Add ubuntu logo for top face of cube.
+ * Use placement mode 2 for placement plugin.
+ * Use default resize mode 2 in resize plugin.
+ * Add exception to not fade notify-osd windows in fade plugin.
+Origin: vendor, ubuntu (1:0.6.0+git20071006-0ubuntu1) or perhaps earlier.
+--- compiz.orig/metadata/core.xml.in.in
++++ compiz/metadata/core.xml.in.in
+@@ -211,7 +211,7 @@
+ <option name="hsize" type="int">
+ <_short>Horizontal Virtual Size</_short>
+ <_long>Screen size multiplier for horizontal virtual size</_long>
+- <default>4</default>
++ <default>2</default>
+ <min>1</min>
+ <max>32</max>
+ </option>
+@@ -284,7 +284,7 @@
+ <option name="sync_to_vblank" type="bool">
+ <_short>Sync To VBlank</_short>
+ <_long>Only perform screen updates during vertical blanking period</_long>
+- <default>true</default>
++ <default>false</default>
+ </option>
+ </group>
+ <group>
+@@ -319,7 +319,7 @@
+ <option name="focus_prevention_match" type="match">
+ <_short>Focus Prevention Windows</_short>
+ <_long>Focus prevention windows</_long>
+- <default>any</default>
++ <default>!(class=Polkit-gnome-authentication-agent-1)</default>
+ </option>
+ </group>
+ <option name="unredirect_fullscreen_windows" type="bool">
+--- compiz.orig/metadata/scale.xml.in
++++ compiz/metadata/scale.xml.in
+@@ -27,9 +27,6 @@
+ <option name="initiate_edge" type="edge">
+ <_short>Initiate Window Picker</_short>
+ <_long>Layout and start transforming windows</_long>
+- <default>
+- <edge name="TopRight"/>
+- </default>
+ <allowed edgednd="true"/>
+ </option>
+ <option name="initiate_key" type="key">
+--- compiz.orig/metadata/decoration.xml.in
++++ compiz/metadata/decoration.xml.in
+@@ -16,7 +16,7 @@
+ <option name="shadow_radius" type="float">
+ <_short>Shadow Radius</_short>
+ <_long>Drop shadow radius</_long>
+- <default>8.0</default>
++ <default>9.0</default>
+ <min>0.1</min>
+ <max>18.0</max>
+ <precision>0.1</precision>
+@@ -50,6 +50,7 @@
+ <option name="command" type="string">
+ <_short>Command</_short>
+ <_long>Decorator command line that is executed if no decorator is already running</_long>
++ <default>/usr/bin/compiz-decorator</default>
+ </option>
+ <option name="mipmap" type="bool">
+ <_short>Mipmap</_short>
+--- compiz.orig/metadata/cube.xml.in
++++ compiz/metadata/cube.xml.in
+@@ -92,9 +92,9 @@
+ <_short>Cube Color</_short>
+ <_long>Color of top and bottom sides of the cube</_long>
+ <default>
+- <red>0xfefe</red>
+- <green>0xffff</green>
+- <blue>0xc7c7</blue>
++ <red>0xcdcd</red>
++ <green>0xbebe</green>
++ <blue>0x7070</blue>
+ </default>
+ </option>
+ <subgroup>
+@@ -109,9 +109,7 @@
+ <_long>List of PNG and SVG files that should be rendered on top face of cube</_long>
+ <type>string</type>
+ <hints>file;image;</hints>
+- <default>
+- <value>freedesktop</value>
+- </default>
++ <default><value>/usr/share/gdm/themes/Human/ubuntu.png</value></default>
+ </option>
+ <option name="adjust_image" type="bool">
+ <_short>Adjust Image</_short>
+--- compiz.orig/metadata/place.xml.in
++++ compiz/metadata/place.xml.in
+@@ -12,7 +12,7 @@
+ <option name="mode" type="int">
+ <_short>Placement Mode</_short>
+ <_long>Algorithm to use for window placement</_long>
+- <default>0</default>
++ <default>2</default>
+ <min>0</min>
+ <max>5</max>
+ <desc>
+--- compiz.orig/metadata/resize.xml.in
++++ compiz/metadata/resize.xml.in
+@@ -40,7 +40,7 @@
+ <option name="mode" type="int">
+ <_short>Default Resize Mode</_short>
+ <_long>Default mode used for window resizing</_long>
+- <default>0</default>
++ <default>2</default>
+ <min>0</min>
+ <max>3</max>
+ <desc>
+--- compiz.orig/metadata/fade.xml.in
++++ compiz/metadata/fade.xml.in
+@@ -51,7 +51,7 @@
+ <option name="window_match" type="match">
+ <_short>Fade windows</_short>
+ <_long>Windows that should be fading</_long>
+- <default>any</default>
++ <default>any & !(title=notify-osd)</default>
+ </option>
+ <option name="visual_bell" type="bool">
+ <_short>Visual Bell</_short>
diff --git a/debian/patches/030_from_git_crash_fix_multiscreen.patch b/debian/patches/030_from_git_crash_fix_multiscreen.patch
new file mode 100644
index 0000000..18a5841
--- /dev/null
+++ b/debian/patches/030_from_git_crash_fix_multiscreen.patch
@@ -0,0 +1,45 @@
+diff --git a/plugins/wobbly.c b/plugins/wobbly.c
+index bf92680..51f733e 100644
+--- a/plugins/wobbly.c
++++ b/plugins/wobbly.c
+@@ -1709,22 +1709,20 @@ wobblyPreparePaintScreen (CompScreen *s,
+ ww->wobbly |= WobblyInitial;
+ }
+
+- if (!ww->grabbed && wd->yConstrained)
++ if (!ww->grabbed && ws->grabWindowWorkArea)
+ {
+ float bottommostYPos = MINSHORT;
+- int i;
++ int i, decorTop;
+
+ /* find the bottommost top-row object */
+ for (i = 0; i < GRID_WIDTH; i++)
Reply to: