diff options
Diffstat (limited to 'x11-toolkits/vte/files/patch-08_multiscreen_safe')
-rw-r--r-- | x11-toolkits/vte/files/patch-08_multiscreen_safe | 394 |
1 files changed, 201 insertions, 193 deletions
diff --git a/x11-toolkits/vte/files/patch-08_multiscreen_safe b/x11-toolkits/vte/files/patch-08_multiscreen_safe index 211e48e389c9..e4cbbd5877ed 100644 --- a/x11-toolkits/vte/files/patch-08_multiscreen_safe +++ b/x11-toolkits/vte/files/patch-08_multiscreen_safe @@ -1,196 +1,3 @@ -diff -r -u src.orig/vtebg.c src/vtebg.c ---- src.orig/vtebg.c 2004-04-19 23:35:43 -0700 -+++ src/vtebg.c 2004-12-19 18:56:14 -0800 -@@ -37,7 +37,9 @@ - GList *cache; - }; - --static VteBg *singleton_bg = NULL; -+#if !GTK_CHECK_VERSION(2,2,0) -+static VteBg *singlehead_bg = NULL; -+#endif - static void vte_bg_set_root_pixmap(VteBg *bg, GdkPixmap *pixmap); - static void vte_bg_init(VteBg *bg, gpointer *klass); - static GdkPixbuf *_vte_bg_resize_pixbuf(GdkPixbuf *pixbuf, -@@ -70,7 +72,9 @@ - #include <gdk/gdkx.h> - - struct VteBgNative { -+#if GTK_CHECK_VERSION(2,2,0) - GdkDisplay *display; -+#endif - GdkWindow *window; - XID native_window; - GdkAtom atom; -@@ -81,18 +85,19 @@ - vte_bg_native_new(GdkWindow *window) - { - struct VteBgNative *pvt; -- Atom atom; -+ - pvt = g_malloc0(sizeof(struct VteBgNative)); - pvt->window = window; - pvt->native_window = gdk_x11_drawable_get_xid(window); -- pvt->atom = gdk_atom_intern("_XROOTPMAP_ID", FALSE); -+ - #if GTK_CHECK_VERSION(2,2,0) -- atom = gdk_x11_atom_to_xatom_for_display(gdk_drawable_get_display(window), -- pvt->atom); -+ pvt->display = gdk_drawable_get_display(GDK_DRAWABLE(window)); -+ pvt->native_atom = gdk_x11_get_xatom_by_name_for_display(pvt->display, "_XROOTPMAP_ID"); -+ pvt->atom = gdk_x11_xatom_to_atom_for_display(pvt->display, pvt->native_atom); - #else -- atom = gdk_x11_atom_to_xatom(pvt->atom); -+ pvt->atom = gdk_atom_intern("_XROOTPMAP_ID", FALSE); -+ pvt->native_atom = gdk_x11_atom_to_xatom(pvt->atom); - #endif -- pvt->native_atom = atom; - return pvt; - } - -@@ -100,7 +105,7 @@ - _vte_bg_display_sync(VteBg *bg) - { - #if GTK_CHECK_VERSION(2,2,0) -- gdk_display_sync(gdk_drawable_get_display(bg->native->window)); -+ gdk_display_sync(bg->native->display); - #else - XSync(GDK_DISPLAY(), FALSE); - #endif -@@ -136,7 +141,7 @@ - (prop_size >= sizeof(XID) && - (pixmaps != NULL))) { - #if GTK_CHECK_VERSION(2,2,0) -- pixmap = gdk_pixmap_foreign_new_for_display(gdk_drawable_get_display(bg->native->window), pixmaps[0]); -+ pixmap = gdk_pixmap_foreign_new_for_display(bg->native->display, pixmaps[0]); - #else - pixmap = gdk_pixmap_foreign_new(pixmaps[0]); - #endif -@@ -244,6 +249,7 @@ - - /** - * vte_bg_get: -+ * @screen : A #GdkScreen. - * - * Finds the address of the global #VteBg object, creating the object if - * necessary. -@@ -251,12 +257,48 @@ - * Returns: the global #VteBg object - */ - VteBg * --vte_bg_get(void) -+vte_bg_get_for_screen(gpointer screen) - { -- if (!VTE_IS_BG(singleton_bg)) { -- singleton_bg = g_object_new(VTE_TYPE_BG, NULL); -+ GdkEventMask events; -+ GdkWindow *window; -+ VteBg *bg; -+ -+#if GTK_CHECK_VERSION(2,2,0) -+ bg = g_object_get_data(G_OBJECT(screen), "vte-bg"); -+ if (G_UNLIKELY(bg == NULL)) { -+ bg = g_object_new(VTE_TYPE_BG, NULL); -+ g_object_set_data(G_OBJECT(screen), "vte-bg", bg); -+ -+ /* connect bg to screen */ -+ bg->screen = screen; -+ window = gdk_screen_get_root_window(screen); -+ bg->native = vte_bg_native_new(window); -+ bg->root_pixmap = vte_bg_root_pixmap(bg); -+ bg->pvt = g_malloc0(sizeof(struct VteBgPrivate)); -+ bg->pvt->cache = NULL; -+ events = gdk_window_get_events(window); -+ events |= GDK_PROPERTY_CHANGE_MASK; -+ gdk_window_set_events(window, events); -+ gdk_window_add_filter(window, vte_bg_root_filter, bg); - } -- return singleton_bg; -+#else -+ if (G_UNLIKELY(singlehead_bg == NULL)) { -+ bg = g_object_new(VTE_TYPE_BG, NULL); -+ singlehead_bg = bg; -+ -+ window = gdk_get_default_root_window(); -+ bg->native = vte_bg_native_new(window); -+ bg->root_pixmap = vte_bg_root_pixmap(bg); -+ bg->pvt = g_malloc0(sizeof(struct VteBgPrivate)); -+ bg->pvt->cache = NULL; -+ events = gdk_window_get_events(window); -+ events |= GDK_PROPERTY_CHANGE_MASK; -+ gdk_window_set_events(window, events); -+ gdk_window_add_filter(window, vte_bg_root_filter, bg); -+ } -+#endif -+ -+ return bg; - } - - struct VteBgCacheItem { -@@ -274,17 +316,6 @@ - static void - vte_bg_init(VteBg *bg, gpointer *klass) - { -- GdkWindow *window; -- GdkEventMask events; -- window = gdk_get_default_root_window(); -- bg->native = vte_bg_native_new(window); -- bg->root_pixmap = vte_bg_root_pixmap(bg); -- bg->pvt = g_malloc0(sizeof(struct VteBgPrivate)); -- bg->pvt->cache = NULL; -- events = gdk_window_get_events(window); -- events |= GDK_PROPERTY_CHANGE_MASK; -- gdk_window_set_events(window, events); -- gdk_window_add_filter(window, vte_bg_root_filter, bg); - } - - /* Generate lookup tables for desaturating an image toward a given color. The -@@ -581,10 +612,6 @@ - GdkPixbuf *pixbuf; - char *file; - -- if (bg == NULL) { -- bg = vte_bg_get(); -- } -- - if (source_type == VTE_BG_SOURCE_NONE) { - return NULL; - } -@@ -614,7 +641,11 @@ - int width, height; - /* Tell GTK+ that this foreign pixmap shares the - * root window's colormap. */ -+#if GTK_CHECK_VERSION(2,2,0) -+ rcolormap = gdk_drawable_get_colormap(gdk_screen_get_root_window(bg->screen)); -+#else - rcolormap = gdk_drawable_get_colormap(gdk_get_default_root_window()); -+#endif - if (gdk_drawable_get_colormap(bg->root_pixmap) == NULL) { - gdk_drawable_set_colormap(bg->root_pixmap, - rcolormap); -@@ -710,10 +741,6 @@ - GdkColormap *rcolormap; - char *file; - -- if (bg == NULL) { -- bg = vte_bg_get(); -- } -- - if (source_type == VTE_BG_SOURCE_NONE) { - return NULL; - } -@@ -743,7 +770,11 @@ - - /* If the pixmap doesn't have a colormap, tell GTK+ that - * it shares the root window's colormap. */ -+#if GTK_CHECK_VERSION(2,2,0) -+ rcolormap = gdk_drawable_get_colormap(gdk_screen_get_root_window(bg->screen)); -+#else - rcolormap = gdk_drawable_get_colormap(gdk_get_default_root_window()); -+#endif - if (gdk_drawable_get_colormap(bg->root_pixmap) == NULL) { - gdk_drawable_set_colormap(bg->root_pixmap, rcolormap); - } diff -r -u src.orig/vtebg.h src/vtebg.h --- src.orig/vtebg.h 2003-05-19 15:48:58 -0700 +++ src/vtebg.h 2004-12-19 18:56:14 -0800 @@ -371,3 +178,204 @@ diff -r -u src.orig/vtexft.c src/vtexft.c pixbuf, file, color, saturation, _vte_draw_get_colormap(draw, TRUE)); if (GDK_IS_PIXMAP(data->pixmap)) { +--- src/vtebg.c.orig Wed Mar 9 06:24:56 2005 ++++ src/vtebg.c Sun Jul 10 20:25:15 2005 +@@ -37,7 +37,9 @@ struct VteBgPrivate { + GList *cache; + }; + +-static VteBg *singleton_bg = NULL; ++#if !GTK_CHECK_VERSION(2,2,0) ++static VteBg *singlehead_bg = NULL; ++#endif + static void vte_bg_set_root_pixmap(VteBg *bg, GdkPixmap *pixmap); + static void vte_bg_init(VteBg *bg, gpointer *klass); + static GdkPixbuf *_vte_bg_resize_pixbuf(GdkPixbuf *pixbuf, +@@ -70,7 +72,9 @@ vte_bg_source_name(enum VteBgSourceType + #include <gdk/gdkx.h> + + struct VteBgNative { ++#if GTK_CHECK_VERSION(2,2,0) + GdkDisplay *display; ++#endif + GdkWindow *window; + XID native_window; + GdkAtom atom; +@@ -81,18 +85,19 @@ static struct VteBgNative * + vte_bg_native_new(GdkWindow *window) + { + struct VteBgNative *pvt; +- Atom atom; ++ + pvt = g_malloc0(sizeof(struct VteBgNative)); + pvt->window = window; + pvt->native_window = gdk_x11_drawable_get_xid(window); +- pvt->atom = gdk_atom_intern("_XROOTPMAP_ID", FALSE); ++ + #if GTK_CHECK_VERSION(2,2,0) +- atom = gdk_x11_atom_to_xatom_for_display(gdk_drawable_get_display(window), +- pvt->atom); ++ pvt->display = gdk_drawable_get_display(GDK_DRAWABLE(window)); ++ pvt->native_atom = gdk_x11_get_xatom_by_name_for_display(pvt->display, "_XROOTPMAP_ID"); ++ pvt->atom = gdk_x11_xatom_to_atom_for_display(pvt->display, pvt->native_atom); + #else +- atom = gdk_x11_atom_to_xatom(pvt->atom); ++ pvt->atom = gdk_atom_intern("_XROOTPMAP_ID", FALSE); ++ pvt->native_atom = gdk_x11_atom_to_xatom(pvt->atom); + #endif +- pvt->native_atom = atom; + return pvt; + } + +@@ -100,7 +105,7 @@ static void + _vte_bg_display_sync(VteBg *bg) + { + #if GTK_CHECK_VERSION(2,2,0) +- gdk_display_sync(gdk_drawable_get_display(bg->native->window)); ++ gdk_display_sync(bg->native->display); + #else + XSync(GDK_DISPLAY(), FALSE); + #endif +@@ -112,7 +117,7 @@ _vte_property_get_pixmaps(GdkWindow *win + XID **pixmaps) + { + return gdk_property_get(window, atom, GDK_TARGET_PIXMAP, +- 0, INT_MAX, ++ 0, INT_MAX - 3, + FALSE, + type, NULL, size, + (guchar**) pixmaps); +@@ -136,7 +141,7 @@ vte_bg_root_pixmap(VteBg *bg) + (prop_size >= sizeof(XID) && + (pixmaps != NULL))) { + #if GTK_CHECK_VERSION(2,2,0) +- pixmap = gdk_pixmap_foreign_new_for_display(gdk_drawable_get_display(bg->native->window), pixmaps[0]); ++ pixmap = gdk_pixmap_foreign_new_for_display(bg->native->display, pixmaps[0]); + #else + pixmap = gdk_pixmap_foreign_new(pixmaps[0]); + #endif +@@ -244,6 +249,7 @@ vte_bg_get_type(void) + + /** + * vte_bg_get: ++ * @screen : A #GdkScreen. + * + * Finds the address of the global #VteBg object, creating the object if + * necessary. +@@ -251,12 +257,48 @@ vte_bg_get_type(void) + * Returns: the global #VteBg object + */ + VteBg * +-vte_bg_get(void) ++vte_bg_get_for_screen(gpointer screen) + { +- if (!VTE_IS_BG(singleton_bg)) { +- singleton_bg = g_object_new(VTE_TYPE_BG, NULL); ++ GdkEventMask events; ++ GdkWindow *window; ++ VteBg *bg; ++ ++#if GTK_CHECK_VERSION(2,2,0) ++ bg = g_object_get_data(G_OBJECT(screen), "vte-bg"); ++ if (G_UNLIKELY(bg == NULL)) { ++ bg = g_object_new(VTE_TYPE_BG, NULL); ++ g_object_set_data(G_OBJECT(screen), "vte-bg", bg); ++ ++ /* connect bg to screen */ ++ bg->screen = screen; ++ window = gdk_screen_get_root_window(screen); ++ bg->native = vte_bg_native_new(window); ++ bg->root_pixmap = vte_bg_root_pixmap(bg); ++ bg->pvt = g_malloc0(sizeof(struct VteBgPrivate)); ++ bg->pvt->cache = NULL; ++ events = gdk_window_get_events(window); ++ events |= GDK_PROPERTY_CHANGE_MASK; ++ gdk_window_set_events(window, events); ++ gdk_window_add_filter(window, vte_bg_root_filter, bg); + } +- return singleton_bg; ++#else ++ if (G_UNLIKELY(singlehead_bg == NULL)) { ++ bg = g_object_new(VTE_TYPE_BG, NULL); ++ singlehead_bg = bg; ++ ++ window = gdk_get_default_root_window(); ++ bg->native = vte_bg_native_new(window); ++ bg->root_pixmap = vte_bg_root_pixmap(bg); ++ bg->pvt = g_malloc0(sizeof(struct VteBgPrivate)); ++ bg->pvt->cache = NULL; ++ events = gdk_window_get_events(window); ++ events |= GDK_PROPERTY_CHANGE_MASK; ++ gdk_window_set_events(window, events); ++ gdk_window_add_filter(window, vte_bg_root_filter, bg); ++ } ++#endif ++ ++ return bg; + } + + struct VteBgCacheItem { +@@ -274,17 +316,6 @@ struct VteBgCacheItem { + static void + vte_bg_init(VteBg *bg, gpointer *klass) + { +- GdkWindow *window; +- GdkEventMask events; +- window = gdk_get_default_root_window(); +- bg->native = vte_bg_native_new(window); +- bg->root_pixmap = vte_bg_root_pixmap(bg); +- bg->pvt = g_malloc0(sizeof(struct VteBgPrivate)); +- bg->pvt->cache = NULL; +- events = gdk_window_get_events(window); +- events |= GDK_PROPERTY_CHANGE_MASK; +- gdk_window_set_events(window, events); +- gdk_window_add_filter(window, vte_bg_root_filter, bg); + } + + /* Generate lookup tables for desaturating an image toward a given color. The +@@ -581,10 +612,6 @@ vte_bg_get_pixmap(VteBg *bg, + GdkPixbuf *pixbuf; + char *file; + +- if (bg == NULL) { +- bg = vte_bg_get(); +- } +- + if (source_type == VTE_BG_SOURCE_NONE) { + return NULL; + } +@@ -614,7 +641,11 @@ vte_bg_get_pixmap(VteBg *bg, + int width, height; + /* Tell GTK+ that this foreign pixmap shares the + * root window's colormap. */ ++#if GTK_CHECK_VERSION(2,2,0) ++ rcolormap = gdk_drawable_get_colormap(gdk_screen_get_root_window(bg->screen)); ++#else + rcolormap = gdk_drawable_get_colormap(gdk_get_default_root_window()); ++#endif + if (gdk_drawable_get_colormap(bg->root_pixmap) == NULL) { + gdk_drawable_set_colormap(bg->root_pixmap, + rcolormap); +@@ -710,10 +741,6 @@ vte_bg_get_pixbuf(VteBg *bg, + GdkColormap *rcolormap; + char *file; + +- if (bg == NULL) { +- bg = vte_bg_get(); +- } +- + if (source_type == VTE_BG_SOURCE_NONE) { + return NULL; + } +@@ -743,7 +770,11 @@ vte_bg_get_pixbuf(VteBg *bg, + + /* If the pixmap doesn't have a colormap, tell GTK+ that + * it shares the root window's colormap. */ ++#if GTK_CHECK_VERSION(2,2,0) ++ rcolormap = gdk_drawable_get_colormap(gdk_screen_get_root_window(bg->screen)); ++#else + rcolormap = gdk_drawable_get_colormap(gdk_get_default_root_window()); ++#endif + if (gdk_drawable_get_colormap(bg->root_pixmap) == NULL) { + gdk_drawable_set_colormap(bg->root_pixmap, rcolormap); + } |