Permalink
Browse files

patch 8.0.1212: MS-Windows: tear-off menu does not work on 64 bit

Problem:    MS-Windows: tear-off menu does not work on 64 bit. (shaggyaxe)
Solution:   Change how the menu handle is looked up. (Ken Takata, closes
            #1205)
  • Loading branch information...
brammool committed Oct 22, 2017
1 parent ca05aa2 commit 66857f410426ca335f4771a58a32b2d14a7e52b9
Showing with 34 additions and 3 deletions.
  1. +32 −3 src/gui_w32.c
  2. +2 −0 src/version.c
View
@@ -7567,6 +7567,26 @@ nCopyAnsiToWideChar(
#ifdef FEAT_TEAROFF
/*
* Lookup menu handle from "menu_id".
*/
static HMENU
tearoff_lookup_menuhandle(
vimmenu_T *menu,
WORD menu_id)
{
for ( ; menu != NULL; menu = menu->next)
{
if (menu->modes == 0) /* this menu has just been deleted */
continue;
if (menu_is_separator(menu->dname))
continue;
if ((WORD)((long_u)(menu->submenu_id) | (DWORD)0x8000) == menu_id)
return menu->submenu_id;
}
return NULL;
}
/*
* The callback function for all the modeless dialogs that make up the
* "tearoff menus" Very simple - forward button presses (to fool Vim into
@@ -7580,7 +7600,10 @@ tearoff_callback(
LPARAM lParam)
{
if (message == WM_INITDIALOG)
{
SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)lParam);
return (TRUE);
}
/* May show the mouse pointer again. */
HandleMouseHide(message, lParam);
@@ -7594,8 +7617,11 @@ tearoff_callback(
if (GetCursorPos(&mp) && GetWindowRect(hwnd, &rect))
{
vimmenu_T *menu;
menu = (vimmenu_T*)GetWindowLongPtr(hwnd, DWLP_USER);
(void)TrackPopupMenu(
(HMENU)(long_u)(LOWORD(wParam) ^ 0x8000),
tearoff_lookup_menuhandle(menu, LOWORD(wParam)),
TPM_LEFTALIGN | TPM_LEFTBUTTON,
(int)rect.right - 8,
(int)mp.y,
@@ -7707,6 +7733,7 @@ gui_mch_tearoff(
WORD dlgwidth;
WORD menuID;
vimmenu_T *pmenu;
vimmenu_T *top_menu;
vimmenu_T *the_menu = menu;
HWND hwnd;
HDC hdc;
@@ -7885,6 +7912,7 @@ gui_mch_tearoff(
menu = menu->children->next;
else
menu = menu->children;
top_menu = menu;
for ( ; menu != NULL; menu = menu->next)
{
if (menu->modes == 0) /* this menu has just been deleted */
@@ -7995,11 +8023,12 @@ gui_mch_tearoff(
/* show modelessly */
the_menu->tearoff_handle = CreateDialogIndirect(
the_menu->tearoff_handle = CreateDialogIndirectParam(
s_hinst,
(LPDLGTEMPLATE)pdlgtemplate,
s_hwnd,
(DLGPROC)tearoff_callback);
(DLGPROC)tearoff_callback,
(LPARAM)top_menu);
LocalFree(LocalHandle(pdlgtemplate));
SelectFont(hdc, oldFont);
View
@@ -761,6 +761,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
1212,
/**/
1211,
/**/

0 comments on commit 66857f4

Please sign in to comment.