# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1040271392 0 # Node ID f5567751395473e525e263d38cecbd2af05a67c9 # Parent 4ec906d40ce24573f39ae4041df41cbde0dc71ee Updated the menu code. diff -r 4ec906d40ce2 -r f55677513954 dw.h --- a/dw.h Thu Dec 19 02:18:12 2002 +0000 +++ b/dw.h Thu Dec 19 04:16:32 2002 +0000 @@ -149,11 +149,10 @@ HWND handle; } *HPIXMAP; -typedef struct _hmenui { - HWND menu; -} *HMENUI; +typedef HWND HMENUI; +typedef HMODULE HMOD; -typedef HMODULE HMOD; +#define DW_NOMENU NULLHANDLE extern HAB dwhab; extern HMQ dwhmq; @@ -328,8 +327,9 @@ typedef struct _hmenui { HMENU menu; HWND hwnd; -} *HMENUI; +} HMENUI; +static HMENUI DW_NOMENU = { 0, 0 }; #endif typedef struct _item { @@ -515,9 +515,9 @@ HWND handle; } *HPIXMAP; -typedef struct _hmenui { - GtkWidget *menu; -} *HMENUI; +typedef GtkWidget *HMENUI; + +#define DW_NOMENU NULL typedef struct _resource_struct { long resource_max, *resource_id; diff -r 4ec906d40ce2 -r f55677513954 gtk/dw.c --- a/gtk/dw.c Thu Dec 19 02:18:12 2002 +0000 +++ b/gtk/dw.c Thu Dec 19 04:16:32 2002 +0000 @@ -1705,18 +1705,15 @@ HMENUI dw_menu_new(unsigned long id) { int _locked_by_me = FALSE; - HMENUI tmp = malloc(sizeof(struct _hmenui)); GtkAccelGroup *accel_group; - - if(!tmp) - return NULL; - - DW_MUTEX_LOCK; - tmp->menu = gtk_menu_new(); - gtk_widget_show(tmp->menu); + HMENUI tmp; + + DW_MUTEX_LOCK; + tmp = gtk_menu_new(); + gtk_widget_show(tmp); accel_group = gtk_accel_group_new(); - gtk_object_set_data(GTK_OBJECT(tmp->menu), "id", (gpointer)id); - gtk_object_set_data(GTK_OBJECT(tmp->menu), "accel", (gpointer)accel_group); + gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); + gtk_object_set_data(GTK_OBJECT(tmp), "accel", (gpointer)accel_group); DW_MUTEX_UNLOCK; return tmp; } @@ -1730,21 +1727,18 @@ { GtkWidget *box; int _locked_by_me = FALSE; - HMENUI tmp = malloc(sizeof(struct _hmenui)); GtkAccelGroup *accel_group; - - if(!tmp) - return NULL; - - DW_MUTEX_LOCK; - tmp->menu = gtk_menu_bar_new(); + HMENUI tmp; + + DW_MUTEX_LOCK; + tmp = gtk_menu_bar_new(); box = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(location)); - gtk_widget_show(tmp->menu); + gtk_widget_show(tmp); accel_group = gtk_accel_group_new(); - gtk_object_set_data(GTK_OBJECT(tmp->menu), "accel", (gpointer)accel_group); + gtk_object_set_data(GTK_OBJECT(tmp), "accel", (gpointer)accel_group); if(box) - gtk_box_pack_end(GTK_BOX(box), tmp->menu, FALSE, FALSE, 0); + gtk_box_pack_end(GTK_BOX(box), tmp, FALSE, FALSE, 0); DW_MUTEX_UNLOCK; return tmp; @@ -1762,8 +1756,7 @@ int _locked_by_me = FALSE; DW_MUTEX_LOCK; - gtk_widget_destroy((*menu)->menu); - free(*menu); + gtk_widget_destroy(*menu); *menu = NULL; DW_MUTEX_UNLOCK; } @@ -1811,7 +1804,7 @@ guint tmp_key; GtkAccelGroup *accel_group; - if(!menu || !menu->menu) + if(!menu) { free(tempbuf); return NULL; @@ -1820,8 +1813,8 @@ DW_MUTEX_LOCK; accel = _removetilde(tempbuf, title); - accel_group = (GtkAccelGroup *)gtk_object_get_data(GTK_OBJECT(menu->menu), "accel"); - submenucount = (int)gtk_object_get_data(GTK_OBJECT(menu->menu), "submenucount"); + accel_group = (GtkAccelGroup *)gtk_object_get_data(GTK_OBJECT(menu), "accel"); + submenucount = (int)gtk_object_get_data(GTK_OBJECT(menu), "submenucount"); if(strlen(tempbuf) == 0) tmphandle=gtk_menu_item_new(); @@ -1842,7 +1835,7 @@ tmphandle=gtk_check_menu_item_new_with_label(tempbuf); gtk_check_menu_item_set_show_toggle(GTK_CHECK_MENU_ITEM(tmphandle), TRUE); sprintf(numbuf, "%lu", id); - gtk_object_set_data(GTK_OBJECT(menu->menu), numbuf, (gpointer)tmphandle); + gtk_object_set_data(GTK_OBJECT(menu), numbuf, (gpointer)tmphandle); } else { @@ -1867,15 +1860,15 @@ sprintf(tempbuf, "submenu%d", submenucount); submenucount++; - gtk_menu_item_set_submenu(GTK_MENU_ITEM(tmphandle), submenu->menu); - gtk_object_set_data(GTK_OBJECT(menu->menu), tempbuf, (gpointer)submenu->menu); - gtk_object_set_data(GTK_OBJECT(menu->menu), "submenucount", (gpointer)submenucount); - } - - if(GTK_IS_MENU_BAR(menu->menu)) - gtk_menu_bar_append(GTK_MENU_BAR(menu->menu), tmphandle); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(tmphandle), submenu); + gtk_object_set_data(GTK_OBJECT(menu), tempbuf, (gpointer)submenu); + gtk_object_set_data(GTK_OBJECT(menu), "submenucount", (gpointer)submenucount); + } + + if(GTK_IS_MENU_BAR(menu)) + gtk_menu_bar_append(GTK_MENU_BAR(menu), tmphandle); else - gtk_menu_append(GTK_MENU(menu->menu), tmphandle); + gtk_menu_append(GTK_MENU(menu), tmphandle); gtk_object_set_data(GTK_OBJECT(tmphandle), "id", (gpointer)id); free(tempbuf); @@ -1920,12 +1913,12 @@ GtkWidget *tmphandle; int _locked_by_me = FALSE; - if(!menu || !menu->menu) + if(!menu) return; DW_MUTEX_LOCK; sprintf(numbuf, "%lu", id); - tmphandle = _find_submenu_id(menu->menu, numbuf); + tmphandle = _find_submenu_id(menu, numbuf); if(tmphandle) { @@ -1955,8 +1948,7 @@ popup = parent; DW_MUTEX_LOCK; - gtk_menu_popup(GTK_MENU((*menu)->menu), NULL, NULL, NULL, NULL, 1, GDK_CURRENT_TIME); - free(*menu); + gtk_menu_popup(GTK_MENU(*menu), NULL, NULL, NULL, NULL, 1, GDK_CURRENT_TIME); *menu = NULL; DW_MUTEX_UNLOCK; } diff -r 4ec906d40ce2 -r f55677513954 os2/dw.c --- a/os2/dw.c Thu Dec 19 02:18:12 2002 +0000 +++ b/os2/dw.c Thu Dec 19 04:16:32 2002 +0000 @@ -3682,21 +3682,16 @@ */ HMENUI API dw_menu_new(ULONG id) { - HMENUI tmp = malloc(sizeof(struct _hmenui)); - - if(!tmp) - return NULL; - - tmp->menu = WinCreateWindow(HWND_OBJECT, - WC_MENU, - NULL, - WS_VISIBLE, - 0,0,2000,1000, - NULLHANDLE, - HWND_TOP, - id, - NULL, - NULL); + HMENUI tmp = WinCreateWindow(HWND_OBJECT, + WC_MENU, + NULL, + WS_VISIBLE, + 0,0,2000,1000, + NULLHANDLE, + HWND_TOP, + id, + NULL, + NULL); return tmp; } @@ -3707,21 +3702,16 @@ */ HMENUI API dw_menubar_new(HWND location) { - HMENUI tmp = malloc(sizeof(struct _hmenui)); - - if(!tmp) - return NULL; - - tmp->menu = WinCreateWindow(location, - WC_MENU, - NULL, - WS_VISIBLE | MS_ACTIONBAR, - 0,0,2000,1000, - location, - HWND_TOP, - FID_MENU, - NULL, - NULL); + HMENUI tmp = WinCreateWindow(location, + WC_MENU, + NULL, + WS_VISIBLE | MS_ACTIONBAR, + 0,0,2000,1000, + location, + HWND_TOP, + FID_MENU, + NULL, + NULL); return tmp; } @@ -3732,12 +3722,8 @@ */ void API dw_menu_destroy(HMENUI *menu) { - if(menu && *menu) - { - WinDestroyWindow((*menu)->menu); - free(*menu); - *menu = NULL; - } + if(menu) + WinDestroyWindow(*menu); } /* @@ -3754,13 +3740,10 @@ HWND API dw_menu_append_item(HMENUI menux, char *title, ULONG id, ULONG flags, int end, int check, HMENUI submenu) { MENUITEM miSubMenu; - HWND menu; if(!menux) return NULLHANDLE; - menu = menux->menu; - if(end) miSubMenu.iPosition=MIT_END; else @@ -3772,15 +3755,13 @@ miSubMenu.afStyle=MIS_TEXT | flags; miSubMenu.afAttribute=0; miSubMenu.id=id; - miSubMenu.hwndSubMenu = submenu ? submenu->menu : 0; + miSubMenu.hwndSubMenu = submenu; miSubMenu.hItem=NULLHANDLE; - WinSendMsg(menu, + WinSendMsg(menux, MM_INSERTITEM, MPFROMP(&miSubMenu), MPFROMP(title)); - if(submenu) - free(submenu); return (HWND)id; } @@ -3793,18 +3774,11 @@ */ void API dw_menu_item_set_check(HMENUI menux, unsigned long id, int check) { - HWND menu; - - if(!menux) - return; - - menu = menux->menu; - if(check) - WinSendMsg(menu, MM_SETITEMATTR, MPFROM2SHORT(id, TRUE), + WinSendMsg(menux, MM_SETITEMATTR, MPFROM2SHORT(id, TRUE), MPFROM2SHORT(MIA_CHECKED, MIA_CHECKED)); else - WinSendMsg(menu, MM_SETITEMATTR, MPFROM2SHORT(id, TRUE), + WinSendMsg(menux, MM_SETITEMATTR, MPFROM2SHORT(id, TRUE), MPFROM2SHORT(MIA_CHECKED, 0)); } @@ -3818,12 +3792,10 @@ */ void API dw_menu_popup(HMENUI *menu, HWND parent, int x, int y) { - if(menu && *menu) + if(menu) { popup = parent; - WinPopupMenu(HWND_DESKTOP, parent, (*menu)->menu, x, dw_screen_height() - y, 0, PU_KEYBOARD | PU_MOUSEBUTTON1 | PU_VCONSTRAIN | PU_HCONSTRAIN); - free(*menu); - *menu = NULL; + WinPopupMenu(HWND_DESKTOP, parent, *menu, x, dw_screen_height() - y, 0, PU_KEYBOARD | PU_MOUSEBUTTON1 | PU_VCONSTRAIN | PU_HCONSTRAIN); } } diff -r 4ec906d40ce2 -r f55677513954 win/dw.c --- a/win/dw.c Thu Dec 19 02:18:12 2002 +0000 +++ b/win/dw.c Thu Dec 19 04:16:32 2002 +0000 @@ -3571,13 +3571,10 @@ */ HMENUI API dw_menu_new(ULONG id) { - HMENUI tmp = malloc(sizeof(struct _hmenui)); - - if(!tmp) - return NULL; - - tmp->menu = CreatePopupMenu(); - tmp->hwnd = NULL; + HMENUI tmp; + + tmp.menu = CreatePopupMenu(); + tmp.hwnd = NULL; return tmp; } @@ -3588,15 +3585,12 @@ */ HMENUI API dw_menubar_new(HWND location) { - HMENUI tmp = malloc(sizeof(struct _hmenui)); - - if(!tmp) - return NULL; - - tmp->menu = CreateMenu(); - tmp->hwnd = location; - - SetMenu(location, tmp->menu); + HMENUI tmp; + + tmp.menu = CreateMenu(); + tmp.hwnd = location; + + SetMenu(location, tmp.menu); return tmp; } @@ -3607,12 +3601,8 @@ */ void API dw_menu_destroy(HMENUI *menu) { - if(menu && *menu) - { - DestroyMenu((*menu)->menu); - free(*menu); - *menu = NULL; - } + if(menu) + DestroyMenu(menu->menu); } /* @@ -3629,12 +3619,6 @@ HWND API dw_menu_append_item(HMENUI menux, char *title, ULONG id, ULONG flags, int end, int check, HMENUI submenu) { MENUITEMINFO mii; - HMENU menu; - - if(!menux) - return NULL; - - menu = menux->menu; mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_ID | MIIM_SUBMENU | MIIM_TYPE; @@ -3658,15 +3642,13 @@ mii.fType = MFT_SEPARATOR; mii.wID = id; - mii.hSubMenu = submenu ? submenu->menu : 0; + mii.hSubMenu = submenu.menu; mii.dwTypeData = title; mii.cch = strlen(title); - InsertMenuItem(menu, 65535, TRUE, &mii); - if(menux->hwnd) - DrawMenuBar(menux->hwnd); - if(submenu) - free(submenu); + InsertMenuItem(menux.menu, 65535, TRUE, &mii); + if(menux.hwnd) + DrawMenuBar(menux.hwnd); return (HWND)id; } @@ -3680,12 +3662,6 @@ void API dw_menu_item_set_check(HMENUI menux, unsigned long id, int check) { MENUITEMINFO mii; - HMENU menu; - - if(!menux) - return; - - menu = menux->menu; mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_STATE; @@ -3693,7 +3669,7 @@ mii.fState = MFS_CHECKED; else mii.fState = MFS_UNCHECKED; - SetMenuItemInfo(menu, id, FALSE, &mii); + SetMenuItemInfo(menux.menu, id, FALSE, &mii); } /* @@ -3706,13 +3682,11 @@ */ void API dw_menu_popup(HMENUI *menu, HWND parent, int x, int y) { - if(menu && *menu) + if(menu) { popup = parent; - TrackPopupMenu((*menu)->menu, 0, x, y, 0, parent, NULL); - DestroyMenu((*menu)->menu); - free(*menu); - *menu = NULL; + TrackPopupMenu(menu->menu, 0, x, y, 0, parent, NULL); + DestroyMenu(menu->menu); } }