Skip to content

Commit b037ebf

Browse files
authored
back/x11: report AppKit button numbers from -[NSEvent buttonNumber] (#160)
-[NSEvent buttonNumber] is documented to number the left button 0, the right button 1 and the middle button 2. The X11 backend passed the X11 button number straight through, so it reported the left button as 1, the right button as 3, and only the middle button (2) matched by coincidence. Set the button number from the AppKit event type when building the mouse event for a button press, release or drag. The X11 numbering in generic.lMouse and friends is still used to match the incoming X event.
1 parent 6afa4d3 commit b037ebf

1 file changed

Lines changed: 20 additions & 13 deletions

File tree

Source/x11/XGServerEvent.m

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -466,17 +466,20 @@ - (void) processEvent: (XEvent *) event
466466
deltaX = 0.0;
467467
deltaY = 0.0;
468468

469+
/* -[NSEvent buttonNumber] uses the AppKit numbering, where the left
470+
* button is 0, the right button is 1 and the middle button is 2,
471+
* unlike the X11 numbering held in generic.lMouse and friends. */
469472
if (xEvent.xbutton.button == generic.lMouse)
470473
{
471474
if (swapMouseButtons)
472475
{
473476
eventType = NSRightMouseDown;
474-
buttonNumber = generic.rMouse;
477+
buttonNumber = 1;
475478
}
476479
else
477480
{
478481
eventType = NSLeftMouseDown;
479-
buttonNumber = generic.lMouse;
482+
buttonNumber = 0;
480483
}
481484
}
482485
else if (xEvent.xbutton.button == generic.rMouse
@@ -485,19 +488,19 @@ - (void) processEvent: (XEvent *) event
485488
if (swapMouseButtons)
486489
{
487490
eventType = NSLeftMouseDown;
488-
buttonNumber = generic.lMouse;
491+
buttonNumber = 0;
489492
}
490493
else
491494
{
492495
eventType = NSRightMouseDown;
493-
buttonNumber = generic.rMouse;
496+
buttonNumber = 1;
494497
}
495498
}
496499
else if (xEvent.xbutton.button == generic.mMouse
497500
&& generic.mMouse != 0)
498501
{
499502
eventType = NSOtherMouseDown;
500-
buttonNumber = generic.mMouse;
503+
buttonNumber = 2;
501504
}
502505
else if (xEvent.xbutton.button == generic.upMouse
503506
&& generic.upMouse != 0)
@@ -579,7 +582,7 @@ - (void) processEvent: (XEvent *) event
579582
eventNumber: xEvent.xbutton.serial
580583
clickCount: clickCount
581584
pressure: 1.0
582-
buttonNumber: buttonNumber /* FIXME */
585+
buttonNumber: buttonNumber
583586
deltaX: deltaX
584587
deltaY: deltaY
585588
deltaZ: 0.];
@@ -594,12 +597,12 @@ - (void) processEvent: (XEvent *) event
594597
if (swapMouseButtons)
595598
{
596599
eventType = NSRightMouseUp;
597-
buttonNumber = generic.rMouse;
600+
buttonNumber = 1;
598601
}
599602
else
600603
{
601604
eventType = NSLeftMouseUp;
602-
buttonNumber = generic.lMouse;
605+
buttonNumber = 0;
603606
}
604607
}
605608
else if (xEvent.xbutton.button == generic.rMouse
@@ -608,19 +611,19 @@ - (void) processEvent: (XEvent *) event
608611
if (swapMouseButtons)
609612
{
610613
eventType = NSLeftMouseUp;
611-
buttonNumber = generic.lMouse;
614+
buttonNumber = 0;
612615
}
613616
else
614617
{
615618
eventType = NSRightMouseUp;
616-
buttonNumber = generic.rMouse;
619+
buttonNumber = 1;
617620
}
618621
}
619622
else if (xEvent.xbutton.button == generic.mMouse
620623
&& generic.mMouse != 0)
621624
{
622625
eventType = NSOtherMouseUp;
623-
buttonNumber = generic.mMouse;
626+
buttonNumber = 2;
624627
}
625628
else
626629
{
@@ -652,7 +655,7 @@ - (void) processEvent: (XEvent *) event
652655
eventNumber: xEvent.xbutton.serial
653656
clickCount: clickCount
654657
pressure: 1.0
655-
buttonNumber: buttonNumber /* FIXMME */
658+
buttonNumber: buttonNumber
656659
deltaX: 0.0
657660
deltaY: 0.0
658661
deltaZ: 0.0];
@@ -1539,18 +1542,22 @@ - (void) processEvent: (XEvent *) event
15391542
if (state & generic.lMouseMask)
15401543
{
15411544
eventType = NSLeftMouseDragged;
1545+
buttonNumber = 0;
15421546
}
15431547
else if (state & generic.rMouseMask)
15441548
{
15451549
eventType = NSRightMouseDragged;
1550+
buttonNumber = 1;
15461551
}
15471552
else if (state & generic.mMouseMask)
15481553
{
15491554
eventType = NSOtherMouseDragged;
1555+
buttonNumber = 2;
15501556
}
15511557
else
15521558
{
15531559
eventType = NSMouseMoved;
1560+
buttonNumber = 0;
15541561
}
15551562

15561563
eventFlags = process_modifier_flags(state);
@@ -1579,7 +1586,7 @@ - (void) processEvent: (XEvent *) event
15791586
eventNumber: xEvent.xbutton.serial
15801587
clickCount: clickCount
15811588
pressure: 1.0
1582-
buttonNumber: 0 /* FIXME */
1589+
buttonNumber: buttonNumber
15831590
deltaX: deltaX
15841591
deltaY: deltaY
15851592
deltaZ: 0];

0 commit comments

Comments
 (0)