aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/parser.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2011-01-23 15:40:26 -0600
committerTed Gould <ted@gould.cx>2011-01-23 15:40:26 -0600
commit65b9cda89a5bef2c541f5ed2624e6e199f136435 (patch)
tree433d36898e0e4a9f3802933e399e176b2de4fb53 /libdbusmenu-gtk/parser.c
parentf9cca3a5b9f42963b43b78670720f0cecd7843ea (diff)
downloadlibdbusmenu-65b9cda89a5bef2c541f5ed2624e6e199f136435.tar.gz
libdbusmenu-65b9cda89a5bef2c541f5ed2624e6e199f136435.tar.bz2
libdbusmenu-65b9cda89a5bef2c541f5ed2624e6e199f136435.zip
Trying to put back in the visibility notifier to force the rebuild, but I'm not quite sure how to do that yet.
Diffstat (limited to 'libdbusmenu-gtk/parser.c')
-rw-r--r--libdbusmenu-gtk/parser.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/libdbusmenu-gtk/parser.c b/libdbusmenu-gtk/parser.c
index 08613ac..9d0f9b4 100644
--- a/libdbusmenu-gtk/parser.c
+++ b/libdbusmenu-gtk/parser.c
@@ -31,6 +31,7 @@ License version 3 and version 2.1 along with this program. If not, see
typedef struct _RecurseContext
{
+ GtkWidget * toplevel;
gint count;
DbusmenuMenuitem *stack[30];
} RecurseContext;
@@ -61,12 +62,17 @@ static void widget_notify_cb (GtkWidget * widget,
GParamSpec * pspec,
gpointer data);
static gboolean should_show_image (GtkImage * image);
+static void menuitem_notify_cb (GtkWidget * widget,
+ GParamSpec * pspec,
+ gpointer data);
DbusmenuMenuitem *
dbusmenu_gtk_parse_menu_structure (GtkWidget * widget)
{
RecurseContext recurse = {0};
+
recurse.count = -1;
+ recurse.toplevel = gtk_widget_get_toplevel(widget);
parse_menu_structure_helper(widget, &recurse);
@@ -129,10 +135,10 @@ parse_menu_structure_helper (GtkWidget * widget, RecurseContext * recurse)
if (!gtk_widget_get_visible (widget))
{
- /*g_signal_connect (G_OBJECT (widget),
- "notify",
+ g_signal_connect (G_OBJECT (widget),
+ "notify::visible",
G_CALLBACK (menuitem_notify_cb),
- recurse->context); */
+ recurse->toplevel);
}
if (GTK_IS_TEAROFF_MENU_ITEM (widget))
@@ -359,6 +365,27 @@ construct_dbusmenu_for_widget (GtkWidget * widget)
}
static void
+menuitem_notify_cb (GtkWidget *widget,
+ GParamSpec *pspec,
+ gpointer data)
+{
+ if (pspec->name == g_intern_static_string ("visible"))
+ {
+ GtkWidget * new_toplevel = gtk_widget_get_toplevel (widget);
+ GtkWidget * old_toplevel = GTK_WIDGET(data);
+
+ if (new_toplevel == old_toplevel) {
+ /* TODO: Figure this out -> rebuild (context->bridge, window); */
+ }
+
+ /* We only care about this once, so let's disconnect now. */
+ g_signal_handlers_disconnect_by_func (widget,
+ G_CALLBACK (menuitem_notify_cb),
+ data);
+ }
+}
+
+static void
accel_changed (GtkWidget *widget,
gpointer data)
{