[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