From 62e8c1568595805c8cc419e7235372672cf514f4 Mon Sep 17 00:00:00 2001 From: leigh scott Date: Tue, 30 Nov 2010 13:55:59 +0000 Subject: [PATCH] - add more upstream gdk fixes --- compiz.spec | 9 +- gdk_drawable_deprecated.patch | 184 ++++++++++++++++++++++++++++++++++ 2 files changed, 191 insertions(+), 2 deletions(-) create mode 100644 gdk_drawable_deprecated.patch diff --git a/compiz.spec b/compiz.spec index 8fed423..46f1cee 100644 --- a/compiz.spec +++ b/compiz.spec @@ -61,10 +61,12 @@ Patch113: compiz-0.8.6-icon-size.patch Patch114: compiz-0.8.6-map-gravity-fix.patch Patch115: compiz-0.8.6-focus-denied-stacking-fix.patch #upstream patches -#http://gitweb.compiz.org/?p=compiz/core;a=commit;h=5ea5e2130c56d405fcccd63932918fc49ca1f1b9 +# 5ea5e2130c56d405fcccd63932918fc49ca1f1b9 Patch116: gdk_display_deprecated.patch # 0f95c41a0aa175ddf7947ba18b01f746c95594a9 Patch117: compiz-0.8.6-pixmap-size-calculation.patch +# 777e5ecdb197105f770e7bcedd83eb54c53457f3 +Patch118: gdk_drawable_deprecated.patch %description Compiz is one of the first OpenGL-accelerated compositing window @@ -136,6 +138,7 @@ and other kde integration related stuff. %patch115 -p1 -b .focus-denied-stacking %patch116 -p1 -b .gdk_display_deprecated %patch117 -p1 -b .pixmap-calculation +%patch118 -p1 -b .gdk_drawable_deprecated %build rm -rf $RPM_BUILD_ROOT @@ -275,7 +278,6 @@ rm -rf $RPM_BUILD_ROOT %files kde %defattr(-, root, root) %{_bindir}/kde4-window-decorator -%{_docdir}/compiz-kde-%{version} %{_datadir}/compiz/kconfig.xml %files devel @@ -291,6 +293,9 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Tue Nov 30 2010 leigh scott - 0.8.6-7 +- add more upstream gdk fixes + * Wed Nov 17 2010 Adel Gadllah - 0.8.6-6 - Backport fix for corruption bug (RH #614542) diff --git a/gdk_drawable_deprecated.patch b/gdk_drawable_deprecated.patch new file mode 100644 index 0000000..cf7acfb --- /dev/null +++ b/gdk_drawable_deprecated.patch @@ -0,0 +1,184 @@ +From: Danny Baumann +Date: Mon, 6 Sep 2010 09:25:02 +0000 (+0200) +Subject: Replace old gdk_draw_drawable method calls with cairo equivalents. +X-Git-Url: http://gitweb.compiz.org/?p=compiz%2Fcore;a=commitdiff_plain;h=777e5ecdb197105f770e7bcedd83eb54c53457f3 + +Replace old gdk_draw_drawable method calls with cairo equivalents. +--- + +diff --git a/gtk/window-decorator/gtk-window-decorator.c b/gtk/window-decorator/gtk-window-decorator.c +index 18b907e..adb20d5 100644 +--- a/gtk/window-decorator/gtk-window-decorator.c ++++ b/gtk/window-decorator/gtk-window-decorator.c +@@ -380,7 +380,7 @@ typedef struct _decor { + guint button_states[BUTTON_NUM]; + GdkPixmap *pixmap; + GdkPixmap *buffer_pixmap; +- GdkGC *gc; ++ cairo_t *cr; + decor_layout_t border_layout; + decor_context_t *context; + decor_shadow_t *shadow; +@@ -918,6 +918,17 @@ button_state_paint (cairo_t *cr, + } + + static void ++copy_to_front_buffer (decor_t *d) ++{ ++ if (!d->buffer_pixmap) ++ return; ++ ++ cairo_set_operator (d->cr, CAIRO_OPERATOR_SOURCE); ++ gdk_cairo_set_source_pixmap (d->cr, d->buffer_pixmap, 0, 0); ++ cairo_paint (d->cr); ++} ++ ++static void + draw_window_decoration (decor_t *d) + { + cairo_t *cr; +@@ -1298,16 +1309,7 @@ draw_window_decoration (decor_t *d) + + cairo_destroy (cr); + +- if (d->buffer_pixmap) +- gdk_draw_drawable (d->pixmap, +- d->gc, +- d->buffer_pixmap, +- 0, +- 0, +- 0, +- 0, +- d->width, +- d->height); ++ copy_to_front_buffer (d); + + if (d->prop_xid) + { +@@ -2103,16 +2105,7 @@ meta_draw_window_decoration (decor_t *d) + XRenderFreePicture (xdisplay, src); + } + +- if (d->buffer_pixmap) +- gdk_draw_drawable (d->pixmap, +- d->gc, +- d->buffer_pixmap, +- 0, +- 0, +- 0, +- 0, +- d->width, +- d->height); ++ copy_to_front_buffer (d); + + if (d->prop_xid) + { +@@ -2361,18 +2354,9 @@ draw_switcher_background (decor_t *d) + alpha); + + cairo_stroke (cr); +- + cairo_destroy (cr); + +- gdk_draw_drawable (d->pixmap, +- d->gc, +- d->buffer_pixmap, +- 0, +- 0, +- 0, +- 0, +- d->width, +- d->height); ++ copy_to_front_buffer (d); + + pixel = ((((a * style->bg[GTK_STATE_NORMAL].blue ) >> 24) & 0x0000ff) | + (((a * style->bg[GTK_STATE_NORMAL].green) >> 16) & 0x00ff00) | +@@ -2439,15 +2423,7 @@ draw_switcher_foreground (decor_t *d) + + cairo_destroy (cr); + +- gdk_draw_drawable (d->pixmap, +- d->gc, +- d->buffer_pixmap, +- 0, +- 0, +- 0, +- 0, +- d->width, +- d->height); ++ copy_to_front_buffer (d); + } + + static void +@@ -3512,15 +3488,15 @@ update_window_decoration_size (WnckWindow *win) + if (d->buffer_pixmap) + g_object_unref (G_OBJECT (d->buffer_pixmap)); + +- if (d->gc) +- g_object_unref (G_OBJECT (d->gc)); +- + if (d->picture) + XRenderFreePicture (xdisplay, d->picture); + ++ if (d->cr) ++ cairo_destroy (d->cr); ++ + d->pixmap = pixmap; + d->buffer_pixmap = buffer_pixmap; +- d->gc = gdk_gc_new (pixmap); ++ d->cr = gdk_cairo_create (pixmap); + + d->picture = picture; + +@@ -3642,6 +3618,7 @@ update_switcher_window (WnckWindow *win, + { + g_object_ref (G_OBJECT (switcher_pixmap)); + d->pixmap = switcher_pixmap; ++ d->cr = gdk_cairo_create (switcher_pixmap); + } + + if (!d->buffer_pixmap && switcher_buffer_pixmap) +@@ -3729,9 +3706,6 @@ update_switcher_window (WnckWindow *win, + + if (width == d->width && height == d->height) + { +- if (!d->gc) +- d->gc = gdk_gc_new (d->pixmap); +- + if (!d->picture) + d->picture = + XRenderCreatePicture (xdisplay, +@@ -3765,8 +3739,8 @@ update_switcher_window (WnckWindow *win, + if (d->buffer_pixmap) + g_object_unref (G_OBJECT (d->buffer_pixmap)); + +- if (d->gc) +- g_object_unref (G_OBJECT (d->gc)); ++ if (d->cr) ++ cairo_destroy (d->cr); + + if (d->picture) + XRenderFreePicture (xdisplay, d->picture); +@@ -3782,7 +3756,7 @@ update_switcher_window (WnckWindow *win, + + d->pixmap = pixmap; + d->buffer_pixmap = buffer_pixmap; +- d->gc = gdk_gc_new (pixmap); ++ d->cr = gdk_cairo_create (pixmap); + + d->picture = XRenderCreatePicture (xdisplay, GDK_PIXMAP_XID (buffer_pixmap), + xformat, 0, NULL); +@@ -3817,10 +3791,10 @@ remove_frame_window (WnckWindow *win) + d->buffer_pixmap = NULL; + } + +- if (d->gc) ++ if (d->cr) + { +- g_object_unref (G_OBJECT (d->gc)); +- d->gc = NULL; ++ cairo_destroy (d->cr); ++ d->cr = NULL; + } + + if (d->picture)