Make a new JNI method focusOutIn

less overhead than calling into native twice
This commit is contained in:
Rocka 2025-11-09 02:54:18 +08:00
parent 4a955a1959
commit 23c4d318b6
No known key found for this signature in database
GPG Key ID: 28031158FFDD6853
4 changed files with 16 additions and 4 deletions

View File

@ -992,6 +992,15 @@ Java_org_fcitx_fcitx5_android_core_Fcitx_focusInputContext(JNIEnv *env, jclass c
Fcitx::Instance().focusInputContext(focus);
}
extern "C"
JNIEXPORT void JNICALL
Java_org_fcitx_fcitx5_android_core_Fcitx_focusInputContextOutIn(JNIEnv *env, jclass clazz) {
RETURN_IF_NOT_RUNNING
auto& instance = Fcitx::Instance();
instance.focusInputContext(false);
instance.focusInputContext(true);
}
extern "C"
JNIEXPORT void JNICALL
Java_org_fcitx_fcitx5_android_core_Fcitx_activateInputContext(JNIEnv *env, jclass clazz, jint uid, jstring pkg_name) {

View File

@ -165,6 +165,7 @@ class Fcitx(private val context: Context) : FcitxAPI, FcitxLifecycleOwner {
withFcitxContext { setFcitxClipboard(string, password) }
override suspend fun focus(focus: Boolean) = withFcitxContext { focusInputContext(focus) }
override suspend fun focusOutIn() = withFcitxContext { focusInputContextOutIn() }
override suspend fun activate(uid: Int, pkgName: String) =
withFcitxContext { activateInputContext(uid, pkgName) }
@ -344,6 +345,9 @@ class Fcitx(private val context: Context) : FcitxAPI, FcitxLifecycleOwner {
@JvmStatic
external fun focusInputContext(focus: Boolean)
@JvmStatic
external fun focusInputContextOutIn()
@JvmStatic
external fun activateInputContext(uid: Int, pkgName: String)

View File

@ -91,6 +91,7 @@ interface FcitxAPI {
suspend fun triggerUnicode()
suspend fun focus(focus: Boolean = true)
suspend fun focusOutIn()
suspend fun activate(uid: Int, pkgName: String)
suspend fun deactivate(uid: Int)
suspend fun setCapFlags(flags: CapabilityFlags)

View File

@ -843,8 +843,7 @@ class FcitxInputMethodService : LifecycleInputMethodService() {
// `fcitx.reset()` here would commit preedit after new cursor position
// since we have `ClientUnfocusCommit`, focus out and in would do the trick
postFcitxJob {
focus(false)
focus(true)
focusOutIn()
}
}
}
@ -992,8 +991,7 @@ class FcitxInputMethodService : LifecycleInputMethodService() {
}
resetComposingState()
postFcitxJob {
focus(false)
focus(true)
focusOutIn()
}
showingDialog?.dismiss()
}