static void _context_update_preedit_text_cb (IBusInputContext *context, IBusText *text, gint cursor_pos, gboolean visible, X11IC *x11ic) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); g_assert (IBUS_IS_TEXT (text)); g_assert (x11ic); if (x11ic->preedit_string) { g_free(x11ic->preedit_string); } x11ic->preedit_string = g_strdup(text->text); if (x11ic->preedit_attrs) { g_object_unref (x11ic->preedit_attrs); } g_object_ref(text->attrs); x11ic->preedit_attrs = text->attrs; x11ic->preedit_cursor = cursor_pos; x11ic->preedit_visible = visible; _update_preedit (x11ic); }
IBusEngineDesc * ibus_input_context_get_engine (IBusInputContext *context) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); IBusMessage *reply_message; IBusError *error = NULL; IBusSerializable *object = NULL; reply_message = ibus_proxy_call_with_reply_and_block ((IBusProxy *) context, "GetEngine", -1, &error, G_TYPE_INVALID); if (!reply_message) { g_debug ("%s: %s", error->name, error->message); ibus_error_free (error); return NULL; } if (!ibus_message_get_args (reply_message, &error, IBUS_TYPE_ENGINE_DESC, &object, G_TYPE_INVALID)) { g_debug ("%s: %s", error->name, error->message); ibus_error_free (error); ibus_message_unref (reply_message); return NULL; } ibus_message_unref (reply_message); return IBUS_ENGINE_DESC (object); }
gboolean ibus_input_context_is_enabled (IBusInputContext *context) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); gboolean retval = FALSE; IBusMessage *reply_message; IBusError *error = NULL; reply_message = ibus_proxy_call_with_reply_and_block ((IBusProxy *) context, "IsEnabled", -1, &error, G_TYPE_INVALID); if (!reply_message) { g_debug ("%s: %s", error->name, error->message); ibus_error_free (error); return FALSE; } if (!ibus_message_get_args (reply_message, &error, G_TYPE_BOOLEAN, &retval, G_TYPE_INVALID)) { g_debug ("%s: %s", error->name, error->message); ibus_error_free (error); retval = FALSE; } ibus_message_unref (reply_message); return retval; }
static void _context_disabled_cb (IBusInputContext *context, X11IC *x11ic) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); g_assert (x11ic); _xim_preedit_end (_xims, x11ic); }
static void _context_hide_preedit_text_cb (IBusInputContext *context, X11IC *x11ic) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); g_assert (x11ic); x11ic->preedit_visible = FALSE; _update_preedit (x11ic); }
static void _bus_disabled_cb (IBusInputContext *ibuscontext, BusTestClient *client) { g_assert (IBUS_IS_INPUT_CONTEXT (ibuscontext)); g_assert (BUS_IS_TEST_CLIENT (client)); IDEBUG ("%s", __FUNCTION__); client->enabled = FALSE; IDEBUG ("Disabled ibus engine"); }
void ibus_input_context_set_engine (IBusInputContext *context, const gchar *name) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); ibus_proxy_call ((IBusProxy *) context, "SetEngine", G_TYPE_STRING, &name, G_TYPE_INVALID); }
void ibus_input_context_property_hide (IBusInputContext *context, const gchar *prop_name) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); ibus_proxy_call ((IBusProxy *) context, "PropertyHide", G_TYPE_STRING, &prop_name, G_TYPE_INVALID); }
void ibus_input_context_set_capabilities (IBusInputContext *context, guint32 capabilites) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); ibus_proxy_call ((IBusProxy *) context, "SetCapabilities", G_TYPE_UINT, &capabilites, G_TYPE_INVALID); }
void ibus_input_context_property_activate (IBusInputContext *context, const gchar *prop_name, gint32 state) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); ibus_proxy_call ((IBusProxy *) context, "PropertyActivate", G_TYPE_STRING, &prop_name, G_TYPE_INT, &state, G_TYPE_INVALID); }
void ibus_input_context_set_cursor_location (IBusInputContext *context, gint32 x, gint32 y, gint32 w, gint32 h) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); ibus_proxy_call ((IBusProxy *) context, "SetCursorLocation", G_TYPE_INT, &x, G_TYPE_INT, &y, G_TYPE_INT, &w, G_TYPE_INT, &h, G_TYPE_INVALID); }
static void _context_commit_text_cb (IBusInputContext *context, IBusText *text, X11IC *x11ic) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); g_assert (IBUS_IS_TEXT (text)); g_assert (x11ic != NULL); XTextProperty tp; IMCommitStruct cms = {0}; Xutf8TextListToTextProperty (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), (gchar **)&(text->text), 1, XCompoundTextStyle, &tp); cms.major_code = XIM_COMMIT; cms.icid = x11ic->icid; cms.connect_id = x11ic->connect_id; cms.flag = XimLookupChars; cms.commit_string = (gchar *)tp.value; IMCommitString (_xims, (XPointer) & cms); XFree (tp.value); }
gboolean ibus_input_context_process_key_event (IBusInputContext *context, guint32 keyval, guint32 keycode, guint32 state) { g_assert (IBUS_IS_INPUT_CONTEXT (context)); IBusMessage *reply_message; IBusPendingCall *pending = NULL; IBusError *error = NULL; gboolean retval; if (state & IBUS_HANDLED_MASK) return TRUE; if (state & IBUS_IGNORED_MASK) return FALSE; retval = ibus_proxy_call_with_reply ((IBusProxy *) context, "ProcessKeyEvent", &pending, -1, &error, G_TYPE_UINT, &keyval, G_TYPE_UINT, &keycode, G_TYPE_UINT, &state, G_TYPE_INVALID); if (!retval) { g_debug ("%s: %s", error->name, error->message); ibus_error_free (error); return FALSE; } /* wait reply or timeout */ IBusConnection *connection = ibus_proxy_get_connection ((IBusProxy *) context); while (!ibus_pending_call_get_completed (pending)) { ibus_connection_read_write_dispatch (connection, -1); } reply_message = ibus_pending_call_steal_reply (pending); ibus_pending_call_unref (pending); if (reply_message == NULL) { g_debug ("%s: Do not recevie reply of ProcessKeyEvent", DBUS_ERROR_NO_REPLY); retval = FALSE; } else if ((error = ibus_error_new_from_message (reply_message)) != NULL) { g_debug ("%s: %s", error->name, error->message); ibus_message_unref (reply_message); ibus_error_free (error); retval = FALSE; } else { if (!ibus_message_get_args (reply_message, &error, G_TYPE_BOOLEAN, &retval, G_TYPE_INVALID)) { g_debug ("%s: %s", error->name, error->message); ibus_error_free (error); retval = FALSE; } ibus_message_unref (reply_message); } return retval; }
static gboolean ibus_input_context_ibus_signal (IBusProxy *proxy, IBusMessage *message) { g_assert (IBUS_IS_INPUT_CONTEXT (proxy)); g_assert (message != NULL); g_assert (ibus_message_get_type (message) == DBUS_MESSAGE_TYPE_SIGNAL); IBusInputContext *context; IBusError *error = NULL; gint i; const gchar *interface; const gchar *name; context = IBUS_INPUT_CONTEXT (proxy); static const struct { const gchar *member; guint signal_id; } signals [] = { { "Enabled", ENABLED }, { "Disabled", DISABLED }, { "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 }, }; do { interface = ibus_message_get_interface (message); name = ibus_message_get_member (message); if (interface != NULL && g_strcmp0 (interface, IBUS_INTERFACE_INPUT_CONTEXT) != 0) { error = ibus_error_new_from_printf (DBUS_ERROR_FAILED, "Signal %s.%s is not handled", interface, name); break; } 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) { g_signal_emit (context, context_signals[COMMIT_TEXT], 0, text); if (g_object_is_floating (text)) g_object_unref (text); } break; } if (g_strcmp0 (name, "UpdatePreeditText") == 0) { IBusText *text; gint32 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) { g_signal_emit (context, context_signals[UPDATE_PREEDIT_TEXT], 0, text, cursor_pos, visible); if (g_object_is_floating (text)) g_object_unref (text); } break; } for (i = 0; i < G_N_ELEMENTS (signals) && g_strcmp0 (name, signals[i].member) != 0; i++); if (i < G_N_ELEMENTS (signals)) { g_signal_emit (context, context_signals[signals[i].signal_id], 0); break; } 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) { g_signal_emit (context, context_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) { g_signal_emit (context, context_signals[UPDATE_LOOKUP_TABLE], 0, table, visible); if (g_object_is_floating (table)) g_object_unref (table); } } else if (g_strcmp0 (name, "RegisterProperties") == 0) { IBusPropList *prop_list; gboolean retval; retval = ibus_message_get_args (message, &error, IBUS_TYPE_PROP_LIST, &prop_list, G_TYPE_INVALID); if (retval) { g_signal_emit (context, context_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) { g_signal_emit (context, context_signals[UPDATE_PROPERTY], 0, prop); if (g_object_is_floating (prop)) g_object_unref (prop); } } else if (g_strcmp0 (name, "ForwardKeyEvent") == 0) { guint32 keyval; guint32 keycode; guint32 state; gboolean retval; retval = ibus_message_get_args (message, &error, G_TYPE_UINT, &keyval, G_TYPE_UINT, &keycode, G_TYPE_UINT, &state, G_TYPE_INVALID); if (retval) { g_signal_emit (context, context_signals[FORWARD_KEY_EVENT], 0, keyval, keycode, state | IBUS_FORWARD_MASK); } } 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) { g_signal_emit (context, context_signals[DELETE_SURROUNDING_TEXT], 0, offset_from_cursor, nchars); } } else { error = ibus_error_new_from_printf (DBUS_ERROR_FAILED, "Signal %s.%s is not handled", interface, name); break; } } while (0); if (error == NULL) { g_signal_stop_emission_by_name (context, "ibus-signal"); return TRUE; } /* some error happens */ g_warning ("%s: %s", error->name, error->message); ibus_error_free (error); return FALSE; }