diff options
author | K.Takata <kentkt@csc.jp> | 2021-06-05 16:25:32 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-06-05 16:25:32 +0200 |
commit | 4f2417ffeedbb687a59a36547e8143724a86bb31 (patch) | |
tree | 0d1b1c4584f543fa74fd0db5e13066c20da01fee /src | |
parent | 84e9ade826e7a6a03e0ff5cd9a35b48c4d88367e (diff) |
patch 8.2.2940: MS-Windows: cannot see the size when resizingv8.2.2940
Problem: MS-Windows: cannot see the size of the text area when resizing the
gvim window.
Solution: Show a tooltip with the text size. (Ken Takata, closes #8326)
Diffstat (limited to 'src')
-rw-r--r-- | src/gui_w32.c | 61 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 57 insertions, 6 deletions
diff --git a/src/gui_w32.c b/src/gui_w32.c index c1f823e27a..b879aa3c88 100644 --- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -2942,7 +2942,9 @@ gui_mswin_get_valid_dimensions( int w, int h, int *valid_w, - int *valid_h) + int *valid_h, + int *cols, + int *rows) { int base_width, base_height; @@ -2957,10 +2959,10 @@ gui_mswin_get_valid_dimensions( + gui_mswin_get_menu_height(FALSE) #endif ; - *valid_w = base_width + - ((w - base_width) / gui.char_width) * gui.char_width; - *valid_h = base_height + - ((h - base_height) / gui.char_height) * gui.char_height; + *cols = (w - base_width) / gui.char_width; + *rows = (h - base_height) / gui.char_height; + *valid_w = base_width + *cols * gui.char_width; + *valid_h = base_height + *rows * gui.char_height; } void @@ -4480,6 +4482,46 @@ _OnWindowPosChanged( } #endif + +static HWND hwndTip = NULL; + + static void +show_sizing_tip(int cols, int rows) +{ + TOOLINFOA ti = {sizeof(ti)}; + char buf[32]; + + ti.hwnd = s_hwnd; + ti.uId = (UINT_PTR)s_hwnd; + ti.uFlags = TTF_SUBCLASS | TTF_IDISHWND; + ti.lpszText = buf; + sprintf(buf, "%dx%d", cols, rows); + if (hwndTip == NULL) + { + hwndTip = CreateWindowExA(0, TOOLTIPS_CLASSA, NULL, + WS_POPUP | TTS_ALWAYSTIP | TTS_NOPREFIX, + CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, + s_hwnd, NULL, GetModuleHandle(NULL), NULL); + SendMessage(hwndTip, TTM_ADDTOOL, 0, (LPARAM)&ti); + SendMessage(hwndTip, TTM_TRACKACTIVATE, TRUE, (LPARAM)&ti); + } + else + { + SendMessage(hwndTip, TTM_UPDATETIPTEXT, 0, (LPARAM)&ti); + } + SendMessage(hwndTip, TTM_POPUP, 0, 0); +} + + static void +destroy_sizing_tip(void) +{ + if (hwndTip != NULL) + { + DestroyWindow(hwndTip); + hwndTip = NULL; + } +} + static int _DuringSizing( UINT fwSide, @@ -4488,10 +4530,11 @@ _DuringSizing( int w, h; int valid_w, valid_h; int w_offset, h_offset; + int cols, rows; w = lprc->right - lprc->left; h = lprc->bottom - lprc->top; - gui_mswin_get_valid_dimensions(w, h, &valid_w, &valid_h); + gui_mswin_get_valid_dimensions(w, h, &valid_w, &valid_h, &cols, &rows); w_offset = w - valid_w; h_offset = h - valid_h; @@ -4508,6 +4551,8 @@ _DuringSizing( else if (fwSide == WMSZ_BOTTOM || fwSide == WMSZ_BOTTOMLEFT || fwSide == WMSZ_BOTTOMRIGHT) lprc->bottom -= h_offset; + + show_sizing_tip(cols, rows); return TRUE; } @@ -4648,6 +4693,10 @@ _WndProc( return 0L; #endif + case WM_EXITSIZEMOVE: + destroy_sizing_tip(); + break; + case WM_SIZING: // HANDLE_MSG doesn't seem to handle this one return _DuringSizing((UINT)wParam, (LPRECT)lParam); diff --git a/src/version.c b/src/version.c index b3de4a3398..e244d4b957 100644 --- 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 */ /**/ + 2940, +/**/ 2939, /**/ 2938, |