changeset 53956:922b1cbf208b

(Vmac_emulate_three_button_mouse): New variable for controlling emulation of a three button mouse with option and command keys. (Qreverse, mac_get_enumlated_btn): Handle the emulation (mac_event_to_emacs_modifiers, XTread_socket): Ditto
author Steven Tamm <steventamm@mac.com>
date Sun, 15 Feb 2004 17:16:18 +0000
parents 7d8c228c1f02
children f1d42b5a6b3d
files src/ChangeLog src/macterm.c
diffstat 2 files changed, 58 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sun Feb 15 16:19:00 2004 +0000
+++ b/src/ChangeLog	Sun Feb 15 17:16:18 2004 +0000
@@ -1,3 +1,11 @@
+2004-02-15  Steven Tamm  <steventamm@mac.com>
+
+	* macterm.c (Vmac_emulate_three_button_mouse): New variable for
+	controlling emulation of a three button mouse with option and
+	command keys.
+	(Qreverse, mac_get_enumlated_btn): Handle the emulation
+	(mac_event_to_emacs_modifiers, XTread_socket): Ditto
+
 2004-02-15  Kim F. Storm  <storm@cua.dk>
 
 	* fringe.c (init_fringe_bitmap) [MAC_OS, WORDS_BIG_ENDIAN]:
--- a/src/macterm.c	Sun Feb 15 16:19:00 2004 +0000
+++ b/src/macterm.c	Sun Feb 15 17:16:18 2004 +0000
@@ -6463,12 +6463,19 @@
 
 Boolean	terminate_flag = false;
 
+/* Contains the string "reverse", which is a constant for mouse button emu.*/
+Lisp_Object Qreverse;
+
 /* True if using command key as meta key.  */
 Lisp_Object Vmac_command_key_is_meta;
 
 /* True if the ctrl and meta keys should be reversed.  */
 Lisp_Object Vmac_reverse_ctrl_meta;
 
+/* True if the option and command modifiers should be used to emulate
+   a three button mouse */
+Lisp_Object Vmac_emulate_three_button_mouse;
+
 #if USE_CARBON_EVENTS
 /* True if the mouse wheel button (i.e. button 4) should map to
    mouse-2, instead of mouse-3.  */
@@ -6541,6 +6548,20 @@
   return result;
 }
 
+static int
+mac_get_emulated_btn ( UInt32 modifiers )
+{
+  int result = 0;
+  if (Vmac_emulate_three_button_mouse != Qnil) {
+    int cmdIs3 = (Vmac_emulate_three_button_mouse != Qreverse);
+    if (modifiers & controlKey)
+      result = cmdIs3 ? 2 : 1;
+    else if (modifiers & optionKey)
+      result = cmdIs3 ? 1 : 2;      
+  }
+  return result;
+}
+
 #if USE_CARBON_EVENTS
 /* Obtains the event modifiers from the event ref and then calls
    mac_to_emacs_modifiers.  */
@@ -6550,6 +6571,11 @@
   UInt32 mods = 0;
   GetEventParameter (eventRef, kEventParamKeyModifiers, typeUInt32, NULL,
 		    sizeof (UInt32), NULL, &mods);
+  if (Vmac_emulate_three_button_mouse != Qnil &&
+      GetEventClass(eventRef) == kEventClassMouse)
+    {
+      mods &= ~(optionKey & cmdKey);
+    }
   return mac_to_emacs_modifiers (mods);
 }
 
@@ -6564,7 +6590,14 @@
   switch (result)
     {
     case kEventMouseButtonPrimary:
-      return 0;
+      if (Vmac_emulate_three_button_mouse == Qnil) 
+	return 0;
+      else {
+	UInt32 mods = 0;
+	GetEventParameter (ref, kEventParamKeyModifiers, typeUInt32, NULL,
+			   sizeof (UInt32), NULL, &mods);
+	return mac_get_emulated_btn(mods);
+      }
     case kEventMouseButtonSecondary:
       return NILP (Vmac_wheel_button_is_mouse_2) ? 1 : 2;
     case kEventMouseButtonTertiary:
@@ -7700,7 +7733,7 @@
 #if USE_CARBON_EVENTS
 	      bufp->code = mac_get_mouse_btn (eventRef);
 #else
-	      bufp->code = 0;  /* only one mouse button */
+	      bufp_.code = mac_get_emulate_btn (er.modifiers);
 #endif
               bufp->kind = SCROLL_BAR_CLICK_EVENT;
               bufp->frame_or_window = tracked_scroll_bar->window;
@@ -7768,7 +7801,7 @@
 #if USE_CARBON_EVENTS
 		  bufp->code = mac_get_mouse_btn (eventRef);
 #else
-	          bufp->code = 0;  /* only one mouse button */
+		  bufp_.code = mac_get_emulate_btn (er.modifiers);
 #endif
 		  XSETINT (bufp->x, mouse_loc.h);
 		  XSETINT (bufp->y, mouse_loc.v);
@@ -8645,6 +8678,9 @@
 
   Fprovide (intern ("mac-carbon"), Qnil);
 
+  staticpro (&Qreverse);
+  Qreverse = intern ("reverse");
+
   staticpro (&x_display_name_list);
   x_display_name_list = Qnil;
 
@@ -8689,6 +8725,17 @@
 	    useful for non-standard keyboard layouts.  */);
   Vmac_reverse_ctrl_meta = Qnil;
 
+  DEFVAR_LISP ("mac-emulate-three-button-mouse", 
+	       &Vmac_emulate_three_button_mouse,
+    doc: /* t means that when the option-key is held down while pressing the
+    mouse button, the click will register as mouse-2 and while the 
+    command-key is held down, the click will register as mouse-3.
+    'reverse means that the the option-key will register for mouse-3
+    and the command-key will register for mouse-2.  nil means that
+    not emulation should be done and the modifiers should be placed
+    on the mouse-1 event. */);
+  Vmac_emulate_three_button_mouse = Qnil;
+
 #if USE_CARBON_EVENTS
   DEFVAR_LISP ("mac-wheel-button-is-mouse-2", &Vmac_wheel_button_is_mouse_2,
    doc: /* Non-nil means that the wheel button will be treated as mouse-2 and