19
19
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20
20
* Boston, MA 02111-1307, USA.
22
#include <dbus/dbus.h>
23
22
#include "ibuslookuptable.h"
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,
31
30
static gboolean ibus_lookup_table_copy (IBusLookupTable *dest,
32
31
IBusLookupTable *src);
34
33
G_DEFINE_TYPE (IBusLookupTable, ibus_lookup_table, IBUS_TYPE_SERIALIZABLE)
37
ibus_lookup_table_class_init (IBusLookupTableClass *klass)
36
ibus_lookup_table_class_init (IBusLookupTableClass *class)
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);
42
41
object_class->destroy = (IBusObjectDestroyFunc) ibus_lookup_table_destroy;
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;
48
g_string_append (serializable_class->signature, "uubbiavav");
87
84
ibus_lookup_table_serialize (IBusLookupTable *table,
88
IBusMessageIter *iter)
85
GVariantBuilder *builder)
90
IBusMessageIter array_iter;
94
retval = IBUS_SERIALIZABLE_CLASS (ibus_lookup_table_parent_class)->serialize ((IBusSerializable *)table, iter);
95
g_return_val_if_fail (retval, FALSE);
97
g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (table), FALSE);
99
retval = ibus_message_iter_append (iter, G_TYPE_UINT, &table->page_size);
100
g_return_val_if_fail (retval, FALSE);
102
retval = ibus_message_iter_append (iter, G_TYPE_UINT, &table->cursor_pos);
103
g_return_val_if_fail (retval, FALSE);
105
retval = ibus_message_iter_append (iter, G_TYPE_BOOLEAN, &table->cursor_visible);
106
g_return_val_if_fail (retval, FALSE);
108
retval = ibus_message_iter_append (iter, G_TYPE_BOOLEAN, &table->round);
109
g_return_val_if_fail (retval, FALSE);
111
retval = ibus_message_iter_append (iter, G_TYPE_INT, &table->orientation);
112
g_return_val_if_fail (retval, FALSE);
115
retval = ibus_message_iter_open_container (iter,
119
g_return_val_if_fail (retval, FALSE);
124
text = ibus_lookup_table_get_candidate (table, i);
128
retval = ibus_message_iter_append (&array_iter, IBUS_TYPE_TEXT, &text);
129
g_return_val_if_fail (retval, FALSE);
132
retval = ibus_message_iter_close_container (iter, &array_iter);
133
g_return_val_if_fail (retval, FALSE);
136
retval = ibus_message_iter_open_container (iter,
140
g_return_val_if_fail (retval, FALSE);
145
text = ibus_lookup_table_get_label (table, i);
149
retval = ibus_message_iter_append (&array_iter, IBUS_TYPE_TEXT, &text);
150
g_return_val_if_fail (retval, FALSE);
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);
93
g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (table), 0);
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);
101
GVariantBuilder array;
102
/* append candidates */
103
g_variant_builder_init (&array, G_VARIANT_TYPE ("av"));
105
IBusText *text = ibus_lookup_table_get_candidate (table, i);
108
g_variant_builder_add (&array, "v", ibus_serializable_serialize ((IBusSerializable *)text));
110
g_variant_builder_add (builder, "av", &array);
113
g_variant_builder_init (&array, G_VARIANT_TYPE ("av"));
115
IBusText *text = ibus_lookup_table_get_label (table, i);
119
g_variant_builder_add (&array, "v", ibus_serializable_serialize ((IBusSerializable *)text));
121
g_variant_builder_add (builder, "av", &array);
160
127
ibus_lookup_table_deserialize (IBusLookupTable *table,
161
IBusMessageIter *iter)
163
DBusMessageIter array_iter;
166
retval = IBUS_SERIALIZABLE_CLASS (ibus_lookup_table_parent_class)->deserialize ((IBusSerializable *)table, iter);
167
g_return_val_if_fail (retval, FALSE);
169
g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (table), FALSE);
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);
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);
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);
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);
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);
132
retval = IBUS_SERIALIZABLE_CLASS (ibus_lookup_table_parent_class)->deserialize ((IBusSerializable *)table, variant);
133
g_return_val_if_fail (retval, 0);
135
g_return_val_if_fail (IBUS_IS_LOOKUP_TABLE (table), 0);
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);
191
144
// deserialize candidates
192
retval = ibus_message_iter_recurse (iter, IBUS_TYPE_ARRAY, &array_iter);
193
g_return_val_if_fail (retval, FALSE);
195
while (ibus_message_iter_get_arg_type (&array_iter) != G_TYPE_INVALID) {
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);
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)));
204
ibus_message_iter_next (iter);
150
g_variant_iter_free (iter);
206
152
// deserialize labels
207
retval = ibus_message_iter_recurse (iter, IBUS_TYPE_ARRAY, &array_iter);
208
g_return_val_if_fail (retval, FALSE);
210
while (ibus_message_iter_get_arg_type (&array_iter) != G_TYPE_INVALID) {
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);
216
ibus_lookup_table_append_label (table, text);
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)));
219
ibus_message_iter_next (iter);
158
g_variant_iter_free (iter);