Mercurial > vim
diff src/gui_w32.c @ 18526:334b1f897f3a v8.1.2257
patch 8.1.2257: MS-Windows GUI: scroll wheel always uses current window
Commit: https://github.com/vim/vim/commit/ae20f340adc8c96aeec5cff5ef4f2129035ffca4
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Nov 5 21:09:23 2019 +0100
patch 8.1.2257: MS-Windows GUI: scroll wheel always uses current window
Problem: MS-Windows GUI: scroll wheel always uses current window.
Solution: Add the 'scrollfocus' option for MS-Windows.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 05 Nov 2019 21:15:04 +0100 |
parents | 6067fbb46625 |
children | 5beda1754026 |
line wrap: on
line diff
--- a/src/gui_w32.c +++ b/src/gui_w32.c @@ -4234,59 +4234,57 @@ init_mouse_wheel(void) } -/* Intellimouse wheel handler */ +/* + * Intellimouse wheel handler. + * Treat a mouse wheel event as if it were a scroll request. + */ static void _OnMouseWheel( HWND hwnd, short zDelta) { -/* Treat a mouse wheel event as if it were a scroll request */ int i; int size; HWND hwndCtl; - - if (curwin->w_scrollbars[SBAR_RIGHT].id != 0) - { - hwndCtl = curwin->w_scrollbars[SBAR_RIGHT].id; - size = curwin->w_scrollbars[SBAR_RIGHT].size; - } - else if (curwin->w_scrollbars[SBAR_LEFT].id != 0) - { - hwndCtl = curwin->w_scrollbars[SBAR_LEFT].id; - size = curwin->w_scrollbars[SBAR_LEFT].size; - } - else - return; - - size = curwin->w_height; + win_T *wp; + if (mouse_scroll_lines == 0) init_mouse_wheel(); + wp = gui_mouse_window(FIND_POPUP); + #ifdef FEAT_TEXT_PROP - { - win_T *wp = gui_mouse_window(FIND_POPUP); - - if (wp != NULL && popup_is_popup(wp)) - { - cmdarg_T cap; - oparg_T oa; - - // Mouse hovers over popup window, scroll it if possible. - mouse_row = wp->w_winrow; - mouse_col = wp->w_wincol; - vim_memset(&cap, 0, sizeof(cap)); - cap.arg = zDelta < 0 ? MSCR_UP : MSCR_DOWN; - cap.cmdchar = zDelta < 0 ? K_MOUSEUP : K_MOUSEDOWN; - clear_oparg(&oa); - cap.oap = &oa; - nv_mousescroll(&cap); - update_screen(0); - setcursor(); - out_flush(); - return; - } - } -#endif + if (wp != NULL && popup_is_popup(wp)) + { + cmdarg_T cap; + oparg_T oa; + + // Mouse hovers over popup window, scroll it if possible. + mouse_row = wp->w_winrow; + mouse_col = wp->w_wincol; + vim_memset(&cap, 0, sizeof(cap)); + cap.arg = zDelta < 0 ? MSCR_UP : MSCR_DOWN; + cap.cmdchar = zDelta < 0 ? K_MOUSEUP : K_MOUSEDOWN; + clear_oparg(&oa); + cap.oap = &oa; + nv_mousescroll(&cap); + update_screen(0); + setcursor(); + out_flush(); + return; + } +#endif + + if (wp == NULL || !p_scf) + wp = curwin; + + if (wp->w_scrollbars[SBAR_RIGHT].id != 0) + hwndCtl = wp->w_scrollbars[SBAR_RIGHT].id; + else if (wp->w_scrollbars[SBAR_LEFT].id != 0) + hwndCtl = wp->w_scrollbars[SBAR_LEFT].id; + else + return; + size = wp->w_height; mch_disable_flush(); if (mouse_scroll_lines > 0