[gtk+] window: Ignore gtk_window_close calls from close-request handlers
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] window: Ignore gtk_window_close calls from close-request handlers
- Date: Thu, 18 Jan 2018 20:25:03 +0000 (UTC)
commit 8a432b42a28167532b68f93c51e53174f0aa5ecb
Author: Timm Bäder <mail baedert org>
Date: Thu Jan 18 15:10:49 2018 +0100
window: Ignore gtk_window_close calls from close-request handlers
gtk/gtkwindow.c | 12 ++++++++++++
1 files changed, 12 insertions(+), 0 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 91e3bdb..d82d7da 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -264,6 +264,7 @@ struct _GtkWindowPrivate
guint use_subsurface : 1;
guint hide_on_close : 1;
+ guint in_emit_close_request : 1;
GdkWindowTypeHint type_hint;
@@ -1363,6 +1364,9 @@ gtk_window_close (GtkWindow *window)
if (!_gtk_widget_get_realized (GTK_WIDGET (window)))
return;
+ if (window->priv->in_emit_close_request)
+ return;
+
g_object_ref (window);
if (!gtk_window_emit_close_request (window))
@@ -5982,9 +5986,17 @@ gtk_window_close_request (GtkWindow *window)
static gboolean
gtk_window_emit_close_request (GtkWindow *window)
{
+ GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
gboolean handled;
+ /* Avoid re-entrancy issues when calling gtk_window_close from a
+ * close-request handler */
+ if (priv->in_emit_close_request)
+ return TRUE;
+
+ priv->in_emit_close_request = TRUE;
g_signal_emit (window, window_signals[CLOSE_REQUEST], 0, &handled);
+ priv->in_emit_close_request = FALSE;
return handled;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]