diff options
author | kwm <kwm@FreeBSD.org> | 2010-12-05 19:44:21 +0800 |
---|---|---|
committer | kwm <kwm@FreeBSD.org> | 2010-12-05 19:44:21 +0800 |
commit | 969b9e6631651086153b9449dfd7f3ce6190edca (patch) | |
tree | e89e65bc14c82593af7cac4340975cc92a940ff6 /x11-wm | |
parent | 5945be402b0e5a47dbf0983a5b17ea96f9d7c2f5 (diff) | |
download | freebsd-ports-graphics-969b9e6631651086153b9449dfd7f3ce6190edca.tar.gz freebsd-ports-graphics-969b9e6631651086153b9449dfd7f3ce6190edca.tar.zst freebsd-ports-graphics-969b9e6631651086153b9449dfd7f3ce6190edca.zip |
Fix gtk-window-decorator with gtk+ 2.22. GdkDrawable got deprecated in favor
of cairo in 2.22. However it seems to be pretty buggy now.
Submitted by: jkim@
Approved by: fixing gnome 2.32 update fallout
Obtained from: compiz git
Diffstat (limited to 'x11-wm')
-rw-r--r-- | x11-wm/compiz/Makefile | 2 | ||||
-rw-r--r-- | x11-wm/compiz/files/patch-gtk_window-decorator_gtk-window-decorator.c | 188 |
2 files changed, 181 insertions, 9 deletions
diff --git a/x11-wm/compiz/Makefile b/x11-wm/compiz/Makefile index aae68264660..fb9047a05b7 100644 --- a/x11-wm/compiz/Makefile +++ b/x11-wm/compiz/Makefile @@ -7,7 +7,7 @@ PORTNAME= compiz PORTVERSION= 0.8.4 -PORTREVISION= 5 +PORTREVISION= 6 CATEGORIES= x11-wm MASTER_SITES= http://releases.compiz.org/${PORTVERSION}/ diff --git a/x11-wm/compiz/files/patch-gtk_window-decorator_gtk-window-decorator.c b/x11-wm/compiz/files/patch-gtk_window-decorator_gtk-window-decorator.c index 1c853c4e2d9..450c251e3de 100644 --- a/x11-wm/compiz/files/patch-gtk_window-decorator_gtk-window-decorator.c +++ b/x11-wm/compiz/files/patch-gtk_window-decorator_gtk-window-decorator.c @@ -1,6 +1,106 @@ ---- gtk/window-decorator/gtk-window-decorator.c.orig 2009-08-15 09:24:40.000000000 +0200 -+++ gtk/window-decorator/gtk-window-decorator.c 2010-10-29 12:56:37.000000000 +0200 -@@ -2671,7 +2671,7 @@ get_window_prop (Window xwindow, +--- gtk/window-decorator/gtk-window-decorator.c.orig 2009-08-15 03:24:40.000000000 -0400 ++++ gtk/window-decorator/gtk-window-decorator.c 2010-11-24 15:21:52.000000000 -0500 +@@ -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 +@@ -2671,7 +2647,7 @@ get_window_prop (Window xwindow, gdk_error_trap_push (); type = None; @@ -9,7 +109,79 @@ xwindow, atom, 0, G_MAXLONG, -@@ -4233,7 +4233,7 @@ show_tooltip (const char *text) +@@ -3512,15 +3488,15 @@ update_window_decoration_size (WnckWindo + 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) +@@ -4233,7 +4207,7 @@ show_tooltip (const char *text) static void hide_tooltip (void) { @@ -18,7 +190,7 @@ g_get_current_time (&tooltip_last_popdown); gtk_widget_hide (tip_window); -@@ -4966,7 +4966,7 @@ force_quit_dialog_realize (GtkWidget *di +@@ -4966,7 +4940,7 @@ force_quit_dialog_realize (GtkWidget *di WnckWindow *win = data; gdk_error_trap_push (); @@ -27,7 +199,7 @@ GDK_WINDOW_XID (dialog->window), wnck_window_get_xid (win)); gdk_display_sync (gdk_display_get_default ()); -@@ -4982,11 +4982,11 @@ get_client_machine (Window xwindow) +@@ -4982,11 +4956,11 @@ get_client_machine (Window xwindow) int format, result; char *retval; @@ -41,7 +213,7 @@ xwindow, atom, 0, G_MAXLONG, FALSE, XA_STRING, &type, &format, &nitems, -@@ -5038,7 +5038,7 @@ kill_window (WnckWindow *win) +@@ -5038,7 +5012,7 @@ kill_window (WnckWindow *win) } gdk_error_trap_push (); @@ -50,7 +222,7 @@ gdk_display_sync (gdk_display_get_default ()); gdk_error_trap_pop (); } -@@ -5623,7 +5623,7 @@ static int +@@ -5623,7 +5597,7 @@ static int update_shadow (void) { decor_shadow_options_t opt; |