gboolean bus_engine_proxy_is_enabled (BusEngineProxy *engine) { g_assert (BUS_IS_ENGINE_PROXY (engine)); return engine->enabled; }
IBusEngineDesc * bus_engine_proxy_get_desc (BusEngineProxy *engine) { g_assert (BUS_IS_ENGINE_PROXY (engine)); return engine->desc; }
void bus_engine_proxy_process_key_event (BusEngineProxy *engine, guint keyval, guint keycode, guint state, GFunc return_cb, gpointer user_data) { g_assert (BUS_IS_ENGINE_PROXY (engine)); g_assert (return_cb); IBusPendingCall *pending = NULL; CallData *call_data; IBusError *error; gboolean retval; if (keycode != 0 && !BUS_DEFAULT_IBUS->use_sys_layout && engine->keymap != NULL) { guint t = ibus_keymap_lookup_keysym (engine->keymap, keycode, state); if (t != IBUS_VoidSymbol) { keyval = t; } } retval = ibus_proxy_call_with_reply ((IBusProxy *) engine, "ProcessKeyEvent", &pending, g_dbus_timeout, &error, G_TYPE_UINT, &keyval, G_TYPE_UINT, &keycode, G_TYPE_UINT, &state, G_TYPE_INVALID); if (!retval) { g_warning ("%s: %s", error->name, error->message); ibus_error_free (error); return_cb (GINT_TO_POINTER (FALSE), user_data); return; } call_data = g_slice_new0 (CallData); call_data->func = return_cb; call_data->user_data = user_data; g_object_ref (engine); call_data->engine = engine; retval = ibus_pending_call_set_notify (pending, (IBusPendingCallNotifyFunction) bus_engine_proxy_process_key_event_reply_cb, call_data, NULL); ibus_pending_call_unref (pending); if (!retval) { g_object_unref (call_data->engine); g_slice_free (CallData, call_data); g_warning ("%s : ProcessKeyEvent", DBUS_ERROR_NO_MEMORY); return_cb (GINT_TO_POINTER (FALSE), user_data); return; } }
void bus_engine_proxy_disable (BusEngineProxy *engine) { g_assert (BUS_IS_ENGINE_PROXY (engine)); if (engine->enabled) { engine->enabled = FALSE; ibus_proxy_call ((IBusProxy *) engine, "Disable", G_TYPE_INVALID); } }
void bus_engine_proxy_focus_out (BusEngineProxy *engine) { g_assert (BUS_IS_ENGINE_PROXY (engine)); if (engine->has_focus) { engine->has_focus = FALSE; ibus_proxy_call ((IBusProxy *) engine, "FocusOut", G_TYPE_INVALID); } }
void bus_engine_proxy_focus_in (BusEngineProxy *engine) { g_assert (BUS_IS_ENGINE_PROXY (engine)); if (!engine->has_focus) { engine->has_focus = TRUE; ibus_proxy_call ((IBusProxy *) engine, "FocusIn", G_TYPE_INVALID); } }
void bus_engine_proxy_property_hide (BusEngineProxy *engine, const gchar *prop_name) { g_assert (BUS_IS_ENGINE_PROXY (engine)); g_assert (prop_name != NULL); ibus_proxy_call ((IBusProxy *) engine, "PropertyHide", G_TYPE_STRING, &prop_name, G_TYPE_INVALID); }
void bus_engine_proxy_set_capabilities (BusEngineProxy *engine, guint caps) { g_assert (BUS_IS_ENGINE_PROXY (engine)); ibus_proxy_call ((IBusProxy *) engine, "SetCapabilities", G_TYPE_UINT, &caps, G_TYPE_INVALID); }
void bus_engine_proxy_property_activate (BusEngineProxy *engine, const gchar *prop_name, guint prop_state) { g_assert (BUS_IS_ENGINE_PROXY (engine)); g_assert (prop_name != NULL); ibus_proxy_call ((IBusProxy *) engine, "PropertyActivate", G_TYPE_STRING, &prop_name, G_TYPE_UINT, &prop_state, G_TYPE_INVALID); }
void bus_engine_proxy_candidate_clicked (BusEngineProxy *engine, guint index, guint button, guint state) { g_assert (BUS_IS_ENGINE_PROXY (engine)); ibus_proxy_call ((IBusProxy *) engine, "CandidateClicked", G_TYPE_UINT, &index, G_TYPE_UINT, &button, G_TYPE_UINT, &state, G_TYPE_INVALID); }
void bus_engine_proxy_set_cursor_location (BusEngineProxy *engine, gint x, gint y, gint w, gint h) { g_assert (BUS_IS_ENGINE_PROXY (engine)); ibus_proxy_call ((IBusProxy *) engine, "SetCursorLocation", G_TYPE_INT, &x, G_TYPE_INT, &y, G_TYPE_INT, &w, G_TYPE_INT, &h, G_TYPE_INVALID); }
void bus_engine_proxy_set_cursor_location (BusEngineProxy *engine, gint x, gint y, gint w, gint h) { g_assert (BUS_IS_ENGINE_PROXY (engine)); if (engine->x != x || engine->y != y || engine->w != w || engine->h != h) { engine->x = x; engine->y = y; engine->w = w; engine->h = h; ibus_proxy_call ((IBusProxy *) engine, "SetCursorLocation", G_TYPE_INT, &x, G_TYPE_INT, &y, G_TYPE_INT, &w, G_TYPE_INT, &h, G_TYPE_INVALID); } }
static gboolean bus_engine_proxy_ibus_signal (IBusProxy *proxy, IBusMessage *message) { g_assert (BUS_IS_ENGINE_PROXY (proxy)); g_assert (message != NULL); g_assert (ibus_message_get_type (message) == DBUS_MESSAGE_TYPE_SIGNAL); const gchar *interface; const gchar *name; BusEngineProxy *engine; IBusError *error; gint i; static const struct { const gchar *member; const guint signal_id; } signals [] = { { "ShowPreeditText", SHOW_PREEDIT_TEXT }, { "HidePreeditText", HIDE_PREEDIT_TEXT }, { "ShowAuxiliaryText", SHOW_AUXILIARY_TEXT }, { "HideAuxiliaryText", HIDE_AUXILIARY_TEXT }, { "ShowLookupTable", SHOW_LOOKUP_TABLE }, { "HideLookupTable", HIDE_LOOKUP_TABLE }, { "PageUpLookupTable", PAGE_UP_LOOKUP_TABLE }, { "PageDownLookupTable", PAGE_DOWN_LOOKUP_TABLE }, { "CursorUpLookupTable", CURSOR_UP_LOOKUP_TABLE }, { "CursorDownLookupTable", CURSOR_DOWN_LOOKUP_TABLE }, }; engine = BUS_ENGINE_PROXY (proxy); interface = ibus_message_get_interface (message); name = ibus_message_get_member (message); if (interface != NULL && g_strcmp0 (interface, IBUS_INTERFACE_ENGINE) != 0) return FALSE; for (i = 0; i < G_N_ELEMENTS (signals); i++) { if (g_strcmp0 (name, signals[i].member) == 0) { g_signal_emit (engine, engine_signals[signals[i].signal_id], 0); goto handled; } } if (g_strcmp0 (name, "CommitText") == 0) { IBusText *text; gboolean retval; retval = ibus_message_get_args (message, &error, IBUS_TYPE_TEXT, &text, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[COMMIT_TEXT], 0, text); g_object_unref (text); } else if (g_strcmp0 (name, "ForwardKeyEvent") == 0) { guint32 keyval; guint32 keycode; guint32 states; gboolean retval; retval = ibus_message_get_args (message, &error, G_TYPE_UINT, &keyval, G_TYPE_UINT, &keycode, G_TYPE_UINT, &states, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[FORWARD_KEY_EVENT], 0, keyval, keycode, states); } else if (g_strcmp0 (name, "DeleteSurroundingText") == 0) { gint offset_from_cursor; guint nchars; gboolean retval; retval = ibus_message_get_args (message, &error, G_TYPE_INT, &offset_from_cursor, G_TYPE_UINT, &nchars, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[DELETE_SURROUNDING_TEXT], 0, offset_from_cursor, nchars); } else if (g_strcmp0 (name, "UpdatePreeditText") == 0) { IBusText *text; gint cursor_pos; gboolean visible; gboolean retval; guint mode; retval = ibus_message_get_args (message, &error, IBUS_TYPE_TEXT, &text, G_TYPE_UINT, &cursor_pos, G_TYPE_BOOLEAN, &visible, G_TYPE_UINT, &mode, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[UPDATE_PREEDIT_TEXT], 0, text, cursor_pos, visible, mode); if (g_object_is_floating (text)) g_object_unref (text); } else if (g_strcmp0 (name, "UpdateAuxiliaryText") == 0) { IBusText *text; gboolean visible; gboolean retval; retval = ibus_message_get_args (message, &error, IBUS_TYPE_TEXT, &text, G_TYPE_BOOLEAN, &visible, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[UPDATE_AUXILIARY_TEXT], 0, text, visible); if (g_object_is_floating (text)) g_object_unref (text); } else if (g_strcmp0 (name, "UpdateLookupTable") == 0) { IBusLookupTable *table; gboolean visible; gboolean retval; retval = ibus_message_get_args (message, &error, IBUS_TYPE_LOOKUP_TABLE, &table, G_TYPE_BOOLEAN, &visible, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[UPDATE_LOOKUP_TABLE], 0, table, visible); if (g_object_is_floating (table)) g_object_unref (table); } else if (g_strcmp0 (name, "RegisterProperties") == 0) { gboolean retval; IBusPropList *prop_list; retval = ibus_message_get_args (message, &error, IBUS_TYPE_PROP_LIST, &prop_list, G_TYPE_INVALID); if (!retval) { goto failed; } g_signal_emit (engine, engine_signals[REGISTER_PROPERTIES], 0, prop_list); if (g_object_is_floating (prop_list)) g_object_unref (prop_list); } else if (g_strcmp0 (name, "UpdateProperty") == 0) { IBusProperty *prop; gboolean retval; retval = ibus_message_get_args (message, &error, IBUS_TYPE_PROPERTY, &prop, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[UPDATE_PROPERTY], 0, prop); if (g_object_is_floating (prop)) g_object_unref (prop); } else return FALSE; handled: g_signal_stop_emission_by_name (engine, "ibus-signal"); return TRUE; failed: g_warning ("%s: %s", error->name, error->message); ibus_error_free (error); return FALSE; }
static gboolean bus_engine_proxy_ibus_signal (IBusProxy *proxy, IBusMessage *message) { g_assert (BUS_IS_ENGINE_PROXY (proxy)); g_assert (message != NULL); BusEngineProxy *engine; IBusError *error; gint i; static const struct { const gchar *member; const guint signal_id; } signals [] = { { "ShowPreeditText", SHOW_PREEDIT_TEXT }, { "HidePreeditText", HIDE_PREEDIT_TEXT }, { "ShowAuxiliaryText", SHOW_AUXILIARY_TEXT }, { "HideAuxiliaryText", HIDE_AUXILIARY_TEXT }, { "ShowLookupTable", SHOW_LOOKUP_TABLE }, { "HideLookupTable", HIDE_LOOKUP_TABLE }, { "PageUpLookupTable", PAGE_UP_LOOKUP_TABLE }, { "PageDownLookupTable", PAGE_DOWN_LOOKUP_TABLE }, { "CursorUpLookupTable", CURSOR_UP_LOOKUP_TABLE }, { "CursorDownLookupTable", CURSOR_DOWN_LOOKUP_TABLE }, { NULL, 0}, }; engine = BUS_ENGINE_PROXY (proxy); for (i = 0; ; i++) { if (signals[i].member == NULL) break; if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, signals[i].member)) { g_signal_emit (engine, engine_signals[signals[i].signal_id], 0); goto handled; } } if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "CommitText")) { IBusText *text; gboolean retval; retval = ibus_message_get_args (message, &error, IBUS_TYPE_TEXT, &text, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[COMMIT_TEXT], 0, text); g_object_unref (text); } else if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "ForwardKeyEvent")) { guint32 keyval; guint32 keycode; guint32 states; gboolean retval; retval = ibus_message_get_args (message, &error, G_TYPE_UINT, &keyval, G_TYPE_UINT, &keycode, G_TYPE_UINT, &states, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[FORWARD_KEY_EVENT], keyval, keycode, states); } else if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "UpdatePreeditText")) { IBusText *text; gint cursor_pos; gboolean visible; gboolean retval; retval = ibus_message_get_args (message, &error, IBUS_TYPE_TEXT, &text, G_TYPE_UINT, &cursor_pos, G_TYPE_BOOLEAN, &visible, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[UPDATE_PREEDIT_TEXT], 0, text, cursor_pos, visible); g_object_unref (text); } else if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "UpdateAuxiliaryText")) { IBusText *text; gboolean visible; gboolean retval; retval = ibus_message_get_args (message, &error, IBUS_TYPE_TEXT, &text, G_TYPE_BOOLEAN, &visible, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[UPDATE_AUXILIARY_TEXT], 0, text, visible); g_object_unref (text); } else if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "UpdateLookupTable")) { IBusLookupTable *table; gboolean visible; gboolean retval; retval = ibus_message_get_args (message, &error, IBUS_TYPE_LOOKUP_TABLE, &table, G_TYPE_BOOLEAN, &visible, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[UPDATE_LOOKUP_TABLE], 0, table, visible); g_object_unref (table); } else if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "RegisterProperties")) { gboolean retval; if (engine->prop_list) { g_object_unref (engine->prop_list); engine->prop_list = NULL; } retval = ibus_message_get_args (message, &error, IBUS_TYPE_PROP_LIST, &engine->prop_list, G_TYPE_INVALID); if (!retval) { engine->prop_list = NULL; goto failed; } g_signal_emit (engine, engine_signals[REGISTER_PROPERTIES], 0, engine->prop_list); } else if (ibus_message_is_signal (message, IBUS_INTERFACE_ENGINE, "UpdateProperty")) { IBusProperty *prop; gboolean retval; retval = ibus_message_get_args (message, &error, IBUS_TYPE_PROPERTY, &prop, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (engine, engine_signals[UPDATE_PROPERTY], 0, prop); g_object_unref (prop); } else { return FALSE; } handled: g_signal_stop_emission_by_name (engine, "ibus-signal"); return TRUE; failed: g_warning ("%s: %s", error->name, error->message); ibus_error_free (error); return FALSE; }