--- cvs/libbonoboui/bonobo/bonobo-ui-sync-menu.c_old 2006-08-22 11:33:16.000000000 +0100 +++ cvs/libbonoboui/bonobo/bonobo-ui-sync-menu.c 2006-08-28 13:41:10.000000000 +0100 @@ -282,6 +282,33 @@ label_same (GtkBin *menu_widget, const c !strcmp (((GtkLabel *)label)->label, txt); } +static gboolean +widget_has_accel (GtkWidget *widget, + GtkAccelGroup *accel_group, + guint key, + GdkModifierType mods) +{ + int i; + guint n_entries; + GList *l_tmp, *l_closures = gtk_widget_list_accel_closures (widget); + GtkAccelGroupEntry *entry = gtk_accel_group_query (accel_group, + key, mods, + &n_entries); + + if (n_entries) + for (l_tmp = l_closures; l_tmp; l_tmp = l_tmp->next) + for (i=0; idata) + { + g_list_free (l_closures); + return TRUE; + } + + g_list_free (l_closures); + + return FALSE; +} + static void impl_bonobo_ui_sync_menu_state (BonoboUISync *sync, BonoboUINode *node, @@ -392,11 +419,12 @@ impl_bonobo_ui_sync_menu_state (BonoboUI if (!key) /* FIXME: this looks strange */ return; - gtk_widget_add_accelerator (menu_widget, - "activate", - sync_menu->accel_group, - key, mods, - GTK_ACCEL_VISIBLE); + if (! widget_has_accel (menu_widget, sync_menu->accel_group, key, mods)) + gtk_widget_add_accelerator (menu_widget, + "activate", + sync_menu->accel_group, + key, mods, + GTK_ACCEL_VISIBLE); } bonobo_ui_engine_queue_update (