Пример #1
0
Файл: main.c Проект: KDE/kimtoy
static gboolean
x11_fd_dispatch(GSource* source, GSourceFunc callback, gpointer user_data)
{
    Display *dpy = ((x11_source_t*)source)->dpy;

    XEvent e;

    while (XPending(dpy))
    {

        XNextEvent(dpy, &e);
        if (e.type == KeyPress)
        {
//             g_print("KeyPress!!!\n");

            static const gchar *names[64] = {0};
            names[0] = "xkb:us::eng";

            static int inited = 0;
            if (!inited)
            {
                IBusConfig *config = ibus_bus_get_config (bus);
                GVariant *engines = ibus_config_get_value (config, "general", "preload-engines");
                if (!engines)
                    continue;

                int i = 1;

                GVariantIter iter;
                GVariant *child;
                g_variant_iter_init (&iter, engines);
                while ((child = g_variant_iter_next_value (&iter)) != NULL) {
                    const gchar *engine_name = g_variant_get_string (child, NULL);
//                     g_print("engine_name %s\n", engine_name);
                    names[i] = engine_name;
                    i++;
                    g_variant_unref (child);
                }

                inited = 1;
            }

            static int n = 0;
            n = n==0? 1 : 0;
            ibus_bus_set_global_engine(bus, names[n]);
        }

    }

    return TRUE;
}
Пример #2
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;
}