Changeset View
Changeset View
Standalone View
Standalone View
applets/kimpanel/backend/ibus/ibus15/panel.cpp
Show First 20 Lines • Show All 499 Lines • ▼ Show 20 Line(s) | 497 | } else { | |||
---|---|---|---|---|---|
500 | size_t i = 0; | 500 | size_t i = 0; | ||
501 | Q_FOREACH(const QByteArray& name, engineList) { | 501 | Q_FOREACH(const QByteArray& name, engineList) { | ||
502 | (*pengine_names)[i] = g_strdup (name.constData()); | 502 | (*pengine_names)[i] = g_strdup (name.constData()); | ||
503 | i ++; | 503 | i ++; | ||
504 | } | 504 | } | ||
505 | } | 505 | } | ||
506 | } | 506 | } | ||
507 | 507 | | |||
508 | bool contains(gchar** strlist, const gchar* str) | ||||
509 | { | ||||
510 | for (; strlist; ++strlist) { | ||||
511 | if (g_strcmp0(*strlist, str) == 0) | ||||
512 | return true; | ||||
513 | } | ||||
514 | return false; | ||||
515 | } | ||||
516 | | ||||
508 | static void | 517 | static void | ||
509 | impanel_update_engines(IBusPanelImpanel* impanel, GVariant* var_engines) { | 518 | impanel_update_engines(IBusPanelImpanel* impanel, GVariant* var_engines) { | ||
510 | gchar** engine_names = nullptr; | 519 | gchar** engine_names = nullptr; | ||
511 | size_t len = 0; | 520 | size_t len = 0; | ||
512 | if (var_engines) { | 521 | if (var_engines) { | ||
513 | engine_names = g_variant_dup_strv(var_engines, &len); | 522 | engine_names = g_variant_dup_strv(var_engines, &len); | ||
514 | } | 523 | } | ||
515 | if (len == 0) { | 524 | if (len == 0) { | ||
516 | g_strfreev(engine_names); | 525 | g_strfreev(engine_names); | ||
517 | engine_names = nullptr; | 526 | engine_names = nullptr; | ||
518 | } | 527 | } | ||
519 | 528 | | |||
520 | if (!engine_names) { | 529 | if (!engine_names) { | ||
521 | impanel_get_default_engine(impanel, &engine_names, &len); | 530 | impanel_get_default_engine(impanel, &engine_names, &len); | ||
522 | GVariant* var = g_variant_new_strv(engine_names, len); | 531 | GVariant* var = g_variant_new_strv(engine_names, len); | ||
523 | g_settings_set_value(impanel->settings_general, "preload-engines", var); | 532 | g_settings_set_value(impanel->settings_general, "preload-engines", var); | ||
524 | } | 533 | } | ||
525 | 534 | | |||
526 | IBusEngineDesc** engines = ibus_bus_get_engines_by_names(impanel->bus, engine_names); | 535 | IBusEngineDesc** engines = ibus_bus_get_engines_by_names(impanel->bus, engine_names); | ||
527 | g_strfreev(engine_names); | | |||
528 | 536 | | |||
529 | impanel->engineManager->setEngines(engines); | 537 | impanel->engineManager->setEngines(engines); | ||
530 | 538 | | |||
531 | if (engines && engines[0]) { | 539 | if (engines && engines[0] && !contains(engine_names, ibus_engine_desc_get_name(ibus_bus_get_global_engine(impanel->bus)))) { | ||
532 | ibus_bus_set_global_engine(impanel->bus, ibus_engine_desc_get_name(engines[0])); | 540 | ibus_bus_set_global_engine(impanel->bus, ibus_engine_desc_get_name(engines[0])); | ||
533 | } | 541 | } | ||
542 | g_strfreev(engine_names); | ||||
534 | 543 | | |||
535 | impanel->app->setDoGrab(len > 1); | 544 | impanel->app->setDoGrab(len > 1); | ||
536 | } | 545 | } | ||
537 | 546 | | |||
538 | static void | 547 | static void | ||
539 | impanel_update_engines_order(IBusPanelImpanel* impanel, GVariant* var_engines) { | 548 | impanel_update_engines_order(IBusPanelImpanel* impanel, GVariant* var_engines) { | ||
540 | const gchar** engine_names = nullptr; | 549 | const gchar** engine_names = nullptr; | ||
541 | size_t len = 0; | 550 | size_t len = 0; | ||
▲ Show 20 Lines • Show All 1022 Lines • Show Last 20 Lines |