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 {