Exemplo n.º 1
0
BusEngineProxy *
bus_engine_proxy_new (const gchar    *path,
                      IBusEngineDesc *desc,
                      BusConnection  *connection)
{
    g_assert (path);
    g_assert (IBUS_IS_ENGINE_DESC (desc));
    g_assert (BUS_IS_CONNECTION (connection));

    BusEngineProxy *engine;

    engine = (BusEngineProxy *) g_object_new (BUS_TYPE_ENGINE_PROXY,
                                              "name", NULL,
                                              "path", path,
                                              "connection", connection,
                                              NULL);

    engine->desc = desc;
    g_object_ref_sink (desc);
    if (desc->layout != NULL && desc->layout[0] != '\0') {
        engine->keymap = ibus_keymap_get (desc->layout);
    }

    if (engine->keymap == NULL) {
        engine->keymap = ibus_keymap_get ("us");
    }

    return engine;
}
Exemplo n.º 2
0
void
ibus_hangul_init (IBusBus *bus)
{
    GVariant* value;

    hanja_table = hanja_table_load (NULL);

    symbol_table = hanja_table_load (IBUSHANGUL_DATADIR "/data/symbol.txt");

    config = ibus_bus_get_config (bus);
    if (config)
        g_object_ref_sink (config);

    hangul_keyboard = g_string_new_len ("2", 8);
    value = ibus_config_get_value (config, "engine/Hangul",
                                         "HangulKeyboard");
    if (value != NULL) {
        const gchar* str = g_variant_get_string (value, NULL);
        g_string_assign (hangul_keyboard, str);
        g_variant_unref(value);
    }

    hanja_key_list_init(&hanja_keys);

    value = ibus_config_get_value (config, "engine/Hangul",
                                         "HanjaKeys");
    if (value != NULL) {
        const gchar* str = g_variant_get_string (value, NULL);
        hanja_key_list_set_from_string(&hanja_keys, str);
        g_variant_unref(value);
    } else {
	hanja_key_list_append(&hanja_keys, IBUS_Hangul_Hanja, 0);
	hanja_key_list_append(&hanja_keys, IBUS_F9, 0);
    }

    value = ibus_config_get_value (config, "engine/Hangul",
                                         "WordCommit");
    if (value != NULL) {
        word_commit = g_variant_get_boolean (value);
        g_variant_unref(value);
    }

    value = ibus_config_get_value (config, "engine/Hangul", "AutoReorder");
    if (value != NULL) {
        auto_reorder = g_variant_get_boolean (value);
        g_variant_unref (value);
    }

    keymap = ibus_keymap_get("us");
}
Exemplo n.º 3
0
/* Note on AltGr (Level3 Shift) handling: While currently we expect
   AltGr == mod5, it would be better to not expect the modifier always
   be assigned to particular modX.  However, it needs some code like:

   KeyCode altgr = XKeysymToKeycode (display, XK_ISO_Level3_Shift);
   XModifierKeymap *mods = XGetModifierMapping (display);
   for (i = 3; i < 8; i++)
     for (j = 0; j < mods->max_keypermod; j++) {
       KeyCode code = mods->modifiermap[i * mods->max_keypermod + j];
       if (code == altgr)
         ...
     }
                
   Since IBus engines are supposed to be cross-platform, the code
   should go into IBus core, instead of ibus-m17n. */
MSymbol
ibus_m17n_key_event_to_symbol (guint keycode,
                               guint keyval,
                               guint modifiers)
{
    GString *keysym;
    MSymbol mkeysym = Mnil;
    guint mask = 0;
    IBusKeymap *keymap;

    if (keyval >= IBUS_Shift_L && keyval <= IBUS_Hyper_R) {
        return Mnil;
    }

    /* Here, keyval is already translated by IBUS_MOD5_MASK.  Obtain
       the untranslated keyval from the underlying keymap and
       represent the translated keyval as the form "G-<untranslated
       keyval>", which m17n-lib accepts. */
    if (modifiers & IBUS_MOD5_MASK) {
        keymap = ibus_keymap_get ("us");
        keyval = ibus_keymap_lookup_keysym (keymap, keycode,
                                            modifiers & ~IBUS_MOD5_MASK);
        g_object_unref (keymap);
    }

    keysym = g_string_new ("");

    if (keyval >= IBUS_space && keyval <= IBUS_asciitilde) {
        gint c = keyval;

        if (keyval == IBUS_space && modifiers & IBUS_SHIFT_MASK)
            mask |= IBUS_SHIFT_MASK;

        if (modifiers & IBUS_CONTROL_MASK) {
            if (c >= IBUS_a && c <= IBUS_z)
                c += IBUS_A - IBUS_a;
            mask |= IBUS_CONTROL_MASK;
        }

        g_string_append_c (keysym, c);
    }
    else {
        mask |= modifiers & (IBUS_CONTROL_MASK | IBUS_SHIFT_MASK);
        g_string_append (keysym, ibus_keyval_name (keyval));
        if (keysym->len == 0) {
            g_string_free (keysym, TRUE);
            return Mnil;
        }
    }

    mask |= modifiers & (IBUS_MOD1_MASK |
                         IBUS_MOD5_MASK |
                         IBUS_META_MASK |
                         IBUS_SUPER_MASK |
                         IBUS_HYPER_MASK);


    if (mask & IBUS_HYPER_MASK) {
        g_string_prepend (keysym, "H-");
    }
    if (mask & IBUS_SUPER_MASK) {
        g_string_prepend (keysym, "s-");
    }
    if (mask & IBUS_MOD5_MASK) {
        g_string_prepend (keysym, "G-");
    }
    if (mask & IBUS_MOD1_MASK) {
        g_string_prepend (keysym, "A-");
    }
    if (mask & IBUS_META_MASK) {
        g_string_prepend (keysym, "M-");
    }
    if (mask & IBUS_CONTROL_MASK) {
        g_string_prepend (keysym, "C-");
    }
    if (mask & IBUS_SHIFT_MASK) {
        g_string_prepend (keysym, "S-");
    }

    mkeysym = msymbol (keysym->str);
    g_string_free (keysym, TRUE);

    return mkeysym;
}
Exemplo n.º 4
0
IBusKeymap *
ibus_keymap_new (const gchar *name)
{
    return ibus_keymap_get (name);
}