ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #03224
[Merge] lp:~chrisccoulson/appmenu-gtk/lp718926 into lp:appmenu-gtk
Chris Coulson has proposed merging lp:~chrisccoulson/appmenu-gtk/lp718926 into lp:appmenu-gtk.
Requested reviews:
Ted Gould (ted)
Related bugs:
#718926 Some apps don't integrate to appmenu after having their windows closed
https://bugs.launchpad.net/bugs/718926
For more details, see:
https://code.launchpad.net/~chrisccoulson/appmenu-gtk/lp718926/+merge/51504
Attach to map/unmap signals on toplevel windows, rather than realized/destroyed. This ensures we restore menus for applications which have minimize-to-tray functionality (eg, empathy).
This aligns appmenu-gtk with indicator-appmenu, which destroys menus when a toplevel-window is closed (ie, when an application unmaps its window)
--
https://code.launchpad.net/~chrisccoulson/appmenu-gtk/lp718926/+merge/51504
Your team ayatana-commits is subscribed to branch lp:appmenu-gtk.
=== modified file 'src/bridge.c'
--- src/bridge.c 2011-02-11 13:59:10 +0000
+++ src/bridge.c 2011-02-28 09:46:57 +0000
@@ -45,7 +45,7 @@
GtkWidget *child,
guint position);
static gboolean app_menu_bridge_show_local (UbuntuMenuProxy *proxy);
-static void toplevel_realized (GtkWidget *widget,
+static void toplevel_mapped (GtkWidget *widget,
gpointer user_data);
static void toplevel_notify_cb (GtkWidget *widget,
GParamSpec *pspec,
@@ -205,11 +205,19 @@
}
static void
-toplevel_destroyed (GtkWidget *widget,
- gpointer user_data)
+toplevel_unmapped (GtkWidget *widget,
+ gpointer user_data)
{
AppWindowContext *context = (AppWindowContext *)user_data;
+ g_signal_handlers_disconnect_by_func(widget,
+ G_CALLBACK(toplevel_unmapped),
+ user_data);
+
+ g_signal_connect(widget, "map",
+ G_CALLBACK (toplevel_mapped),
+ context->bridge);
+
if (context)
{
free_context_contents (context);
@@ -565,12 +573,8 @@
}
}
- if (!gtk_widget_get_realized (toplevel))
+ if (!gtk_widget_get_mapped (toplevel))
{
- g_signal_connect (toplevel, "realize",
- G_CALLBACK (toplevel_realized),
- bridge);
-
return;
}
@@ -608,7 +612,7 @@
if (context->window != toplevel)
{
g_signal_handlers_disconnect_by_func (context->window,
- G_CALLBACK (toplevel_destroyed),
+ G_CALLBACK (toplevel_unmapped),
context);
}
}
@@ -618,8 +622,8 @@
context->window = toplevel;
g_signal_connect (toplevel,
- "destroy",
- G_CALLBACK (toplevel_destroyed),
+ "unmap",
+ G_CALLBACK (toplevel_unmapped),
context);
}
@@ -639,11 +643,15 @@
}
static void
-toplevel_realized (GtkWidget *widget,
- gpointer user_data)
+toplevel_mapped (GtkWidget *widget,
+ gpointer user_data)
{
AppMenuBridge *bridge = APP_MENU_BRIDGE (user_data);
+ g_signal_handlers_disconnect_by_func(widget,
+ G_CALLBACK(toplevel_mapped),
+ user_data);
+
if (GTK_IS_WINDOW (widget))
{
rebuild (bridge, widget);
@@ -779,14 +787,14 @@
if (GTK_IS_WINDOW (toplevel))
{
- if (gtk_widget_get_realized (toplevel))
+ if (gtk_widget_get_mapped (toplevel))
{
rebuild (bridge, toplevel);
}
else
{
- g_signal_connect (toplevel, "realize",
- G_CALLBACK (toplevel_realized),
+ g_signal_connect (toplevel, "map",
+ G_CALLBACK (toplevel_mapped),
bridge);
}
}
Follow ups