+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:
}
static void
-parent_window_hidden (HildonWindow *parent_win,
+parent_window_topmost_notify (HildonWindow *parent_win,
GParamSpec *arg1,
GtkWidget *menu)
{
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)
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;
{
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);