changeset 1303:ca02c24e80c9

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.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 03 Nov 2011 08:37:56 +0000
parents 5fbf384780d1
children 68f18dccfb8f
files mac/dw.m win/dw.c
diffstat 2 files changed, 36 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- 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;
         }
--- 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);