diff --git a/applets/kimpanel/backend/ibus/CMakeLists.txt b/applets/kimpanel/backend/ibus/CMakeLists.txt --- a/applets/kimpanel/backend/ibus/CMakeLists.txt +++ b/applets/kimpanel/backend/ibus/CMakeLists.txt @@ -1,44 +1,36 @@ -find_package(IBus) +find_package(IBus 1.5.0) find_package(GLIB2) find_package(GIO) find_package(GObject) + if(IBUS_FOUND AND GLIB2_FOUND AND GIO_FOUND AND GOBJECT_FOUND) configure_file(config-kimpanel.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kimpanel.h) include_directories(${IBUS_INCLUDE_DIR}) include_directories(${GIO_INCLUDE_DIR}) include_directories(${GOBJECT_INCLUDE_DIR}) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99") - if (${IBUS_VERSION} VERSION_LESS "1.5.0") - set(kimpanel_ibus_panel_SRCS ibus14/panel.c ibus14/main.c) + + find_package(Qt5X11Extras) + find_package(XCB COMPONENTS XCB KEYSYMS) + if (Qt5X11Extras_FOUND AND XCB_XCB_FOUND AND XCB_KEYSYMS_FOUND) + include_directories(${Qt5X11Extras_INCLUDE_DIRS}) + include_directories(${XCB_XCB_INCLUDE_DIRS}) + include_directories(${XCB_KEYSYMS_INCLUDE_DIRS}) + set(kimpanel_ibus_panel_SRCS + ibus15/xkblayoutmanager.cpp + ibus15/gtkaccelparse_p.c + ibus15/gdkkeynames_p.c + ibus15/app.cpp + ibus15/enginemanager.cpp + ibus15/main.cpp + ibus15/panel.cpp + ibus15/propertymanager.cpp) + add_definitions(-DQT_NO_KEYWORDS) add_executable(kimpanel-ibus-panel ${kimpanel_ibus_panel_SRCS}) - target_link_libraries(kimpanel-ibus-panel ${IBUS_LIBRARIES} GLIB2::GLIB2 ${GIO_LIBRARIES} ${GOBJECT_LIBRARIES}) + target_link_libraries(kimpanel-ibus-panel ${IBUS_LIBRARIES} GLIB2::GLIB2 ${GIO_LIBRARIES} ${GOBJECT_LIBRARIES} Qt5::Core Qt5::DBus Qt5::Gui Qt5::X11Extras XCB::KEYSYMS) # configure_file(${CMAKE_CURRENT_SOURCE_DIR}/kimpanel.xml.in ${CMAKE_CURRENT_BINARY_DIR}/kimpanel.xml @ONLY) # install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kimpanel.xml DESTINATION ${CMAKE_INSTALL_PREFIX}/share/ibus/component) - else() - find_package(Qt5X11Extras) - find_package(XCB COMPONENTS XCB KEYSYMS) - if (Qt5X11Extras_FOUND AND XCB_XCB_FOUND AND XCB_KEYSYMS_FOUND) - include_directories(${Qt5X11Extras_INCLUDE_DIRS}) - include_directories(${XCB_XCB_INCLUDE_DIRS}) - include_directories(${XCB_KEYSYMS_INCLUDE_DIRS}) - set(kimpanel_ibus_panel_SRCS - ibus15/xkblayoutmanager.cpp - ibus15/gtkaccelparse_p.c - ibus15/gdkkeynames_p.c - ibus15/app.cpp - ibus15/enginemanager.cpp - ibus15/main.cpp - ibus15/panel.cpp - ibus15/propertymanager.cpp) - add_definitions(-DQT_NO_KEYWORDS) - add_executable(kimpanel-ibus-panel ${kimpanel_ibus_panel_SRCS}) - target_link_libraries(kimpanel-ibus-panel ${IBUS_LIBRARIES} GLIB2::GLIB2 ${GIO_LIBRARIES} ${GOBJECT_LIBRARIES} Qt5::Core Qt5::DBus Qt5::Gui Qt5::X11Extras XCB::KEYSYMS) - # configure_file(${CMAKE_CURRENT_SOURCE_DIR}/kimpanel.xml.in ${CMAKE_CURRENT_BINARY_DIR}/kimpanel.xml @ONLY) - # install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kimpanel.xml DESTINATION ${CMAKE_INSTALL_PREFIX}/share/ibus/component) - endif() - endif() - if (TARGET kimpanel-ibus-panel) target_include_directories(kimpanel-ibus-panel PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) add_executable(kimpanel-ibus-panel-launcher launcher.cpp) diff --git a/applets/kimpanel/backend/ibus/ibus14/main.c b/applets/kimpanel/backend/ibus/ibus14/main.c deleted file mode 100644 --- a/applets/kimpanel/backend/ibus/ibus14/main.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * This file is part of KIMToy, an input method frontend for KDE - * Copyright (C) 2011 Ni Hui - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License or (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include -#include -#include "panel.h" - -#define _UNUSED(x) ((void) x) - -static IBusBus *bus = NULL; -static IBusPanelImpanel *impanel = NULL; - -/* options */ -static gboolean ibus = FALSE; -static gboolean verbose = FALSE; - -static const GOptionEntry entries[] = -{ - { "ibus", 'i', 0, G_OPTION_ARG_NONE, &ibus, "component is executed by ibus", NULL }, - { "verbose", 'v', 0, G_OPTION_ARG_NONE, &verbose, "verbose", NULL }, - { NULL, 0, 0, G_OPTION_ARG_NONE, NULL, NULL, NULL }, -}; - -static void -ibus_disconnected_cb (IBusBus *bus, - gpointer user_data) -{ - _UNUSED(bus); - _UNUSED(user_data); - ibus_quit (); -} - -static void -ibus_impanel_start (void) -{ - ibus_init (); - bus = ibus_bus_new (); - if (!ibus_bus_is_connected (bus)) { - exit (-1); - } - g_signal_connect (bus, "disconnected", G_CALLBACK (ibus_disconnected_cb), NULL); - impanel = ibus_panel_impanel_new (ibus_bus_get_connection (bus)); - ibus_bus_request_name (bus, IBUS_SERVICE_PANEL, 0); - ibus_panel_impanel_set_bus(impanel, bus); - ibus_main (); -} - -gint -main (gint argc, gchar **argv) -{ - GError *error = NULL; - GOptionContext *context; - - setlocale (LC_ALL, ""); - - context = g_option_context_new ("- ibus impanel component"); - - g_option_context_add_main_entries (context, entries, "ibus-impanel"); - - if (!g_option_context_parse (context, &argc, &argv, &error)) { - g_print ("Option parsing failed: %s\n", error->message); - exit (-1); - } - - ibus_impanel_start (); - - return 0; -} - diff --git a/applets/kimpanel/backend/ibus/ibus14/panel.h b/applets/kimpanel/backend/ibus/ibus14/panel.h deleted file mode 100644 --- a/applets/kimpanel/backend/ibus/ibus14/panel.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * This file is part of KIMToy, an input method frontend for KDE - * Copyright (C) 2011 Ni Hui - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License or (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#ifndef __PANEL_IMPANEL_H__ -#define __PANEL_IMPANEL_H__ - -#include - -#define IBUS_TYPE_PANEL_IMPANEL \ - (ibus_panel_impanel_get_type ()) -#define IBUS_PANEL_IMPANEL(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_PANEL_IMPANEL, IBusPanelImpanel)) -#define IBUS_PANEL_IMPANEL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_PANEL_IMPANEL, IBusPanelImpanelClass)) -#define IBUS_IS_PANEL_IMPANEL(obj) \ - (G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_PANEL_IMPANEL)) -#define IBUS_IS_PANEL_IMPANEL_CLASS(klass) \ - (G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_PANEL_IMPANEL)) -#define IBUS_PANEL_IMPANEL_GET_CLASS(obj) \ - (G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_PANEL_IMPANEL, IBusPanelImpanelClass)) - -typedef struct _IBusPanelImpanel IBusPanelImpanel; - -GType ibus_panel_impanel_get_type (void); -#if !IBUS_CHECK_VERSION(1,3,99) -IBusPanelImpanel *ibus_panel_impanel_new (IBusConnection *connection); -#else -IBusPanelImpanel *ibus_panel_impanel_new (GDBusConnection *connection); -#endif -void ibus_panel_impanel_set_bus (IBusPanelImpanel *impanel, - IBusBus *bus); - -#endif diff --git a/applets/kimpanel/backend/ibus/ibus14/panel.c b/applets/kimpanel/backend/ibus/ibus14/panel.c deleted file mode 100644 --- a/applets/kimpanel/backend/ibus/ibus14/panel.c +++ /dev/null @@ -1,1277 +0,0 @@ -/* - * This file is part of KIMToy, an input method frontend for KDE - * Copyright (C) 2011-2012 Ni Hui - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License or (at your option) version 3 or any later version - * accepted by the membership of KDE e.V. (or its successor approved - * by the membership of KDE e.V.), which shall act as a proxy - * defined in Section 14 of version 3 of the license. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include -#include -#include -#if !IBUS_CHECK_VERSION(1,3,99) -#include -#include -#endif -#include "panel.h" - -#ifndef DBUS_ERROR_FAILED -#define DBUS_ERROR_FAILED "org.freedesktop.DBus.Error.Failed" -#endif /* DBUS_ERROR_FAILED */ -#define _UNUSED(x) ((void) x) - -typedef struct _IBusPanelImpanelClass IBusPanelImpanelClass; - -struct _IBusPanelImpanel { - IBusPanelService parent; - IBusBus *bus; - GDBusConnection *conn; - IBusInputContext *input_context; - IBusProperty *logo_prop; - IBusProperty *about_prop; -}; - -struct _IBusPanelImpanelClass { - IBusPanelServiceClass parent; -}; - -void -ibus_panel_impanel_set_bus (IBusPanelImpanel *impanel, - IBusBus *bus) -{ - impanel->bus = bus; -} - -static GDBusNodeInfo *introspection_data = NULL; - -static guint owner_id; - -static const gchar introspection_xml[] = - "" - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - " " - ""; - -/* functions prototype */ -static void ibus_panel_impanel_class_init (IBusPanelImpanelClass *class); -static void ibus_panel_impanel_init (IBusPanelImpanel *impanel); -static void ibus_panel_impanel_destroy (IBusPanelImpanel *impanel); -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean ibus_panel_impanel_focus_in (IBusPanelService *panel, - const gchar *input_context_path, - IBusError **error); -static gboolean ibus_panel_impanel_focus_out (IBusPanelService *panel, - const gchar *input_context_path, - IBusError **error); -static gboolean ibus_panel_impanel_register_properties (IBusPanelService *panel, - IBusPropList *prop_list, - IBusError **error); -static gboolean ibus_panel_impanel_set_cursor_location (IBusPanelService *panel, - gint x, - gint y, - gint w, - gint h, - IBusError **error); -static gboolean ibus_panel_impanel_update_auxiliary_text (IBusPanelService *panel, - IBusText *text, - gboolean visible, - IBusError **error); -static gboolean ibus_panel_impanel_update_lookup_table (IBusPanelService *panel, - IBusLookupTable *lookup_table, - gboolean visible, - IBusError **error); -static gboolean ibus_panel_impanel_update_preedit_text (IBusPanelService *panel, - IBusText *text, - guint cursor_pos, - gboolean visible, - IBusError **error); -static gboolean ibus_panel_impanel_update_property (IBusPanelService *panel, - IBusProperty *prop, - IBusError **error); -static gboolean ibus_panel_impanel_cursor_down_lookup_table (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_cursor_up_lookup_table (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_hide_auxiliary_text (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_hide_language_bar (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_hide_lookup_table (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_hide_preedit_text (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_page_down_lookup_table (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_page_up_lookup_table (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_reset (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_show_auxiliary_text (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_show_language_bar (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_show_lookup_table (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_show_preedit_text (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_start_setup (IBusPanelService *panel, - IBusError **error); -static gboolean ibus_panel_impanel_state_changed (IBusPanelService *panel, - IBusError **error); -#else -static void ibus_panel_impanel_focus_in (IBusPanelService *panel, - const gchar *input_context_path); -static void ibus_panel_impanel_focus_out (IBusPanelService *panel, - const gchar *input_context_path); -static void ibus_panel_impanel_register_properties (IBusPanelService *panel, - IBusPropList *prop_list); -static void ibus_panel_impanel_set_cursor_location (IBusPanelService *panel, - gint x, - gint y, - gint w, - gint h); -static void ibus_panel_impanel_update_auxiliary_text (IBusPanelService *panel, - IBusText *text, - gboolean visible); -static void ibus_panel_impanel_update_lookup_table (IBusPanelService *panel, - IBusLookupTable *lookup_table, - gboolean visible); -static void ibus_panel_impanel_update_preedit_text (IBusPanelService *panel, - IBusText *text, - guint cursor_pos, - gboolean visible); -static void ibus_panel_impanel_update_property (IBusPanelService *panel, - IBusProperty *prop); -static void ibus_panel_impanel_cursor_down_lookup_table (IBusPanelService *panel); -static void ibus_panel_impanel_cursor_up_lookup_table (IBusPanelService *panel); -static void ibus_panel_impanel_hide_auxiliary_text (IBusPanelService *panel); -static void ibus_panel_impanel_hide_language_bar (IBusPanelService *panel); -static void ibus_panel_impanel_hide_lookup_table (IBusPanelService *panel); -static void ibus_panel_impanel_hide_preedit_text (IBusPanelService *panel); -static void ibus_panel_impanel_page_down_lookup_table (IBusPanelService *panel); -static void ibus_panel_impanel_page_up_lookup_table (IBusPanelService *panel); -static void ibus_panel_impanel_reset (IBusPanelService *panel); -static void ibus_panel_impanel_show_auxiliary_text (IBusPanelService *panel); -static void ibus_panel_impanel_show_language_bar (IBusPanelService *panel); -static void ibus_panel_impanel_show_lookup_table (IBusPanelService *panel); -static void ibus_panel_impanel_show_preedit_text (IBusPanelService *panel); -static void ibus_panel_impanel_start_setup (IBusPanelService *panel); -static void ibus_panel_impanel_state_changed (IBusPanelService *panel); -#endif - -/* impanel signal handler function */ -static void ibus_panel_impanel_exec_dialog (IBusPanelService *panel); -static void ibus_panel_impanel_exec_menu (IBusPanelService *panel); - -#if !IBUS_CHECK_VERSION(1,3,99) -static IBusPanelServiceClass *parent_class = NULL; -#endif - -static const char prop_sep[] = ":"; - -static void -ibus_property_args_to_propstr (const char *key, - const char *label, - const char *icon, - const char *tooltip, - char *propstr) -{ - static const char pre[] = "/IBus/"; - propstr[0] = '\0'; - strcat(propstr, pre); - strcat(propstr, key); - strcat(propstr, prop_sep); - strcat(propstr, label); - strcat(propstr, prop_sep); - strcat(propstr, icon); - strcat(propstr, prop_sep); - strcat(propstr, tooltip); -} - -static void -ibus_property_to_propstr (IBusProperty *property, - char *propstr) -{ -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_property_args_to_propstr(property->key, - property->label->text, - property->icon, - property->tooltip->text, - propstr); -#else - ibus_property_args_to_propstr(ibus_property_get_key (property), - ibus_text_get_text (ibus_property_get_label (property)), - ibus_property_get_icon (property), - ibus_text_get_text (ibus_property_get_tooltip (property)), - propstr); -#endif -} - -static void -ibus_engine_desc_args_to_propstr (const char *name, - const char *language, - const char *longname, - const char *icon, - const char *description, - char *propstr) -{ - static const char pre[] = "/IBus/Engine/"; - propstr[0] = '\0'; - strcat(propstr, pre); - strcat(propstr, name); - strcat(propstr, prop_sep); - if (language) { - strcat(propstr, language); - strcat(propstr, " - "); - } - strcat(propstr, longname); - strcat(propstr, prop_sep); - strcat(propstr, icon); - strcat(propstr, prop_sep); - strcat(propstr, description); -} - -static void -ibus_engine_desc_to_propstr (IBusEngineDesc *engine_desc, - char *propstr) -{ -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_engine_desc_args_to_propstr(engine_desc->name, - engine_desc->language, - engine_desc->longname, - engine_desc->icon, - engine_desc->description, - propstr); -#else - ibus_engine_desc_args_to_propstr(ibus_engine_desc_get_name(engine_desc), - ibus_engine_desc_get_language(engine_desc), - ibus_engine_desc_get_longname(engine_desc), - ibus_engine_desc_get_icon(engine_desc), - ibus_engine_desc_get_description(engine_desc), - propstr); -#endif -} - -static void -impanel_trigger_property_callback (GDBusConnection *connection, - const gchar *sender_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data) -{ - _UNUSED(connection); - _UNUSED(sender_name); - _UNUSED(object_path); - _UNUSED(interface_name); - _UNUSED(signal_name); - gchar *s0; - g_variant_get (parameters, "(s)", &s0); - gchar* prop_key = s0 + 6;// +6 to skip "/IBus/" - if (g_ascii_strncasecmp (prop_key, "Logo", 4) == 0) - ibus_panel_impanel_exec_menu((IBusPanelService *)user_data); - else if (g_ascii_strncasecmp (prop_key, "About", 5) == 0) - ibus_panel_impanel_exec_dialog((IBusPanelService *)user_data); - else if (g_ascii_strncasecmp (prop_key, "Engine/", 7) == 0) { - prop_key += 7;// +7 to skip "Engine/" - ibus_input_context_set_engine(((IBusPanelImpanel *)user_data)->input_context, prop_key); - } - else -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_panel_service_property_active((IBusPanelService *)user_data, prop_key, PROP_STATE_CHECKED); -#else - ibus_panel_service_property_activate((IBusPanelService *)user_data, prop_key, PROP_STATE_CHECKED); -#endif -} - -static void -impanel_configure_callback (GDBusConnection *connection, - const gchar *sender_name, - const gchar *object_path, - const gchar *interface_name, - const gchar *signal_name, - GVariant *parameters, - gpointer user_data) -{ - _UNUSED(connection); - _UNUSED(sender_name); - _UNUSED(object_path); - _UNUSED(interface_name); - _UNUSED(signal_name); - _UNUSED(parameters); - _UNUSED(user_data); - pid_t pid = fork(); - if (pid == 0) { - execlp ("ibus-setup", "ibus-setup", (char *)0); - exit (0); - } -} - -static void -on_bus_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - _UNUSED(name); - ((IBusPanelImpanel *)user_data)->conn = connection; - - g_dbus_connection_register_object (connection, - "/kimpanel", - introspection_data->interfaces[0], - NULL, /*&interface_vtable*/ - NULL, /* user_data */ - NULL, /* user_data_free_func */ - NULL); /* GError** */ - - g_dbus_connection_signal_subscribe (connection, - "org.kde.impanel", - "org.kde.impanel", - "TriggerProperty", - "/org/kde/impanel", - NULL, - G_DBUS_SIGNAL_FLAGS_NONE, - impanel_trigger_property_callback, - user_data, - NULL); - g_dbus_connection_signal_subscribe (connection, - "org.kde.impanel", - "org.kde.impanel", - "Configure", - "/org/kde/impanel", - NULL, - G_DBUS_SIGNAL_FLAGS_NONE, - impanel_configure_callback, - user_data, - NULL); -} - -static void -on_name_acquired (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - _UNUSED(connection); - _UNUSED(name); - _UNUSED(user_data); -} - -static void -on_name_lost (GDBusConnection *connection, - const gchar *name, - gpointer user_data) -{ - _UNUSED(connection); - _UNUSED(name); - _UNUSED(user_data); - exit (1); -} - -#if !IBUS_CHECK_VERSION(1,3,99) -GType -ibus_panel_impanel_get_type (void) -{ - static GType type = 0; - - static const GTypeInfo type_info = { - sizeof (IBusPanelImpanelClass), - (GBaseInitFunc) NULL, - (GBaseFinalizeFunc) NULL, - (GClassInitFunc) ibus_panel_impanel_class_init, - (GClassFinalizeFunc)NULL, - NULL, - sizeof (IBusPanelImpanel), - 0, - (GInstanceInitFunc) ibus_panel_impanel_init, - NULL - }; - - if (type == 0) { - type = g_type_register_static (IBUS_TYPE_PANEL_SERVICE, - "IBusPanelImpanel", - &type_info, - (GTypeFlags) 0); - } - - return type; -} -#else -G_DEFINE_TYPE (IBusPanelImpanel, ibus_panel_impanel, IBUS_TYPE_PANEL_SERVICE) -#endif - -static void -ibus_panel_impanel_class_init (IBusPanelImpanelClass *class) -{ - GObjectClass *object_class = G_OBJECT_CLASS (class); - -#if !IBUS_CHECK_VERSION(1,3,99) - parent_class = (IBusPanelServiceClass *) g_type_class_peek_parent (class); -#endif - - IBUS_OBJECT_CLASS (object_class)->destroy = (IBusObjectDestroyFunc) ibus_panel_impanel_destroy; - IBUS_PANEL_SERVICE_CLASS (object_class)->focus_in = ibus_panel_impanel_focus_in; - IBUS_PANEL_SERVICE_CLASS (object_class)->focus_out = ibus_panel_impanel_focus_out; - IBUS_PANEL_SERVICE_CLASS (object_class)->register_properties = ibus_panel_impanel_register_properties; - IBUS_PANEL_SERVICE_CLASS (object_class)->set_cursor_location = ibus_panel_impanel_set_cursor_location; - IBUS_PANEL_SERVICE_CLASS (object_class)->update_auxiliary_text = ibus_panel_impanel_update_auxiliary_text; - IBUS_PANEL_SERVICE_CLASS (object_class)->update_lookup_table = ibus_panel_impanel_update_lookup_table; - IBUS_PANEL_SERVICE_CLASS (object_class)->update_preedit_text = ibus_panel_impanel_update_preedit_text; - IBUS_PANEL_SERVICE_CLASS (object_class)->update_property = ibus_panel_impanel_update_property; - IBUS_PANEL_SERVICE_CLASS (object_class)->cursor_down_lookup_table = ibus_panel_impanel_cursor_down_lookup_table; - IBUS_PANEL_SERVICE_CLASS (object_class)->cursor_up_lookup_table = ibus_panel_impanel_cursor_up_lookup_table; - IBUS_PANEL_SERVICE_CLASS (object_class)->hide_auxiliary_text = ibus_panel_impanel_hide_auxiliary_text; - IBUS_PANEL_SERVICE_CLASS (object_class)->hide_language_bar = ibus_panel_impanel_hide_language_bar; - IBUS_PANEL_SERVICE_CLASS (object_class)->hide_lookup_table = ibus_panel_impanel_hide_lookup_table; - IBUS_PANEL_SERVICE_CLASS (object_class)->hide_preedit_text = ibus_panel_impanel_hide_preedit_text; - IBUS_PANEL_SERVICE_CLASS (object_class)->page_down_lookup_table = ibus_panel_impanel_page_down_lookup_table; - IBUS_PANEL_SERVICE_CLASS (object_class)->page_up_lookup_table = ibus_panel_impanel_page_up_lookup_table; - IBUS_PANEL_SERVICE_CLASS (object_class)->reset = ibus_panel_impanel_reset; - IBUS_PANEL_SERVICE_CLASS (object_class)->show_auxiliary_text = ibus_panel_impanel_show_auxiliary_text; - IBUS_PANEL_SERVICE_CLASS (object_class)->show_language_bar = ibus_panel_impanel_show_language_bar; - IBUS_PANEL_SERVICE_CLASS (object_class)->show_lookup_table = ibus_panel_impanel_show_lookup_table; - IBUS_PANEL_SERVICE_CLASS (object_class)->show_preedit_text = ibus_panel_impanel_show_preedit_text; - IBUS_PANEL_SERVICE_CLASS (object_class)->start_setup = ibus_panel_impanel_start_setup; - IBUS_PANEL_SERVICE_CLASS (object_class)->state_changed = ibus_panel_impanel_state_changed; -} - -static void -ibus_panel_impanel_init (IBusPanelImpanel *impanel) -{ - impanel->bus = NULL; - impanel->input_context = NULL; - - introspection_data = g_dbus_node_info_new_for_xml (introspection_xml, NULL); - owner_id = g_bus_own_name (G_BUS_TYPE_SESSION, - "org.kde.kimpanel.inputmethod", - G_BUS_NAME_OWNER_FLAGS_REPLACE, - on_bus_acquired, - on_name_acquired, - on_name_lost, - impanel, NULL); - - // some custom property - impanel->logo_prop = ibus_property_new ("Logo", - PROP_TYPE_NORMAL, - ibus_text_new_from_string ("IBus"), - "ibus", - ibus_text_new_from_string ("IBus input method"), - FALSE, - FALSE, - PROP_STATE_UNCHECKED, - NULL); - - impanel->about_prop = ibus_property_new ("About", - PROP_TYPE_NORMAL, - ibus_text_new_from_string ("IBus intelligent input bus"), - "ibus-help", - ibus_text_new_from_string ("IBus is an intelligent input bus for Linux/Unix.\n\n" - "Huang Peng "), - FALSE, - FALSE, - PROP_STATE_UNCHECKED, - NULL); -} - -static void -ibus_panel_impanel_destroy (IBusPanelImpanel *impanel) -{ - g_object_unref (impanel->logo_prop); - impanel->logo_prop = NULL; - g_object_unref (impanel->about_prop); - impanel->about_prop = NULL; - - g_bus_unown_name (owner_id); - g_dbus_node_info_unref (introspection_data); - -#if !IBUS_CHECK_VERSION(1,3,99) - IBUS_OBJECT_CLASS (parent_class)->destroy ((IBusObject *)impanel); -#else - IBUS_OBJECT_CLASS (ibus_panel_impanel_parent_class)->destroy ((IBusObject *)impanel); -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_focus_in (IBusPanelService *panel, - const gchar *input_context_path, - IBusError **error) -#else -static void -ibus_panel_impanel_focus_in (IBusPanelService *panel, - const gchar *input_context_path) -#endif -{ -#if !IBUS_CHECK_VERSION(1,3,99) - IBusConnection *ibusconn; - _UNUSED(error); -#else - GDBusConnection *ibusconn; -#endif - g_object_get (IBUS_PANEL_IMPANEL (panel), - "connection", &ibusconn, - NULL); - - IBusEngineDesc *engine_desc = ibus_bus_get_global_engine(IBUS_PANEL_IMPANEL (panel)->bus); - - IBusInputContext *ic = ibus_input_context_get_input_context(input_context_path, ibusconn); - IBUS_PANEL_IMPANEL (panel)->input_context = ic; - - const gchar* icon_name = "ibus-keyboard"; - if (engine_desc) { -#if !IBUS_CHECK_VERSION(1,3,99) - icon_name = engine_desc->icon; -#else - icon_name = ibus_engine_desc_get_icon (engine_desc); -#endif - } - -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_property_set_icon (IBUS_PANEL_IMPANEL (panel)->logo_prop, icon_name); -#else - ibus_property_set_icon (IBUS_PANEL_IMPANEL (panel)->logo_prop, icon_name); -#endif - - char propstr[512]; - propstr[0] = '\0'; - - ibus_property_to_propstr(IBUS_PANEL_IMPANEL (panel)->logo_prop, propstr); - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "UpdateProperty", - g_variant_new ("(s)", propstr), - NULL); -#if !IBUS_CHECK_VERSION(1,3,99) - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_focus_out (IBusPanelService *panel, - const gchar *input_context_path, - IBusError **error) -#else -static void -ibus_panel_impanel_focus_out (IBusPanelService *panel, - const gchar *input_context_path) -#endif -{ - _UNUSED(panel); - _UNUSED(input_context_path); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_register_properties (IBusPanelService *panel, - IBusPropList *prop_list, - IBusError **error) -#else -static void -ibus_panel_impanel_register_properties (IBusPanelService *panel, - IBusPropList *prop_list) -#endif -{ - IBusProperty* property = NULL; - guint i = 0; - char propstr[512]; - - GVariantBuilder builder; - g_variant_builder_init (&builder, G_VARIANT_TYPE ("as")); - - ibus_property_to_propstr(IBUS_PANEL_IMPANEL (panel)->logo_prop, propstr); - g_variant_builder_add (&builder, "s", propstr); - - while ( ( property = ibus_prop_list_get( prop_list, i ) ) != NULL ) { - ibus_property_to_propstr(property, propstr); - g_variant_builder_add (&builder, "s", propstr); - ++i; - } - - ibus_property_to_propstr(IBUS_PANEL_IMPANEL (panel)->about_prop, propstr); - g_variant_builder_add (&builder, "s", propstr); - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "RegisterProperties", - g_variant_new ("(as)", &builder), - NULL); - -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_set_cursor_location (IBusPanelService *panel, - gint x, - gint y, - gint w, - gint h, - IBusError **error) -#else -static void -ibus_panel_impanel_set_cursor_location (IBusPanelService *panel, - gint x, - gint y, - gint w, - gint h) -#endif -{ - - g_dbus_connection_call(IBUS_PANEL_IMPANEL (panel)->conn, - "org.kde.impanel", - "/org/kde/impanel", - "org.kde.impanel2", - "SetSpotRect", - g_variant_new("(iiii)", x, y, w, h), - NULL, - G_DBUS_CALL_FLAGS_NONE, - -1, /* timeout */ - NULL, - NULL, - NULL); - -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_update_auxiliary_text (IBusPanelService *panel, - IBusText *text, - gboolean visible, - IBusError **error) -#else -static void -ibus_panel_impanel_update_auxiliary_text (IBusPanelService *panel, - IBusText *text, - gboolean visible) -#endif -{ -#if !IBUS_CHECK_VERSION(1,3,99) - const gchar* t = text->text; -#else - const gchar* t = ibus_text_get_text (text); -#endif - const gchar *attr = ""; - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "UpdateAux", - g_variant_new ("(ss)", t, attr), - NULL); - - if (visible == 0) -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_panel_impanel_hide_auxiliary_text(panel, error); -#else - ibus_panel_impanel_hide_auxiliary_text(panel); -#endif - else -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_panel_impanel_show_auxiliary_text(panel, error); -#else - ibus_panel_impanel_show_auxiliary_text(panel); -#endif -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_update_lookup_table (IBusPanelService *panel, - IBusLookupTable *lookup_table, - gboolean visible, - IBusError **error) -#else -static void -ibus_panel_impanel_update_lookup_table (IBusPanelService *panel, - IBusLookupTable *lookup_table, - gboolean visible) -#endif -{ - guint page_size = ibus_lookup_table_get_page_size(lookup_table); - guint cursor_pos = ibus_lookup_table_get_cursor_pos(lookup_table); - guint page = cursor_pos / page_size; - guint start = page * page_size; - guint end = start + page_size; - guint num = ibus_lookup_table_get_number_of_candidates(lookup_table); - if (end > num) { - end = num; - } - -// fprintf(stderr, "%d ~ %d pgsize %d num %d\n", start, end, page_size, num); - - guint i; - - gchar label[16][4];// WARNING large enough I think --- nihui - const gchar *candidate; - - GVariantBuilder builder_labels; - GVariantBuilder builder_candidates; - GVariantBuilder builder_attrs; - g_variant_builder_init (&builder_labels, G_VARIANT_TYPE ("as")); - g_variant_builder_init (&builder_candidates, G_VARIANT_TYPE ("as")); - g_variant_builder_init (&builder_attrs, G_VARIANT_TYPE ("as")); - - const gchar *attr = ""; - for (i = start; i < end; i++) { - g_snprintf (label[i-start], 4, "%d", (i-start+1) % 10); - // NOTE ibus always return NULL for ibus_lookup_table_get_label -// label = ibus_lookup_table_get_label(lookup_table, i)->text; - g_variant_builder_add (&builder_labels, "s", label[i-start]); - -#if !IBUS_CHECK_VERSION(1,3,99) - candidate = ibus_lookup_table_get_candidate (lookup_table, i)->text; -#else - candidate = ibus_text_get_text (ibus_lookup_table_get_candidate (lookup_table, i)); -#endif - g_variant_builder_add (&builder_candidates, "s", candidate); - - g_variant_builder_add (&builder_attrs, "s", attr); - } - - gboolean has_prev = 1; - gboolean has_next = 1; - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "UpdateLookupTable", - g_variant_new ("(asasasbb)", - &builder_labels, - &builder_candidates, - &builder_attrs, - has_prev, has_next), - NULL); - - guint cursor_pos_in_page; - if (ibus_lookup_table_is_cursor_visible(lookup_table)) - cursor_pos_in_page = cursor_pos % page_size; - else - cursor_pos_in_page = -1; - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "UpdateLookupTableCursor", - g_variant_new ("(i)", cursor_pos_in_page), - NULL); - - if (visible == 0) -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_panel_impanel_hide_lookup_table(panel, error); -#else - ibus_panel_impanel_hide_lookup_table(panel); -#endif - else -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_panel_impanel_show_lookup_table(panel, error); -#else - ibus_panel_impanel_show_lookup_table(panel); -#endif -#if !IBUS_CHECK_VERSION(1,3,99) - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_update_preedit_text (IBusPanelService *panel, - IBusText *text, - guint cursor_pos, - gboolean visible, - IBusError **error) -#else -static void -ibus_panel_impanel_update_preedit_text (IBusPanelService *panel, - IBusText *text, - guint cursor_pos, - gboolean visible) -#endif -{ -#if !IBUS_CHECK_VERSION(1,3,99) - const gchar* t = text->text; -#else - const gchar* t = ibus_text_get_text (text); -#endif - const gchar *attr = ""; - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "UpdatePreeditText", - g_variant_new ("(ss)", t, attr), - NULL); - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "UpdatePreeditCaret", - g_variant_new ("(i)", cursor_pos), - NULL); - - if (visible == 0) -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_panel_impanel_hide_preedit_text(panel, error); -#else - ibus_panel_impanel_hide_preedit_text(panel); -#endif - else -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_panel_impanel_show_preedit_text(panel, error); -#else - ibus_panel_impanel_show_preedit_text(panel); -#endif -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_update_property (IBusPanelService *panel, - IBusProperty *prop, - IBusError **error) -#else -static void -ibus_panel_impanel_update_property (IBusPanelService *panel, - IBusProperty *prop) -#endif -{ - char propstr[512]; - propstr[0] = '\0'; - - ibus_property_to_propstr(prop, propstr); - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "UpdateProperty", - g_variant_new ("(s)", propstr), - NULL); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_cursor_down_lookup_table (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_cursor_down_lookup_table (IBusPanelService *panel) -#endif -{ - _UNUSED(panel); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_cursor_up_lookup_table (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_cursor_up_lookup_table (IBusPanelService *panel) -#endif -{ - _UNUSED(panel); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_hide_auxiliary_text (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_hide_auxiliary_text (IBusPanelService *panel) -#endif -{ - gboolean toShow = 0; - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "ShowAux", - g_variant_new ("(b)", toShow), - NULL); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_hide_language_bar (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_hide_language_bar (IBusPanelService *panel) -#endif -{ - _UNUSED(panel); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_hide_lookup_table (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_hide_lookup_table (IBusPanelService *panel) -#endif -{ - gboolean toShow = 0; - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "ShowLookupTable", - g_variant_new ("(b)", toShow), - NULL); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_hide_preedit_text (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_hide_preedit_text (IBusPanelService *panel) -#endif -{ - gboolean toShow = 0; - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "ShowPreedit", - g_variant_new ("(b)", toShow), - NULL); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_page_down_lookup_table (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_page_down_lookup_table (IBusPanelService *panel) -#endif -{ - _UNUSED(panel); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_page_up_lookup_table (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_page_up_lookup_table (IBusPanelService *panel) -#endif -{ - _UNUSED(panel); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_reset (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_reset (IBusPanelService *panel) -#endif -{ - _UNUSED(panel); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_show_auxiliary_text (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_show_auxiliary_text (IBusPanelService *panel) -#endif -{ - gboolean toShow = 1; - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "ShowAux", - g_variant_new ("(b)", toShow), - NULL); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_show_language_bar (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_show_language_bar (IBusPanelService *panel) -#endif -{ - _UNUSED(panel); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_show_lookup_table (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_show_lookup_table (IBusPanelService *panel) -#endif -{ - gboolean toShow = 1; - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "ShowLookupTable", - g_variant_new ("(b)", toShow), - NULL); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_show_preedit_text (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_show_preedit_text (IBusPanelService *panel) -#endif -{ - gboolean toShow = 1; - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "ShowPreedit", - g_variant_new ("(b)", toShow), - NULL); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_start_setup (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_start_setup (IBusPanelService *panel) -#endif -{ - _UNUSED(panel); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -#if !IBUS_CHECK_VERSION(1,3,99) -static gboolean -ibus_panel_impanel_state_changed (IBusPanelService *panel, - IBusError **error) -#else -static void -ibus_panel_impanel_state_changed (IBusPanelService *panel) -#endif -{ - IBusEngineDesc *engine_desc = ibus_input_context_get_engine(IBUS_PANEL_IMPANEL (panel)->input_context); - if (!engine_desc) { -#if !IBUS_CHECK_VERSION(1,3,99) - return FALSE; -#else - return; -#endif - } - -#if !IBUS_CHECK_VERSION(1,3,99) - ibus_property_set_icon (IBUS_PANEL_IMPANEL (panel)->logo_prop, engine_desc->icon); -#else - ibus_property_set_icon (IBUS_PANEL_IMPANEL (panel)->logo_prop, ibus_engine_desc_get_icon (engine_desc)); -#endif - - char propstr[512]; - propstr[0] = '\0'; - - ibus_property_to_propstr(IBUS_PANEL_IMPANEL (panel)->logo_prop, propstr); - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "UpdateProperty", - g_variant_new ("(s)", propstr), - NULL); - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "Enable", - g_variant_new ("(b)", TRUE), - NULL); -#if !IBUS_CHECK_VERSION(1,3,99) - _UNUSED(error); - return TRUE; -#endif -} - -static void -ibus_panel_impanel_exec_dialog (IBusPanelService *panel) -{ - char propstr[512]; - propstr[0] = '\0'; - - ibus_property_to_propstr(IBUS_PANEL_IMPANEL (panel)->about_prop, propstr); - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "ExecDialog", - g_variant_new ("(s)", propstr), - NULL); -} - -static void -ibus_panel_impanel_exec_menu (IBusPanelService *panel) -{ - char propstr[512]; - - GVariantBuilder builder; - g_variant_builder_init (&builder, G_VARIANT_TYPE ("as")); - - GList *engines = ibus_bus_list_active_engines (IBUS_PANEL_IMPANEL (panel)->bus); - IBusEngineDesc *engine_desc = NULL; - GList *node = g_list_first (engines); - while (node) { - engine_desc = (IBusEngineDesc *)(node->data); - node = g_list_next (node); - - ibus_engine_desc_to_propstr(engine_desc, propstr); - g_variant_builder_add (&builder, "s", propstr); - } - - g_dbus_connection_emit_signal (IBUS_PANEL_IMPANEL (panel)->conn, - NULL, "/kimpanel", "org.kde.kimpanel.inputmethod", "ExecMenu", - g_variant_new ("(as)", &builder), - NULL); -} - -IBusPanelImpanel * -#if !IBUS_CHECK_VERSION(1,3,99) -ibus_panel_impanel_new (IBusConnection *connection) -#else -ibus_panel_impanel_new (GDBusConnection *connection) -#endif -{ - IBusPanelImpanel *panel; - panel = (IBusPanelImpanel *) g_object_new (IBUS_TYPE_PANEL_IMPANEL, -#if !IBUS_CHECK_VERSION(1,3,99) - "path", IBUS_PATH_PANEL, -#else - "object-path", IBUS_PATH_PANEL, -#endif - "connection", connection, - NULL); - return panel; -}