# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1320309476 0 # Node ID ca02c24e80c95c959c8a6aaa51c0e28a8f48a781 # Parent 5fbf384780d120efff0ec1c1410a08cb69f01b66 Experimental change to menu code on Windows to allow dw_window_enable/disable to work on menu item handles. Also cleaned up some ancient code in the window data handler.. simplified and sped up on Win and Mac. diff -r 5fbf384780d1 -r ca02c24e80c9 mac/dw.m --- a/mac/dw.m Thu Nov 03 02:01:56 2011 +0000 +++ b/mac/dw.m Thu Nov 03 08:37:56 2011 +0000 @@ -8443,16 +8443,14 @@ *root = new; else { - UserData *prev = NULL, *tmp = *root; + UserData *prev = *root, *tmp = prev->next; + while(tmp) { prev = tmp; tmp = tmp->next; } - if(prev) - prev->next = new; - else - *root = new; + prev->next = new; } return TRUE; } diff -r 5fbf384780d1 -r ca02c24e80c9 win/dw.c --- a/win/dw.c Thu Nov 03 02:01:56 2011 +0000 +++ b/win/dw.c Thu Nov 03 08:37:56 2011 +0000 @@ -6043,7 +6043,20 @@ */ void API dw_window_disable(HWND handle) { - EnableWindow(handle, FALSE); + if(handle < (HWND)65536) + { + char buffer[30]; + HMENU mymenu; + ULONG id = (ULONG)handle; + + sprintf(buffer, "_dw_id%ld", id); + mymenu = (HMENU)dw_window_get_data(DW_HWND_OBJECT, buffer); + + if(mymenu && IsMenu(mymenu)) + dw_menu_item_set_state((HMENUI)mymenu, id, DW_MIS_DISABLED); + } + else + EnableWindow(handle, FALSE); } /* @@ -6053,6 +6066,19 @@ */ void API dw_window_enable(HWND handle) { + if(handle < (HWND)65536) + { + char buffer[30]; + HMENU mymenu; + ULONG id = (ULONG)handle; + + sprintf(buffer, "_dw_id%ld", id); + mymenu = (HMENU)dw_window_get_data(DW_HWND_OBJECT, buffer); + + if(mymenu && IsMenu(mymenu)) + dw_menu_item_set_state((HMENUI)mymenu, id, DW_MIS_ENABLED); + } + else EnableWindow(handle, TRUE); } @@ -10550,16 +10576,14 @@ *root = new; else { - UserData *prev = NULL, *tmp = *root; + UserData *prev = *root, *tmp = prev->next; + while(tmp) { prev = tmp; tmp = tmp->next; } - if(prev) - prev->next = new; - else - *root = new; + prev->next = new; } return TRUE; } @@ -10751,16 +10775,13 @@ sprintf(buffer, "_dw_id%d", (int)window); owner = (HWND)dw_window_get_data(DW_HWND_OBJECT, buffer); + /* Make sure there are no dupes from popups */ + dw_signal_disconnect_by_window(window); + if (owner) { id = (ULONG)window; window = owner; - dw_window_set_data(DW_HWND_OBJECT, buffer, 0); - } - else - { - /* If it is a popup menu clear all entries */ - dw_signal_disconnect_by_window(window); } } _new_signal(message, window, id, sigfunc, data);