From 4b2ce2fd665595e610523c62c928835c046ecabe Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Fri, 25 Sep 2015 13:45:38 -0700 Subject: Forward mouseevents to the terminal when appropriate. Only handle mouse events locally if shift is held. Partially fixes #225. Still need to figure out mouse wheel forwarding and proper copy support when the terminal is handling selection itself (ie in an editor). --- app/src/main/java/de/mud/terminal/VDUInput.java | 3 +- app/src/main/java/de/mud/terminal/vt320.java | 3 +- .../main/java/org/connectbot/ConsoleActivity.java | 75 +++++++++++++++++----- 3 files changed, 60 insertions(+), 21 deletions(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/de/mud/terminal/VDUInput.java b/app/src/main/java/de/mud/terminal/VDUInput.java index 43c88de..abaa70f 100644 --- a/app/src/main/java/de/mud/terminal/VDUInput.java +++ b/app/src/main/java/de/mud/terminal/VDUInput.java @@ -61,9 +61,8 @@ public interface VDUInput { * of the release. * @param x * @param y - * @param modifiers */ - void mouseReleased(int x, int y, int modifiers); + void mouseReleased(int x, int y); /** * Override the standard key codes used by the terminal emulation. diff --git a/app/src/main/java/de/mud/terminal/vt320.java b/app/src/main/java/de/mud/terminal/vt320.java index 73369af..c094a9e 100644 --- a/app/src/main/java/de/mud/terminal/vt320.java +++ b/app/src/main/java/de/mud/terminal/vt320.java @@ -376,9 +376,8 @@ public void setScreenSize(int c, int r, boolean broadcast) { * of the release. * @param x * @param y - * @param modifiers */ - public void mouseReleased(int x, int y, int modifiers) { + public void mouseReleased(int x, int y) { if (mouserpt == 0) return; diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 5258bef..2f926e1 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -30,6 +30,7 @@ import org.connectbot.service.TerminalKeyListener; import org.connectbot.service.TerminalManager; import org.connectbot.util.PreferenceConstants; +import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.Dialog; import android.content.ComponentName; @@ -743,31 +744,39 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne pager.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { + TerminalBridge bridge = adapter.getCurrentTerminalView().bridge; + int row = (int) Math.floor(event.getY() / bridge.charHeight); + int col = (int) Math.floor(event.getX() / bridge.charWidth); // Handle mouse-specific actions. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH && - MotionEventCompat.getSource(event) == InputDevice.SOURCE_MOUSE && - event.getAction() == MotionEvent.ACTION_DOWN) { - switch (event.getButtonState()) { - case MotionEvent.BUTTON_PRIMARY: - // Automatically start copy mode if using a mouse. - startCopyMode(); - break; - case MotionEvent.BUTTON_SECONDARY: - openContextMenu(pager); - return true; - case MotionEvent.BUTTON_TERTIARY: - // Middle click pastes. - pasteIntoTerminal(); - return true; + MotionEventCompat.getSource(event) == InputDevice.SOURCE_MOUSE) { + int meta = event.getMetaState(); + boolean shiftOn = (event.getMetaState() & KeyEvent.META_SHIFT_ON) != 0; + if (shiftOn && event.getAction() == MotionEvent.ACTION_DOWN){ + switch (event.getButtonState()) { + case MotionEvent.BUTTON_PRIMARY: + // Automatically start copy mode if using a mouse. + startCopyMode(); + break; + case MotionEvent.BUTTON_SECONDARY: + openContextMenu(pager); + return true; + case MotionEvent.BUTTON_TERTIARY: + // Middle click pastes. + pasteIntoTerminal(); + return true; + } + } else if (event.getAction() == MotionEvent.ACTION_DOWN){ + ((vt320) bridge.buffer).mousePressed( + col, row, mouseEventToJavaModifiers(event)); + } else if (event.getAction() == MotionEvent.ACTION_UP){ + ((vt320) bridge.buffer).mouseReleased(col, row); } } // when copying, highlight the area if (copySource != null && copySource.isSelectingForCopy()) { - int row = (int) Math.floor(event.getY() / copySource.charHeight); - int col = (int) Math.floor(event.getX() / copySource.charWidth); - SelectionArea area = copySource.getSelectionArea(); switch (event.getAction()) { @@ -841,6 +850,38 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne }); } + /** + * + * @param mouseEvent + * @return + */ + @TargetApi(14) + private static int mouseEventToJavaModifiers(MotionEvent mouseEvent) { + if (MotionEventCompat.getSource(mouseEvent) != InputDevice.SOURCE_MOUSE) return 0; + + int mods = 0; + + // See http://docs.oracle.com/javase/7/docs/api/constant-values.html + int buttonState = mouseEvent.getButtonState(); + if ((buttonState & MotionEvent.BUTTON_PRIMARY) != 0) + mods |= 16; + if ((buttonState & MotionEvent.BUTTON_SECONDARY) != 0) + mods |= 8; + if ((buttonState & MotionEvent.BUTTON_TERTIARY) != 0) + mods |= 4; + + // Note: Meta and Ctrl are intentionally swapped here to keep logic in vt320 simple. + int meta = mouseEvent.getMetaState(); + if ((meta & KeyEvent.META_META_ON) != 0) + mods |= 2; + if ((meta & KeyEvent.META_SHIFT_ON) != 0) + mods |= 1; + if ((meta & KeyEvent.META_CTRL_ON) != 0) + mods |= 4; + + return mods; + } + /** * Ties the {@link TabLayout} to the {@link ViewPager}. * -- cgit v1.2.3 From 4255b573c13f4f76f4aec515dd78688f428d871a Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Fri, 25 Sep 2015 14:38:29 -0700 Subject: Handle mouse events when the terminal won't. Add more comments. --- app/src/main/java/de/mud/terminal/vt320.java | 4 ++++ app/src/main/java/org/connectbot/ConsoleActivity.java | 13 +++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/de/mud/terminal/vt320.java b/app/src/main/java/de/mud/terminal/vt320.java index c094a9e..4f36f28 100644 --- a/app/src/main/java/de/mud/terminal/vt320.java +++ b/app/src/main/java/de/mud/terminal/vt320.java @@ -336,6 +336,10 @@ public void setScreenSize(int c, int r, boolean broadcast) { this(80, 24); } + public boolean isMouseReportEnabled() { + return mouserpt != 0; + } + /** * Terminal is mouse-aware and requires (x,y) coordinates of * on the terminal (character coordinates) and the button clicked. diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 2f926e1..5a73fd6 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -753,7 +753,10 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne MotionEventCompat.getSource(event) == InputDevice.SOURCE_MOUSE) { int meta = event.getMetaState(); boolean shiftOn = (event.getMetaState() & KeyEvent.META_SHIFT_ON) != 0; - if (shiftOn && event.getAction() == MotionEvent.ACTION_DOWN){ + boolean mouseReport = ((vt320) bridge.buffer).isMouseReportEnabled(); + + // MouseReport can be "defeated" using the shift key. + if ((!mouseReport || shiftOn) && event.getAction() == MotionEvent.ACTION_DOWN){ switch (event.getButtonState()) { case MotionEvent.BUTTON_PRIMARY: // Automatically start copy mode if using a mouse. @@ -851,9 +854,11 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne } /** - * - * @param mouseEvent - * @return + * Takes an android mouse event and produces a Java InputEvent modifiers int which can be + * passed to vt320. + * @param mouseEvent The {@link MotionEvent} which should be a mouse click or release. + * @return A Java InputEvent modifier int. See + * http://docs.oracle.com/javase/7/docs/api/java/awt/event/InputEvent.html */ @TargetApi(14) private static int mouseEventToJavaModifiers(MotionEvent mouseEvent) { -- cgit v1.2.3 From e4e3047bd5e9c8e010041aec196a77797e420332 Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Fri, 25 Sep 2015 15:32:12 -0700 Subject: Add support for mouse wheel forwarding. --- app/src/main/java/de/mud/terminal/VDUInput.java | 11 ++++++++ app/src/main/java/de/mud/terminal/vt320.java | 32 ++++++++++++++++++++++ app/src/main/java/org/connectbot/TerminalView.java | 16 ++++++++++- 3 files changed, 58 insertions(+), 1 deletion(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/de/mud/terminal/VDUInput.java b/app/src/main/java/de/mud/terminal/VDUInput.java index abaa70f..e1bce90 100644 --- a/app/src/main/java/de/mud/terminal/VDUInput.java +++ b/app/src/main/java/de/mud/terminal/VDUInput.java @@ -56,6 +56,17 @@ public interface VDUInput { */ void mousePressed(int x, int y, int modifiers); + /** + * Passes mouse wheel events to the terminal. + * @param down True if scrolling down the page. False if scrolling up. + * @param x + * @param y + * @param ctrl + * @param shift + * @param meta + */ + public void mouseWheel(boolean down, int x, int y, boolean ctrl, boolean shift, boolean meta); + /** * Terminal is mouse-aware and requires the coordinates and button * of the release. diff --git a/app/src/main/java/de/mud/terminal/vt320.java b/app/src/main/java/de/mud/terminal/vt320.java index 4f36f28..90c7403 100644 --- a/app/src/main/java/de/mud/terminal/vt320.java +++ b/app/src/main/java/de/mud/terminal/vt320.java @@ -375,6 +375,38 @@ public void setScreenSize(int c, int r, boolean broadcast) { write(b); // FIXME: writeSpecial here } + /** + * Passes mouse wheel events to the terminal. + * @param down True if scrolling down the page. False if scrolling up. + * @param x + * @param y + * @param ctrl + * @param shift + * @param meta + */ + public void mouseWheel(boolean down, int x, int y, boolean ctrl, boolean shift, boolean meta) { + if (mouserpt == 0 || mouserpt == 9) + return; + + int mods = 0; + if (ctrl) mods |= 2; + if (shift) mods |= 1; + if (meta) mods |= 4; + + int mousecode = ((down ? 0 : 1) + 96) | 0x20 | ((mods & 7) << 2); + + byte b[] = new byte[6]; + + b[0] = 27; + b[1] = (byte) '['; + b[2] = (byte) 'M'; + b[3] = (byte) mousecode; + b[4] = (byte) (0x20 + x + 1); + b[5] = (byte) (0x20 + y + 1); + + write(b); // FIXME: writeSpecial here + } + /** * Terminal is mouse-aware and requires the coordinates and button * of the release. diff --git a/app/src/main/java/org/connectbot/TerminalView.java b/app/src/main/java/org/connectbot/TerminalView.java index 261407c..ffe8d8b 100644 --- a/app/src/main/java/org/connectbot/TerminalView.java +++ b/app/src/main/java/org/connectbot/TerminalView.java @@ -52,6 +52,7 @@ import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.widget.Toast; import de.mud.terminal.VDUBuffer; +import de.mud.terminal.vt320; /** * User interface {@link View} for showing a TerminalBridge in an @@ -329,7 +330,20 @@ public class TerminalView extends View implements FontSizeChangedListener { case MotionEvent.ACTION_SCROLL: // Process scroll wheel movement: float yDistance = MotionEventCompat.getAxisValue(event, MotionEvent.AXIS_VSCROLL); - if (yDistance != 0) { + boolean mouseReport = ((vt320) bridge.buffer).isMouseReportEnabled(); + if (mouseReport) { + int row = (int) Math.floor(event.getY() / bridge.charHeight); + int col = (int) Math.floor(event.getX() / bridge.charWidth); + + ((vt320) bridge.buffer).mouseWheel( + yDistance > 0, + col, + row, + (event.getMetaState() & KeyEvent.META_CTRL_ON) != 0, + (event.getMetaState() & KeyEvent.META_SHIFT_ON) != 0, + (event.getMetaState() & KeyEvent.META_META_ON) != 0); + return true; + } else if (yDistance != 0) { int base = bridge.buffer.getWindowBase(); bridge.buffer.setWindowBase(base - Math.round(yDistance)); return true; -- cgit v1.2.3 From aa2f25d977eb60c40bb05978a1e9826cd45b5552 Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Fri, 25 Sep 2015 15:34:44 -0700 Subject: Lint fix --- app/src/main/java/org/connectbot/ConsoleActivity.java | 6 +++--- app/src/main/java/org/connectbot/TerminalView.java | 5 +++++ 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 5a73fd6..0ee6a5a 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -756,7 +756,7 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne boolean mouseReport = ((vt320) bridge.buffer).isMouseReportEnabled(); // MouseReport can be "defeated" using the shift key. - if ((!mouseReport || shiftOn) && event.getAction() == MotionEvent.ACTION_DOWN){ + if ((!mouseReport || shiftOn) && event.getAction() == MotionEvent.ACTION_DOWN) { switch (event.getButtonState()) { case MotionEvent.BUTTON_PRIMARY: // Automatically start copy mode if using a mouse. @@ -770,10 +770,10 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne pasteIntoTerminal(); return true; } - } else if (event.getAction() == MotionEvent.ACTION_DOWN){ + } else if (event.getAction() == MotionEvent.ACTION_DOWN) { ((vt320) bridge.buffer).mousePressed( col, row, mouseEventToJavaModifiers(event)); - } else if (event.getAction() == MotionEvent.ACTION_UP){ + } else if (event.getAction() == MotionEvent.ACTION_UP) { ((vt320) bridge.buffer).mouseReleased(col, row); } } diff --git a/app/src/main/java/org/connectbot/TerminalView.java b/app/src/main/java/org/connectbot/TerminalView.java index ffe8d8b..e5a9558 100644 --- a/app/src/main/java/org/connectbot/TerminalView.java +++ b/app/src/main/java/org/connectbot/TerminalView.java @@ -26,6 +26,7 @@ import org.connectbot.service.FontSizeChangedListener; import org.connectbot.service.TerminalBridge; import org.connectbot.service.TerminalKeyListener; +import android.annotation.TargetApi; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; @@ -39,6 +40,7 @@ import android.graphics.PixelXorXfermode; import android.graphics.RectF; import android.net.Uri; import android.os.AsyncTask; +import android.os.Build; import android.support.v4.view.MotionEventCompat; import android.view.InputDevice; import android.view.KeyEvent; @@ -324,7 +326,10 @@ public class TerminalView extends View implements FontSizeChangedListener { } @Override + @TargetApi(12) public boolean onGenericMotionEvent(MotionEvent event) { + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB) return false; + if ((MotionEventCompat.getSource(event) & InputDevice.SOURCE_CLASS_POINTER) != 0) { switch (event.getAction()) { case MotionEvent.ACTION_SCROLL: -- cgit v1.2.3 From a11834b6021b2d943efeee73b1af38179dcea5a4 Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Tue, 29 Sep 2015 16:48:05 -0700 Subject: Add support for mouse move event forwarding. --- app/src/main/java/de/mud/terminal/vt320.java | 67 +++++++++++++++++----- .../main/java/org/connectbot/ConsoleActivity.java | 40 ++++++++----- 2 files changed, 79 insertions(+), 28 deletions(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/de/mud/terminal/vt320.java b/app/src/main/java/de/mud/terminal/vt320.java index 90c7403..ab4a90d 100644 --- a/app/src/main/java/de/mud/terminal/vt320.java +++ b/app/src/main/java/de/mud/terminal/vt320.java @@ -385,26 +385,63 @@ public void setScreenSize(int c, int r, boolean broadcast) { * @param meta */ public void mouseWheel(boolean down, int x, int y, boolean ctrl, boolean shift, boolean meta) { - if (mouserpt == 0 || mouserpt == 9) - return; + if (mouserpt == 0 || mouserpt == 9) + return; + + int mods = 0; + if (ctrl) mods |= 16; + if (shift) mods |= 4; + if (meta) mods |= 8; + + int mousecode = ((down ? 0 : 1) + 96) | 0x20 | mods; + + byte b[] = new byte[6]; + + b[0] = 27; + b[1] = (byte) '['; + b[2] = (byte) 'M'; + b[3] = (byte) mousecode; + b[4] = (byte) (0x20 + x + 1); + b[5] = (byte) (0x20 + y + 1); + + write(b); // FIXME: writeSpecial here + } + + /** + * Passes mouse move events to the terminal. + * @param button The mouse button pressed. 3 indicates no button is pressed. + * @param x + * @param y + * @param ctrl + * @param shift + * @param meta + */ + public void mouseMoved(int button, int x, int y, boolean ctrl, boolean shift, boolean meta) { + if (mouserpt != 1002 && mouserpt != 1003) + return; - int mods = 0; - if (ctrl) mods |= 2; - if (shift) mods |= 1; - if (meta) mods |= 4; + // 1002 only reports drags. 1003 reports any movement. + if (mouserpt == 1002 && button == 3) + return; - int mousecode = ((down ? 0 : 1) + 96) | 0x20 | ((mods & 7) << 2); + int mods = 0; + if (ctrl) mods |= 16; + if (shift) mods |= 4; + if (meta) mods |= 8; - byte b[] = new byte[6]; + // Normal mouse code plus additional 32 to indicate movement. + int mousecode = (button + 0x40) | mods; - b[0] = 27; - b[1] = (byte) '['; - b[2] = (byte) 'M'; - b[3] = (byte) mousecode; - b[4] = (byte) (0x20 + x + 1); - b[5] = (byte) (0x20 + y + 1); + byte b[] = new byte[6]; - write(b); // FIXME: writeSpecial here + b[0] = 27; + b[1] = (byte) '['; + b[2] = (byte) 'M'; + b[3] = (byte) mousecode; + b[4] = (byte) (0x20 + x + 1); + b[5] = (byte) (0x20 + y + 1); + + write(b); // FIXME: writeSpecial here } /** diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 0ee6a5a..66617f2 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -756,25 +756,39 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne boolean mouseReport = ((vt320) bridge.buffer).isMouseReportEnabled(); // MouseReport can be "defeated" using the shift key. - if ((!mouseReport || shiftOn) && event.getAction() == MotionEvent.ACTION_DOWN) { - switch (event.getButtonState()) { - case MotionEvent.BUTTON_PRIMARY: - // Automatically start copy mode if using a mouse. - startCopyMode(); - break; - case MotionEvent.BUTTON_SECONDARY: - openContextMenu(pager); - return true; - case MotionEvent.BUTTON_TERTIARY: - // Middle click pastes. - pasteIntoTerminal(); - return true; + if ((!mouseReport || shiftOn)) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + switch (event.getButtonState()) { + case MotionEvent.BUTTON_PRIMARY: + // Automatically start copy mode if using a mouse. + startCopyMode(); + break; + case MotionEvent.BUTTON_SECONDARY: + openContextMenu(pager); + return true; + case MotionEvent.BUTTON_TERTIARY: + // Middle click pastes. + pasteIntoTerminal(); + return true; + } } } else if (event.getAction() == MotionEvent.ACTION_DOWN) { ((vt320) bridge.buffer).mousePressed( col, row, mouseEventToJavaModifiers(event)); } else if (event.getAction() == MotionEvent.ACTION_UP) { ((vt320) bridge.buffer).mouseReleased(col, row); + } else if (event.getAction() == MotionEvent.ACTION_MOVE) { + int buttonState = event.getButtonState(); + int button = (buttonState & MotionEvent.BUTTON_PRIMARY) != 0 ? 0 : + (buttonState & MotionEvent.BUTTON_SECONDARY) != 0 ? 1 : + (buttonState & MotionEvent.BUTTON_TERTIARY) != 0 ? 2 : 3; + ((vt320) bridge.buffer).mouseMoved( + button, + col, + row, + (event.getMetaState() & KeyEvent.META_CTRL_ON) != 0, + (event.getMetaState() & KeyEvent.META_SHIFT_ON) != 0, + (event.getMetaState() & KeyEvent.META_META_ON) != 0); } } -- cgit v1.2.3 From 5f3101b7ed33e53ab33c8df3c73ccd7f7b5fd31f Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Thu, 1 Oct 2015 10:39:14 -0700 Subject: More lint fixes. --- .../main/java/org/connectbot/ConsoleActivity.java | 99 +++++++++++++--------- 1 file changed, 59 insertions(+), 40 deletions(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/org/connectbot/ConsoleActivity.java b/app/src/main/java/org/connectbot/ConsoleActivity.java index 66617f2..d628a07 100644 --- a/app/src/main/java/org/connectbot/ConsoleActivity.java +++ b/app/src/main/java/org/connectbot/ConsoleActivity.java @@ -745,56 +745,20 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne public boolean onTouch(View v, MotionEvent event) { TerminalBridge bridge = adapter.getCurrentTerminalView().bridge; - int row = (int) Math.floor(event.getY() / bridge.charHeight); - int col = (int) Math.floor(event.getX() / bridge.charWidth); // Handle mouse-specific actions. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH && MotionEventCompat.getSource(event) == InputDevice.SOURCE_MOUSE) { - int meta = event.getMetaState(); - boolean shiftOn = (event.getMetaState() & KeyEvent.META_SHIFT_ON) != 0; - boolean mouseReport = ((vt320) bridge.buffer).isMouseReportEnabled(); - - // MouseReport can be "defeated" using the shift key. - if ((!mouseReport || shiftOn)) { - if (event.getAction() == MotionEvent.ACTION_DOWN) { - switch (event.getButtonState()) { - case MotionEvent.BUTTON_PRIMARY: - // Automatically start copy mode if using a mouse. - startCopyMode(); - break; - case MotionEvent.BUTTON_SECONDARY: - openContextMenu(pager); - return true; - case MotionEvent.BUTTON_TERTIARY: - // Middle click pastes. - pasteIntoTerminal(); - return true; - } - } - } else if (event.getAction() == MotionEvent.ACTION_DOWN) { - ((vt320) bridge.buffer).mousePressed( - col, row, mouseEventToJavaModifiers(event)); - } else if (event.getAction() == MotionEvent.ACTION_UP) { - ((vt320) bridge.buffer).mouseReleased(col, row); - } else if (event.getAction() == MotionEvent.ACTION_MOVE) { - int buttonState = event.getButtonState(); - int button = (buttonState & MotionEvent.BUTTON_PRIMARY) != 0 ? 0 : - (buttonState & MotionEvent.BUTTON_SECONDARY) != 0 ? 1 : - (buttonState & MotionEvent.BUTTON_TERTIARY) != 0 ? 2 : 3; - ((vt320) bridge.buffer).mouseMoved( - button, - col, - row, - (event.getMetaState() & KeyEvent.META_CTRL_ON) != 0, - (event.getMetaState() & KeyEvent.META_SHIFT_ON) != 0, - (event.getMetaState() & KeyEvent.META_META_ON) != 0); + if (onMouseEvent(event, bridge)) { + return true; } } // when copying, highlight the area if (copySource != null && copySource.isSelectingForCopy()) { SelectionArea area = copySource.getSelectionArea(); + int row = (int) Math.floor(event.getY() / bridge.charHeight); + int col = (int) Math.floor(event.getX() / bridge.charWidth); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: @@ -864,6 +828,61 @@ public class ConsoleActivity extends AppCompatActivity implements BridgeDisconne return detect.onTouchEvent(event); } + /** + * @param event + * @param bridge + * @return True if the event is handled. + */ + @TargetApi(14) + private boolean onMouseEvent(MotionEvent event, TerminalBridge bridge) { + int row = (int) Math.floor(event.getY() / bridge.charHeight); + int col = (int) Math.floor(event.getX() / bridge.charWidth); + int meta = event.getMetaState(); + boolean shiftOn = (meta & KeyEvent.META_SHIFT_ON) != 0; + boolean mouseReport = ((vt320) bridge.buffer).isMouseReportEnabled(); + + // MouseReport can be "defeated" using the shift key. + if ((!mouseReport || shiftOn)) { + if (event.getAction() == MotionEvent.ACTION_DOWN) { + switch (event.getButtonState()) { + case MotionEvent.BUTTON_PRIMARY: + // Automatically start copy mode if using a mouse. + startCopyMode(); + break; + case MotionEvent.BUTTON_SECONDARY: + openContextMenu(pager); + return true; + case MotionEvent.BUTTON_TERTIARY: + // Middle click pastes. + pasteIntoTerminal(); + return true; + } + } + } else if (event.getAction() == MotionEvent.ACTION_DOWN) { + ((vt320) bridge.buffer).mousePressed( + col, row, mouseEventToJavaModifiers(event)); + return true; + } else if (event.getAction() == MotionEvent.ACTION_UP) { + ((vt320) bridge.buffer).mouseReleased(col, row); + return true; + } else if (event.getAction() == MotionEvent.ACTION_MOVE) { + int buttonState = event.getButtonState(); + int button = (buttonState & MotionEvent.BUTTON_PRIMARY) != 0 ? 0 : + (buttonState & MotionEvent.BUTTON_SECONDARY) != 0 ? 1 : + (buttonState & MotionEvent.BUTTON_TERTIARY) != 0 ? 2 : 3; + ((vt320) bridge.buffer).mouseMoved( + button, + col, + row, + (meta & KeyEvent.META_CTRL_ON) != 0, + (meta & KeyEvent.META_SHIFT_ON) != 0, + (meta & KeyEvent.META_META_ON) != 0); + return true; + } + + return false; + } + }); } -- cgit v1.2.3 From d531902ab57cdca8f4b40ecc4bbf290b56562649 Mon Sep 17 00:00:00 2001 From: Jeremy Klein Date: Thu, 1 Oct 2015 14:55:43 -0700 Subject: Remove unnecessary version check. --- app/src/main/java/org/connectbot/TerminalView.java | 3 --- 1 file changed, 3 deletions(-) (limited to 'app/src/main/java') diff --git a/app/src/main/java/org/connectbot/TerminalView.java b/app/src/main/java/org/connectbot/TerminalView.java index e5a9558..7c4f51f 100644 --- a/app/src/main/java/org/connectbot/TerminalView.java +++ b/app/src/main/java/org/connectbot/TerminalView.java @@ -40,7 +40,6 @@ import android.graphics.PixelXorXfermode; import android.graphics.RectF; import android.net.Uri; import android.os.AsyncTask; -import android.os.Build; import android.support.v4.view.MotionEventCompat; import android.view.InputDevice; import android.view.KeyEvent; @@ -328,8 +327,6 @@ public class TerminalView extends View implements FontSizeChangedListener { @Override @TargetApi(12) public boolean onGenericMotionEvent(MotionEvent event) { - if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.HONEYCOMB) return false; - if ((MotionEventCompat.getSource(event) & InputDevice.SOURCE_CLASS_POINTER) != 0) { switch (event.getAction()) { case MotionEvent.ACTION_SCROLL: -- cgit v1.2.3