~ubuntu-branches/ubuntu/quantal/ibus/quantal

« back to all changes in this revision

Viewing changes to src/ibuslookuptable.c

  • Committer: Bazaar Package Importer
  • Author(s): Barry Warsaw
  • Date: 2011-08-11 17:00:57 UTC
  • mfrom: (6.2.14 sid)
  • Revision ID: james.westby@ubuntu.com-20110811170057-6dmbfs4s3cchzl7x
Tags: 1.3.99.20110419-1ubuntu1
* Merge with Debian unstable.  Remaining Ubuntu changes:
  - Indicator support:
    + Add 05_appindicator.patch: Use an indicator rather than a notification
      icon.
    + debian/control: Recommend python-appindicator.
  - debian/control: Install im-switch instead of im-config by default.
  - debian/README.source: Removed, it was outdated and no longer correct
  - debian/patches/01_ubuntu_desktop: Fix "Desktop entry needs the
    X-Ubuntu-Gettext-Domain key"  (LP: #457632)
  - debian/patches/02_title_update.patch: Rename "IBus Preferences" to
    "Keyboard Input Methods"
  - debian/patches/06_locale_parser.patch: Cherry-picked from upstream.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20
20
 * Boston, MA 02111-1307, USA.
21
21
 */
22
 
#include <dbus/dbus.h>
23
22
#include "ibuslookuptable.h"
24
23
 
25
24
/* functions prototype */
26
25
static void         ibus_lookup_table_destroy       (IBusLookupTable        *table);
27
26
static gboolean     ibus_lookup_table_serialize     (IBusLookupTable        *table,
28
 
                                                     IBusMessageIter        *iter);
29
 
static gboolean     ibus_lookup_table_deserialize   (IBusLookupTable        *table,
30
 
                                                     IBusMessageIter        *iter);
 
27
                                                     GVariantBuilder        *builder);
 
28
static gint         ibus_lookup_table_deserialize   (IBusLookupTable        *table,
 
29
                                                     GVariant               *variant);
31
30
static gboolean     ibus_lookup_table_copy          (IBusLookupTable        *dest,
32
31
                                                     IBusLookupTable        *src);
33
32
 
34
33
G_DEFINE_TYPE (IBusLookupTable, ibus_lookup_table, IBUS_TYPE_SERIALIZABLE)
35
34
 
36
35
static void
37
 
ibus_lookup_table_class_init (IBusLookupTableClass *klass)
 
36
ibus_lookup_table_class_init (IBusLookupTableClass *class)
38
37
{
39
 
    IBusObjectClass *object_class = IBUS_OBJECT_CLASS (klass);
40
 
    IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (klass);
 
38
    IBusObjectClass *object_class = IBUS_OBJECT_CLASS (class);
 
39
    IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (class);
41
40
 
42
41
    object_class->destroy = (IBusObjectDestroyFunc) ibus_lookup_table_destroy;
43
42
 
44
43
    serializable_class->serialize   = (IBusSerializableSerializeFunc) ibus_lookup_table_serialize;
45
44
    serializable_class->deserialize = (IBusSerializableDeserializeFunc) ibus_lookup_table_deserialize;
46
45
    serializable_class->copy        = (IBusSerializableCopyFunc) ibus_lookup_table_copy;
47
 
 
48
 
    g_string_append (serializable_class->signature, "uubbiavav");
49
46
}
50
47
 
51
48
static void
85
82
 
86
83
static gboolean
87
84
ibus_lookup_table_serialize (IBusLookupTable *table,
88
 
                             IBusMessageIter *iter)
 
85
                             GVariantBuilder *builder)
89
86
{
90
 
    IBusMessageIter array_iter;
91
87
    gboolean retval;
92
88
    guint i;
93
89
 
94
 
    retval = IBUS_SERIALIZABLE_CLASS (ibus_lookup_table_parent_class)->serialize ((IBusSerializable *)table, iter);
95
 
    g_return_val_if_fail (retval, FALSE);
96
 
 
97
 
    g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (table), FALSE);
98
 
 
99
 
    retval = ibus_message_iter_append (iter, G_TYPE_UINT, &table->page_size);
100
 
    g_return_val_if_fail (retval, FALSE);
101
 
 
102
 
    retval = ibus_message_iter_append (iter, G_TYPE_UINT, &table->cursor_pos);
103
 
    g_return_val_if_fail (retval, FALSE);
104
 
 
105
 
    retval = ibus_message_iter_append (iter, G_TYPE_BOOLEAN, &table->cursor_visible);
106
 
    g_return_val_if_fail (retval, FALSE);
107
 
 
108
 
    retval = ibus_message_iter_append (iter, G_TYPE_BOOLEAN, &table->round);
109
 
    g_return_val_if_fail (retval, FALSE);
110
 
 
111
 
    retval = ibus_message_iter_append (iter, G_TYPE_INT, &table->orientation);
112
 
    g_return_val_if_fail (retval, FALSE);
113
 
 
114
 
    // append candidates
115
 
    retval = ibus_message_iter_open_container (iter,
116
 
                                               IBUS_TYPE_ARRAY,
117
 
                                               "v",
118
 
                                               &array_iter);
119
 
    g_return_val_if_fail (retval, FALSE);
120
 
 
121
 
    for (i = 0;; i++) {
122
 
        IBusText *text;
123
 
 
124
 
        text = ibus_lookup_table_get_candidate (table, i);
125
 
        if (text == NULL)
126
 
            break;
127
 
 
128
 
        retval = ibus_message_iter_append (&array_iter, IBUS_TYPE_TEXT, &text);
129
 
        g_return_val_if_fail (retval, FALSE);
130
 
    }
131
 
 
132
 
    retval = ibus_message_iter_close_container (iter, &array_iter);
133
 
    g_return_val_if_fail (retval, FALSE);
134
 
 
135
 
    // append labels
136
 
    retval = ibus_message_iter_open_container (iter,
137
 
                                               IBUS_TYPE_ARRAY,
138
 
                                               "v",
139
 
                                               &array_iter);
140
 
    g_return_val_if_fail (retval, FALSE);
141
 
 
142
 
    for (i = 0;; i++) {
143
 
        IBusText *text;
144
 
 
145
 
        text = ibus_lookup_table_get_label (table, i);
146
 
        if (text == NULL)
147
 
            break;
148
 
 
149
 
        retval = ibus_message_iter_append (&array_iter, IBUS_TYPE_TEXT, &text);
150
 
        g_return_val_if_fail (retval, FALSE);
151
 
    }
152
 
 
153
 
    retval = ibus_message_iter_close_container (iter, &array_iter);
154
 
    g_return_val_if_fail (retval, FALSE);
 
90
    retval = IBUS_SERIALIZABLE_CLASS (ibus_lookup_table_parent_class)->serialize ((IBusSerializable *)table, builder);
 
91
    g_return_val_if_fail (retval, 0);
 
92
 
 
93
    g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (table), 0);
 
94
 
 
95
    g_variant_builder_add (builder, "u", table->page_size);
 
96
    g_variant_builder_add (builder, "u", table->cursor_pos);
 
97
    g_variant_builder_add (builder, "b", table->cursor_visible);
 
98
    g_variant_builder_add (builder, "b", table->round);
 
99
    g_variant_builder_add (builder, "i", table->orientation);
 
100
 
 
101
    GVariantBuilder array;
 
102
    /* append candidates */
 
103
    g_variant_builder_init (&array, G_VARIANT_TYPE ("av"));
 
104
    for (i = 0;; i++) {
 
105
        IBusText *text = ibus_lookup_table_get_candidate (table, i);
 
106
        if (text == NULL)
 
107
            break;
 
108
        g_variant_builder_add (&array, "v", ibus_serializable_serialize ((IBusSerializable *)text));
 
109
    }
 
110
    g_variant_builder_add (builder, "av", &array);
 
111
 
 
112
    /* append labels */
 
113
    g_variant_builder_init (&array, G_VARIANT_TYPE ("av"));
 
114
    for (i = 0;; i++) {
 
115
        IBusText *text = ibus_lookup_table_get_label (table, i);
 
116
        if (text == NULL)
 
117
            break;
 
118
 
 
119
        g_variant_builder_add (&array, "v", ibus_serializable_serialize ((IBusSerializable *)text));
 
120
    }
 
121
    g_variant_builder_add (builder, "av", &array);
155
122
 
156
123
    return TRUE;
157
124
}
158
125
 
159
 
static gboolean
 
126
static gint
160
127
ibus_lookup_table_deserialize (IBusLookupTable *table,
161
 
                               IBusMessageIter *iter)
 
128
                               GVariant        *variant)
162
129
{
163
 
    DBusMessageIter array_iter;
164
 
    gboolean retval;
165
 
 
166
 
    retval = IBUS_SERIALIZABLE_CLASS (ibus_lookup_table_parent_class)->deserialize ((IBusSerializable *)table, iter);
167
 
    g_return_val_if_fail (retval, FALSE);
168
 
 
169
 
    g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (table), FALSE);
170
 
 
171
 
    retval = ibus_message_iter_get (iter, G_TYPE_UINT, &table->page_size);
172
 
    g_return_val_if_fail (retval, FALSE);
173
 
    ibus_message_iter_next (iter);
174
 
 
175
 
    retval = ibus_message_iter_get (iter, G_TYPE_UINT, &table->cursor_pos);
176
 
    g_return_val_if_fail (retval, FALSE);
177
 
    ibus_message_iter_next (iter);
178
 
 
179
 
    retval = ibus_message_iter_get (iter, G_TYPE_BOOLEAN, &table->cursor_visible);
180
 
    g_return_val_if_fail (retval, FALSE);
181
 
    ibus_message_iter_next (iter);
182
 
 
183
 
    retval = ibus_message_iter_get (iter, G_TYPE_BOOLEAN, &table->round);
184
 
    g_return_val_if_fail (retval, FALSE);
185
 
    ibus_message_iter_next (iter);
186
 
 
187
 
    retval = ibus_message_iter_get (iter, G_TYPE_INT, &table->orientation);
188
 
    g_return_val_if_fail (retval, FALSE);
189
 
    ibus_message_iter_next (iter);
190
 
 
 
130
    gint retval;
 
131
 
 
132
    retval = IBUS_SERIALIZABLE_CLASS (ibus_lookup_table_parent_class)->deserialize ((IBusSerializable *)table, variant);
 
133
    g_return_val_if_fail (retval, 0);
 
134
 
 
135
    g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (table), 0);
 
136
 
 
137
    g_variant_get_child (variant, retval++, "u", &table->page_size);
 
138
    g_variant_get_child (variant, retval++, "u", &table->cursor_pos);
 
139
    g_variant_get_child (variant, retval++, "b", &table->cursor_visible);
 
140
    g_variant_get_child (variant, retval++, "b", &table->round);
 
141
    g_variant_get_child (variant, retval++, "i", &table->orientation);
 
142
 
 
143
    GVariant *var;
191
144
    // deserialize candidates
192
 
    retval = ibus_message_iter_recurse (iter, IBUS_TYPE_ARRAY, &array_iter);
193
 
    g_return_val_if_fail (retval, FALSE);
194
 
 
195
 
    while (ibus_message_iter_get_arg_type (&array_iter) != G_TYPE_INVALID) {
196
 
        IBusText *text;
197
 
        retval = ibus_message_iter_get (&array_iter, IBUS_TYPE_TEXT, &text);
198
 
        g_return_val_if_fail (retval, FALSE);
199
 
        ibus_message_iter_next (&array_iter);
200
 
 
201
 
        ibus_lookup_table_append_candidate (table, text);
 
145
    GVariantIter *iter = NULL;
 
146
    g_variant_get_child (variant, retval++, "av", &iter);
 
147
    while (g_variant_iter_loop (iter, "v", &var)) {
 
148
        ibus_lookup_table_append_candidate (table, IBUS_TEXT (ibus_serializable_deserialize (var)));
202
149
    }
203
 
 
204
 
    ibus_message_iter_next (iter);
 
150
    g_variant_iter_free (iter);
205
151
 
206
152
    // deserialize labels
207
 
    retval = ibus_message_iter_recurse (iter, IBUS_TYPE_ARRAY, &array_iter);
208
 
    g_return_val_if_fail (retval, FALSE);
209
 
 
210
 
    while (ibus_message_iter_get_arg_type (&array_iter) != G_TYPE_INVALID) {
211
 
        IBusText *text;
212
 
        retval = ibus_message_iter_get (&array_iter, IBUS_TYPE_TEXT, &text);
213
 
        g_return_val_if_fail (retval, FALSE);
214
 
        ibus_message_iter_next (&array_iter);
215
 
 
216
 
        ibus_lookup_table_append_label (table, text);
 
153
    iter = NULL;
 
154
    g_variant_get_child (variant, retval++, "av", &iter);
 
155
    while (g_variant_iter_loop (iter, "v", &var)) {
 
156
        ibus_lookup_table_append_label (table, IBUS_TEXT (ibus_serializable_deserialize (var)));
217
157
    }
218
 
 
219
 
    ibus_message_iter_next (iter);
220
 
 
221
 
    return TRUE;
 
158
    g_variant_iter_free (iter);
 
159
 
 
160
    return retval;
222
161
}
223
162
 
224
163
static gboolean