@@ -142,14 +142,12 @@ class Fcitx {
142
142
return entries;
143
143
}
144
144
145
- InputMethodStatus inputMethodStatus () {
145
+ std::unique_ptr< InputMethodStatus> inputMethodStatus () {
146
146
auto *ic = p_frontend->call <fcitx::IAndroidFrontend::activeInputContext>();
147
- auto *engine = p_instance->inputMethodEngine (ic);
148
- const auto *entry = p_instance->inputMethodEntry (ic);
149
- if (engine) {
150
- return {entry, engine, ic};
151
- }
152
- return {entry};
147
+ if (!ic) return nullptr ;
148
+ auto *entry = p_instance->inputMethodEntry (ic);
149
+ auto *engine = static_cast <fcitx::InputMethodEngine *>(p_instance->addonManager ().addon (entry->addon (), true ));
150
+ return std::make_unique<InputMethodStatus>(entry, engine, ic);
153
151
}
154
152
155
153
void setInputMethod (const std::string &ime) {
@@ -282,9 +280,9 @@ class Fcitx {
282
280
auto &globalConfig = p_instance->globalConfig ();
283
281
auto &addonManager = p_instance->addonManager ();
284
282
const auto &enabledAddons = globalConfig.enabledAddons ();
285
- std::unordered_set<std::string> enabledSet (enabledAddons.begin (), enabledAddons.end ());
283
+ const std::unordered_set<std::string> enabledSet (enabledAddons.begin (), enabledAddons.end ());
286
284
const auto &disabledAddons = globalConfig.disabledAddons ();
287
- std::unordered_set<std::string>
285
+ const std::unordered_set<std::string>
288
286
disabledSet (disabledAddons.begin (), disabledAddons.end ());
289
287
std::vector<AddonStatus> addons;
290
288
for (const auto category: {fcitx::AddonCategory::InputMethod,
@@ -304,7 +302,7 @@ class Fcitx {
304
302
} else if (enabledSet.count (info->uniqueName ())) {
305
303
enabled = true ;
306
304
}
307
- addons.emplace_back (AddonStatus ( info, enabled) );
305
+ addons.emplace_back (info, enabled);
308
306
}
309
307
}
310
308
return addons;
@@ -390,7 +388,7 @@ class Fcitx {
390
388
fcitx::StatusGroup::InputMethod,
391
389
fcitx::StatusGroup::AfterInputMethod}) {
392
390
for (auto act: ic->statusArea ().actions (group)) {
393
- actions.emplace_back (ActionEntity ( act, ic) );
391
+ actions.emplace_back (act, ic);
394
392
}
395
393
}
396
394
return actions;
@@ -484,33 +482,33 @@ Java_org_fcitx_fcitx5_android_core_Fcitx_startupFcitx(JNIEnv *env, jclass clazz,
484
482
}
485
483
FCITX_INFO () << " Starting..." ;
486
484
487
- setenv (" SKIP_FCITX_PATH" , " true" , 1 );
488
-
489
485
auto locale_ = CString (env, locale);
490
486
auto appData_ = CString (env, appData);
491
487
auto appLib_ = CString (env, appLib);
492
488
auto extData_ = CString (env, extData);
493
489
auto extCache_ = CString (env, extCache);
494
490
495
- std::string lang_ = fcitx::stringutils::split (*locale_, " :" )[0 ];
496
- std::string config_home = fcitx::stringutils::joinPath (*extData_, " config" );
497
- std::string data_home = fcitx::stringutils::joinPath (*extData_, " data" );
498
- std::string usr_share = fcitx::stringutils::joinPath (*appData_, " usr" , " share" );
499
- std::string locale_dir = fcitx::stringutils::joinPath (usr_share, " locale" );
500
- std::string libime_data = fcitx::stringutils::joinPath (usr_share, " libime" );
501
- std::string lua_path = fcitx::stringutils::concat (
491
+ const std::string lang_ = fcitx::stringutils::split (*locale_, " :" )[0 ];
492
+ const std::string config_home = fcitx::stringutils::joinPath (*extData_, " config" );
493
+ const std::string data_home = fcitx::stringutils::joinPath (*extData_, " data" );
494
+ const std::string usr_share = fcitx::stringutils::joinPath (*appData_, " usr" , " share" );
495
+ const std::string locale_dir = fcitx::stringutils::joinPath (usr_share, " locale" );
496
+ const std::string libime_data = fcitx::stringutils::joinPath (usr_share, " libime" );
497
+ const std::string lua_path = fcitx::stringutils::concat (
502
498
fcitx::stringutils::joinPath (data_home, " lua" , " ?.lua" ), " ;" ,
503
499
fcitx::stringutils::joinPath (data_home, " lua" , " ?" , " init.lua" ), " ;" ,
504
500
fcitx::stringutils::joinPath (usr_share, " lua" , " 5.4" , " ?.lua" ), " ;" ,
505
501
fcitx::stringutils::joinPath (usr_share, " lua" , " 5.4" , " ?" , " init.lua" ), " ;" ,
506
502
" ;" // double semicolon, for default path defined in luaconf.h
507
503
);
508
- std::string lua_cpath = fcitx::stringutils::concat (
504
+ const std::string lua_cpath = fcitx::stringutils::concat (
509
505
fcitx::stringutils::joinPath (data_home, " lua" , " ?.so" ), " ;" ,
510
506
fcitx::stringutils::joinPath (usr_share, " lua" , " 5.4" , " ?.so" ), " ;" ,
511
507
" ;"
512
508
);
513
509
510
+ // prevent StandardPath from resolving it's hardcoded installation path
511
+ setenv (" SKIP_FCITX_PATH" , " 1" , 1 );
514
512
// for fcitx default profile [DefaultInputMethod]
515
513
setenv (" LANG" , lang_.c_str (), 1 );
516
514
// for libintl-lite loading gettext .mo translations
@@ -545,7 +543,7 @@ Java_org_fcitx_fcitx5_android_core_Fcitx_startupFcitx(JNIEnv *env, jclass clazz,
545
543
fcitx::registerDomain (" fcitx5-chinese-addons" , locale_dir_char);
546
544
fcitx::registerDomain (" fcitx5-android" , locale_dir_char);
547
545
548
- int extDomainsSize = env->GetArrayLength (extDomains);
546
+ const int extDomainsSize = env->GetArrayLength (extDomains);
549
547
for (int i = 0 ; i < extDomainsSize; i++) {
550
548
auto domain = JRef<jstring>(env, env->GetObjectArrayElement (extDomains, i));
551
549
fcitx::registerDomain (CString (env, domain), locale_dir_char);
@@ -604,8 +602,9 @@ Java_org_fcitx_fcitx5_android_core_Fcitx_startupFcitx(JNIEnv *env, jclass clazz,
604
602
auto imChangeCallback = []() {
605
603
auto env = GlobalRef->AttachEnv ();
606
604
auto vararg = JRef<jobjectArray>(env, env->NewObjectArray (1 , GlobalRef->Object , nullptr ));
607
- const auto status = Fcitx::Instance ().inputMethodStatus ();
608
- auto obj = JRef (env, fcitxInputMethodStatusToJObject (env, status));
605
+ std::unique_ptr<InputMethodStatus> status = Fcitx::Instance ().inputMethodStatus ();
606
+ if (!status) return ;
607
+ auto obj = JRef (env, fcitxInputMethodStatusToJObject (env, *status));
609
608
env->SetObjectArrayElement (vararg, 0 , obj);
610
609
env->CallStaticVoidMethod (GlobalRef->Fcitx , GlobalRef->HandleFcitxEvent , 6 , *vararg);
611
610
};
@@ -684,8 +683,8 @@ extern "C"
684
683
JNIEXPORT void JNICALL
685
684
Java_org_fcitx_fcitx5_android_core_Fcitx_sendKeyToFcitxChar (JNIEnv *env, jclass clazz, jchar c, jint state, jboolean up, jint timestamp) {
686
685
RETURN_IF_NOT_RUNNING
687
- fcitx::Key parsedKey{fcitx::Key::keySymFromString (( const char *) &c ),
688
- fcitx::KeyStates (static_cast <uint32_t >(state))};
686
+ const fcitx::Key parsedKey{fcitx::Key::keySymFromString (reinterpret_cast < const char *>(&c) ),
687
+ fcitx::KeyStates (static_cast <uint32_t >(state))};
689
688
Fcitx::Instance ().sendKey (parsedKey, up, timestamp);
690
689
}
691
690
@@ -753,8 +752,9 @@ extern "C"
753
752
JNIEXPORT jobject JNICALL
754
753
Java_org_fcitx_fcitx5_android_core_Fcitx_inputMethodStatus (JNIEnv *env, jclass clazz) {
755
754
RETURN_VALUE_IF_NOT_RUNNING (nullptr )
756
- const auto &status = Fcitx::Instance ().inputMethodStatus ();
757
- return fcitxInputMethodStatusToJObject (env, status);
755
+ auto status = Fcitx::Instance ().inputMethodStatus ();
756
+ if (!status) return nullptr ;
757
+ return fcitxInputMethodStatusToJObject (env, *status);
758
758
}
759
759
760
760
extern " C"
0 commit comments