# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1065649206 0 # Node ID 0a2f13ba2d5c483eafbb3d505d2e49109e166db9 # Parent ecf1df2edcee4d29ea99726c55cdd5f2a6913f1c More menu fixes, free signal handlers and memory on OS/2, and the begining for Windows. diff -r ecf1df2edcee -r 0a2f13ba2d5c os2/dw.c --- a/os2/dw.c Wed Oct 08 10:01:09 2003 +0000 +++ b/os2/dw.c Wed Oct 08 21:40:06 2003 +0000 @@ -36,6 +36,7 @@ int _load_bitmap_file(char *file, HWND handle, HBITMAP *hbm, HDC *hdc, HPS *hps, unsigned long *width, unsigned long *height); void _dw_box_pack_start(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad, char *functionname); void _dw_box_pack_end(HWND box, HWND item, int width, int height, int hsize, int vsize, int pad, char *functionname); +void _free_menu_data(HWND menu); char ClassName[] = "dynamicwindows"; char SplitbarClassName[] = "dwsplitbar"; @@ -288,6 +289,9 @@ dw_signal_disconnect_by_window(handle); + if((child = WinWindowFromID(handle, FID_MENU)) != NULLHANDLE) + _free_menu_data(child); + if((child = WinWindowFromID(handle, FID_CLIENT)) != NULLHANDLE) { Box *box = (Box *)WinQueryWindowPtr(child, QWP_USER); @@ -354,6 +358,24 @@ return; } +void _free_menu_data(HWND menu) +{ + int i, count = (int)WinSendMsg(menu, MM_QUERYITEMCOUNT, 0, 0);; + + dw_signal_disconnect_by_name(menu, DW_SIGNAL_CLICKED); + _free_window_memory(menu); + + for(i=0;icount) { int z, index = -1; diff -r ecf1df2edcee -r 0a2f13ba2d5c win/dw.c --- a/win/dw.c Wed Oct 08 10:01:09 2003 +0000 +++ b/win/dw.c Wed Oct 08 21:40:06 2003 +0000 @@ -417,6 +417,12 @@ return TRUE; } +void _free_menu_data(HMENU menu) +{ + /* TODO: This needs to call this on all submenus */ + dw_signal_disconnect_by_name((HWND)menu, DW_SIGNAL_CLICKED); +} + /* Convert to our internal color scheme */ ULONG _internal_color(ULONG color) { @@ -1816,7 +1822,8 @@ windowfunc((void *)mp2); break; case WM_USER+5: - dw_signal_disconnect_by_name((HWND)mp1, DW_SIGNAL_CLICKED); + _free_menu_data((HMENU)mp1); + DestroyMenu((HMENU)mp1); break; case WM_NOTIFY: { @@ -4035,9 +4042,7 @@ popup = parent; TrackPopupMenu(mymenu, 0, x, y, 0, parent, NULL); - /* TODO: This needs to call this on all submenus */ PostMessage(DW_HWND_OBJECT, WM_USER+5, (LPARAM)mymenu, 0); - DestroyMenu(mymenu); } }