static void appendMenuItem(GtkMenuShell *submenu, uiMenuItem *item, uiWindow *w) { GtkWidget *menuitem; gulong signal; struct menuItemWindow *ww; menuitem = g_object_new(item->gtype, NULL); if (item->name != NULL) gtk_menu_item_set_label(GTK_MENU_ITEM(menuitem), item->name); if (item->type != typeSeparator) { signal = g_signal_connect(menuitem, "activate", G_CALLBACK(onClicked), item); gtk_widget_set_sensitive(menuitem, !item->disabled); if (item->type == typeCheckbox) singleSetChecked(GTK_CHECK_MENU_ITEM(menuitem), item->checked, signal); } gtk_menu_shell_append(submenu, menuitem); ww = uiNew(struct menuItemWindow); ww->w = w; ww->signal = signal; g_hash_table_insert(item->windows, menuitem, ww); if (item->popupchild != NULL) { int j; uiMenu* m; GtkWidget *c_submenu; m = item->popupchild; c_submenu = gtk_menu_new(); gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), c_submenu); for (j = 0; j < m->items->len; j++) appendMenuItem(GTK_MENU_SHELL(c_submenu), g_array_index(m->items, uiMenuItem *, j), w); }
static void setChecked(uiMenuItem *item, gboolean checked) { GHashTableIter iter; gpointer widget; gpointer ww; struct menuItemWindow *w; item->checked = checked; g_hash_table_iter_init(&iter, item->windows); while (g_hash_table_iter_next(&iter, &widget, &ww)) { w = (struct menuItemWindow *) ww; singleSetChecked(GTK_CHECK_MENU_ITEM(widget), item->checked, w->signal); } }
static void appendMenuItem(GtkMenuShell *submenu, uiMenuItem *item, uiWindow *w) { GtkWidget *menuitem; gulong signal; struct menuItemWindow *ww; menuitem = g_object_new(item->gtype, NULL); if (item->name != NULL) gtk_menu_item_set_label(GTK_MENU_ITEM(menuitem), item->name); if (item->type != typeSeparator) { signal = g_signal_connect(menuitem, "activate", G_CALLBACK(onClicked), item); gtk_widget_set_sensitive(menuitem, !item->disabled); if (item->type == typeCheckbox) singleSetChecked(GTK_CHECK_MENU_ITEM(menuitem), item->checked, signal); } gtk_menu_shell_append(submenu, menuitem); ww = uiNew(struct menuItemWindow); ww->w = w; ww->signal = signal; g_hash_table_insert(item->windows, menuitem, ww); }