diff options
| author | Andrew Innes | 2001-03-08 21:21:44 +0000 |
|---|---|---|
| committer | Andrew Innes | 2001-03-08 21:21:44 +0000 |
| commit | 4cdf6a6cec7020df71c10760b4c87cfa3f709226 (patch) | |
| tree | b8ed163dccafdaa5794b32edceab6e66ba5ec4ca /src | |
| parent | 221dd3e77adae3ead2c59afa59d43c283a1c104a (diff) | |
| download | emacs-4cdf6a6cec7020df71c10760b4c87cfa3f709226.tar.gz emacs-4cdf6a6cec7020df71c10760b4c87cfa3f709226.zip | |
(add_menu_item): Fix problems with using ownerdraw for
menu titles.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 5 | ||||
| -rw-r--r-- | src/w32menu.c | 72 |
2 files changed, 40 insertions, 37 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 34018585de6..b4c2475561d 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2001-03-08 Andrew Innes <andrewi@gnu.org> | ||
| 2 | |||
| 3 | * w32menu.c (add_menu_item): Fix problems with using ownerdraw for | ||
| 4 | menu titles. | ||
| 5 | |||
| 1 | 2001-03-08 Gerd Moellmann <gerd@gnu.org> | 6 | 2001-03-08 Gerd Moellmann <gerd@gnu.org> |
| 2 | 7 | ||
| 3 | * xdisp.c (handle_display_prop): Use it->w->buffer as object, | 8 | * xdisp.c (handle_display_prop): Use it->w->buffer as object, |
diff --git a/src/w32menu.c b/src/w32menu.c index c2c89158058..043e6731f0e 100644 --- a/src/w32menu.c +++ b/src/w32menu.c | |||
| @@ -2054,25 +2054,22 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item) | |||
| 2054 | else | 2054 | else |
| 2055 | out_string = wv->name; | 2055 | out_string = wv->name; |
| 2056 | 2056 | ||
| 2057 | if (wv->title) | 2057 | if (wv->title || wv->call_data == 0) |
| 2058 | { | 2058 | { |
| 2059 | #if 0 /* no GC while popup menu is active */ | 2059 | #if 0 /* no GC while popup menu is active */ |
| 2060 | out_string = LocalAlloc (0, strlen (wv->name) + 1); | 2060 | out_string = LocalAlloc (0, strlen (wv->name) + 1); |
| 2061 | strcpy (out_string, wv->name); | 2061 | strcpy (out_string, wv->name); |
| 2062 | #endif | 2062 | #endif |
| 2063 | /* TODO: Why has owner-draw stopped working? */ | 2063 | fuFlags = MF_OWNERDRAW | MF_DISABLED; |
| 2064 | fuFlags |= /*MF_OWNERDRAW |*/ MF_DISABLED; | ||
| 2065 | } | 2064 | } |
| 2066 | |||
| 2067 | /* Draw radio buttons and tickboxes. */ | 2065 | /* Draw radio buttons and tickboxes. */ |
| 2068 | { | 2066 | else if (wv->selected && (wv->button_type == BUTTON_TYPE_TOGGLE || |
| 2069 | if (wv->selected && (wv->button_type == BUTTON_TYPE_TOGGLE || | ||
| 2070 | wv->button_type == BUTTON_TYPE_RADIO)) | 2067 | wv->button_type == BUTTON_TYPE_RADIO)) |
| 2071 | fuFlags |= MF_CHECKED; | 2068 | fuFlags |= MF_CHECKED; |
| 2072 | else | 2069 | else |
| 2073 | fuFlags |= MF_UNCHECKED; | 2070 | fuFlags |= MF_UNCHECKED; |
| 2074 | } | ||
| 2075 | } | 2071 | } |
| 2072 | |||
| 2076 | if (item != NULL) | 2073 | if (item != NULL) |
| 2077 | fuFlags = MF_POPUP; | 2074 | fuFlags = MF_POPUP; |
| 2078 | 2075 | ||
| @@ -2083,35 +2080,36 @@ add_menu_item (HMENU menu, widget_value *wv, HMENU item) | |||
| 2083 | out_string ); | 2080 | out_string ); |
| 2084 | 2081 | ||
| 2085 | /* This must be done after the menu item is created. */ | 2082 | /* This must be done after the menu item is created. */ |
| 2086 | { | 2083 | if ((fuFlags & MF_STRING) != 0) |
| 2087 | HMODULE user32 = GetModuleHandle ("user32.dll"); | 2084 | { |
| 2088 | FARPROC set_menu_item_info = GetProcAddress (user32, "SetMenuItemInfoA"); | 2085 | HMODULE user32 = GetModuleHandle ("user32.dll"); |
| 2086 | FARPROC set_menu_item_info = GetProcAddress (user32, "SetMenuItemInfoA"); | ||
| 2089 | 2087 | ||
| 2090 | if (set_menu_item_info) | 2088 | if (set_menu_item_info) |
| 2091 | { | 2089 | { |
| 2092 | MENUITEMINFO info; | 2090 | MENUITEMINFO info; |
| 2093 | bzero (&info, sizeof (info)); | 2091 | bzero (&info, sizeof (info)); |
| 2094 | info.cbSize = sizeof (info); | 2092 | info.cbSize = sizeof (info); |
| 2095 | info.fMask = MIIM_DATA; | 2093 | info.fMask = MIIM_DATA; |
| 2096 | 2094 | ||
| 2097 | /* Set help string for menu item. */ | 2095 | /* Set help string for menu item. */ |
| 2098 | info.dwItemData = (DWORD)wv->help; | 2096 | info.dwItemData = (DWORD)wv->help; |
| 2099 | 2097 | ||
| 2100 | if (wv->button_type == BUTTON_TYPE_RADIO) | 2098 | if (wv->button_type == BUTTON_TYPE_RADIO) |
| 2101 | { | 2099 | { |
| 2102 | /* CheckMenuRadioItem allows us to differentiate TOGGLE and | 2100 | /* CheckMenuRadioItem allows us to differentiate TOGGLE and |
| 2103 | RADIO items, but is not available on NT 3.51 and earlier. */ | 2101 | RADIO items, but is not available on NT 3.51 and earlier. */ |
| 2104 | info.fMask |= MIIM_TYPE | MIIM_STATE; | 2102 | info.fMask |= MIIM_TYPE | MIIM_STATE; |
| 2105 | info.fType = MFT_RADIOCHECK | MFT_STRING; | 2103 | info.fType = MFT_RADIOCHECK | MFT_STRING; |
| 2106 | info.dwTypeData = out_string; | 2104 | info.dwTypeData = out_string; |
| 2107 | info.fState = wv->selected ? MFS_CHECKED : MFS_UNCHECKED; | 2105 | info.fState = wv->selected ? MFS_CHECKED : MFS_UNCHECKED; |
| 2108 | } | 2106 | } |
| 2109 | 2107 | ||
| 2110 | set_menu_item_info (menu, | 2108 | set_menu_item_info (menu, |
| 2111 | item != NULL ? (UINT) item : (UINT) wv->call_data, | 2109 | item != NULL ? (UINT) item : (UINT) wv->call_data, |
| 2112 | FALSE, &info); | 2110 | FALSE, &info); |
| 2113 | } | 2111 | } |
| 2114 | } | 2112 | } |
| 2115 | return return_value; | 2113 | return return_value; |
| 2116 | } | 2114 | } |
| 2117 | 2115 | ||