diff --git a/src/rime/service.cc b/src/rime/service.cc index e40493ae92..1df78e9c56 100644 --- a/src/rime/service.cc +++ b/src/rime/service.cc @@ -64,6 +64,10 @@ Schema* Session::schema() const { return engine_ ? engine_->active_engine()->schema() : NULL; } +Schema* Session::inactiveSchema() const { + return engine_ ? engine_->schema() : NULL; +} + Service::Service() { deployer_.message_sink().connect( [this](auto type, auto value) { Notify(0, type, value); }); diff --git a/src/rime/service.h b/src/rime/service.h index 2b3111afac..a0f291c2e7 100644 --- a/src/rime/service.h +++ b/src/rime/service.h @@ -42,6 +42,7 @@ class Session { Context* context() const; Schema* schema() const; + Schema* inactiveSchema() const; time_t last_active_time() const { return last_active_time_; } const string& commit_text() const { return commit_text_; } diff --git a/src/rime_api_impl.h b/src/rime_api_impl.h index 7749ce98bc..d018f241c5 100644 --- a/src/rime_api_impl.h +++ b/src/rime_api_impl.h @@ -1103,7 +1103,7 @@ static RimeStringSlice RimeGetStateLabelAbbreviated(RimeSessionId session_id, an session(Service::instance().GetSession(session_id)); if (!session) return {nullptr, 0}; - Config* config = session->schema()->config(); + Config* config = session->inactiveSchema()->config(); if (!config) return {nullptr, 0}; Switches switches(config); diff --git a/tools/rime_api_console.cc b/tools/rime_api_console.cc index 5360ad9f71..3c99efcf6e 100644 --- a/tools/rime_api_console.cc +++ b/tools/rime_api_console.cc @@ -162,6 +162,14 @@ bool execute_special_command(const char* line, RimeSessionId session_id) { printf("%s set %s.\n", option, is_on ? "on" : "off"); return true; } + + if (!strcmp(line, "switcher")) { + // 0xffc1 = f4 + rime -> process_key(session_id, 0xffc1, 0); + print(session_id); + return true; + } + if (!strcmp(line, "synchronize")) { return rime->sync_user_data(); }