Exemplo n.º 1
0
const char* EngineManager::navigate(IBusEngineDesc* engine, bool forward)
{
    if (length() == 0) {
        return "";
    }

    size_t i = 0;
    for ( ; i < m_length; i ++) {
        if (m_engines[i] == engine ||
            0 == g_strcmp0(ibus_engine_desc_get_name(engine), ibus_engine_desc_get_name(m_engines[i]))) {
            break;
        }
    }
    i = (i + (forward ? 1 : (length() - 1))) % length();
    return ibus_engine_desc_get_name(m_engines[i]);
}
Exemplo n.º 2
0
QStringList EngineManager::engineOrder()
{
    QStringList list;
    for (size_t i = 0; i < m_length; i++) {
        list << QString::fromUtf8(ibus_engine_desc_get_name(m_engines[i]));
    }
    return list;
}
Exemplo n.º 3
0
void
global_engine_changed_cb (IBusBus *bus)
{
	IBusEngineDesc *global_engine = ibus_bus_get_global_engine (bus);
	const gchar *name = NULL;

	g_assert (global_engine);

	name = ibus_engine_desc_get_name (global_engine);
	g_debug ("%s (id:%s, icon:%s)",
	         ibus_engine_desc_get_longname (global_engine),
	         name,
	         ibus_engine_desc_get_icon (global_engine));
	IBusEngineDesc *engine_desc = IBUS_ENGINE_DESC (current_engine->data);

	g_assert (strcmp (name,
	                  ibus_engine_desc_get_name (engine_desc)) == 0);
	g_object_unref (global_engine);
}
Exemplo n.º 4
0
QString EngineManager::currentEngine()
{
    if (m_engineMap.contains(m_currentContext)) {
        return m_engineMap[m_currentContext];
    } else if (m_length > 0) {
        return QString::fromUtf8(ibus_engine_desc_get_name(m_engines[0]));
    } else {
        return QString();
    }
}
Exemplo n.º 5
0
size_t EngineManager::getIndexByName(const char* name)
{
    size_t i = 0;
    for ( ; i < m_length; i++) {
        if (0 == g_strcmp0(name, ibus_engine_desc_get_name(m_engines[i]))) {
            break;
        }
    }
    return i;
}
Exemplo n.º 6
0
static gchar *
get_last_engine_id (const GList *engines)
{
    const char *result = NULL;
    for (; engines; engines = g_list_next (engines)) {
        IBusEngineDesc *engine_desc = IBUS_ENGINE_DESC (engines->data);
        g_assert (engine_desc);
        result = ibus_engine_desc_get_name (engine_desc);
    }
    return g_strdup (result);
}
Exemplo n.º 7
0
static void
print_engines (const GList *engines)
{
    for (; engines; engines = g_list_next (engines)) {
        IBusEngineDesc *engine_desc = IBUS_ENGINE_DESC (engines->data);
        g_assert (engine_desc);
#if 0
        g_debug ("%s (id:%s, icon:%s)",
                 ibus_engine_desc_get_longname (engine_desc),
                 ibus_engine_desc_get_name (engine_desc),
                 ibus_engine_desc_get_icon (engine_desc));
#endif
    }
}
Exemplo n.º 8
0
static void
test_input_context (void)
{
    GList *engines;
    gchar *active_engine_name = NULL;
    IBusInputContext *context;
    IBusEngineDesc *engine_desc;
    gchar *current_ic;

    context = ibus_bus_create_input_context (bus, "test");
    call_basic_ipcs (context);

    engines = ibus_bus_list_active_engines (bus);
    if (engines != NULL) {
        active_engine_name = get_last_engine_id (engines);
    } else {
        active_engine_name = g_strdup ("dummy");
    }
    g_assert (active_engine_name);
    g_debug ("Use '%s' for testing.", active_engine_name);

    ibus_input_context_set_engine (context, active_engine_name);
    current_ic = ibus_bus_current_input_context (bus);
    g_assert (!strcmp (current_ic, g_dbus_proxy_get_object_path ((GDBusProxy *)context)));

    g_test_log_set_fatal_handler (fatal_handler, NULL);
    engine_desc = ibus_input_context_get_engine (context);
    if (engine_desc) {
        /* FIXME race condition between ibus_input_context_set_engine and _get_engine.
         * ibus_input_context_get_engine is not guaranteed to return non-NULL
         * (even if we use synchronous set_engine()) because ibus-daemon sets a context
         * engine in an asynchronous manner. See _context_request_engine_cb in
         * ibusimpl.c which handles context_signals[REQUEST_ENGINE] signal. */
        g_assert (!strcmp (active_engine_name, ibus_engine_desc_get_name(engine_desc)));
        g_object_unref (engine_desc);
        engine_desc = NULL;
    }
    ibus_input_context_process_key_event (context, 0, 0, 0);

    /* An engine is set. Try to call basic IPCs again. */
    call_basic_ipcs (context);

    g_free (current_ic);
    g_object_unref (context);

    g_free (active_engine_name);
    g_list_foreach (engines, (GFunc) g_object_unref, NULL);
    g_list_free (engines);
}
Exemplo n.º 9
0
void EngineManager::moveToFirst(IBusEngineDesc* engine)
{
    size_t i = 0;
    while (i < length()) {
        if (m_engines[i] == engine ||
            0 == g_strcmp0(ibus_engine_desc_get_name(engine), ibus_engine_desc_get_name(m_engines[i]))) {
            break;
        }
        i++;
    }
    if (i == 0) {
        return;
    }
    if (i >= m_length) {
        return;
    }

    engine = m_engines[i];

    for (int j = i; j > 0; j--) {
        m_engines[j] = m_engines[j - 1];
    }
    m_engines[0] = engine;
}
Exemplo n.º 10
0
gboolean
change_global_engine_cb (IBusBus *bus)
{
	if (!current_engine)
		current_engine = engines;
	else
		current_engine = g_list_next (current_engine);

	if (!current_engine) {
		ibus_quit();
		return FALSE;
	}

	IBusEngineDesc *engine_desc = IBUS_ENGINE_DESC (current_engine->data);

	ibus_bus_set_global_engine (bus,
	                            ibus_engine_desc_get_name (engine_desc));

	return TRUE;
}
static void
fetch_ibus_engines_result (GObject      *object,
                           GAsyncResult *result,
                           GtkBuilder   *builder)
{
  gboolean show_all_sources;
  GList *list, *l;
  GError *error;

  error = NULL;
  list = ibus_bus_list_engines_async_finish (ibus, result, &error);

  g_clear_object (&ibus_cancellable);

  if (!list && error)
    {
      g_warning ("Couldn't finish IBus request: %s", error->message);
      g_error_free (error);
      return;
    }

  show_all_sources = g_settings_get_boolean (input_sources_settings, "show-all-sources");

  /* Maps engine ids to engine description objects */
  ibus_engines = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_object_unref);

  for (l = list; l; l = l->next)
    {
      IBusEngineDesc *engine = l->data;
      const gchar *engine_id = ibus_engine_desc_get_name (engine);

      if (show_all_sources || strv_contains (supported_ibus_engines, engine_id))
        g_hash_table_replace (ibus_engines, (gpointer)engine_id, engine);
      else
        g_object_unref (engine);
    }
  g_list_free (list);

  update_ibus_active_sources (builder);
}
Exemplo n.º 12
0
static void start_component (void) {
    GList* engines;
    GList* p;
    IBusComponent* component;

    ibus_init ();
    UnikeySetup ();

    bus = ibus_bus_new ();
    g_signal_connect (bus, "disconnected", G_CALLBACK(ibus_disconnected_cb), NULL);

    component = ibus_unikey_get_component ();

    factory = ibus_factory_new (ibus_bus_get_connection (bus));

    engines = ibus_component_get_engines (component);
    for (p = engines; p != NULL; p = p->next) {
        IBusEngineDesc* engine = (IBusEngineDesc*)p->data;
#if IBUS_CHECK_VERSION(1,3,99)
        ibus_factory_add_engine (factory, ibus_engine_desc_get_name(engine),
                                 IBUS_TYPE_UNIKEY_ENGINE);
#else
        ibus_factory_add_engine (factory, engine->name, IBUS_TYPE_UNIKEY_ENGINE);
#endif
    }

    if (ibus)
        ibus_bus_request_name (bus, "org.freedesktop.IBus.Unikey", 0);
    else
        ibus_bus_register_component (bus, component);

    g_object_unref (component);

    ibus_unikey_init (bus);
    ibus_main ();
    ibus_unikey_exit ();
}