Florian Müllner f7f80c7
From b39b84c683e29086b999b835c09ac4ee5a960852 Mon Sep 17 00:00:00 2001
Florian Müllner f7f80c7
From: Ray Strode <rstrode@redhat.com>
Florian Müllner f7f80c7
Date: Thu, 14 Sep 2017 14:46:13 -0400
Florian Müllner f7f80c7
Subject: [PATCH] gtk-embed: ensure we only listen for window-created events
Florian Müllner f7f80c7
 once
Florian Müllner f7f80c7
Florian Müllner f7f80c7
If a tray icon gets a mapped and unmapped and the mapped again
Florian Müllner f7f80c7
in quick succession, we can end up with multiple handlers
Florian Müllner f7f80c7
listening for window creation events.
Florian Müllner f7f80c7
Florian Müllner f7f80c7
This commit tries to guard against that by only listening for
Florian Müllner f7f80c7
window-created events when we don't  know the actor associated
Florian Müllner f7f80c7
with the icon.
Florian Müllner f7f80c7
Florian Müllner f7f80c7
https://bugzilla.gnome.org/show_bug.cgi?id=787361
Florian Müllner f7f80c7
---
Florian Müllner f7f80c7
 src/shell-gtk-embed.c | 15 ++++++++-------
Florian Müllner f7f80c7
 1 file changed, 8 insertions(+), 7 deletions(-)
Florian Müllner f7f80c7
Florian Müllner f7f80c7
diff --git a/src/shell-gtk-embed.c b/src/shell-gtk-embed.c
Florian Müllner f7f80c7
index 176b41320..54061046b 100644
Florian Müllner f7f80c7
--- a/src/shell-gtk-embed.c
Florian Müllner f7f80c7
+++ b/src/shell-gtk-embed.c
Florian Müllner f7f80c7
@@ -124,13 +124,14 @@ shell_gtk_embed_on_window_mapped (GtkWidget     *object,
Florian Müllner f7f80c7
   ShellGtkEmbedPrivate *priv = shell_gtk_embed_get_instance_private (embed);
Florian Müllner f7f80c7
   MetaDisplay *display = shell_global_get_display (shell_global_get ());
Florian Müllner f7f80c7
 
Florian Müllner f7f80c7
-  /* Listen for new windows so we can detect when Mutter has
Florian Müllner f7f80c7
-     created a MutterWindow for this window */
Florian Müllner f7f80c7
-  priv->window_created_handler =
Florian Müllner f7f80c7
-    g_signal_connect (display,
Florian Müllner f7f80c7
-                      "window-created",
Florian Müllner f7f80c7
-                      G_CALLBACK (shell_gtk_embed_window_created_cb),
Florian Müllner f7f80c7
-                      embed);
Florian Müllner f7f80c7
+  if (priv->window_created_handler == 0 && priv->window_actor == NULL)
Florian Müllner f7f80c7
+    /* Listen for new windows so we can detect when Mutter has
Florian Müllner f7f80c7
+       created a MutterWindow for this window */
Florian Müllner f7f80c7
+    priv->window_created_handler =
Florian Müllner f7f80c7
+      g_signal_connect (display,
Florian Müllner f7f80c7
+                        "window-created",
Florian Müllner f7f80c7
+                        G_CALLBACK (shell_gtk_embed_window_created_cb),
Florian Müllner f7f80c7
+                        embed);
Florian Müllner f7f80c7
 }
Florian Müllner f7f80c7
 
Florian Müllner f7f80c7
 static void
Florian Müllner f7f80c7
-- 
Florian Müllner f7f80c7
2.13.5
Florian Müllner f7f80c7