|
From: <kr_...@us...> - 2003-04-23 21:49:30
|
Update of /cvsroot/htoolkit/port/src/cbits/GTK
In directory sc8-pr-cvs1:/tmp/cvs-serv26873/port/src/cbits/GTK
Modified Files:
Frame.c Menu.c
Log Message:
Complete implementation for Menu with both GTK and Win32.
Supported:
- command menu items with bitmaps
- checked menu items
- radio menu items
- sepparators
- sub menus
Index: Frame.c
===================================================================
RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Frame.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** Frame.c 2 Apr 2003 19:12:10 -0000 1.5
--- Frame.c 23 Apr 2003 21:48:52 -0000 1.6
***************
*** 94,97 ****
--- 94,98 ----
case GDK_F11: return kbF11;
case GDK_F12: return kbF12;
+ case GDK_Clear: return kbClear;
}
***************
*** 191,195 ****
GtkWidget *box;
GtkWidget *notebook_menu, *menu_item, *pages_menu;
- GtkAccelGroup *accel_group;
GSList *group;
--- 192,195 ----
***************
*** 231,235 ****
/* Create "Pages" menu */
pages_menu = gtk_menu_new();
- // gtk_menu_set_accel_group(GTK_MENU(pages_menu), accel_group);
menu_item = gtk_menu_item_new_with_label("Pages");
--- 231,234 ----
***************
*** 240,244 ****
notebook_menu = gtk_menu_new();
- //gtk_menu_set_accel_group(GTK_MENU(notebook_menu), accel_group);
menu_item = gtk_radio_menu_item_new_with_label(NULL, "Top");
--- 239,242 ----
***************
*** 279,282 ****
--- 277,282 ----
gtk_menu_append(GTK_MENU(pages_menu), menu_item);
+ gtk_window_add_accel_group (GTK_WINDOW (gFrameWidget), gtk_accel_group_new());
+
gtk_widget_show_all(pages_menu);
}
***************
*** 310,313 ****
--- 310,315 ----
box = gtk_vbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(gFrameWidget), box);
+
+ gtk_window_add_accel_group (GTK_WINDOW (gFrameWidget), gtk_accel_group_new());
gtk_widget_show_all(gFrameWidget);
Index: Menu.c
===================================================================
RCS file: /cvsroot/htoolkit/port/src/cbits/GTK/Menu.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** Menu.c 2 Apr 2003 19:12:11 -0000 1.6
--- Menu.c 23 Apr 2003 21:48:52 -0000 1.7
***************
*** 3,7 ****
#include "Internals.h"
#include "Handlers_stub.h"
!
static MenuHandle getMenu(MenuHandle parent)
--- 3,7 ----
#include "Internals.h"
#include "Handlers_stub.h"
! #include <gdk/gdkkeysyms.h>
static MenuHandle getMenu(MenuHandle parent)
***************
*** 15,123 ****
gtk_widget_show(gMenuBar);
}
!
parent = gMenuBar;
}
!
return parent;
};
! MenuHandle osAddMenu(MenuHandle parent, char *title)
{
! GtkMenuShell *menu_shell;
! gchar *szText = toMnemonicString(title);
! GtkWidget *menuItem = gtk_menu_item_new_with_mnemonic(szText);
GtkWidget *popUpMenu = gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuItem), popUpMenu);
- rfree(szText);
! menu_shell = GTK_MENU_SHELL(getMenu(parent));
! if (gDocumentInterface == 1)
! gtk_menu_shell_append(menu_shell, menuItem);
! else
! gtk_menu_shell_insert(menu_shell, menuItem, g_list_length(menu_shell->children)-1);
! gtk_widget_show(menuItem);
! return popUpMenu;
};
! MenuHandle osAddMenuItem(MenuHandle parent, int nKeyCode, unsigned int mods, char *title)
{
! gchar *szText = toMnemonicString(title);
! GtkWidget *menuItem = gtk_menu_item_new_with_mnemonic(szText);
! rfree(szText);
gtk_signal_connect (GTK_OBJECT(menuItem), "activate",
GTK_SIGNAL_FUNC(handleMenuCommand),
NULL);
! gtk_menu_shell_append(GTK_MENU_SHELL(getMenu(parent)), menuItem);
! gtk_widget_show(menuItem);
return menuItem;
};
! static int in_handler_flag = 0;
!
! static void handleCheckMenuCommand(GtkMenuItem *menuitem)
{
! if (!in_handler_flag)
! {
! in_handler_flag++;
! gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), !(GTK_CHECK_MENU_ITEM(menuitem)->active));
! handleMenuCommand(menuitem) ;
! in_handler_flag--;
! }
! }
! MenuHandle osAddMenuCheckItem(MenuHandle parent, int nKeyCode, unsigned int mods, char *title)
! {
! gchar *szText = toMnemonicString(title);
! GtkWidget *menuItem = gtk_check_menu_item_new_with_mnemonic(szText);
! rfree(szText);
gtk_signal_connect (GTK_OBJECT(menuItem), "activate",
! GTK_SIGNAL_FUNC(handleCheckMenuCommand),
NULL);
! gtk_menu_shell_append(GTK_MENU_SHELL(getMenu(parent)), menuItem);
! gtk_widget_show(menuItem);
return menuItem;
};
! void osAddMenuSeparatorItem(MenuHandle parent)
{
GtkWidget *item = gtk_separator_menu_item_new();
! gtk_menu_shell_append(GTK_MENU_SHELL(getMenu(parent)), item);
gtk_widget_show(item);
}
! void osSetMenuItemEnabled(MenuHandle parent, MenuHandle item, BOOL bState)
{
gtk_widget_set_sensitive(item,bState);
};
! BOOL osGetMenuItemEnabled(MenuHandle parent, MenuHandle item)
{
return GTK_WIDGET_SENSITIVE(item);
};
! void osSetMenuItemChecked(MenuHandle parent, MenuHandle item, BOOL bState)
{
- in_handler_flag++;
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(item), bState);
- in_handler_flag--;
};
! BOOL osGetMenuItemChecked(MenuHandle parent, MenuHandle item)
{
return gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item));
};
! void osDrawMenuBar(WindowHandle window)
{
! /* TODO: nothing yet */
}
! void osSetMenuItemLabel(MenuHandle menu, MenuHandle item, int nKeyCode, unsigned int mods, char* title )
{
! /* TODO: nothing yet */
}
--- 15,643 ----
gtk_widget_show(gMenuBar);
}
!
parent = gMenuBar;
}
! else
! parent = gtk_menu_item_get_submenu(GTK_MENU_ITEM(parent));
!
return parent;
};
! static int recalcPos(GtkWidget *menu, int pos)
{
! BOOL b;
! int new_pos;
! GList *children;
!
! children = GTK_MENU_SHELL(menu)->children;
!
! 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;
! }
!
! if (!children)
! new_pos = (gDocumentInterface == 1 || menu != gMenuBar) ? -1 : new_pos-1;
! }
! else
! {
! new_pos = (gDocumentInterface == 1 || menu != gMenuBar) ? -1 : g_list_length(children)-1;
! }
!
! return new_pos;
! }
!
! static void menu_show(GtkWidget *widget, gpointer user_data)
! {
! GtkWidget *menuItem;
! GList *child = GTK_MENU_SHELL(widget)->children;
!
! while (child)
! {
! menuItem = (GtkWidget *) child->data;
!
! if (GTK_IS_IMAGE_MENU_ITEM(menuItem) ||
! GTK_IS_CHECK_MENU_ITEM(menuItem) ||
! GTK_IS_RADIO_MENU_ITEM(menuItem))
! {
! handleMenuUpdate(menuItem);
! }
!
! child = child->next;
! }
! }
!
! MenuHandle osInsertMenu(MenuHandle parent, int pos)
! {
! GtkWidget *menu;
! GtkWidget *menuItem = gtk_menu_item_new_with_mnemonic("");
GtkWidget *popUpMenu = gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuItem), popUpMenu);
! gtk_signal_connect (GTK_OBJECT(menuItem), "destroy",
! GTK_SIGNAL_FUNC(handleMenuDestroy),
! NULL);
! gtk_signal_connect (GTK_OBJECT(popUpMenu), "show",
! GTK_SIGNAL_FUNC(menu_show),
! 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;
};
! MenuHandle osInsertMenuItem(MenuHandle parent, int pos)
{
! GtkWidget *menu;
! GtkWidget *label, *menuItem;
!
! menuItem = gtk_image_menu_item_new();
! label = gtk_accel_label_new("");
! gtk_container_add(GTK_CONTAINER(menuItem), label);
! gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(label), menuItem);
gtk_signal_connect (GTK_OBJECT(menuItem), "activate",
GTK_SIGNAL_FUNC(handleMenuCommand),
NULL);
+ gtk_signal_connect (GTK_OBJECT(menuItem), "destroy",
+ GTK_SIGNAL_FUNC(handleMenuDestroy),
+ 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;
};
! MenuHandle osInsertMenuCheckItem(MenuHandle parent, int pos)
{
! GtkWidget *menu;
! GtkWidget *label, *menuItem;
! menuItem = gtk_check_menu_item_new();
! label = gtk_accel_label_new("");
! gtk_container_add(GTK_CONTAINER(menuItem), label);
! gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(label), menuItem);
gtk_signal_connect (GTK_OBJECT(menuItem), "activate",
! GTK_SIGNAL_FUNC(handleMenuCommand),
! NULL);
! gtk_signal_connect (GTK_OBJECT(menuItem), "destroy",
! GTK_SIGNAL_FUNC(handleMenuDestroy),
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;
};
! MenuHandle osInsertMenuSeparatorItem(MenuHandle parent, int pos)
{
+ GtkWidget *menu;
GtkWidget *item = gtk_separator_menu_item_new();
! gtk_signal_connect (GTK_OBJECT(item), "destroy",
! GTK_SIGNAL_FUNC(handleMenuDestroy),
! NULL);
!
! menu = getMenu(parent);
! pos = recalcPos(menu, pos);
!
! gtk_menu_shell_insert(GTK_MENU_SHELL(getMenu(parent)), item, pos);
gtk_widget_show(item);
+ return item;
}
! static void handleRadioMenuCommand(GtkMenuItem *menuitem)
! {
! 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);
! gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(label), menuItem);
!
! gtk_signal_connect (GTK_OBJECT(menuItem), "activate",
! GTK_SIGNAL_FUNC(handleRadioMenuCommand),
! NULL);
! gtk_signal_connect (GTK_OBJECT(menuItem), "destroy",
! GTK_SIGNAL_FUNC(handleMenuDestroy),
! NULL);
!
! gtk_menu_shell_insert(GTK_MENU_SHELL(menu), menuItem, new_pos);
! gtk_widget_show_all(menuItem);
!
! return menuItem;
! }
!
! void osDestroyMenu(MenuHandle handle)
! {
! GtkWidget *item, *menu;
!
! if (GTK_WIDGET_VISIBLE(handle))
! gtk_widget_destroy(handle);
! else
! {
! menu = gtk_widget_get_parent(handle);
!
! for (;;)
! {
! GList *children = GTK_MENU_SHELL(menu)->children;
!
! while (children && children->data != handle)
! children = children->next;
!
! if (!children || !children->next)
! return;
!
! item = (GtkWidget *) children->next->data;
!
! if (!GTK_WIDGET_VISIBLE(item))
! {
! gtk_widget_destroy(item);
! gtk_widget_destroy((GtkWidget *) children->data);
! return;
! }
! gtk_widget_destroy(item);
! }
! }
! }
!
! int osGetMenuItemCount(MenuHandle handle)
! {
! BOOL b;
! int count;
! GList *children;
! GtkWidget *menu;
!
! count = 0;
!
! if (!handle || GTK_WIDGET_VISIBLE(handle))
! {
! menu = getMenu(handle);
! children = GTK_MENU_SHELL(menu)->children;
!
! b = TRUE;
! while (children)
! {
! if (b) count++;
!
! if (!GTK_WIDGET_VISIBLE((GtkWidget*) children->data))
! {
! b = !b;
! }
!
! children = children->next;
! }
! }
! else
! {
! menu = gtk_widget_get_parent(handle);
! children = GTK_MENU_SHELL(menu)->children;
!
! while (children && children->data != handle)
! children = children->next;
!
! while (children && GTK_WIDGET_VISIBLE((GtkWidget *) children->data))
! {
! count++;
! children = children->next;
! }
!
! count--;
! }
!
! return count;
! }
!
! void osSetMenuItemEnabled(MenuHandle item, BOOL bState)
{
gtk_widget_set_sensitive(item,bState);
};
! BOOL osGetMenuItemEnabled(MenuHandle item)
{
return GTK_WIDGET_SENSITIVE(item);
};
! void osSetMenuItemChecked(MenuHandle item, BOOL bState)
{
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(item), bState);
};
! BOOL osGetMenuItemChecked(MenuHandle item)
{
return gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(item));
};
! void osSetMenuRadioGroupSelection(MenuHandle handle, int index)
{
! GList *children;
! GtkWidget *menu;
!
! menu = gtk_widget_get_parent(handle);
! children = GTK_MENU_SHELL(menu)->children;
!
! while (children && children->data != handle)
! children = children->next;
!
! if (!children || !children->next)
! return;
!
! children = children->next;
! while (children && GTK_WIDGET_VISIBLE((GtkWidget *) children->data) && index > 0)
! {
! index--;
! children = children->next;
! }
!
! if (children)
! gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM((GtkWidget *) children->data), TRUE);
}
! int osGetMenuRadioGroupSelection(MenuHandle handle)
{
! int index;
! GList *children;
! GtkWidget *menu;
!
! menu = gtk_widget_get_parent(handle);
! children = GTK_MENU_SHELL(menu)->children;
!
! while (children && children->data != handle)
! children = children->next;
!
! if (!children || !children->next)
! return -1;
!
! index = 0;
! children = children->next;
! while (children && GTK_WIDGET_VISIBLE((GtkWidget *) children->data))
! {
! if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM((GtkWidget *) children->data)))
! return index;
!
! index++;
! children = children->next;
! }
!
! return -1;
! }
!
! void osSetMenuLabel(MenuHandle item, char* title)
! {
! gchar *szText = toMnemonicString(title);
! gtk_label_set_text_with_mnemonic(GTK_LABEL(GTK_BIN(item)->child), szText);
! rfree(szText);
! }
!
! char *osGetMenuLabel(MenuHandle item)
! {
! return fromMnemonicString(gtk_label_get_text(GTK_LABEL(GTK_BIN(item)->child)));
! };
!
! static gboolean find_accel_by_widget(GtkAccelKey *key, GClosure *closure, gpointer data)
! {
! return (closure->data == data);
! }
!
! void osSetMenuItemAccel(MenuHandle item, int key, unsigned int mods)
! {
! GdkModifierType modifier;
! GtkAccelKey *accel_key;
! GtkAccelGroup *accel_group = (GtkAccelGroup *) gtk_accel_groups_from_object (G_OBJECT(gFrameWidget))->data;
!
! accel_key = gtk_accel_group_find(accel_group, find_accel_by_widget, item);
! if (accel_key) gtk_widget_remove_accelerator(item, accel_group, accel_key->accel_key, accel_key->accel_mods);
!
! if (!key) return;
!
! modifier = 0;
! if (mods & shiftBIT) modifier |= GDK_SHIFT_MASK;
! if (mods & ctrlBIT) modifier |= GDK_CONTROL_MASK;
! if (mods & altBIT) modifier |= GDK_MOD1_MASK;
!
! switch (key)
! {
! case kbBackSpace: key = GDK_BackSpace; break;
! case kbTab: key = GDK_Tab; break;
! case kbEnter: key = GDK_Return; break;
! case kbEscape: key = GDK_Escape; break;
! case kbBegin: key = GDK_Begin; break;
! case kbClear: key = GDK_Clear; break;
! case kbDelete: key = GDK_Delete; break;
! case kbDown: key = GDK_Down; break;
! case kbEnd: key = GDK_End; break;
! case kbF1: key = GDK_F1; break;
! case kbF2: key = GDK_F2; break;
! case kbF3: key = GDK_F3; break;
! case kbF4: key = GDK_F4; break;
! case kbF5: key = GDK_F5; break;
! case kbF6: key = GDK_F6; break;
! case kbF7: key = GDK_F7; break;
! case kbF8: key = GDK_F8; break;
! case kbF9: key = GDK_F9; break;
! case kbF10: key = GDK_F10; break;
! case kbF11: key = GDK_F11; break;
! case kbF12: key = GDK_F12; break;
! case kbF13: key = GDK_F13; break;
! case kbF14: key = GDK_F14; break;
! case kbF15: key = GDK_F15; break;
! case kbHelp: key = GDK_Help; break;
! case kbLeft: key = GDK_Left; break;
! case kbPgDown: key = GDK_Page_Down; break;
! case kbPgUp: key = GDK_Page_Up; break;
! case kbRight: key = GDK_Right; break;
! case kbUp: key = GDK_Up; break;
! default:
! if (key >= 256)
! {
! key -= 256;
! modifier = GDK_MOD1_MASK;
! }
!
! if (iscntrl(key))
! {
! key += '@';
! modifier |= GDK_CONTROL_MASK;
! }
! else
! if (isupper(key))
! modifier |= GDK_SHIFT_MASK;
! else
! key = toupper(key);
! break;
! }
!
! gtk_widget_add_accelerator(item, "activate",
! accel_group,
! key,
! modifier,
! GTK_ACCEL_VISIBLE);
! };
!
! void osGetMenuItemAccel(MenuHandle item, int *key, unsigned int *mods)
! {
! GtkAccelKey *accel_key;
! GtkAccelGroup *accel_group = (GtkAccelGroup *) gtk_accel_groups_from_object (G_OBJECT(gFrameWidget))->data;
!
! accel_key = gtk_accel_group_find(accel_group, find_accel_by_widget, item);
!
! if (accel_key)
! {
! *mods = 0;
! if (accel_key->accel_mods & GDK_SHIFT_MASK) *mods |= shiftBIT;
! if (accel_key->accel_mods & GDK_CONTROL_MASK) *mods |= ctrlBIT;
! if (accel_key->accel_mods & GDK_MOD1_MASK) *mods |= altBIT;
!
! switch (accel_key->accel_key)
! {
! case GDK_Up: *key = kbUp; break;
! case GDK_Down: *key = kbDown; break;
! case GDK_Left: *key = kbLeft; break;
! case GDK_Right: *key = kbRight; break;
! case GDK_Page_Up: *key = kbPgUp; break;
! case GDK_Page_Down:*key = kbPgDown; break;
! case GDK_End: *key = kbEnd; break;
! case GDK_Begin: *key = kbBegin; break;
! case GDK_BackSpace:*key = kbBackSpace; break;
! case GDK_Delete: *key = kbDelete; break;
! case GDK_Tab: *key = kbTab; break;
! case GDK_Return: *key = kbEnter; break;
! case GDK_Escape: *key = kbEscape; break;
! case GDK_Help: *key = kbHelp; break;
! case GDK_F1: *key = kbF1; break;
! case GDK_F2: *key = kbF2; break;
! case GDK_F3: *key = kbF3; break;
! case GDK_F4: *key = kbF4; break;
! case GDK_F5: *key = kbF5; break;
! case GDK_F6: *key = kbF6; break;
! case GDK_F7: *key = kbF7; break;
! case GDK_F8: *key = kbF8; break;
! case GDK_F9: *key = kbF9; break;
! case GDK_F10: *key = kbF10; break;
! case GDK_F11: *key = kbF11; break;
! case GDK_F12: *key = kbF12; break;
! case GDK_Clear: *key = kbClear; break;
! default:
! *mods = 0;
!
! *key = accel_key->accel_key;
! if (accel_key->accel_mods & GDK_CONTROL_MASK)
! *key = toupper(accel_key->accel_key) - '@';
! else
! if (accel_key->accel_mods & GDK_SHIFT_MASK)
! *key = toupper(accel_key->accel_key);
!
! if (accel_key->accel_mods & GDK_MOD1_MASK)
! *key += 256;
! break;
! }
! }
! else
! {
! *key = 0;
! *mods = 0;
! }
! };
!
! void osSetMenuItemBitmap(MenuHandle item, BitmapHandle bitmap)
! {
! GtkWidget *image = gtk_image_menu_item_get_image(GTK_IMAGE_MENU_ITEM(item));
!
! if (bitmap)
! {
! if (!image)
! {
! image = gtk_image_new_from_pixbuf(bitmap->pixbuf);
! gtk_widget_show(image);
! gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image);
! }
! else
! gtk_image_set_from_pixbuf(GTK_IMAGE(image),bitmap->pixbuf);
! }
! else
! {
! if (image)
! {
! gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), NULL);
! }
! }
! };
!
! int osGetMenuItemPos(MenuHandle handle)
! {
! BOOL b;
! int pos;
! GList *children;
! GtkWidget *menu;
!
! pos = 0;
! menu = getMenu(handle);
! children = GTK_MENU_SHELL(menu)->children;
!
!
! if (GTK_IS_RADIO_MENU_ITEM(handle))
! {
! while (children && children->data != handle)
! {
! if (GTK_WIDGET_VISIBLE((GtkWidget*) children->data))
! pos++;
! else
! pos = 0;
!
! children = children->next;
! }
! }
! else
! {
! b = TRUE;
! while (children && children->data != handle)
! {
! if (GTK_WIDGET_VISIBLE((GtkWidget*) children->data))
! {
! if (b) pos++;
! }
! else
! {
! b = !b;
! }
!
! children = children->next;
! }
! }
!
! if (!children) pos = -1;
!
! return pos;
}
+
|