[Xfce4-commits] [apps/xfce4-screensaver] 01/01: Fix crash on laptop lid-close event (See https://gitlab.gnome.org/GNOME/gtk/issues/1466)

noreply at xfce.org noreply at xfce.org
Mon Nov 19 03:18:58 CET 2018


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-screensaver.

commit 7dca79946acdfea5f57f68b58f43c52cafd46d80
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sun Nov 18 21:18:48 2018 -0500

    Fix crash on laptop lid-close event (See https://gitlab.gnome.org/GNOME/gtk/issues/1466)
---
 src/gs-manager.c    | 25 +++++++++++++++++++++++++
 src/gs-window-x11.c | 10 ++++++++--
 src/gs-window.h     |  1 +
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git a/src/gs-manager.c b/src/gs-manager.c
index 6da7c58..4c5fb77 100644
--- a/src/gs-manager.c
+++ b/src/gs-manager.c
@@ -1403,6 +1403,25 @@ on_display_monitor_added (GdkDisplay *display,
 
     gs_debug ("Monitor added on display %s, now there are %d",
               gdk_display_get_name (display), n_monitors);
+    
+    if (n_monitors == 1) {
+        /* Tidy up from lid-close or other headless event once we have a new monitor.
+         * See https://gitlab.gnome.org/GNOME/gtk/issues/1466
+         */
+        l = manager->priv->windows;
+        while (l != NULL)
+        {
+            GSList *next = l->next;
+
+            manager_maybe_stop_job_for_window(manager,
+                                                GS_WINDOW(l->data));
+            g_hash_table_remove(manager->priv->jobs, l->data);
+            gs_window_disconnect_monitor(GS_WINDOW(l->data));
+            gs_window_destroy(GS_WINDOW(l->data));
+            manager->priv->windows = g_slist_delete_link(manager->priv->windows, l);
+            l = next;
+        }
+    }
 
     /* add a new window */
     gs_manager_create_window_for_monitor (manager, monitor);
@@ -1430,6 +1449,12 @@ on_display_monitor_removed (GdkDisplay *display,
     gs_debug ("Monitor removed on display %s, now there are %d",
               gdk_display_get_name (display), n_monitors);
 
+    /* Tidy up from lid-close or other headless event once we have a new monitor.
+     * See https://gitlab.gnome.org/GNOME/gtk/issues/1466
+     */
+    if (n_monitors == 0)
+        return;
+
     gdk_x11_grab_server ();
 
     /* remove the now extra window */
diff --git a/src/gs-window-x11.c b/src/gs-window-x11.c
index 277518a..4112e8b 100644
--- a/src/gs-window-x11.c
+++ b/src/gs-window-x11.c
@@ -272,6 +272,11 @@ gs_window_clear (GSWindow *window) {
     gdk_display_flush (display);
 }
 
+void
+gs_window_disconnect_monitor (GSWindow *window) {
+    window->priv->monitor = NULL;
+}
+
 static cairo_region_t *
 get_outside_region (GSWindow *window) {
     GdkDisplay     *display;
@@ -386,8 +391,9 @@ static void
 gs_window_real_unrealize (GtkWidget *widget) {
     GdkMonitor *monitor = GS_WINDOW (widget)->priv->monitor;
 
-    g_signal_handlers_disconnect_by_func (monitor, monitor_geometry_notify,
-                                          widget);
+    if (monitor != NULL)
+        g_signal_handlers_disconnect_by_func (monitor, monitor_geometry_notify,
+                                            widget);
 
     if (GTK_WIDGET_CLASS (gs_window_parent_class)->unrealize) {
         GTK_WIDGET_CLASS (gs_window_parent_class)->unrealize (widget);
diff --git a/src/gs-window.h b/src/gs-window.h
index 11482c6..d14158b 100644
--- a/src/gs-window.h
+++ b/src/gs-window.h
@@ -102,6 +102,7 @@ void        gs_window_destroy                 (GSWindow        *window);
 GdkWindow * gs_window_get_gdk_window          (GSWindow        *window);
 GtkWidget * gs_window_get_drawing_area        (GSWindow        *window);
 void        gs_window_clear                   (GSWindow        *window);
+void        gs_window_disconnect_monitor      (GSWindow        *window);
 
 G_END_DECLS
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list