Skip to content

Commit dc8d8c8

Browse files
committed
feat: allow using middle mouse button for aim #185
1 parent 3d569ec commit dc8d8c8

4 files changed

Lines changed: 22 additions & 2 deletions

File tree

app/src/main/cpp/mouse_read.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ void* send_mouse_events(void* context) {
9090
case REL_WHEEL :
9191
case BTN_MOUSE :
9292
case BTN_RIGHT :
93+
case BTN_MIDDLE :
9394
case BTN_EXTRA :
9495
case BTN_SIDE :
9596
if (mouse_lock) (*env)->CallVoidMethod(env, pctx->inputServiceObj, mouseEvent, ie.code, ie.value);

app/src/main/java/xtr/keymapper/editor/SettingsOverlay.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import android.content.Context;
44
import android.os.Build;
5+
import android.view.InputDevice;
56
import android.view.KeyEvent;
67
import android.view.LayoutInflater;
78
import android.view.Menu;
89
import android.view.MenuItem;
10+
import android.view.MotionEvent;
911
import android.view.View;
1012
import android.view.ViewGroup;
1113
import android.view.WindowManager;
@@ -96,6 +98,20 @@ private void init() {
9698
binding.switchProfile.setOnKeyListener(SettingsOverlay::onKey);
9799
binding.mouseAimKey.setOnKeyListener(SettingsOverlay::onKey);
98100

101+
binding.mouseAimKey.setOnGenericMotionListener((v, event) -> {
102+
// Handle middle mouse button
103+
if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
104+
if (event.getAction() == MotionEvent.ACTION_BUTTON_PRESS) {
105+
if (event.getActionButton() == MotionEvent.BUTTON_TERTIARY) {
106+
// Middle mouse button was pressed
107+
((EditText) v).setText("MMB");
108+
return true;
109+
}
110+
}
111+
}
112+
return false; // Event not handled
113+
});
114+
99115

100116
mouseAimActions();
101117
loadTouchpadInputSettings();
@@ -299,6 +315,7 @@ public void onRegisterKeyEventListener() {
299315
}
300316

301317
public void onUnRegisterKeyEventListener() {
318+
// Accept key events from View
302319
binding.launchEditor.setOnKeyListener(SettingsOverlay::onKey);
303320
binding.pauseResume.setOnKeyListener(SettingsOverlay::onKey);
304321
binding.switchProfile.setOnKeyListener(SettingsOverlay::onKey);

app/src/main/java/xtr/keymapper/server/RemoteService.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,6 @@ public void init() {
102102

103103
} catch (Exception ex) {
104104
Log.e(TAG, ex.getMessage(), ex);
105-
Log.e(TAG, e.getMessage(), e);
106105
}
107106
System.exit(1);
108107
});

app/src/main/java/xtr/keymapper/server/event/MouseEventHandler.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import android.os.RemoteException;
1414
import android.util.Log;
1515

16+
import java.util.Objects;
17+
1618
import xtr.keymapper.keymap.KeymapConfig;
1719
import xtr.keymapper.mouse.MouseAimHandler;
1820
import xtr.keymapper.mouse.MousePinchZoom;
@@ -191,7 +193,8 @@ private void handleMouseEvent(int code, int value) {
191193
case BTN_EXTRA:
192194
case BTN_SIDE:
193195
case BTN_MIDDLE:
194-
if (value == 1) triggerMouseAim();
196+
if (value == 1 && Objects.equals(mInput.getKeymapConfig().mouseAimShortcutKey, "KEY_MMB"))
197+
triggerMouseAim();
195198

196199
case REL_WHEEL:
197200
if (mInput.getKeyEventHandler().ctrlKeyPressed && keymapConfig.ctrlMouseWheelZoom)

0 commit comments

Comments
 (0)