# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1045596861 0 # Node ID 13d3de3f1e837bfe4984dec215cdd216917eaeec # Parent efa724294b5f036932cbdb5d108a5b8305042987 Rewrote the menu code to not return structs. diff -r efa724294b5f -r 13d3de3f1e83 dw.h --- a/dw.h Fri Feb 14 16:25:03 2003 +0000 +++ b/dw.h Tue Feb 18 19:34:21 2003 +0000 @@ -308,12 +308,9 @@ void *bits; } *HPIXMAP; -typedef struct _hmenui { - HMENU menu; - HWND hwnd; -} HMENUI; +typedef HWND HMENUI; -static HMENUI DW_NOMENU = { 0, 0 }; +#define DW_NOMENU NULL #endif typedef struct _item { diff -r efa724294b5f -r 13d3de3f1e83 win/dw.c --- a/win/dw.c Fri Feb 14 16:25:03 2003 +0000 +++ b/win/dw.c Tue Feb 18 19:34:21 2003 +0000 @@ -3688,11 +3688,7 @@ */ HMENUI API dw_menu_new(ULONG id) { - HMENUI tmp; - - tmp.menu = CreatePopupMenu(); - tmp.hwnd = NULL; - return tmp; + return (HMENUI)CreatePopupMenu(); } /* @@ -3704,11 +3700,12 @@ { HMENUI tmp; - tmp.menu = CreateMenu(); - tmp.hwnd = location; - - SetMenu(location, tmp.menu); - return tmp; + tmp = (HMENUI)CreateMenu(); + + dw_window_set_data(location, "_dw_menu", (void *)tmp); + + SetMenu(location, (HMENU)tmp); + return location; } /* @@ -3719,7 +3716,14 @@ void API dw_menu_destroy(HMENUI *menu) { if(menu) - DestroyMenu(menu->menu); + { + HMENU mymenu = (HMENU)*menu; + + if(IsWindow((HWND)mymenu) && !IsMenu(mymenu)) + mymenu = (HMENU)dw_window_get_data((HWND)mymenu, "_dw_menu"); + if(IsMenu(mymenu)) + DestroyMenu(mymenu); + } } /* @@ -3736,6 +3740,10 @@ HWND API dw_menu_append_item(HMENUI menux, char *title, ULONG id, ULONG flags, int end, int check, HMENUI submenu) { MENUITEMINFO mii; + HMENU mymenu = (HMENU)menux; + + if(IsWindow(menux) && !IsMenu(mymenu)) + mymenu = (HMENU)dw_window_get_data(menux, "_dw_menu"); mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_ID | MIIM_SUBMENU | MIIM_TYPE; @@ -3759,13 +3767,16 @@ mii.fType = MFT_SEPARATOR; mii.wID = id; - mii.hSubMenu = submenu.menu; + if(IsMenu((HMENU)submenu)) + mii.hSubMenu = (HMENU)submenu; + else + mii.hSubMenu = 0; mii.dwTypeData = title; mii.cch = strlen(title); - InsertMenuItem(menux.menu, 65535, TRUE, &mii); - if(menux.hwnd) - DrawMenuBar(menux.hwnd); + InsertMenuItem(mymenu, 65535, TRUE, &mii); + if(IsWindow(menux) && !IsMenu((HMENU)menux)) + DrawMenuBar(menux); return (HWND)id; } @@ -3779,6 +3790,10 @@ void API dw_menu_item_set_check(HMENUI menux, unsigned long id, int check) { MENUITEMINFO mii; + HMENU mymenu = (HMENU)menux; + + if(IsWindow(menux) && !IsMenu(mymenu)) + mymenu = (HMENU)dw_window_get_data(menux, "_dw_menu"); mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_STATE; @@ -3786,7 +3801,7 @@ mii.fState = MFS_CHECKED; else mii.fState = MFS_UNCHECKED; - SetMenuItemInfo(menux.menu, id, FALSE, &mii); + SetMenuItemInfo(mymenu, id, FALSE, &mii); } /* @@ -3801,9 +3816,14 @@ { if(menu) { + HMENU mymenu = (HMENU)*menu; + + if(IsWindow(*menu) && !IsMenu(mymenu)) + mymenu = (HMENU)dw_window_get_data(*menu, "_dw_menu"); + popup = parent; - TrackPopupMenu(menu->menu, 0, x, y, 0, parent, NULL); - DestroyMenu(menu->menu); + TrackPopupMenu(mymenu, 0, x, y, 0, parent, NULL); + DestroyMenu(mymenu); } }