From 4c3fc8cc7c772b1c3ea57908439aaac1a3ec55a9 Mon Sep 17 00:00:00 2001 From: Folcon Date: Fri, 20 Mar 2026 07:32:31 +0000 Subject: [PATCH 1/2] Added setPressAndHoldEnabled to allow users to toggle that behaviour on the Mac #303 --- CHANGELOG.md | 4 ++++ macos/cc/WindowMac.mm | 5 +++++ macos/java/WindowMac.java | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43ed1f71..d60c3e5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.4.25 - Mar 20, 2026 + +- Added setPressAndHoldEnabled to allow users to toggle that behaviour on the Mac #303 + # 0.4.24 - Feb 24, 2026 - Strip absolute paths from binaries #302 diff --git a/macos/cc/WindowMac.mm b/macos/cc/WindowMac.mm index bfb08a25..b013294e 100644 --- a/macos/cc/WindowMac.mm +++ b/macos/cc/WindowMac.mm @@ -654,3 +654,8 @@ static CVReturn displayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt jwm::WindowMac* instance = reinterpret_cast(jwm::classes::Native::fromJava(env, obj)); instance->close(); } + +extern "C" JNIEXPORT void JNICALL Java_io_github_humbleui_jwm_WindowMac__1nSetPressAndHoldEnabled + (JNIEnv *env, jclass cls, jboolean enabled) { + jwm::kPressAndHoldEnabled = enabled; +} diff --git a/macos/java/WindowMac.java b/macos/java/WindowMac.java index 645be065..de8ab625 100644 --- a/macos/java/WindowMac.java +++ b/macos/java/WindowMac.java @@ -296,6 +296,11 @@ public void close() { super.close(); } + public static void setPressAndHoldEnabled(boolean enabled) { + assert _onUIThread() : "Should be run on UI thread"; + _nSetPressAndHoldEnabled(enabled); + } + @ApiStatus.Internal public static native long _nMake(); @ApiStatus.Internal public native IRect _nGetWindowRect(); @ApiStatus.Internal public native IRect _nGetContentRect(); @@ -328,4 +333,5 @@ public void close() { @ApiStatus.Internal public native void _nSetZOrder(int zOrder); @ApiStatus.Internal public native void _nSetProgressBar(float value); @ApiStatus.Internal public native void _nClose(); + @ApiStatus.Internal public static native void _nSetPressAndHoldEnabled(boolean enabled); } From 80456b68853a8a1d911acb1a891f6db33ec8524c Mon Sep 17 00:00:00 2001 From: Folcon Date: Sun, 22 Mar 2026 04:37:08 +0000 Subject: [PATCH 2/2] Use kPressAndHoldEnabled to decide to use the complex input or manually deliver input This allows supporting the macos accent popup and keyrepeat --- macos/cc/JWMMainView.mm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/macos/cc/JWMMainView.mm b/macos/cc/JWMMainView.mm index 126f7f65..120d668d 100644 --- a/macos/cc/JWMMainView.mm +++ b/macos/cc/JWMMainView.mm @@ -516,7 +516,17 @@ - (void)keyDown:(NSEvent *)event { } // Allow TSM to look at the event and potentially send back NSTextInputClient messages. - [self interpretKeyEvents:[NSArray arrayWithObject:event]]; + if (jwm::kPressAndHoldEnabled) { + [self interpretKeyEvents:[NSArray arrayWithObject:event]]; + } else { + // Bypass text input system to avoid press-and-hold popup, + // but still deliver typed characters + NSString *characters = [event characters]; + if ([characters length] > 0) { + [self insertText:characters replacementRange:NSMakeRange(NSNotFound, + 0)]; + } + } if (wasInPressAndHold) { switch(keyCode) {