# HG changeset patch # User Steven Tamm # Date 1076865378 0 # Node ID 922b1cbf208bbb8e657516ffa3e734ce147e2151 # Parent 7d8c228c1f020e9a7759d420a841a6c78a8be2c2 (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 diff -r 7d8c228c1f02 -r 922b1cbf208b src/ChangeLog --- 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 + + * 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 * fringe.c (init_fringe_bitmap) [MAC_OS, WORDS_BIG_ENDIAN]: diff -r 7d8c228c1f02 -r 922b1cbf208b src/macterm.c --- 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