# HG changeset patch # User Bram Moolenaar # Date 1642847404 -3600 # Node ID e91b577be192b6b218c1d2bd14efcf32407af2cf # Parent ef412ec5bfdff37a74b851a2e7294e3eafb42726 patch 8.2.4175: MS-Windows: runtime check for multi-line balloon is obsolete Commit: https://github.com/vim/vim/commit/0bd663a3804fceb3efb26a179e9c1d830ddcdb6e Author: Bram Moolenaar Date: Sat Jan 22 10:24:47 2022 +0000 patch 8.2.4175: MS-Windows: runtime check for multi-line balloon is obsolete Problem: MS-Windows: runtime check for multi-line balloon is obsolete. Solution: Remove the obsolete code. (Ken Takata, closes https://github.com/vim/vim/issues/9592) diff --git a/src/evalfunc.c b/src/evalfunc.c --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -5104,8 +5104,7 @@ f_has(typval_T *argvars, typval_T *rettv #endif }, {"balloon_multiline", -#if defined(FEAT_BEVAL_GUI) && !defined(FEAT_GUI_MSWIN) - // MS-Windows requires runtime check, see below +#ifdef FEAT_BEVAL_GUI 1 #else 0 @@ -6079,10 +6078,6 @@ f_has(typval_T *argvars, typval_T *rettv { // intentionally empty } -#if defined(FEAT_BEVAL) && defined(FEAT_GUI_MSWIN) - else if (STRICMP(name, "balloon_multiline") == 0) - n = multiline_balloon_available(); -#endif #ifdef VIMDLL else if (STRICMP(name, "filterpipe") == 0) n = gui.in_use || gui.starting; @@ -6261,9 +6256,6 @@ f_has(typval_T *argvars, typval_T *rettv dynamic_feature(char_u *feature) { return (feature == NULL -#if defined(FEAT_BEVAL) && defined(FEAT_GUI_MSWIN) - || STRICMP(feature, "balloon_multiline") == 0 -#endif #if defined(FEAT_GUI) && defined(FEAT_BROWSE) || (STRICMP(feature, "browse") == 0 && !gui.in_use) #endif @@ -6716,7 +6708,7 @@ f_islocked(typval_T *argvars, typval_T * if (*end != NUL) { semsg(_(lv.ll_name == lv.ll_name_end - ? e_invalid_argument_str : e_trailing_characters_str), end); + ? e_invalid_argument_str : e_trailing_characters_str), end); } else { diff --git a/src/gui_w32.c b/src/gui_w32.c --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -4035,42 +4035,6 @@ static UINT_PTR BevalTimerId = 0; static DWORD LastActivity = 0; -// cproto fails on missing include files -# ifndef PROTO - -/* - * excerpts from headers since this may not be presented - * in the extremely old compilers - */ -# include - -# endif - -typedef struct _DllVersionInfo -{ - DWORD cbSize; - DWORD dwMajorVersion; - DWORD dwMinorVersion; - DWORD dwBuildNumber; - DWORD dwPlatformID; -} DLLVERSIONINFO; - -# ifndef PROTO -# include -# endif - -typedef struct tagTOOLINFOA_NEW -{ - UINT cbSize; - UINT uFlags; - HWND hwnd; - UINT_PTR uId; - RECT rect; - HINSTANCE hinst; - LPSTR lpszText; - LPARAM lParam; -} TOOLINFO_NEW; - typedef struct tagNMTTDISPINFO_NEW { NMHDR hdr; @@ -4105,7 +4069,6 @@ typedef struct tagNMTTDISPINFOW_NEW } NMTTDISPINFOW_NEW; -typedef HRESULT (WINAPI* DLLGETVERSIONPROC)(DLLVERSIONINFO *); # ifndef TTM_SETMAXTIPWIDTH # define TTM_SETMAXTIPWIDTH (WM_USER+24) # endif @@ -8497,89 +8460,13 @@ gui_mch_destroy_sign(void *sign) * 5) WM_NOTIFY:TTN_POP destroys created tooltip */ -/* - * determine whether installed Common Controls support multiline tooltips - * (i.e. their version is >= 4.70 - */ - int -multiline_balloon_available(void) -{ - HINSTANCE hDll; - static char comctl_dll[] = "comctl32.dll"; - static int multiline_tip = MAYBE; - - if (multiline_tip != MAYBE) - return multiline_tip; - - hDll = GetModuleHandle(comctl_dll); - if (hDll != NULL) - { - DLLGETVERSIONPROC pGetVer; - pGetVer = (DLLGETVERSIONPROC)GetProcAddress(hDll, "DllGetVersion"); - - if (pGetVer != NULL) - { - DLLVERSIONINFO dvi; - HRESULT hr; - - ZeroMemory(&dvi, sizeof(dvi)); - dvi.cbSize = sizeof(dvi); - - hr = (*pGetVer)(&dvi); - - if (SUCCEEDED(hr) - && (dvi.dwMajorVersion > 4 - || (dvi.dwMajorVersion == 4 - && dvi.dwMinorVersion >= 70))) - { - multiline_tip = TRUE; - return multiline_tip; - } - } - else - { - // there is chance we have ancient CommCtl 4.70 - // which doesn't export DllGetVersion - DWORD dwHandle = 0; - DWORD len = GetFileVersionInfoSize(comctl_dll, &dwHandle); - if (len > 0) - { - VS_FIXEDFILEINFO *ver; - UINT vlen = 0; - void *data = alloc(len); - - if ((data != NULL - && GetFileVersionInfo(comctl_dll, 0, len, data) - && VerQueryValue(data, "\\", (void **)&ver, &vlen) - && vlen - && HIWORD(ver->dwFileVersionMS) > 4) - || ((HIWORD(ver->dwFileVersionMS) == 4 - && LOWORD(ver->dwFileVersionMS) >= 70))) - { - vim_free(data); - multiline_tip = TRUE; - return multiline_tip; - } - vim_free(data); - } - } - } - multiline_tip = FALSE; - return multiline_tip; -} - static void make_tooltip(BalloonEval *beval, char *text, POINT pt) { - TOOLINFOW *pti; - int ToolInfoSize; - - if (multiline_balloon_available()) - ToolInfoSize = sizeof(TOOLINFOW_NEW); - else - ToolInfoSize = sizeof(TOOLINFOW); - - pti = alloc(ToolInfoSize); + TOOLINFOW_NEW *pti; + RECT rect; + + pti = alloc(sizeof(TOOLINFOW_NEW)); if (pti == NULL) return; @@ -8591,30 +8478,19 @@ make_tooltip(BalloonEval *beval, char *t SetWindowPos(beval->balloon, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - pti->cbSize = ToolInfoSize; + pti->cbSize = sizeof(TOOLINFOW_NEW); pti->uFlags = TTF_SUBCLASS; pti->hwnd = beval->target; pti->hinst = 0; // Don't use string resources pti->uId = ID_BEVAL_TOOLTIP; - if (multiline_balloon_available()) - { - RECT rect; - TOOLINFOW_NEW *ptin = (TOOLINFOW_NEW *)pti; - pti->lpszText = LPSTR_TEXTCALLBACKW; - beval->tofree = enc_to_utf16((char_u*)text, NULL); - ptin->lParam = (LPARAM)beval->tofree; - // switch multiline tooltips on - if (GetClientRect(s_textArea, &rect)) - SendMessageW(beval->balloon, TTM_SETMAXTIPWIDTH, 0, - (LPARAM)rect.right); - } - else - { - // do this old way - beval->tofree = enc_to_utf16((char_u*)text, NULL); - pti->lpszText = (LPWSTR)beval->tofree; - } + pti->lpszText = LPSTR_TEXTCALLBACKW; + beval->tofree = enc_to_utf16((char_u*)text, NULL); + pti->lParam = (LPARAM)beval->tofree; + // switch multiline tooltips on + if (GetClientRect(s_textArea, &rect)) + SendMessageW(beval->balloon, TTM_SETMAXTIPWIDTH, 0, + (LPARAM)rect.right); // Limit ballooneval bounding rect to CursorPos neighbourhood. pti->rect.left = pt.x - 3; diff --git a/src/proto/gui_w32.pro b/src/proto/gui_w32.pro --- a/src/proto/gui_w32.pro +++ b/src/proto/gui_w32.pro @@ -90,7 +90,6 @@ void gui_mch_set_foreground(void); void gui_mch_drawsign(int row, int col, int typenr); void *gui_mch_register_sign(char_u *signfile); void gui_mch_destroy_sign(void *sign); -int multiline_balloon_available(void); void gui_mch_disable_beval_area(BalloonEval *beval); void gui_mch_enable_beval_area(BalloonEval *beval); void gui_mch_post_balloon(BalloonEval *beval, char_u *mesg); diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 4175, +/**/ 4174, /**/ 4173,