Commit 74214547 authored by Jason Rumney's avatar Jason Rumney

(w32_pass_extra_mouse_buttons_to_system): New user option.

(syms_of_w32fns): DEFVAR_BOOL it.
(w32_wnd_proc): Handle new "XBUTTON" messages.
parent 76e4fd8c
...@@ -142,6 +142,9 @@ Lisp_Object Vw32_mouse_button_tolerance; ...@@ -142,6 +142,9 @@ Lisp_Object Vw32_mouse_button_tolerance;
events that are passed on to the event loop. */ events that are passed on to the event loop. */
Lisp_Object Vw32_mouse_move_interval; Lisp_Object Vw32_mouse_move_interval;
/* Flag to indicate if XBUTTON events should be passed on to Windows. */
int w32_pass_extra_mouse_buttons_to_system;
/* The name we're using in resource queries. */ /* The name we're using in resource queries. */
Lisp_Object Vx_resource_name; Lisp_Object Vx_resource_name;
...@@ -4570,6 +4573,11 @@ w32_wnd_proc (hwnd, msg, wParam, lParam) ...@@ -4570,6 +4573,11 @@ w32_wnd_proc (hwnd, msg, wParam, lParam)
} }
return 0; return 0;
case WM_XBUTTONDOWN:
case WM_XBUTTONUP:
if (w32_pass_extra_mouse_buttons_to_system)
goto dflt;
/* else fall through and process them. */
case WM_MBUTTONDOWN: case WM_MBUTTONDOWN:
case WM_MBUTTONUP: case WM_MBUTTONUP:
handle_plain_button: handle_plain_button:
...@@ -4577,7 +4585,7 @@ w32_wnd_proc (hwnd, msg, wParam, lParam) ...@@ -4577,7 +4585,7 @@ w32_wnd_proc (hwnd, msg, wParam, lParam)
BOOL up; BOOL up;
int button; int button;
if (parse_button (msg, &button, &up)) if (parse_button (msg, HIWORD (wParam), &button, &up))
{ {
if (up) ReleaseCapture (); if (up) ReleaseCapture ();
else SetCapture (hwnd); else SetCapture (hwnd);
...@@ -4592,7 +4600,10 @@ w32_wnd_proc (hwnd, msg, wParam, lParam) ...@@ -4592,7 +4600,10 @@ w32_wnd_proc (hwnd, msg, wParam, lParam)
wmsg.dwModifiers = w32_get_modifiers (); wmsg.dwModifiers = w32_get_modifiers ();
my_post_msg (&wmsg, hwnd, msg, wParam, lParam); my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
return 0;
/* Need to return true for XBUTTON messages, false for others,
to indicate that we processed the message. */
return (msg == WM_XBUTTONDOWN || msg == WM_XBUTTONUP);
case WM_MOUSEMOVE: case WM_MOUSEMOVE:
/* If the mouse has just moved into the frame, start tracking /* If the mouse has just moved into the frame, start tracking
...@@ -14507,6 +14518,16 @@ successive mouse move (or scroll bar drag) events before they are ...@@ -14507,6 +14518,16 @@ successive mouse move (or scroll bar drag) events before they are
reported as lisp events. */); reported as lisp events. */);
XSETINT (Vw32_mouse_move_interval, 0); XSETINT (Vw32_mouse_move_interval, 0);
DEFVAR_BOOL ("w32-pass-extra-mouse-buttons-to-system",
&w32_pass_extra_mouse_buttons_to_system,
doc: /* Non-nil if the fourth and fifth mouse buttons are passed to Windows.
Recent versions of Windows support mice with up to five buttons.
Since most applications don't support these extra buttons, most mouse
drivers will allow you to map them to functions at the system level.
If this variable is non-nil, Emacs will pass them on, allowing the
system to handle them. */);
w32_pass_extra_mouse_buttons_to_system = 0;
init_x_parm_symbols (); init_x_parm_symbols ();
DEFVAR_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path, DEFVAR_LISP ("x-bitmap-file-path", &Vx_bitmap_file_path,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment