|
Packit Service |
1d8f1c |
/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
|
|
Packit Service |
1d8f1c |
/* vim:set et sts=4: */
|
|
Packit Service |
1d8f1c |
/* IBus - The Input Bus
|
|
Packit Service |
1d8f1c |
* Copyright (C) 2008-2010 Peng Huang <shawn.p.huang@gmail.com>
|
|
Packit Service |
1d8f1c |
* Copyright (C) 2008-2010 Red Hat, Inc.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
1d8f1c |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
1d8f1c |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
1d8f1c |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
1d8f1c |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
1d8f1c |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
1d8f1c |
* Lesser General Public License for more details.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
1d8f1c |
* License along with this library; if not, write to the Free Software
|
|
Packit Service |
1d8f1c |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
|
Packit Service |
1d8f1c |
* USA
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
#include "ibuslookuptable.h"
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* functions prototype */
|
|
Packit Service |
1d8f1c |
static void ibus_lookup_table_destroy (IBusLookupTable *table);
|
|
Packit Service |
1d8f1c |
static gboolean ibus_lookup_table_serialize (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
GVariantBuilder *builder);
|
|
Packit Service |
1d8f1c |
static gint ibus_lookup_table_deserialize (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
GVariant *variant);
|
|
Packit Service |
1d8f1c |
static gboolean ibus_lookup_table_copy (IBusLookupTable *dest,
|
|
Packit Service |
1d8f1c |
IBusLookupTable *src);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
G_DEFINE_TYPE (IBusLookupTable, ibus_lookup_table, IBUS_TYPE_SERIALIZABLE)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_class_init (IBusLookupTableClass *class)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusObjectClass *object_class = IBUS_OBJECT_CLASS (class);
|
|
Packit Service |
1d8f1c |
IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (class);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
object_class->destroy = (IBusObjectDestroyFunc) ibus_lookup_table_destroy;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
serializable_class->serialize = (IBusSerializableSerializeFunc) ibus_lookup_table_serialize;
|
|
Packit Service |
1d8f1c |
serializable_class->deserialize = (IBusSerializableDeserializeFunc) ibus_lookup_table_deserialize;
|
|
Packit Service |
1d8f1c |
serializable_class->copy = (IBusSerializableCopyFunc) ibus_lookup_table_copy;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_init (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
table->candidates = g_array_new (TRUE, TRUE, sizeof (IBusText *));
|
|
Packit Service |
1d8f1c |
table->labels = g_array_new (TRUE, TRUE, sizeof (IBusText *));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_destroy (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusText **p;
|
|
Packit Service |
1d8f1c |
gint i;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (table->candidates != NULL) {
|
|
Packit Service |
1d8f1c |
p = (IBusText **) g_array_free (table->candidates, FALSE);
|
|
Packit Service |
1d8f1c |
table->candidates = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
for (i = 0; p[i] != NULL; i++) {
|
|
Packit Service |
1d8f1c |
g_object_unref (p[i]);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_free (p);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (table->labels != NULL) {
|
|
Packit Service |
1d8f1c |
p = (IBusText **) g_array_free (table->labels, FALSE);
|
|
Packit Service |
1d8f1c |
table->labels = NULL;
|
|
Packit Service |
1d8f1c |
for (i = 0; p[i] != NULL; i++) {
|
|
Packit Service |
1d8f1c |
g_object_unref (p[i]);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_free (p);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBUS_OBJECT_CLASS (ibus_lookup_table_parent_class)->destroy ((IBusObject *) table);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gboolean
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_serialize (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
GVariantBuilder *builder)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
gboolean retval;
|
|
Packit Service |
1d8f1c |
guint i;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
retval = IBUS_SERIALIZABLE_CLASS (ibus_lookup_table_parent_class)->serialize ((IBusSerializable *)table, builder);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (retval, 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (table), 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_builder_add (builder, "u", table->page_size);
|
|
Packit Service |
1d8f1c |
g_variant_builder_add (builder, "u", table->cursor_pos);
|
|
Packit Service |
1d8f1c |
g_variant_builder_add (builder, "b", table->cursor_visible);
|
|
Packit Service |
1d8f1c |
g_variant_builder_add (builder, "b", table->round);
|
|
Packit Service |
1d8f1c |
g_variant_builder_add (builder, "i", table->orientation);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariantBuilder array;
|
|
Packit Service |
1d8f1c |
/* append candidates */
|
|
Packit Service |
1d8f1c |
g_variant_builder_init (&array, G_VARIANT_TYPE ("av"));
|
|
Packit Service |
1d8f1c |
for (i = 0;; i++) {
|
|
Packit Service |
1d8f1c |
IBusText *text = ibus_lookup_table_get_candidate (table, i);
|
|
Packit Service |
1d8f1c |
if (text == NULL)
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
g_variant_builder_add (&array, "v", ibus_serializable_serialize ((IBusSerializable *)text));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_builder_add (builder, "av", &array);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* append labels */
|
|
Packit Service |
1d8f1c |
g_variant_builder_init (&array, G_VARIANT_TYPE ("av"));
|
|
Packit Service |
1d8f1c |
for (i = 0;; i++) {
|
|
Packit Service |
1d8f1c |
IBusText *text = ibus_lookup_table_get_label (table, i);
|
|
Packit Service |
1d8f1c |
if (text == NULL)
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_builder_add (&array, "v", ibus_serializable_serialize ((IBusSerializable *)text));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_builder_add (builder, "av", &array);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gint
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_deserialize (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
GVariant *variant)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
gint retval;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
retval = IBUS_SERIALIZABLE_CLASS (ibus_lookup_table_parent_class)->deserialize ((IBusSerializable *)table, variant);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (retval, 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (table), 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_get_child (variant, retval++, "u", &table->page_size);
|
|
Packit Service |
1d8f1c |
g_variant_get_child (variant, retval++, "u", &table->cursor_pos);
|
|
Packit Service |
1d8f1c |
g_variant_get_child (variant, retval++, "b", &table->cursor_visible);
|
|
Packit Service |
1d8f1c |
g_variant_get_child (variant, retval++, "b", &table->round);
|
|
Packit Service |
1d8f1c |
g_variant_get_child (variant, retval++, "i", &table->orientation);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *var;
|
|
Packit Service |
1d8f1c |
// deserialize candidates
|
|
Packit Service |
1d8f1c |
GVariantIter *iter = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get_child (variant, retval++, "av", &iter);
|
|
Packit Service |
1d8f1c |
while (g_variant_iter_loop (iter, "v", &var)) {
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_append_candidate (table, IBUS_TEXT (ibus_serializable_deserialize (var)));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_iter_free (iter);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
// deserialize labels
|
|
Packit Service |
1d8f1c |
iter = NULL;
|
|
Packit Service |
1d8f1c |
g_variant_get_child (variant, retval++, "av", &iter);
|
|
Packit Service |
1d8f1c |
while (g_variant_iter_loop (iter, "v", &var)) {
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_append_label (table, IBUS_TEXT (ibus_serializable_deserialize (var)));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_iter_free (iter);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return retval;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gboolean
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_copy (IBusLookupTable *dest,
|
|
Packit Service |
1d8f1c |
IBusLookupTable *src)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
gboolean retval;
|
|
Packit Service |
1d8f1c |
guint i;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
retval = IBUS_SERIALIZABLE_CLASS (ibus_lookup_table_parent_class)->copy ((IBusSerializable *)dest, (IBusSerializable *)src);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (retval, FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (dest), FALSE);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (src), FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
// copy candidates
|
|
Packit Service |
1d8f1c |
for (i = 0;; i++) {
|
|
Packit Service |
1d8f1c |
IBusText *text;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
text = ibus_lookup_table_get_candidate (src, i);
|
|
Packit Service |
1d8f1c |
if (text == NULL)
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
text = (IBusText *) ibus_serializable_copy ((IBusSerializable *) text);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_append_candidate (dest, text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
// copy labels
|
|
Packit Service |
1d8f1c |
for (i = 0;; i++) {
|
|
Packit Service |
1d8f1c |
IBusText *text;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
text = ibus_lookup_table_get_label (src, i);
|
|
Packit Service |
1d8f1c |
if (text == NULL)
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
text = (IBusText *) ibus_serializable_copy ((IBusSerializable *) text);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_append_label (dest, text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusLookupTable *
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_new (guint page_size,
|
|
Packit Service |
1d8f1c |
guint cursor_pos,
|
|
Packit Service |
1d8f1c |
gboolean cursor_visible,
|
|
Packit Service |
1d8f1c |
gboolean round)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (page_size > 0);
|
|
Packit Service |
1d8f1c |
g_assert (page_size <= 16);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusLookupTable *table;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table= g_object_new (IBUS_TYPE_LOOKUP_TABLE, NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->page_size = page_size;
|
|
Packit Service |
1d8f1c |
table->cursor_pos = cursor_pos;
|
|
Packit Service |
1d8f1c |
table->cursor_visible = cursor_visible;
|
|
Packit Service |
1d8f1c |
table->round = round;
|
|
Packit Service |
1d8f1c |
table->orientation = IBUS_ORIENTATION_SYSTEM;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return table;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
guint
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_get_number_of_candidates (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return table->candidates->len;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_append_candidate (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
IBusText *text)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_TEXT (text));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_object_ref_sink (text);
|
|
Packit Service |
1d8f1c |
g_array_append_val (table->candidates, text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusText *
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_get_candidate (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
guint index)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (index >= table->candidates->len)
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return g_array_index (table->candidates, IBusText *, index);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_append_label (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
IBusText *text)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_TEXT (text));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_object_ref_sink (text);
|
|
Packit Service |
1d8f1c |
g_array_append_val (table->labels, text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_set_label (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
guint index,
|
|
Packit Service |
1d8f1c |
IBusText *text)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_TEXT (text));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (table->labels->len <= index) {
|
|
Packit Service |
1d8f1c |
g_array_set_size (table->labels, index + 1);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusText *old = ibus_lookup_table_get_label (table, index);
|
|
Packit Service |
1d8f1c |
if (old != NULL) {
|
|
Packit Service |
1d8f1c |
g_object_unref (old);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_object_ref_sink (text);
|
|
Packit Service |
1d8f1c |
g_array_index (table->labels, IBusText *, index) = text;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusText *
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_get_label (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
guint index)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (index >= table->labels->len)
|
|
Packit Service |
1d8f1c |
return NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return g_array_index (table->labels, IBusText *, index);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_clear (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gint index;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
for (index = 0; index < table->candidates->len; index ++) {
|
|
Packit Service |
1d8f1c |
g_object_unref (g_array_index (table->candidates, IBusText *, index));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_array_set_size (table->candidates, 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_pos = 0;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_set_cursor_pos (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
guint cursor_pos)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
g_assert (cursor_pos < table->candidates->len);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_pos = cursor_pos;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
guint
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_get_cursor_pos (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return table->cursor_pos;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
guint
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_get_cursor_in_page (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return table->cursor_pos % table->page_size;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_set_cursor_visible (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
gboolean visible)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_visible = visible;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_is_cursor_visible (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return table->cursor_visible;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_set_page_size (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
guint page_size)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
g_assert (page_size > 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->page_size = page_size;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
guint
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_get_page_size (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return table->page_size;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_set_round (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
gboolean round)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->round = round ? TRUE: FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_is_round (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return table->round;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_set_orientation (IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
gint orientation)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
g_assert (orientation == IBUS_ORIENTATION_HORIZONTAL ||
|
|
Packit Service |
1d8f1c |
orientation == IBUS_ORIENTATION_VERTICAL ||
|
|
Packit Service |
1d8f1c |
orientation == IBUS_ORIENTATION_SYSTEM);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->orientation = orientation;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gint
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_get_orientation (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return table->orientation;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_page_up (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (table->cursor_pos < table->page_size) {
|
|
Packit Service |
1d8f1c |
gint i;
|
|
Packit Service |
1d8f1c |
gint page_nr;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (!table->round) {
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* cursor index in page */
|
|
Packit Service |
1d8f1c |
i = table->cursor_pos % table->page_size;
|
|
Packit Service |
1d8f1c |
page_nr = (table->candidates->len + table->page_size - 1) / table->page_size;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_pos = page_nr * table->page_size + i;
|
|
Packit Service |
1d8f1c |
if (table->cursor_pos >= table->candidates->len) {
|
|
Packit Service |
1d8f1c |
table->cursor_pos = table->candidates->len - 1;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_pos -= table->page_size;
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_page_down (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gint i;
|
|
Packit Service |
1d8f1c |
gint page;
|
|
Packit Service |
1d8f1c |
gint page_nr;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* cursor index in page */
|
|
Packit Service |
1d8f1c |
i = table->cursor_pos % table->page_size;
|
|
Packit Service |
1d8f1c |
page = table->cursor_pos / table->page_size;
|
|
Packit Service |
1d8f1c |
page_nr = (table->candidates->len + table->page_size - 1) / table->page_size;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (page == page_nr - 1) {
|
|
Packit Service |
1d8f1c |
if (!table->round)
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_pos = i;
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_pos += table->page_size;
|
|
Packit Service |
1d8f1c |
if (table->cursor_pos > table->candidates->len - 1) {
|
|
Packit Service |
1d8f1c |
table->cursor_pos = table->candidates->len - 1;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_cursor_up (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (table->cursor_pos == 0) {
|
|
Packit Service |
1d8f1c |
if (!table->round)
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_pos = table->candidates->len - 1;
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_pos --;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gboolean
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_cursor_down (IBusLookupTable *table)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (table->cursor_pos == table->candidates->len - 1) {
|
|
Packit Service |
1d8f1c |
if (!table->round)
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_pos = 0;
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
table->cursor_pos ++;
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|