2008-12-16 Alberto Garcia <agarcia@igalia.com>
authorAlberto Garcia <agarcia@igalia.com>
Tue, 16 Dec 2008 18:08:48 +0000 (18:08 +0000)
committerAlberto Garcia <agarcia@igalia.com>
Tue, 16 Dec 2008 18:08:48 +0000 (18:08 +0000)
* src/hildon-app-menu.c (hildon_app_menu_set_parent_window)
(hildon_app_menu_finalize): If the parent window of the menu is
hidden, hide the menu too.

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

ChangeLog
src/hildon-app-menu.c

index 3b710c3..3e1029f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2008-12-16  Alberto Garcia  <agarcia@igalia.com>
 
+       * src/hildon-app-menu.c (hildon_app_menu_set_parent_window)
+       (hildon_app_menu_finalize): If the parent window of the menu is
+       hidden, hide the menu too.
+
+       Fixes: NB#94460 (stackable window's menu is not closed when its
+       window is hidden)
+
+2008-12-16  Alberto Garcia  <agarcia@igalia.com>
+
        * debian/changelog
        * debian/libhildon1-examples.install
        * debian/rules
index 84671ab..ded4fb0 100644 (file)
@@ -319,6 +319,13 @@ hildon_app_menu_set_columns                     (HildonAppMenu *menu,
     }
 }
 
+static void
+parent_window_hidden                           (GtkWidget *parent_win,
+                                                GtkWidget *menu)
+{
+    gtk_widget_hide (menu);
+}
+
 void G_GNUC_INTERNAL
 hildon_app_menu_set_parent_window              (HildonAppMenu *self,
                                                 GtkWindow     *parent_window)
@@ -330,6 +337,14 @@ 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);
+
+    /* Connect a new handler */
+    if (parent_window)
+        g_signal_connect (parent_window, "unmap", G_CALLBACK (parent_window_hidden), self);
+
     priv->parent_window = parent_window;
 
     if (parent_window == NULL && GTK_WIDGET_VISIBLE (self))
@@ -808,6 +823,9 @@ 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->transfer_window)
         gdk_window_destroy (priv->transfer_window);