Mercurial > dwindows
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 } |