static void _bus_disconnected_cb (IBusBus *ibusbus, BusTestClient *client) { g_assert (IBUS_IS_BUS (ibusbus)); g_assert (BUS_IS_TEST_CLIENT (client)); IDEBUG ("%s", __FUNCTION__); client->connected = FALSE; IDEBUG ("Disconnected ibus daemon"); }
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"); }
gboolean bus_test_client_send_key (BusTestClient *client, guint keysym) { gboolean is_modifier = _is_modifier_key (keysym); gint16 keycode; guint state; if (is_modifier) { IDEBUG ("key: %d is modifier.", keysym); gboolean is_modifier_set = _is_modifier_set (client, keysym); keycode = _get_keysym_to_keycode (keysym); state = _get_modifiers_to_mask (client); if (is_modifier_set) { state |= IBUS_RELEASE_MASK; } ibus_input_context_process_key_event (client->ibuscontext, keysym, keycode, state); _store_modifier_state (client, keysym); } else { IDEBUG ("key: %d is not modifier.", keysym); gboolean is_upper = !gdk_keyval_is_lower (keysym); gboolean is_shift_set = _is_shift_set (client); if (is_upper && !is_shift_set) { _store_modifier_state (client, IBUS_Shift_L); } keycode = _get_keysym_to_keycode (keysym); state = _get_modifiers_to_mask (client); ibus_input_context_process_key_event (client->ibuscontext, keysym, keycode, state); state |= IBUS_RELEASE_MASK; ibus_input_context_process_key_event (client->ibuscontext, keysym, keycode, state); if (is_upper && !is_shift_set) { _store_modifier_state (client, IBUS_Shift_L); } } return TRUE; }
static void bus_test_client_destroy (IBusObject *object) { IDEBUG ("%s", __FUNCTION__); BusTestClient *client = BUS_TEST_CLIENT (object); g_object_unref (client->ibuscontext); }
void print_link(pnode_t p) { int i = 0; while (p != NULL) { IDEBUG("%ld:%s", p->pos, p->word); p = p->pnext; if ((i++) % 1000 == 0) getchar(); } }
BusTestClient * bus_test_client_new (void) { IDEBUG ("%s", __FUNCTION__); BusTestClient *client = BUS_TEST_CLIENT (g_object_new (BUS_TYPE_TEST_CLIENT, NULL)); if (client->connected && client->enabled) { return client; } else { return NULL; } }
static void bus_test_client_init (BusTestClient *client) { IDEBUG ("%s", __FUNCTION__); gchar *active_engine_name; client->connected = FALSE; client->enabled = FALSE; g_return_if_fail (ibus_bus_is_connected (_bus)); client->connected = TRUE; client->ibuscontext = ibus_bus_create_input_context (_bus, "test-client"); g_return_if_fail (client->ibuscontext != NULL); g_object_ref_sink (client->ibuscontext); g_signal_connect (client->ibuscontext, "disabled", G_CALLBACK (_bus_disabled_cb), client); bus_test_client_clear_modifier (client); client->caps = IBUS_CAP_FOCUS; ibus_input_context_set_capabilities (client->ibuscontext, client->caps); active_engine_name = _get_active_engine_name (); g_return_if_fail (active_engine_name != NULL); IDEBUG ("engine:%s", active_engine_name); ibus_input_context_focus_in (client->ibuscontext); ibus_input_context_set_engine (client->ibuscontext, active_engine_name); g_free (active_engine_name); ibus_input_context_enable (client->ibuscontext); client->enabled = TRUE; }
static void bus_test_client_class_init (BusTestClientClass *klass) { IDEBUG ("%s", __FUNCTION__); IBusObjectClass *ibus_object_class = IBUS_OBJECT_CLASS (klass); ibus_object_class->destroy = bus_test_client_destroy; /* init display object */ if (_xdisplay == NULL) { _xdisplay = XOpenDisplay (gdk_display_get_name (gdk_display_get_default ())); } /* init bus object */ if (_bus == NULL) { ibus_set_display (XDisplayString (_xdisplay)); _bus = ibus_bus_new(); } g_signal_connect (_bus, "disconnected", G_CALLBACK (_bus_disconnected_cb), NULL); }
gboolean bus_test_client_is_connected (BusTestClient *client) { IDEBUG ("%s", __FUNCTION__); return client->connected; }
gboolean bus_test_client_is_enabled (BusTestClient *client) { IDEBUG ("%s", __FUNCTION__); return client->enabled; }