changeset 1304:68f18dccfb8f

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.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 03 Nov 2011 08:38:34 +0000
parents ca02c24e80c9
children 18a31ab94e3d
files os2/dw.c
diffstat 1 files changed, 32 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- 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);