void ibus_chewing_lookup_table_resize(IBusLookupTable * iTable,
				      IBusChewingProperties * iProperties,
				      ChewingContext * context)
{
    gint selKSym[MAX_SELKEY];
    const gchar *selKeyStr =
	mkdg_properties_get_string_by_key(iProperties->properties,
					  "sel-keys");
    guint candPerPage =
	mkdg_properties_get_uint_by_key(iProperties->properties,
					"cand-per-page");

    int len = MIN(strlen(selKeyStr), MAX_SELKEY);
    len = MIN(len, candPerPage);
    IBusText *iText;
    int i;
    if (iTable != NULL) {
	ibus_lookup_table_clear(iTable);
	for (i = 0; i < len; i++) {
	    selKSym[i] = (gint) selKeyStr[i];
	    iText = g_object_ref_sink(ibus_text_new_from_unichar
				      ((gunichar) selKeyStr[i]));
	    ibus_lookup_table_set_label(iTable, i, iText);
	}
    }
    chewing_set_candPerPage(context, len);
    chewing_set_selKey(context, selKSym, len);
}
Exemple #2
0
static gboolean
lx_tn_engine_commit_char (LxTNEngine *lx_tn_engine,
                          IBusEngine *ibus_engine,
                          gunichar    new_char)
{
  IBusText *text;

  text = ibus_text_new_from_unichar (new_char);
  ibus_engine_commit_text (ibus_engine, text);

  return TRUE;
}
Exemple #3
0
static void
ibus_m17n_engine_update_lookup_table (IBusM17NEngine *m17n)
{
    ibus_lookup_table_clear (m17n->table);

    if (m17n->context->candidate_list && m17n->context->candidate_show) {
        IBusText *text;
        MPlist *group;
        group = m17n->context->candidate_list;
        gint i = 0;
        gint page = 1;
        IBusM17NEngineClass *klass = (IBusM17NEngineClass *) G_OBJECT_GET_CLASS (m17n);

        while (1) {
            gint len;
            if (mplist_key (group) == Mtext)
                len = mtext_len ((MText *) mplist_value (group));
            else
                len = mplist_length ((MPlist *) mplist_value (group));

            if (i + len > m17n->context->candidate_index)
                break;

            i += len;
            group = mplist_next (group);
            page ++;
        }

        if (mplist_key (group) == Mtext) {
            MText *mt;
            gunichar *buf;
            glong nchars, i;

            mt = (MText *) mplist_value (group);
            ibus_lookup_table_set_page_size (m17n->table, mtext_len (mt));

            buf = ibus_m17n_mtext_to_ucs4 (mt, &nchars);
            for (i = 0; i < nchars; i++) {
                ibus_lookup_table_append_candidate (m17n->table, ibus_text_new_from_unichar (buf[i]));
            }
            g_free (buf);
        }
        else {
            MPlist *p;

            p = (MPlist *) mplist_value (group);
            ibus_lookup_table_set_page_size (m17n->table, mplist_length (p));

            for (; mplist_key (p) != Mnil; p = mplist_next (p)) {
                MText *mtext;
                gchar *buf;

                mtext = (MText *) mplist_value (p);
                buf = ibus_m17n_mtext_to_utf8 (mtext);
                if (buf) {
                    ibus_lookup_table_append_candidate (m17n->table, ibus_text_new_from_string (buf));
                    g_free (buf);
                }
            }
        }

        ibus_lookup_table_set_cursor_pos (m17n->table, m17n->context->candidate_index - i);
        ibus_lookup_table_set_orientation (m17n->table, klass->lookup_table_orientation);

        text = ibus_text_new_from_printf ("( %d / %d )", page, mplist_length (m17n->context->candidate_list));

        ibus_engine_update_lookup_table ((IBusEngine *)m17n, m17n->table, TRUE);
        ibus_engine_update_auxiliary_text ((IBusEngine *)m17n, text, TRUE);
    }
    else {
        ibus_engine_hide_lookup_table ((IBusEngine *)m17n);
        ibus_engine_hide_auxiliary_text ((IBusEngine *)m17n);
    }
}