Updating branch refs/heads/nick/1.8 to 65530142f3d933613321c560f0ec0cb1732d2d65 (commit) from 93a7a18fb43536d04e818e91730e3d428e39265d (commit)
commit 65530142f3d933613321c560f0ec0cb1732d2d65 Author: Nick Schermer <n...@xfce.org> Date: Sat Sep 21 13:10:16 2013 +0200 Patiently wait for screen to realize on startup. No background was drawn during login because thunar was too hard trying to update the yet-to-be-initialized screens. Esp on multi screen desktops this was a problem. thunar/thunar-desktop-window.c | 45 +++++++++++++++++++++++++++++++++------- 1 file changed, 38 insertions(+), 7 deletions(-) diff --git a/thunar/thunar-desktop-window.c b/thunar/thunar-desktop-window.c index c3b8f50..384613e 100644 --- a/thunar/thunar-desktop-window.c +++ b/thunar/thunar-desktop-window.c @@ -62,6 +62,8 @@ struct _ThunarDesktopWindow GtkWindow __parent__; ThunarDesktopBackground *background; + + guint screen_changed_idle_id; }; @@ -115,14 +117,11 @@ thunar_desktop_window_size_request (GtkWidget *widget, -static void -thunar_desktop_window_screen_changed (GdkScreen *screen, - ThunarDesktopWindow *window) +static gboolean +thunar_desktop_window_screen_changed_idle (gpointer data) { - GdkWindow *gdk_window; - - _thunar_return_if_fail (GDK_IS_SCREEN (screen)); - _thunar_return_if_fail (THUNAR_DESKTOP_WINDOW (window)); + ThunarDesktopWindow *window = THUNAR_DESKTOP_WINDOW (data); + GdkWindow *gdk_window; /* release background */ if (window->background != NULL) @@ -134,6 +133,34 @@ thunar_desktop_window_screen_changed (GdkScreen *screen, /* allocate bg and set it on the window */ gdk_window = gtk_widget_get_window (GTK_WIDGET (window)); window->background = thunar_desktop_background_new (gdk_window); + + return FALSE; +} + + + +static void +thunar_desktop_window_screen_changed_idle_destoyed (gpointer data) +{ + THUNAR_DESKTOP_WINDOW (data)->screen_changed_idle_id = 0; +} + + + +static void +thunar_desktop_window_screen_changed (GdkScreen *screen, + ThunarDesktopWindow *window) +{ + _thunar_return_if_fail (GDK_IS_SCREEN (screen)); + _thunar_return_if_fail (THUNAR_DESKTOP_WINDOW (window)); + + if (window->screen_changed_idle_id == 0) + { + /* avoid multiple calls of screen changed during session startup */ + window->screen_changed_idle_id = + g_idle_add_full (G_PRIORITY_LOW, thunar_desktop_window_screen_changed_idle, + window, thunar_desktop_window_screen_changed_idle_destoyed); + } } @@ -180,6 +207,10 @@ thunar_desktop_window_unrealize (GtkWidget *widget) GdkScreen *screen; GdkWindow *root; + /* no more new backgrounds */ + if (window->screen_changed_idle_id != 0) + g_source_remove (window->screen_changed_idle_id); + /* drop background */ if (window->background != NULL) { _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits