I'm currently porting Gnucash from the gtk/gnome 1.4 libraries to the 2.2 libraries. We're using the menu merge stuff from libegg, and I had to make a few tweaks to get it to work correctly. The main problem was with popup menus, but I was also getting extra callbacks to my action functions. I've attached the diffs from libegg cvs HEAD below. I saw in the archives (just joined this list yesterday) that the menu merge code is being integrated into gtk+, but I couldn't find it there to generate a set of diffs when I checked out gtk+ cvs. David
Index: libegg/menu/egg-action.c
===================================================================
RCS file: /cvs/gnome/libegg/libegg/menu/egg-action.c,v
retrieving revision 1.17
diff -u -r1.17 egg-action.c
--- libegg/menu/egg-action.c 9 May 2003 15:15:27 -0000 1.17
+++ libegg/menu/egg-action.c 10 Aug 2003 21:45:35 -0000
@@ -572,7 +572,8 @@
G_CALLBACK (egg_action_sync_label),
proxy);
- gtk_menu_item_set_accel_path (GTK_MENU_ITEM (proxy), NULL);
+ if (GTK_IS_MENU_ITEM (proxy))
+ gtk_menu_item_set_accel_path (GTK_MENU_ITEM (proxy), NULL);
/* toolbar button specific synchronisers ... */
g_signal_handlers_disconnect_by_func (action,
@@ -686,7 +687,7 @@
if (prev_action)
{
- (* EGG_ACTION_GET_CLASS (action)->disconnect_proxy) (action, proxy);
+ (* EGG_ACTION_GET_CLASS (action)->disconnect_proxy) (prev_action, proxy);
}
(* EGG_ACTION_GET_CLASS (action)->connect_proxy) (action, proxy);
Index: libegg/menu/egg-menu-merge.c
===================================================================
RCS file: /cvs/gnome/libegg/libegg/menu/egg-menu-merge.c,v
retrieving revision 1.26
diff -u -r1.26 egg-menu-merge.c
--- libegg/menu/egg-menu-merge.c 20 Apr 2003 14:28:50 -0000 1.26
+++ libegg/menu/egg-menu-merge.c 10 Aug 2003 21:45:38 -0000
@@ -200,7 +200,7 @@
NODE_INFO(child)->type = node_type;
/* warn about type mismatch */
- if (NODE_INFO(child)->type != EGG_MENU_MERGE_UNDECIDED &&
+ if (node_type != EGG_MENU_MERGE_UNDECIDED &&
NODE_INFO(child)->type != node_type)
g_warning("node type doesn't match %d (%s is type %d)",
node_type, NODE_INFO(child)->name,
@@ -826,6 +826,10 @@
pos = g_list_index(GTK_MENU_SHELL(menushell)->children,
NODE_INFO(parent)->proxy) + 1;
break;
+ case EGG_MENU_MERGE_POPUPS:
+ menushell = NULL;
+ pos = 0;
+ break;
default:
g_warning("%s: bad parent node type %d", G_STRLOC,
NODE_INFO(parent)->type);
@@ -1030,8 +1034,9 @@
menu = gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(info->proxy), menu);
gtk_menu_set_accel_group (GTK_MENU (menu), self->accel_group);
- gtk_menu_shell_insert (GTK_MENU_SHELL (menushell),
- info->proxy, pos);
+ if (menushell)
+ gtk_menu_shell_insert (GTK_MENU_SHELL (menushell),
+ info->proxy, pos);
}
}
else
Attachment:
signature.asc
Description: This is a digitally signed message part