diff --git a/app/src/main/java/com/termux/x11/input/InputEventSender.java b/app/src/main/java/com/termux/x11/input/InputEventSender.java index e03f339fd..4836315df 100644 --- a/app/src/main/java/com/termux/x11/input/InputEventSender.java +++ b/app/src/main/java/com/termux/x11/input/InputEventSender.java @@ -18,6 +18,7 @@ import java.util.List; import java.util.TreeSet; +import java.util.function.Consumer; /** * A set of functions to send users' activities, which are represented by Android classes, to @@ -39,6 +40,9 @@ public final class InputEventSender { public boolean pauseKeyInterceptingWithEsc = false; public boolean stylusIsMouse = false; public boolean stylusButtonContactModifierMode = false; + public boolean ctrlAltMonitor = false; + public Consumer escapeKeyAction = (down) -> {}; + public Consumer ctrlAltKeyAction = (down) -> {}; /** Set of pressed keys for which we've sent TextEvent. */ private final TreeSet mPressedTextKeys; @@ -215,7 +219,24 @@ else if (e.getUnicodeChar() != 0) return true; if (keyCode == KEYCODE_ESCAPE && !pressed && e.hasNoModifiers()) - MainActivity.setCapturingEnabled(false); + escapeKeyAction.accept(true); + + if (!(e.isAltPressed() && e.isCtrlPressed()) && ctrlAltMonitor) { + ctrlAltMonitor = false; + ctrlAltKeyAction.accept(true); + } + if (e.isAltPressed() && e.isCtrlPressed()) + ctrlAltMonitor = true; + if (ctrlAltMonitor) + switch (keyCode) { + case KEYCODE_ALT_LEFT: + case KEYCODE_ALT_RIGHT: + case KEYCODE_CTRL_LEFT: + case KEYCODE_CTRL_RIGHT: + break; + default: + ctrlAltMonitor = false; + } // We try to send all other key codes to the host directly. return mInjector.sendKeyEvent(scancode, keyCode, pressed); diff --git a/app/src/main/java/com/termux/x11/input/TouchInputHandler.java b/app/src/main/java/com/termux/x11/input/TouchInputHandler.java index d7f7d9bea..ba80b8266 100644 --- a/app/src/main/java/com/termux/x11/input/TouchInputHandler.java +++ b/app/src/main/java/com/termux/x11/input/TouchInputHandler.java @@ -465,6 +465,8 @@ public void reloadPreferences(Prefs p) { volumeUpAction = extractUserActionFromPreferences(p, "volumeUp"); volumeDownAction = extractUserActionFromPreferences(p, "volumeDown"); backButtonAction = extractUserActionFromPreferences(p, "backButton"); + mInjector.escapeKeyAction = extractUserActionFromPreferences(p, "escapeKey"); + mInjector.ctrlAltKeyAction = extractUserActionFromPreferences(p, "ctrlAltKey"); if(mTouchpadHandler != null) mTouchpadHandler.reloadPreferences(p); diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index d91a35711..12673ae9d 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -118,7 +118,7 @@ @@ -294,5 +294,21 @@ android:defaultValue="toggle soft keyboard" android:entries="@array/userActionsValues" android:entryValues="@array/userActionsValues" /> + + + +