bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

patch: Improvement to win32 emacs: support the two Microsoft Intellimous


From: Karl Chen
Subject: patch: Improvement to win32 emacs: support the two Microsoft Intellimouse Explorer mouse "X" (thumb) buttons
Date: Thu, 4 Oct 2001 01:48:52 -0700

Hi. I have hacked emacs 20.7 to handle the two thumb back/forward
buttons (apparently called "X buttons") on the MS Intellimouse Explorer.
They generate buttons 4 and 5, i.e. events (down-)?mouse-{4|5}. Here are
diffs from 20.7.1:

*** w32fns.c.~1~        Thu May  4 14:05:49 2000
--- w32fns.c    Thu Oct  4 01:07:13 2001
***************
*** 45,50 ****
--- 45,63 ----
  #include <commdlg.h>
  #include <shellapi.h>
  
+ // KC:
+ #if !defined (WM_XBUTTONDOWN)
+ // from vc7b2 winuser.h for win 5.0:
+ #define WM_XBUTTONDOWN                  0x020B
+ #define WM_XBUTTONUP                    0x020C
+ //#define WM_XBUTTONDBLCLK                0x020D
+ /* XButton values are WORD flags */
+ #define GET_XBUTTON_WPARAM(wParam)      (HIWORD(wParam))
+ #define XBUTTON1      0x0001
+ #define XBUTTON2      0x0002
+ #endif
+ 
+ 
  extern void abort ();
  extern void free_frame_menubar ();
  extern struct scroll_bar *x_window_to_scroll_bar ();
***************
*** 4143,4148 ****
--- 4156,4182 ----
        }
        return 0;
  
+         // KC:
+       case WM_XBUTTONUP:
+       case WM_XBUTTONDOWN:
+               // from doc for WM_XBUTTONDOWN:
+               //              The high-order word indicates which
button was pressed. It can be one
+               //              of the following values. Value Meaning
+               //                              XBUTTON1 The first X
button was pressed.
+               //                              XBUTTON2 The second X
button was pressed.
+ 
+               if (GET_XBUTTON_WPARAM(wParam) & XBUTTON1) {
+                       msg = (msg == WM_XBUTTONUP) ? WM_KC_X1BUTTONUP :
+                               WM_KC_X1BUTTONDOWN;
+               } else {
+                       msg = (msg == WM_XBUTTONUP) ? WM_KC_X2BUTTONUP :
+                               WM_KC_X2BUTTONDOWN;
+               }
+ 
+               wmsg.dwModifiers = w32_get_modifiers ();
+               my_post_msg (&wmsg, hwnd, msg, wParam, lParam);
+               return 0;
+ 
      case WM_MBUTTONDOWN:
      case WM_MBUTTONUP:
      handle_plain_button:

*** w32term.c.~1~       Sat May 13 02:14:24 2000
--- w32term.c   Thu Oct  4 01:06:48 2001
***************
*** 1951,1956 ****
--- 1951,1976 ----
        button = 1;
        up = 1;
        break;
+ 
+         // KC:
+       case WM_KC_X1BUTTONUP:
+               button = 3;
+               up = 1;
+               break;
+       case WM_KC_X1BUTTONDOWN:
+               button = 3;
+               up = 0;
+               break;
+ 
+       case WM_KC_X2BUTTONUP:
+               button = 4;
+               up = 1;
+               break;
+       case WM_KC_X2BUTTONDOWN:
+               button = 4;
+               up = 0;
+               break;
+ 
      default:
        return (FALSE);
      }
***************
*** 3577,3582 ****
--- 3597,3607 ----
        case WM_MBUTTONUP:
        case WM_RBUTTONDOWN:
        case WM_RBUTTONUP:
+               //KC
+       case WM_KC_X1BUTTONDOWN:
+       case WM_KC_X1BUTTONUP:
+       case WM_KC_X2BUTTONDOWN:
+       case WM_KC_X2BUTTONUP:
          {
            int button;
            int up;

*** w32term.h.~1~       Thu Jul  1 12:46:17 1999
--- w32term.h   Thu Oct  4 01:06:35 2001
***************
*** 637,642 ****
--- 637,648 ----
  #define WM_EMACS_TOGGLE_LOCK_KEY       (WM_EMACS_START + 14)
  #define WM_EMACS_END                   (WM_EMACS_START + 15)
  
+ #define WM_KC_X1BUTTONDOWN             (WM_EMACS_START + 16)
+ #define WM_KC_X1BUTTONUP               (WM_EMACS_START + 17)
+ #define WM_KC_X2BUTTONDOWN             (WM_EMACS_START + 18)
+ #define WM_KC_X2BUTTONUP               (WM_EMACS_START + 19)
+ 
+ 
  #define WND_FONTWIDTH_INDEX    (0)
  #define WND_LINEHEIGHT_INDEX   (4)
  #define WND_BORDER_INDEX       (8)


Karl Chen





reply via email to

[Prev in Thread] Current Thread [Next in Thread]