ref: a25f83e3c592e6819b9edf2884e3ea1db8a96422
parent: e8b1d5b0dd83899a3c077c97a46a48db778640c5
author: Russ Cox <rsc@swtch.com>
date: Tue Jan 16 14:47:55 EST 2007
fixes from Andrey
--- a/gui-osx/screen.c
+++ b/gui-osx/screen.c
@@ -64,6 +64,8 @@
static _Rect winRect;
Boolean altPressed = false;
+Boolean button2 = false;
+Boolean button3 = false;
static int
@@ -242,7 +244,7 @@
case QZ_RIGHT: return Kright;
case QZ_KP_MULTIPLY: return '*';
case QZ_KP_DIVIDE: return '/';
- case QZ_KP_ENTER: return '\b';
+ case QZ_KP_ENTER: return '\n';
case QZ_KP_PERIOD: return '.';
case QZ_KP0: return '0';
case QZ_KP1: return '1';
@@ -332,7 +334,9 @@
result = CallNextEventHandler(nextHandler, event);
UInt32 class = GetEventClass (event);
UInt32 kind = GetEventKind (event);
- uint32_t mousebuttons = 0; // bitmask of buttons currently down
+ static uint32_t mousebuttons = 0; // bitmask of buttons currently down
+ static uint32_t mouseX = 0; // current mouse X position
+ static uint32_t mouseY = 0; // current mouse Y position
if(class == kEventClassKeyboard) {
char macCharCodes;
@@ -351,9 +355,28 @@
if(macKeyModifiers & optionKey) {
altPressed = true;
+ if(mousebuttons & 1) {
+ mousebuttons |= 2; /* set button 2 */
+ button2 = true;
+ sendbuttons(mousebuttons, mouseX, mouseY);
+ }
+ } else if(macKeyModifiers & cmdKey) {
+ if(mousebuttons & 1) {
+ mousebuttons |= 4; /* set button 3 */
+ button3 = true;
+ sendbuttons(mousebuttons, mouseX, mouseY);
+ }
} else if(altPressed) {
kbdputc(kbdq, Kalt);
altPressed = false;
+ } else if(button2) {
+ mousebuttons &= ~2; /* clear button 2 */
+ button2 = false;
+ sendbuttons(mousebuttons, mouseX, mouseY);
+ } else if(button3) {
+ mousebuttons &= ~4; /* clear button 3 */
+ button3 = false;
+ sendbuttons(mousebuttons, mouseX, mouseY);
}
break;
case kEventRawKeyDown:
@@ -380,9 +403,9 @@
int32_t wheeldelta;
GetEventParameter(event,kEventParamMouseWheelDelta,typeSInt32,
0,sizeof(wheeldelta), 0, &wheeldelta);
- sendbuttons(wheeldelta>0 ? 8 : 16,
- mousePos.h - winRect.left,
- mousePos.v - winRect.top);
+ mouseX = mousePos.h - winRect.left;
+ mouseY = mousePos.v - winRect.top;
+ sendbuttons(wheeldelta>0 ? 8 : 16, mouseX, mouseY);
break;
}
case kEventMouseUp:
@@ -392,8 +415,8 @@
uint32_t modifiers;
GetEventParameter(event, kEventParamKeyModifiers, typeUInt32,
0, sizeof(modifiers), 0, &modifiers);
- GetEventParameter(event, kEventParamMouseChord,
- typeUInt32, 0, sizeof buttons, 0, &buttons);
+ GetEventParameter(event, kEventParamMouseChord, typeUInt32,
+ 0, sizeof buttons, 0, &buttons);
/* simulate other buttons via alt/apple key. like x11 */
if(modifiers & optionKey) {
mousebuttons = ((buttons & 1) ? 2 : 0);
@@ -409,9 +432,9 @@
} /* Fallthrough */
case kEventMouseMoved:
case kEventMouseDragged:
- sendbuttons(mousebuttons,
- mousePos.h - winRect.left,
- mousePos.v - winRect.top);
+ mouseX = mousePos.h - winRect.left;
+ mouseY = mousePos.v - winRect.top;
+ sendbuttons(mousebuttons, mouseX, mouseY);
break;
default:
result = eventNotHandledErr;