comparison win/dw.c @ 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 b8f6e7dd4544
children 18a31ab94e3d
comparison
equal deleted inserted replaced
1302:5fbf384780d1 1303:ca02c24e80c9
6041 * Parameters: 6041 * Parameters:
6042 * handle: Handle to the window. 6042 * handle: Handle to the window.
6043 */ 6043 */
6044 void API dw_window_disable(HWND handle) 6044 void API dw_window_disable(HWND handle)
6045 { 6045 {
6046 EnableWindow(handle, FALSE); 6046 if(handle < (HWND)65536)
6047 {
6048 char buffer[30];
6049 HMENU mymenu;
6050 ULONG id = (ULONG)handle;
6051
6052 sprintf(buffer, "_dw_id%ld", id);
6053 mymenu = (HMENU)dw_window_get_data(DW_HWND_OBJECT, buffer);
6054
6055 if(mymenu && IsMenu(mymenu))
6056 dw_menu_item_set_state((HMENUI)mymenu, id, DW_MIS_DISABLED);
6057 }
6058 else
6059 EnableWindow(handle, FALSE);
6047 } 6060 }
6048 6061
6049 /* 6062 /*
6050 * Enables given window (widget). 6063 * Enables given window (widget).
6051 * Parameters: 6064 * Parameters:
6052 * handle: Handle to the window. 6065 * handle: Handle to the window.
6053 */ 6066 */
6054 void API dw_window_enable(HWND handle) 6067 void API dw_window_enable(HWND handle)
6055 { 6068 {
6069 if(handle < (HWND)65536)
6070 {
6071 char buffer[30];
6072 HMENU mymenu;
6073 ULONG id = (ULONG)handle;
6074
6075 sprintf(buffer, "_dw_id%ld", id);
6076 mymenu = (HMENU)dw_window_get_data(DW_HWND_OBJECT, buffer);
6077
6078 if(mymenu && IsMenu(mymenu))
6079 dw_menu_item_set_state((HMENUI)mymenu, id, DW_MIS_ENABLED);
6080 }
6081 else
6056 EnableWindow(handle, TRUE); 6082 EnableWindow(handle, TRUE);
6057 } 6083 }
6058 6084
6059 static HWND _dw_wfid_hwnd = NULL; 6085 static HWND _dw_wfid_hwnd = NULL;
6060 6086
10548 10574
10549 if (!*root) 10575 if (!*root)
10550 *root = new; 10576 *root = new;
10551 else 10577 else
10552 { 10578 {
10553 UserData *prev = NULL, *tmp = *root; 10579 UserData *prev = *root, *tmp = prev->next;
10580
10554 while(tmp) 10581 while(tmp)
10555 { 10582 {
10556 prev = tmp; 10583 prev = tmp;
10557 tmp = tmp->next; 10584 tmp = tmp->next;
10558 } 10585 }
10559 if(prev) 10586 prev->next = new;
10560 prev->next = new;
10561 else
10562 *root = new;
10563 } 10587 }
10564 return TRUE; 10588 return TRUE;
10565 } 10589 }
10566 } 10590 }
10567 return FALSE; 10591 return FALSE;
10749 HWND owner; 10773 HWND owner;
10750 10774
10751 sprintf(buffer, "_dw_id%d", (int)window); 10775 sprintf(buffer, "_dw_id%d", (int)window);
10752 owner = (HWND)dw_window_get_data(DW_HWND_OBJECT, buffer); 10776 owner = (HWND)dw_window_get_data(DW_HWND_OBJECT, buffer);
10753 10777
10778 /* Make sure there are no dupes from popups */
10779 dw_signal_disconnect_by_window(window);
10780
10754 if (owner) 10781 if (owner)
10755 { 10782 {
10756 id = (ULONG)window; 10783 id = (ULONG)window;
10757 window = owner; 10784 window = owner;
10758 dw_window_set_data(DW_HWND_OBJECT, buffer, 0);
10759 }
10760 else
10761 {
10762 /* If it is a popup menu clear all entries */
10763 dw_signal_disconnect_by_window(window);
10764 } 10785 }
10765 } 10786 }
10766 _new_signal(message, window, id, sigfunc, data); 10787 _new_signal(message, window, id, sigfunc, data);
10767 } 10788 }
10768 } 10789 }