# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1320309514 0 # Node ID 68f18dccfb8f1b4da70c02ed8bddf757c7835b1f # Parent ca02c24e80c95c959c8a6aaa51c0e28a8f48a781 Experimental change to menu code on OS/2 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. diff -r ca02c24e80c9 -r 68f18dccfb8f os2/dw.c --- a/os2/dw.c Thu Nov 03 08:37:56 2011 +0000 +++ b/os2/dw.c Thu Nov 03 08:38:34 2011 +0000 @@ -5906,6 +5906,19 @@ { char tmpbuf[100]; + if(handle < 65536) + { + char buffer[30]; + HMENUI mymenu; + + sprintf(buffer, "_dw_id%ld", handle); + mymenu = (HMENUI)dw_window_get_data(hwndApp, buffer); + + if(mymenu && WinIsWindow(dwhab, mymenu)) + dw_menu_item_set_state(mymenu, handle, DW_MIS_DISABLED); + return; + } + if(dw_window_get_data(handle, "_dw_disabled")) return; @@ -5958,6 +5971,19 @@ ULONG back = (ULONG)dw_window_get_data(handle, "_dw_back"); HWND hwnd = _find_entryfield(handle); + if(handle < 65536) + { + char buffer[30]; + HMENUI mymenu; + + sprintf(buffer, "_dw_id%ld", handle); + mymenu = (HMENUI)dw_window_get_data(hwndApp, buffer); + + if(mymenu && WinIsWindow(dwhab, mymenu)) + dw_menu_item_set_state(mymenu, handle, DW_MIS_ENABLED); + return; + } + dw_window_set_data(handle, "_dw_disabled", 0); if(hwnd) dw_window_set_data(hwnd, "_dw_disabled", 0); @@ -10729,16 +10755,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; } @@ -10923,16 +10947,13 @@ sprintf(buffer, "_dw_id%d", (int)window); owner = (HWND)dw_window_get_data(hwndApp, buffer); + /* Make sure there are no dupes from popups */ + dw_signal_disconnect_by_window(window); + if(owner) { id = window; window = owner; - dw_window_set_data(hwndApp, 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);