2009-01-07 Alberto Garcia <agarcia@igalia.com>
authorAlberto Garcia <agarcia@igalia.com>
Wed, 7 Jan 2009 18:44:56 +0000 (18:44 +0000)
committerAlberto Garcia <agarcia@igalia.com>
Wed, 7 Jan 2009 18:44:56 +0000 (18:44 +0000)
* src/hildon-app-menu.c (hildon_app_menu_set_parent_window)
(hildon_app_menu_finalize): When a window is hidden it doesn't
emit notify::is-topmost, so make sure than the menu also
disappears in that case.
(parent_window_topmost_notify): Renamed from parent_window_hidden

Fixes: NB#94460 (stackable window's menu is not closed when its
window is hidden)

ChangeLog
src/hildon-app-menu.c

index 5bdbca0..d1a3d1d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2009-01-07  Alberto Garcia  <agarcia@igalia.com>
+
+       * src/hildon-app-menu.c (hildon_app_menu_set_parent_window)
+       (hildon_app_menu_finalize): When a window is hidden it doesn't
+       emit notify::is-topmost, so make sure than the menu also
+       disappears in that case.
+       (parent_window_topmost_notify): Renamed from parent_window_hidden
+
+       Fixes: NB#94460 (stackable window's menu is not closed when its
+       window is hidden)
+
 2009-01-07  Claudio Saavedra  <csaavedra@igalia.com>
 
        * src/hildon-touch-selector-entry.c:
index 4b6daf4..84067a3 100644 (file)
@@ -321,7 +321,7 @@ hildon_app_menu_set_columns                     (HildonAppMenu *menu,
 }
 
 static void
-parent_window_hidden                           (HildonWindow *parent_win,
+parent_window_topmost_notify                   (HildonWindow *parent_win,
                                                 GParamSpec   *arg1,
                                                 GtkWidget    *menu)
 {
@@ -329,6 +329,13 @@ parent_window_hidden                           (HildonWindow *parent_win,
         gtk_widget_hide (menu);
 }
 
+static void
+parent_window_unmapped                         (HildonWindow *parent_win,
+                                                GtkWidget    *menu)
+{
+    gtk_widget_hide (menu);
+}
+
 void G_GNUC_INTERNAL
 hildon_app_menu_set_parent_window              (HildonAppMenu *self,
                                                 GtkWindow     *parent_window)
@@ -341,12 +348,16 @@ hildon_app_menu_set_parent_window              (HildonAppMenu *self,
     priv = HILDON_APP_MENU_GET_PRIVATE(self);
 
     /* Disconnect old handlers, if any */
-    if (priv->parent_window)
-        g_signal_handlers_disconnect_by_func (priv->parent_window, parent_window_hidden, self);
+    if (priv->parent_window) {
+        g_signal_handlers_disconnect_by_func (priv->parent_window, parent_window_topmost_notify, self);
+        g_signal_handlers_disconnect_by_func (priv->parent_window, parent_window_unmapped, self);
+    }
 
     /* Connect a new handler */
-    if (parent_window)
-        g_signal_connect (parent_window, "notify::is-topmost", G_CALLBACK (parent_window_hidden), self);
+    if (parent_window) {
+        g_signal_connect (parent_window, "notify::is-topmost", G_CALLBACK (parent_window_topmost_notify), self);
+        g_signal_connect (parent_window, "unmap", G_CALLBACK (parent_window_unmapped), self);
+    }
 
     priv->parent_window = parent_window;
 
@@ -826,8 +837,10 @@ hildon_app_menu_finalize                        (GObject *object)
 {
     HildonAppMenuPrivate *priv = HILDON_APP_MENU_GET_PRIVATE(object);
 
-    if (priv->parent_window)
-        g_signal_handlers_disconnect_by_func (priv->parent_window, parent_window_hidden, object);
+    if (priv->parent_window) {
+        g_signal_handlers_disconnect_by_func (priv->parent_window, parent_window_topmost_notify, object);
+        g_signal_handlers_disconnect_by_func (priv->parent_window, parent_window_unmapped, object);
+    }
 
     if (priv->transfer_window)
         gdk_window_destroy (priv->transfer_window);