From f3623b95357c84f497ca72712d158775d99788ae Mon Sep 17 00:00:00 2001 From: Ray Strode Date: Oct 14 2008 20:07:02 +0000 Subject: - Hold off on settings daemon cross fade if nautilus is going to do it anyway. Grab the server while getting the initial pixmap source and target to prevent BadDrawable race --- diff --git a/gnome-desktop-2.24.0-fade.patch b/gnome-desktop-2.24.0-fade.patch index a8ff6ad..afb041d 100644 --- a/gnome-desktop-2.24.0-fade.patch +++ b/gnome-desktop-2.24.0-fade.patch @@ -1,6 +1,6 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c --- gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade 2008-09-22 17:01:45.000000000 -0400 -+++ gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c 2008-10-12 12:17:40.000000000 -0400 ++++ gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c 2008-10-14 16:01:38.000000000 -0400 @@ -37,11 +37,15 @@ Author: Soren Sandmann #include @@ -25,7 +25,16 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 /* Cached information, only access through cache accessor functions */ SlideShow * slideshow; -@@ -115,6 +120,7 @@ struct _GnomeBGClass +@@ -106,6 +111,8 @@ struct _GnomeBG + int timeout_id; + + GList * file_cache; ++ ++ guint ignore_changes : 1; + }; + + struct _GnomeBGClass +@@ -115,6 +122,7 @@ struct _GnomeBGClass enum { CHANGED, @@ -33,7 +42,18 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 N_SIGNALS }; -@@ -275,6 +281,30 @@ queue_changed (GnomeBG *bg) +@@ -264,6 +272,10 @@ do_changed (GnomeBG *bg) + static void + queue_changed (GnomeBG *bg) + { ++ if (bg->ignore_changes) { ++ return; ++ } ++ + if (bg->changed_id > 0) { + g_source_remove (bg->changed_id); + } +@@ -275,6 +287,30 @@ queue_changed (GnomeBG *bg) NULL); } @@ -64,7 +84,7 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 void gnome_bg_load_from_preferences (GnomeBG *bg, GConfClient *client) -@@ -414,6 +444,14 @@ gnome_bg_class_init (GnomeBGClass *klass +@@ -414,6 +450,14 @@ gnome_bg_class_init (GnomeBGClass *klass NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); @@ -79,7 +99,21 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 } GnomeBG * -@@ -1012,52 +1050,88 @@ gnome_bg_create_thumbnail (GnomeBG +@@ -547,6 +591,13 @@ gnome_bg_set_filename (GnomeBG *bg, + } + } + ++void ++gnome_bg_ignore_changes (GnomeBG *bg, ++ gboolean should_ignore) ++{ ++ bg->ignore_changes = should_ignore; ++} ++ + static void + draw_color (GnomeBG *bg, GdkPixbuf *dest) + { +@@ -1012,52 +1063,86 @@ gnome_bg_create_thumbnail (GnomeBG } @@ -118,8 +152,7 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 + data = NULL; display = GDK_DISPLAY_XDISPLAY (gdk_screen_get_display (screen)); - XGrabServer (display); -+ +- XGrabServer (display); + if (copy_old_root) { + result = XGetWindowProperty (display, + RootWindow (display, screen_num), @@ -186,17 +219,13 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 } pixmap_id = GDK_WINDOW_XWINDOW (pixmap); -@@ -1071,13 +1145,68 @@ gnome_bg_set_pixmap_as_root (GdkScreen * +@@ -1071,13 +1156,74 @@ gnome_bg_set_pixmap_as_root (GdkScreen * 32, PropModeReplace, (guchar *) &pixmap_id, 1); - XSetWindowBackgroundPixmap (display, RootWindow (display, screen_num), - pixmap_id); - XClearWindow (display, RootWindow (display, screen_num)); -- - XUngrabServer (display); - - XFlush (display); + return old_root_pixmap; +} + @@ -211,19 +240,25 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 +{ + Display *display; + int screen_num; -+ + +- XUngrabServer (display); + g_return_if_fail (screen != NULL); + g_return_if_fail (pixmap != NULL); -+ + + screen_num = gdk_screen_get_number (screen); + display = GDK_DISPLAY_XDISPLAY (gdk_screen_get_display (screen)); + ++ XGrabServer (display); ++ + gnome_bg_set_root_pixmap_id (screen, pixmap, FALSE); + + XSetWindowBackgroundPixmap (display, RootWindow (display, screen_num), + GDK_PIXMAP_XID (pixmap)); + XClearWindow (display, RootWindow (display, screen_num)); -+ ++ + XFlush (display); ++ ++ XUngrabServer (display); +} + +GnomeBGCrossfade * @@ -231,7 +266,7 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 + GdkPixmap *pixmap, + GMainContext *context) +{ -+ Display *display; ++ GdkDisplay *display; + GdkWindow *root_window; + GdkPixmap *old_pixmap; + int screen_num; @@ -248,10 +283,14 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 + + fade = gnome_bg_crossfade_new (width, height); + ++ display = gdk_screen_get_display (screen); ++ gdk_x11_display_grab (display); + old_pixmap = gnome_bg_set_root_pixmap_id (screen, pixmap, TRUE); + + gnome_bg_crossfade_set_start_pixmap (fade, old_pixmap); + gnome_bg_crossfade_set_end_pixmap (fade, pixmap); ++ gdk_display_flush (display); ++ gdk_x11_display_ungrab (display); + + gnome_bg_crossfade_start (fade, root_window, context); + @@ -259,7 +298,7 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 } -@@ -1343,7 +1472,7 @@ on_timeout (gpointer data) +@@ -1343,7 +1489,7 @@ on_timeout (gpointer data) bg->timeout_id = 0; @@ -269,8 +308,8 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/gnome-bg.c.fade gnome-desktop-2.2 return FALSE; } diff -up /dev/null gnome-desktop-2.24.0/libgnome-desktop/gnome-bg-crossfade.c ---- /dev/null 2008-10-12 06:46:34.272291660 -0400 -+++ gnome-desktop-2.24.0/libgnome-desktop/gnome-bg-crossfade.c 2008-10-10 19:17:21.000000000 -0400 +--- /dev/null 2008-10-14 09:46:12.473279410 -0400 ++++ gnome-desktop-2.24.0/libgnome-desktop/gnome-bg-crossfade.c 2008-10-14 15:21:15.000000000 -0400 @@ -0,0 +1,432 @@ +/* gnome-bg-crossfade.h - fade window background between two pixmaps + * @@ -493,6 +532,7 @@ diff -up /dev/null gnome-desktop-2.24.0/libgnome-desktop/gnome-bg-crossfade.c + cairo_pattern_set_extend (pattern, CAIRO_EXTEND_REPEAT); + } else { + GtkStyle *style; ++ sleep (30); + style = gtk_widget_get_default_style (); + gdk_cairo_set_source_color (cr, &style->bg[GTK_STATE_NORMAL]); + } @@ -636,12 +676,11 @@ diff -up /dev/null gnome-desktop-2.24.0/libgnome-desktop/gnome-bg-crossfade.c +on_finished (GnomeBGCrossfade *fade) +{ + if (fade->priv->end_pixmap != NULL) { ++ GdkDisplay *display; + gdk_window_set_back_pixmap (fade->priv->window, + fade->priv->end_pixmap, + FALSE); -+ GdkDisplay *display; + display = gdk_drawable_get_display (fade->priv->window); -+ gdk_window_clear (fade->priv->window); + gdk_display_sync (display); + } + @@ -705,8 +744,8 @@ diff -up /dev/null gnome-desktop-2.24.0/libgnome-desktop/gnome-bg-crossfade.c + } +} diff -up /dev/null gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg-crossfade.h ---- /dev/null 2008-10-12 06:46:34.272291660 -0400 -+++ gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg-crossfade.h 2008-10-10 18:21:11.000000000 -0400 +--- /dev/null 2008-10-14 09:46:12.473279410 -0400 ++++ gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg-crossfade.h 2008-10-14 15:21:15.000000000 -0400 @@ -0,0 +1,79 @@ +/* gnome-bg-crossfade.h - fade window background between two pixmaps + @@ -789,7 +828,7 @@ diff -up /dev/null gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg-cro +#endif diff -up gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg.h.fade gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg.h --- gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg.h.fade 2008-09-22 17:01:45.000000000 -0400 -+++ gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg.h 2008-10-10 18:21:11.000000000 -0400 ++++ gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg.h 2008-10-14 15:21:15.000000000 -0400 @@ -33,6 +33,8 @@ #include #include @@ -799,7 +838,16 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg.h.fade gnome- G_BEGIN_DECLS #define GNOME_TYPE_BG (gnome_bg_get_type ()) -@@ -109,6 +111,9 @@ gboolean gnome_bg_changes_with_s +@@ -63,6 +65,8 @@ typedef enum { + + GType gnome_bg_get_type (void); + GnomeBG * gnome_bg_new (void); ++void gnome_bg_ignore_changes (GnomeBG *bg, ++ gboolean should_ignore); + void gnome_bg_load_from_preferences (GnomeBG *bg, + GConfClient *client); + void gnome_bg_save_to_preferences (GnomeBG *bg, +@@ -109,6 +113,9 @@ gboolean gnome_bg_changes_with_s void gnome_bg_set_pixmap_as_root (GdkScreen *screen, GdkPixmap *pixmap); @@ -811,7 +859,7 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/gnome-bg.h.fade gnome- diff -up gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/Makefile.am.fade gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/Makefile.am --- gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/Makefile.am.fade 2008-09-22 17:01:45.000000000 -0400 -+++ gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/Makefile.am 2008-10-10 18:21:11.000000000 -0400 ++++ gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/Makefile.am 2008-10-14 15:21:15.000000000 -0400 @@ -3,6 +3,7 @@ libgnomeui_desktop_HEADERS = \ gnome-ditem-edit.h \ gnome-hint.h \ @@ -822,7 +870,7 @@ diff -up gnome-desktop-2.24.0/libgnome-desktop/libgnomeui/Makefile.am.fade gnome gnome-rr-labeler.h diff -up gnome-desktop-2.24.0/libgnome-desktop/Makefile.am.fade gnome-desktop-2.24.0/libgnome-desktop/Makefile.am --- gnome-desktop-2.24.0/libgnome-desktop/Makefile.am.fade 2008-09-22 17:01:45.000000000 -0400 -+++ gnome-desktop-2.24.0/libgnome-desktop/Makefile.am 2008-10-10 18:21:11.000000000 -0400 ++++ gnome-desktop-2.24.0/libgnome-desktop/Makefile.am 2008-10-14 15:21:15.000000000 -0400 @@ -21,6 +21,7 @@ libgnome_desktop_2_la_SOURCES = \ gnome-ditem-edit.c \ gnome-hint.c \ diff --git a/gnome-desktop.spec b/gnome-desktop.spec index c9c5b9e..6ef8bf6 100644 --- a/gnome-desktop.spec +++ b/gnome-desktop.spec @@ -12,7 +12,7 @@ Summary: Package containing code shared among gnome-panel, gnome-session, nautilus, etc Name: gnome-desktop Version: 2.24.0 -Release: 5%{?dist} +Release: 6%{?dist} URL: http://www.gnome.org Source0: http://download.gnome.org/sources/gnome-desktop/2.24/%{name}-%{version}.tar.bz2 License: GPLv2+ and LGPLv2+ @@ -126,6 +126,11 @@ rm -rf $RPM_BUILD_ROOT %doc %{_datadir}/gtk-doc/html/gnome-desktop/ %changelog +* Tue Oct 14 2008 Ray Strode - 2.24.0-6 +- Hold off on settings daemon cross fade if nautilus is going + to do it anyway. Grab the server while getting the initial + pixmap source and target to prevent BadDrawable race + * Sun Oct 12 2008 Ray Strode - 2.24.0-5 - Don't crossfade between frames on a slideshow