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, 04 Oct 2001 08:46:42 GMT

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]