From: <kr_...@us...> - 2003-08-16 08:08:37
|
Update of /cvsroot/htoolkit/port/src/cbits/GTK In directory sc8-pr-cvs1:/tmp/cvs-serv22881/src/cbits/GTK Modified Files: Menu.c Log Message: Simplified implementation for MenuRadioItems for GNOME Index: Menu.c =================================================================== RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Menu.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** Menu.c 5 Jul 2003 06:42:38 -0000 1.8 --- Menu.c 16 Aug 2003 08:01:14 -0000 1.9 *************** *** 26,30 **** static int recalcPos(GtkWidget *menu, int pos) { - BOOL b; int new_pos; GList *children; --- 26,29 ---- *************** *** 34,50 **** if (pos >= 0) { - b = TRUE; new_pos = 0; while (children && pos > 0) { ! if (GTK_WIDGET_VISIBLE((GtkWidget*) children->data)) ! { ! if (b) pos--; ! } ! else ! { ! b = !b; ! } ! new_pos++; children = children->next; --- 33,40 ---- if (pos >= 0) { new_pos = 0; while (children && pos > 0) { ! pos--; new_pos++; children = children->next; *************** *** 70,74 **** { menuItem = (GtkWidget *) child->data; ! if (GTK_IS_IMAGE_MENU_ITEM(menuItem) || GTK_IS_CHECK_MENU_ITEM(menuItem) || --- 60,64 ---- { menuItem = (GtkWidget *) child->data; ! if (GTK_IS_IMAGE_MENU_ITEM(menuItem) || GTK_IS_CHECK_MENU_ITEM(menuItem) || *************** *** 173,246 **** { if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem))) ! handleMenuCommand(menuitem) ; } - MenuHandle osInsertMenuRadioGroup(MenuHandle parent, int pos) - { - GtkWidget *menu; - GtkWidget *item1, *item2; - - menu = getMenu(parent); - pos = recalcPos(menu, pos); - - item1 = gtk_separator_menu_item_new(); - gtk_menu_shell_insert(GTK_MENU_SHELL(menu), item1, pos); - - item2 = gtk_separator_menu_item_new(); - gtk_menu_shell_insert(GTK_MENU_SHELL(menu), item2, pos); - - gtk_signal_connect (GTK_OBJECT(item1), "destroy", - GTK_SIGNAL_FUNC(handleMenuDestroy), - parent); - - return item1; - }; - MenuHandle osInsertMenuRadioItem(MenuHandle parent, int pos) { ! int new_pos; ! GList *children; ! GtkWidget *menu, *menuItem, *label; ! GSList *group; ! ! new_pos = 0; ! menu = gtk_widget_get_parent(parent); ! children = GTK_MENU_SHELL(menu)->children; ! ! ! while (children && children->data != parent) ! { ! new_pos++; ! children = children->next; ! } ! ! if (!children || !children->next) ! return NULL; ! ! new_pos++; ! children = children->next; ! group = NULL; ! ! if (pos < 0) ! { ! while (children && GTK_WIDGET_VISIBLE((GtkWidget *) children->data)) ! { ! new_pos++; ! group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM((GtkWidget *) children->data)); ! children = children->next; ! } ! } ! else ! { ! while (children && GTK_WIDGET_VISIBLE((GtkWidget *) children->data) && pos > 0) ! { ! pos--; ! new_pos++; ! group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM((GtkWidget *) children->data)); ! children = children->next; ! } ! } ! menuItem = gtk_radio_menu_item_new (group); label = gtk_accel_label_new(""); gtk_container_add(GTK_CONTAINER(menuItem), label); --- 163,176 ---- { if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menuitem))) ! handleMenuCommand(menuitem); } MenuHandle osInsertMenuRadioItem(MenuHandle parent, int pos) { ! GtkWidget *menu; ! GtkWidget *menuItem, *label; ! menuItem = gtk_radio_menu_item_new(NULL); ! GTK_CHECK_MENU_ITEM (menuItem)->active = FALSE; label = gtk_accel_label_new(""); gtk_container_add(GTK_CONTAINER(menuItem), label); *************** *** 254,261 **** NULL); ! gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuItem, new_pos); ! gtk_widget_show_all(menuItem); return menuItem; } --- 184,205 ---- NULL); ! menu = getMenu(parent); ! pos = recalcPos(menu, pos); + gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuItem, pos); + gtk_widget_show_all(menuItem); return menuItem; + } + + void osSetMenuRadioGroup(MenuHandle *handles) + { + MenuHandle *phandle; + GSList *group = NULL; + + for (phandle = handles; *phandle; phandle++) + { + gtk_radio_menu_item_set_group(GTK_RADIO_MENU_ITEM(*phandle), group); + group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM(*phandle)); + } } |