Changeset View
Changeset View
Standalone View
Standalone View
applets/kimpanel/backend/ibus/ibus15/panel.cpp
Show All 33 Lines | |||||
34 | #include "xkblayoutmanager.h" | 34 | #include "xkblayoutmanager.h" | ||
35 | #include "app.h" | 35 | #include "app.h" | ||
36 | #include "gtkaccelparse_p.h" | 36 | #include "gtkaccelparse_p.h" | ||
37 | 37 | | |||
38 | #ifndef DBUS_ERROR_FAILED | 38 | #ifndef DBUS_ERROR_FAILED | ||
39 | #define DBUS_ERROR_FAILED "org.freedesktop.DBus.Error.Failed" | 39 | #define DBUS_ERROR_FAILED "org.freedesktop.DBus.Error.Failed" | ||
40 | #endif /* DBUS_ERROR_FAILED */ | 40 | #endif /* DBUS_ERROR_FAILED */ | ||
41 | 41 | | |||
42 | #define IBUS_SCHEMA_GENERAL "org.freedesktop.ibus.general" | ||||
43 | #define IBUS_SCHEMA_HOTKEY "org.freedesktop.ibus.general.hotkey" | ||||
44 | #define IBUS_SCHEMA_PANEL "org.freedesktop.ibus.panel" | ||||
45 | | ||||
42 | typedef struct _IBusPanelImpanelClass IBusPanelImpanelClass; | 46 | typedef struct _IBusPanelImpanelClass IBusPanelImpanelClass; | ||
43 | 47 | | |||
44 | struct _IBusPanelImpanel { | 48 | struct _IBusPanelImpanel { | ||
45 | IBusPanelService parent; | 49 | IBusPanelService parent; | ||
46 | IBusBus *bus; | 50 | IBusBus *bus; | ||
47 | GDBusConnection *conn; | 51 | GDBusConnection *conn; | ||
48 | PropertyManager* propManager; | 52 | PropertyManager* propManager; | ||
49 | EngineManager* engineManager; | 53 | EngineManager* engineManager; | ||
50 | XkbLayoutManager* xkbLayoutManager; | 54 | XkbLayoutManager* xkbLayoutManager; | ||
51 | App* app; | 55 | App* app; | ||
52 | gboolean useSystemKeyboardLayout; | 56 | gboolean useSystemKeyboardLayout; | ||
53 | int selected; | 57 | int selected; | ||
58 | GSettings *settings_general; | ||||
59 | GSettings *settings_hotkey; | ||||
54 | }; | 60 | }; | ||
55 | 61 | | |||
56 | struct _IBusPanelImpanelClass { | 62 | struct _IBusPanelImpanelClass { | ||
57 | IBusPanelServiceClass parent; | 63 | IBusPanelServiceClass parent; | ||
58 | }; | 64 | }; | ||
59 | 65 | | |||
60 | /* functions prototype */ | 66 | /* functions prototype */ | ||
61 | static void ibus_panel_impanel_class_init (IBusPanelImpanelClass *klass); | 67 | static void ibus_panel_impanel_class_init (IBusPanelImpanelClass *klass); | ||
▲ Show 20 Lines • Show All 446 Lines • ▼ Show 20 Line(s) | 509 | impanel_update_engines(IBusPanelImpanel* impanel, GVariant* var_engines) { | |||
508 | } | 514 | } | ||
509 | if (len == 0) { | 515 | if (len == 0) { | ||
510 | g_strfreev(engine_names); | 516 | g_strfreev(engine_names); | ||
511 | engine_names = NULL; | 517 | engine_names = NULL; | ||
512 | } | 518 | } | ||
513 | 519 | | |||
514 | if (!engine_names) { | 520 | if (!engine_names) { | ||
515 | impanel_get_default_engine(impanel, &engine_names, &len); | 521 | impanel_get_default_engine(impanel, &engine_names, &len); | ||
516 | IBusConfig* config = ibus_bus_get_config(impanel->bus); | | |||
517 | GVariant* var = g_variant_new_strv(engine_names, len); | 522 | GVariant* var = g_variant_new_strv(engine_names, len); | ||
518 | ibus_config_set_value(config, "general", "preload_engines", var); | 523 | g_settings_set_value(impanel->settings_general, "preload-engines", var); | ||
519 | } | 524 | } | ||
520 | 525 | | |||
521 | IBusEngineDesc** engines = ibus_bus_get_engines_by_names(impanel->bus, engine_names); | 526 | IBusEngineDesc** engines = ibus_bus_get_engines_by_names(impanel->bus, engine_names); | ||
522 | g_strfreev(engine_names); | 527 | g_strfreev(engine_names); | ||
523 | 528 | | |||
524 | impanel->engineManager->setEngines(engines); | 529 | impanel->engineManager->setEngines(engines); | ||
525 | 530 | | |||
526 | if (engines && engines[0]) { | 531 | if (engines && engines[0]) { | ||
▲ Show 20 Lines • Show All 65 Lines • ▼ Show 20 Line(s) | 593 | impanel_update_latin_layouts(IBusPanelImpanel* impanel, GVariant* variant) { | |||
592 | gsize length; | 597 | gsize length; | ||
593 | const gchar** variants = g_variant_get_strv(variant, &length); | 598 | const gchar** variants = g_variant_get_strv(variant, &length); | ||
594 | 599 | | |||
595 | impanel->xkbLayoutManager->setLatinLayouts(variants, length); | 600 | impanel->xkbLayoutManager->setLatinLayouts(variants, length); | ||
596 | g_free(variants); | 601 | g_free(variants); | ||
597 | } | 602 | } | ||
598 | 603 | | |||
599 | static void | 604 | static void | ||
600 | impanel_config_value_changed_callback (IBusConfig* config, const gchar* section, const gchar* name, GVariant* value, gpointer user_data) | 605 | impanel_settings_changed_callback (GSettings* settings, const gchar* key, gpointer user_data) | ||
601 | { | 606 | { | ||
602 | Q_UNUSED(config); | | |||
603 | IBusPanelImpanel* impanel = ((IBusPanelImpanel *)user_data); | 607 | IBusPanelImpanel* impanel = ((IBusPanelImpanel *)user_data); | ||
608 | gchar *schema = NULL; | ||||
609 | GVariant *value = g_settings_get_value (settings, key); | ||||
610 | | ||||
611 | g_object_get(G_OBJECT(settings), "schema", &schema, NULL); | ||||
604 | 612 | | |||
605 | if (g_strcmp0(section, "general") == 0 && g_strcmp0(name, "preload_engines") == 0) { | 613 | if (g_strcmp0(schema, IBUS_SCHEMA_GENERAL) == 0 && g_strcmp0(key, "preload-engines") == 0) { | ||
606 | impanel_update_engines(impanel, value); | 614 | impanel_update_engines(impanel, value); | ||
607 | } | 615 | } | ||
608 | else if (g_strcmp0(section, "general/hotkey") == 0 && g_strcmp0(name, "triggers") == 0) { | 616 | else if (g_strcmp0(schema, IBUS_SCHEMA_HOTKEY) == 0 && g_strcmp0(key, "triggers") == 0) { | ||
609 | impanel_update_triggers(impanel, value); | 617 | impanel_update_triggers(impanel, value); | ||
610 | } else if (g_strcmp0(section, "general") == 0 && g_strcmp0(name, "use-system-keyboard-layout") == 0) { | 618 | } else if (g_strcmp0(schema, IBUS_SCHEMA_GENERAL) == 0 && g_strcmp0(key, "use-system-keyboard-layout") == 0) { | ||
611 | impanel_update_use_system_keyboard_layout(impanel, value); | 619 | impanel_update_use_system_keyboard_layout(impanel, value); | ||
612 | } else if (g_strcmp0(section, "general") == 0 && g_strcmp0(name, "use-global-engine") == 0) { | 620 | } else if (g_strcmp0(schema, IBUS_SCHEMA_GENERAL) == 0 && g_strcmp0(key, "use-global-engine") == 0) { | ||
613 | impanel_update_use_global_engine(impanel, value); | 621 | impanel_update_use_global_engine(impanel, value); | ||
614 | } | 622 | } | ||
623 | g_free (schema); | ||||
615 | } | 624 | } | ||
616 | 625 | | |||
617 | static void | 626 | static void | ||
618 | impanel_exit_callback (GDBusConnection *connection, | 627 | impanel_exit_callback (GDBusConnection *connection, | ||
619 | const gchar *sender_name, | 628 | const gchar *sender_name, | ||
620 | const gchar *object_path, | 629 | const gchar *object_path, | ||
621 | const gchar *interface_name, | 630 | const gchar *interface_name, | ||
622 | const gchar *signal_name, | 631 | const gchar *signal_name, | ||
▲ Show 20 Lines • Show All 280 Lines • ▼ Show 20 Line(s) | 909 | g_dbus_connection_signal_subscribe (connection, | |||
903 | "Configure", | 912 | "Configure", | ||
904 | "/org/kde/impanel", | 913 | "/org/kde/impanel", | ||
905 | NULL, | 914 | NULL, | ||
906 | G_DBUS_SIGNAL_FLAGS_NONE, | 915 | G_DBUS_SIGNAL_FLAGS_NONE, | ||
907 | impanel_configure_callback, | 916 | impanel_configure_callback, | ||
908 | user_data, | 917 | user_data, | ||
909 | NULL); | 918 | NULL); | ||
910 | 919 | | |||
911 | IBusConfig* config = ibus_bus_get_config(impanel->bus); | 920 | GVariant* var_engines = g_settings_get_value(impanel->settings_general, "preload-engines"); | ||
912 | if (config) { | | |||
913 | g_signal_connect_object(config, "value-changed", (GCallback) impanel_config_value_changed_callback, impanel, (GConnectFlags) 0); | | |||
914 | ibus_config_watch(config, "general", "preload_engines"); | | |||
915 | ibus_config_watch(config, "general", "use-system-keyboard-layout"); | | |||
916 | ibus_config_watch(config, "general/hotkey", "triggers"); | | |||
917 | | ||||
918 | GVariant* var_engines = ibus_config_get_value(config, "general", "preload_engines"); | | |||
919 | impanel_update_engines(impanel, var_engines); | 921 | impanel_update_engines(impanel, var_engines); | ||
920 | if (var_engines) | 922 | if (var_engines) { | ||
xuetianweng: https://community.kde.org/Policies/Kdelibs_Coding_Style#Braces
Always use braces | |||||
921 | g_variant_unref(var_engines); | 923 | g_variant_unref(var_engines); | ||
924 | } | ||||
922 | 925 | | |||
923 | var_engines = ibus_config_get_value(config, "general", "engines-order"); | 926 | var_engines = g_settings_get_value(impanel->settings_general, "engines-order"); | ||
924 | if (var_engines) { | 927 | if (var_engines) { | ||
925 | impanel_update_engines_order(impanel, var_engines); | 928 | impanel_update_engines_order(impanel, var_engines); | ||
926 | g_variant_unref(var_engines); | 929 | g_variant_unref(var_engines); | ||
927 | } | 930 | } | ||
928 | 931 | | |||
929 | GVariant* var_triggers = ibus_config_get_value(config, "general/hotkey", "triggers"); | 932 | GVariant* var_triggers = g_settings_get_value(impanel->settings_hotkey, "triggers"); | ||
930 | impanel_update_triggers(impanel, var_triggers); | 933 | impanel_update_triggers(impanel, var_triggers); | ||
xuetianweng: Same as above | |||||
931 | if (var_triggers) | 934 | if (var_triggers) { | ||
932 | g_variant_unref(var_triggers); | 935 | g_variant_unref(var_triggers); | ||
936 | } | ||||
933 | 937 | | |||
934 | IBusConfig* config = ibus_bus_get_config(impanel->bus); | 938 | GVariant* var_layouts = g_settings_get_value(impanel->settings_general, "xkb-latin-layouts"); | ||
935 | GVariant* var_layouts = ibus_config_get_value(config, "general", "xkb-latin-layouts"); | | |||
936 | if (var_layouts) { | 939 | if (var_layouts) { | ||
937 | impanel_update_latin_layouts(impanel, var_layouts); | 940 | impanel_update_latin_layouts(impanel, var_layouts); | ||
938 | g_variant_unref(var_layouts); | 941 | g_variant_unref(var_layouts); | ||
939 | } | 942 | } | ||
940 | 943 | | |||
941 | GVariant* var = ibus_config_get_value(config, "general", "use-system-keyboard-layout"); | 944 | GVariant* var = g_settings_get_value(impanel->settings_general, "use-system-keyboard-layout"); | ||
942 | if (var) { | 945 | if (var) { | ||
943 | impanel_update_use_system_keyboard_layout(impanel, var); | 946 | impanel_update_use_system_keyboard_layout(impanel, var); | ||
944 | g_variant_unref(var); | 947 | g_variant_unref(var); | ||
945 | } | 948 | } | ||
946 | 949 | | |||
947 | var = ibus_config_get_value(config, "general", "use-global-engine"); | 950 | var = g_settings_get_value(impanel->settings_general, "use-global-engine"); | ||
948 | if (var) { | 951 | if (var) { | ||
949 | impanel_update_use_global_engine(impanel, var); | 952 | impanel_update_use_global_engine(impanel, var); | ||
950 | g_variant_unref(var); | 953 | g_variant_unref(var); | ||
951 | } | 954 | } | ||
952 | } | | |||
953 | 955 | | |||
954 | ibus_panel_impanel_real_register_properties(impanel); | 956 | ibus_panel_impanel_real_register_properties(impanel); | ||
955 | } | 957 | } | ||
956 | 958 | | |||
957 | static void | 959 | static void | ||
958 | on_name_acquired (GDBusConnection *connection, | 960 | on_name_acquired (GDBusConnection *connection, | ||
959 | const gchar *name, | 961 | const gchar *name, | ||
960 | gpointer user_data) | 962 | gpointer user_data) | ||
▲ Show 20 Lines • Show All 60 Lines • ▼ Show 20 Line(s) | 1022 | owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, | |||
1021 | "org.kde.kimpanel.inputmethod", | 1023 | "org.kde.kimpanel.inputmethod", | ||
1022 | G_BUS_NAME_OWNER_FLAGS_REPLACE, | 1024 | G_BUS_NAME_OWNER_FLAGS_REPLACE, | ||
1023 | on_bus_acquired, | 1025 | on_bus_acquired, | ||
1024 | on_name_acquired, | 1026 | on_name_acquired, | ||
1025 | on_name_lost, | 1027 | on_name_lost, | ||
1026 | impanel, NULL); | 1028 | impanel, NULL); | ||
1027 | 1029 | | |||
1028 | impanel->propManager = new PropertyManager; | 1030 | impanel->propManager = new PropertyManager; | ||
1029 | impanel->engineManager = new EngineManager; | 1031 | impanel->engineManager = new EngineManager; | ||
IMHO you need to g_object_unref this two new settings in ibus_panel_impanel_destroy. xuetianweng: IMHO you need to g_object_unref this two new settings in ibus_panel_impanel_destroy. | |||||
1030 | impanel->xkbLayoutManager = new XkbLayoutManager; | 1032 | impanel->xkbLayoutManager = new XkbLayoutManager; | ||
1033 | impanel->settings_general = g_settings_new (IBUS_SCHEMA_GENERAL); | ||||
xuetianweng: and disconnect the signal too. | |||||
1034 | impanel->settings_hotkey = g_settings_new (IBUS_SCHEMA_HOTKEY); | ||||
1035 | g_signal_connect(impanel->settings_general, "changed", G_CALLBACK (impanel_settings_changed_callback), impanel); | ||||
1036 | g_signal_connect(impanel->settings_hotkey, "changed", G_CALLBACK (impanel_settings_changed_callback), impanel); | ||||
1031 | } | 1037 | } | ||
1032 | 1038 | | |||
1033 | static void | 1039 | static void | ||
1034 | ibus_panel_impanel_destroy (IBusPanelImpanel *impanel) | 1040 | ibus_panel_impanel_destroy (IBusPanelImpanel *impanel) | ||
1035 | { | 1041 | { | ||
1036 | delete impanel->propManager; | 1042 | delete impanel->propManager; | ||
1037 | impanel->propManager = NULL; | 1043 | impanel->propManager = NULL; | ||
1038 | delete impanel->engineManager; | 1044 | delete impanel->engineManager; | ||
1039 | impanel->engineManager = NULL; | 1045 | impanel->engineManager = NULL; | ||
1040 | delete impanel->xkbLayoutManager; | 1046 | delete impanel->xkbLayoutManager; | ||
1041 | impanel->xkbLayoutManager = NULL; | 1047 | impanel->xkbLayoutManager = NULL; | ||
1042 | 1048 | | |||
1049 | g_signal_handlers_disconnect_by_func (impanel->settings_general, (gpointer)impanel_settings_changed_callback, impanel); | ||||
xuetianweng: I think you can use g_clear_object here. | |||||
1050 | g_signal_handlers_disconnect_by_func (impanel->settings_hotkey, (gpointer)impanel_settings_changed_callback, impanel); | ||||
1051 | g_clear_object (&impanel->settings_general); | ||||
1052 | g_clear_object (&impanel->settings_hotkey); | ||||
1053 | | ||||
1043 | g_bus_unown_name (owner_id); | 1054 | g_bus_unown_name (owner_id); | ||
1044 | g_dbus_node_info_unref (introspection_data); | 1055 | g_dbus_node_info_unref (introspection_data); | ||
1045 | 1056 | | |||
1046 | IBUS_OBJECT_CLASS (ibus_panel_impanel_parent_class)->destroy ((IBusObject *)impanel); | 1057 | IBUS_OBJECT_CLASS (ibus_panel_impanel_parent_class)->destroy ((IBusObject *)impanel); | ||
1047 | } | 1058 | } | ||
1048 | 1059 | | |||
1049 | static void | 1060 | static void | ||
1050 | ibus_panel_impanel_focus_in (IBusPanelService *panel, | 1061 | ibus_panel_impanel_focus_in (IBusPanelService *panel, | ||
▲ Show 20 Lines • Show All 420 Lines • ▼ Show 20 Line(s) | 1459 | { | |||
1471 | 1482 | | |||
1472 | gchar** engine_names = g_new0 (gchar*, engineList.size() + 1); | 1483 | gchar** engine_names = g_new0 (gchar*, engineList.size() + 1); | ||
1473 | size_t i = 0; | 1484 | size_t i = 0; | ||
1474 | Q_FOREACH(const QString& name, engineList) { | 1485 | Q_FOREACH(const QString& name, engineList) { | ||
1475 | engine_names[i] = g_strdup (name.toUtf8().constData()); | 1486 | engine_names[i] = g_strdup (name.toUtf8().constData()); | ||
1476 | i ++; | 1487 | i ++; | ||
1477 | } | 1488 | } | ||
1478 | 1489 | | |||
1479 | IBusConfig* config = ibus_bus_get_config(impanel->bus); | | |||
1480 | if (config) { | | |||
1481 | GVariant* var = g_variant_new_strv(engine_names, engineList.size()); | 1490 | GVariant* var = g_variant_new_strv(engine_names, engineList.size()); | ||
1482 | ibus_config_set_value(config, "general", "engines-order", var); | 1491 | g_settings_set_value(impanel->settings_general, "engines-order", var); | ||
1483 | } | | |||
1484 | g_strfreev(engine_names); | 1492 | g_strfreev(engine_names); | ||
1485 | g_object_unref(engine_desc); | 1493 | g_object_unref(engine_desc); | ||
1486 | } | 1494 | } | ||
1487 | 1495 | | |||
1488 | static void | 1496 | static void | ||
1489 | ibus_panel_impanel_exec_menu(IBusPanelImpanel* impanel, | 1497 | ibus_panel_impanel_exec_menu(IBusPanelImpanel* impanel, | ||
1490 | IBusPropList* prop_list) | 1498 | IBusPropList* prop_list) | ||
1491 | { | 1499 | { | ||
▲ Show 20 Lines • Show All 59 Lines • Show Last 20 Lines |
https://community.kde.org/Policies/Kdelibs_Coding_Style#Braces
Always use braces