From 20663ff01b91058b4e13636bd0ecb870d2dd17c1 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Thu, 22 Jun 2006 10:42:45 +0000 Subject: [PATCH] Mac OS X: Fix ctrl-click right button handling --- .../org/lwjgl/opengl/MouseEventQueue.java | 52 +++++++++++-------- 1 file changed, 31 insertions(+), 21 deletions(-) diff --git a/src/java/org/lwjgl/opengl/MouseEventQueue.java b/src/java/org/lwjgl/opengl/MouseEventQueue.java index a95820d2..8f691597 100644 --- a/src/java/org/lwjgl/opengl/MouseEventQueue.java +++ b/src/java/org/lwjgl/opengl/MouseEventQueue.java @@ -69,6 +69,9 @@ final class MouseEventQueue extends EventQueue implements MouseListener, MouseMo private int last_x; private int last_y; + /** Saved control key state for ctrl-click right button emulation */ + private boolean saved_control_state; + /** Event scratch array */ private final int[] event = new int[EVENT_SIZE]; @@ -156,27 +159,6 @@ final class MouseEventQueue extends EventQueue implements MouseListener, MouseMo } private void handleButton(MouseEvent e) { - byte button; - switch (e.getButton()) { - case MouseEvent.NOBUTTON: - // Nothing to do, so return - return; - case MouseEvent.BUTTON1: - // Emulate right click if ctrl is down - if (!e.isControlDown()) - button = (byte)0; - else - button = (byte)1; - break; - case MouseEvent.BUTTON2: - button = (byte)2; - break; - case MouseEvent.BUTTON3: - button = (byte)1; - break; - default: - throw new IllegalArgumentException("Not a valid button: " + e.getButton()); - } byte state; switch (e.getID()) { case MouseEvent.MOUSE_PRESSED: @@ -188,6 +170,34 @@ final class MouseEventQueue extends EventQueue implements MouseListener, MouseMo default: throw new IllegalArgumentException("Not a valid event ID: " + e.getID()); } + byte button; + switch (e.getButton()) { + case MouseEvent.NOBUTTON: + // Nothing to do, so return + return; + case MouseEvent.BUTTON1: + // Emulate right click if ctrl is down + if (state == 1) + saved_control_state = e.isControlDown(); + if (saved_control_state) { + if (buttons[1] == state) + return; // ignore + button = (byte)1; + } else { + button = (byte)0; + } + break; + case MouseEvent.BUTTON2: + button = (byte)2; + break; + case MouseEvent.BUTTON3: + if (buttons[1] == state) + return; // ignore + button = (byte)1; + break; + default: + throw new IllegalArgumentException("Not a valid button: " + e.getButton()); + } setButton(button, state); }