comparison src/event-msw.c @ 1622:bf2a986fcb17

[xemacs-hg @ 2003-08-13 11:27:47 by stephent] send mwheel events w/o scrollbars <87k79hbxwo.fsf@tleepslib.sk.tsukuba.ac.jp>
author stephent
date Wed, 13 Aug 2003 11:27:48 +0000
parents 01c57eb70ae9
children 29c45c1b64f3
comparison
equal deleted inserted replaced
1621:9cf129cb99b9 1622:bf2a986fcb17
976 int mods, DWORD when) 976 int mods, DWORD when)
977 { 977 {
978 int downp = (msg == WM_LBUTTONDOWN || msg == WM_MBUTTONDOWN || 978 int downp = (msg == WM_LBUTTONDOWN || msg == WM_MBUTTONDOWN ||
979 msg == WM_RBUTTONDOWN); 979 msg == WM_RBUTTONDOWN);
980 980
981 /* Wheel rotation amount: positive is away from user, negative towards user */
982 int delta = (short) HIWORD (mods);
983
981 /* We always use last message time, because mouse button 984 /* We always use last message time, because mouse button
982 events may get delayed, and XEmacs double click 985 events may get delayed, and XEmacs double click
983 recognition will fail */ 986 recognition will fail */
984 987
985 Lisp_Object emacs_event = Fmake_event (Qnil, Qnil); 988 Lisp_Object emacs_event = Fmake_event (Qnil, Qnil);
996 } 999 }
997 1000
998 XSET_EVENT_CHANNEL (emacs_event, mswindows_find_frame (hwnd)); 1001 XSET_EVENT_CHANNEL (emacs_event, mswindows_find_frame (hwnd));
999 XSET_EVENT_TIMESTAMP (emacs_event, when); 1002 XSET_EVENT_TIMESTAMP (emacs_event, when);
1000 XSET_EVENT_BUTTON_BUTTON (emacs_event, 1003 XSET_EVENT_BUTTON_BUTTON (emacs_event,
1001 (msg==WM_LBUTTONDOWN || msg==WM_LBUTTONUP) ? 1 : 1004 (msg==WM_LBUTTONDOWN || msg==WM_LBUTTONUP) ? 1 :
1002 ((msg==WM_RBUTTONDOWN || msg==WM_RBUTTONUP) ? 3 : 2)); 1005 (msg==WM_MBUTTONDOWN || msg==WM_MBUTTONUP) ? 2 :
1006 (msg==WM_RBUTTONDOWN || msg==WM_RBUTTONUP) ? 3 :
1007 (msg==WM_MOUSEWHEEL && delta>0) ? 4 : 5);
1003 XSET_EVENT_BUTTON_X (emacs_event, where.x); 1008 XSET_EVENT_BUTTON_X (emacs_event, where.x);
1004 XSET_EVENT_BUTTON_Y (emacs_event, where.y); 1009 XSET_EVENT_BUTTON_Y (emacs_event, where.y);
1005 XSET_EVENT_BUTTON_MODIFIERS (emacs_event, 1010 XSET_EVENT_BUTTON_MODIFIERS (emacs_event,
1006 mswindows_modifier_state (NULL, mods, 0)); 1011 mswindows_modifier_state (NULL, mods, 0));
1007 1012
3536 case WM_MOUSEWHEEL: 3541 case WM_MOUSEWHEEL:
3537 { 3542 {
3538 int keys = LOWORD (wParam); /* Modifier key flags */ 3543 int keys = LOWORD (wParam); /* Modifier key flags */
3539 int delta = (short) HIWORD (wParam); /* Wheel rotation amount */ 3544 int delta = (short) HIWORD (wParam); /* Wheel rotation amount */
3540 3545
3541 if (mswindows_handle_mousewheel_event (mswindows_find_frame (hwnd), 3546 /* enqueue button4/5 events if mswindows_handle_mousewheel_event
3547 doesn't handle the event, such as when the scrollbars are not
3548 displayed */
3549 if (!mswindows_handle_mousewheel_event (mswindows_find_frame (hwnd),
3542 keys, delta, 3550 keys, delta,
3543 MAKEPOINTS (lParam))) 3551 MAKEPOINTS (lParam)))
3544 /* We are not in a modal loop so no pumping is necessary. */ 3552 mswindows_enqueue_mouse_button_event (hwnd, message_,
3545 break; 3553 MAKEPOINTS (lParam),
3546 else 3554 wParam,
3547 goto defproc; 3555 GetMessageTime());
3556 /* We are not in a modal loop so no pumping is necessary. */
3557 break;
3548 } 3558 }
3549 #endif 3559 #endif
3550 3560
3551 #ifdef HAVE_MENUBARS 3561 #ifdef HAVE_MENUBARS
3552 case WM_INITMENU: 3562 case WM_INITMENU: