aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrew Innes2001-03-08 21:21:44 +0000
committerAndrew Innes2001-03-08 21:21:44 +0000
commit4cdf6a6cec7020df71c10760b4c87cfa3f709226 (patch)
treeb8ed163dccafdaa5794b32edceab6e66ba5ec4ca /src
parent221dd3e77adae3ead2c59afa59d43c283a1c104a (diff)
downloademacs-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/ChangeLog5
-rw-r--r--src/w32menu.c72
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 @@
12001-03-08 Andrew Innes <andrewi@gnu.org>
2
3 * w32menu.c (add_menu_item): Fix problems with using ownerdraw for
4 menu titles.
5
12001-03-08 Gerd Moellmann <gerd@gnu.org> 62001-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