diff --git a/applets/kimpanel/backend/ibus/ibus15/panel.cpp b/applets/kimpanel/backend/ibus/ibus15/panel.cpp --- a/applets/kimpanel/backend/ibus/ibus15/panel.cpp +++ b/applets/kimpanel/backend/ibus/ibus15/panel.cpp @@ -505,6 +505,15 @@ } } +bool contains(gchar** strlist, const gchar* str) +{ + for (; strlist; ++strlist) { + if (g_strcmp0(*strlist, str) == 0) + return true; + } + return false; +} + static void impanel_update_engines(IBusPanelImpanel* impanel, GVariant* var_engines) { gchar** engine_names = nullptr; @@ -524,13 +533,13 @@ } IBusEngineDesc** engines = ibus_bus_get_engines_by_names(impanel->bus, engine_names); - g_strfreev(engine_names); impanel->engineManager->setEngines(engines); - if (engines && engines[0]) { + if (engines && engines[0] && !contains(engine_names, ibus_engine_desc_get_name(ibus_bus_get_global_engine(impanel->bus)))) { ibus_bus_set_global_engine(impanel->bus, ibus_engine_desc_get_name(engines[0])); } + g_strfreev(engine_names); impanel->app->setDoGrab(len > 1); }