Mercurial > vim
comparison 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 |
comparison
equal
deleted
inserted
replaced
18525:99adbfe3dde3 | 18526:334b1f897f3a |
---|---|
4232 SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, | 4232 SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, |
4233 &mouse_scroll_lines, 0); | 4233 &mouse_scroll_lines, 0); |
4234 } | 4234 } |
4235 | 4235 |
4236 | 4236 |
4237 /* Intellimouse wheel handler */ | 4237 /* |
4238 * Intellimouse wheel handler. | |
4239 * Treat a mouse wheel event as if it were a scroll request. | |
4240 */ | |
4238 static void | 4241 static void |
4239 _OnMouseWheel( | 4242 _OnMouseWheel( |
4240 HWND hwnd, | 4243 HWND hwnd, |
4241 short zDelta) | 4244 short zDelta) |
4242 { | 4245 { |
4243 /* Treat a mouse wheel event as if it were a scroll request */ | |
4244 int i; | 4246 int i; |
4245 int size; | 4247 int size; |
4246 HWND hwndCtl; | 4248 HWND hwndCtl; |
4247 | 4249 win_T *wp; |
4248 if (curwin->w_scrollbars[SBAR_RIGHT].id != 0) | 4250 |
4249 { | 4251 if (mouse_scroll_lines == 0) |
4250 hwndCtl = curwin->w_scrollbars[SBAR_RIGHT].id; | 4252 init_mouse_wheel(); |
4251 size = curwin->w_scrollbars[SBAR_RIGHT].size; | 4253 |
4252 } | 4254 wp = gui_mouse_window(FIND_POPUP); |
4253 else if (curwin->w_scrollbars[SBAR_LEFT].id != 0) | 4255 |
4254 { | 4256 #ifdef FEAT_TEXT_PROP |
4255 hwndCtl = curwin->w_scrollbars[SBAR_LEFT].id; | 4257 if (wp != NULL && popup_is_popup(wp)) |
4256 size = curwin->w_scrollbars[SBAR_LEFT].size; | 4258 { |
4257 } | 4259 cmdarg_T cap; |
4260 oparg_T oa; | |
4261 | |
4262 // Mouse hovers over popup window, scroll it if possible. | |
4263 mouse_row = wp->w_winrow; | |
4264 mouse_col = wp->w_wincol; | |
4265 vim_memset(&cap, 0, sizeof(cap)); | |
4266 cap.arg = zDelta < 0 ? MSCR_UP : MSCR_DOWN; | |
4267 cap.cmdchar = zDelta < 0 ? K_MOUSEUP : K_MOUSEDOWN; | |
4268 clear_oparg(&oa); | |
4269 cap.oap = &oa; | |
4270 nv_mousescroll(&cap); | |
4271 update_screen(0); | |
4272 setcursor(); | |
4273 out_flush(); | |
4274 return; | |
4275 } | |
4276 #endif | |
4277 | |
4278 if (wp == NULL || !p_scf) | |
4279 wp = curwin; | |
4280 | |
4281 if (wp->w_scrollbars[SBAR_RIGHT].id != 0) | |
4282 hwndCtl = wp->w_scrollbars[SBAR_RIGHT].id; | |
4283 else if (wp->w_scrollbars[SBAR_LEFT].id != 0) | |
4284 hwndCtl = wp->w_scrollbars[SBAR_LEFT].id; | |
4258 else | 4285 else |
4259 return; | 4286 return; |
4260 | 4287 size = wp->w_height; |
4261 size = curwin->w_height; | |
4262 if (mouse_scroll_lines == 0) | |
4263 init_mouse_wheel(); | |
4264 | |
4265 #ifdef FEAT_TEXT_PROP | |
4266 { | |
4267 win_T *wp = gui_mouse_window(FIND_POPUP); | |
4268 | |
4269 if (wp != NULL && popup_is_popup(wp)) | |
4270 { | |
4271 cmdarg_T cap; | |
4272 oparg_T oa; | |
4273 | |
4274 // Mouse hovers over popup window, scroll it if possible. | |
4275 mouse_row = wp->w_winrow; | |
4276 mouse_col = wp->w_wincol; | |
4277 vim_memset(&cap, 0, sizeof(cap)); | |
4278 cap.arg = zDelta < 0 ? MSCR_UP : MSCR_DOWN; | |
4279 cap.cmdchar = zDelta < 0 ? K_MOUSEUP : K_MOUSEDOWN; | |
4280 clear_oparg(&oa); | |
4281 cap.oap = &oa; | |
4282 nv_mousescroll(&cap); | |
4283 update_screen(0); | |
4284 setcursor(); | |
4285 out_flush(); | |
4286 return; | |
4287 } | |
4288 } | |
4289 #endif | |
4290 | 4288 |
4291 mch_disable_flush(); | 4289 mch_disable_flush(); |
4292 if (mouse_scroll_lines > 0 | 4290 if (mouse_scroll_lines > 0 |
4293 && mouse_scroll_lines < (size > 2 ? size - 2 : 1)) | 4291 && mouse_scroll_lines < (size > 2 ? size - 2 : 1)) |
4294 { | 4292 { |