e0a5e11fee
Added XIM and ISO 14755 Ctrl+Shift+u
697 lines
26 KiB
Diff
697 lines
26 KiB
Diff
From 9614076737ee88c092af209485d1d65d2269f4ad Mon Sep 17 00:00:00 2001
|
|
From: Tsuyoshi Horo <horo@chromium.org>
|
|
Date: Thu, 18 Aug 2011 11:48:30 -0400
|
|
Subject: [PATCH] Fix for ibus_serializable_{get,set}_attachment.
|
|
|
|
TEST=Linux desktop
|
|
|
|
Review URL: http://codereview.appspot.com/4905054
|
|
Patch from Tsuyoshi Horo <horo@chromium.org>.
|
|
---
|
|
src/ibusserializable.c | 18 +++++++++---------
|
|
src/ibusserializable.h | 3 +--
|
|
src/tests/ibus-serializable.c | 34 ++++++++++++++++++++++++++++++++++
|
|
3 files changed, 44 insertions(+), 11 deletions(-)
|
|
|
|
diff --git a/src/ibusserializable.c b/src/ibusserializable.c
|
|
index 2e4b21f..ed89534 100644
|
|
--- a/src/ibusserializable.c
|
|
+++ b/src/ibusserializable.c
|
|
@@ -164,7 +164,7 @@ _g_value_serialize (GValue *value)
|
|
{ \
|
|
g##_type v; \
|
|
v = g_value_get_##_type (value); \
|
|
- return g_variant_new ("v", g_variant_new (signature, v)); \
|
|
+ return g_variant_new (signature, v); \
|
|
}
|
|
CASE_ENTRY(CHAR, char, "y");
|
|
CASE_ENTRY(BOOLEAN, boolean, "b");
|
|
@@ -198,14 +198,14 @@ _g_value_deserialize (GVariant *variant)
|
|
}
|
|
|
|
typedef gchar *gstring;
|
|
-#define IF_ENTRY(TYPE, _type, signature) \
|
|
- if (type == G_VARIANT_TYPE_##TYPE) { \
|
|
- g##_type v; \
|
|
- g_variant_get (variant, signature, &v); \
|
|
- value = g_slice_new0 (GValue); \
|
|
- g_value_init (value, G_TYPE_##TYPE); \
|
|
- g_value_set_##_type (value, v); \
|
|
- return value; \
|
|
+#define IF_ENTRY(TYPE, _type, signature) \
|
|
+ if (g_variant_type_equal(type, G_VARIANT_TYPE_##TYPE)) { \
|
|
+ g##_type v; \
|
|
+ g_variant_get (variant, signature, &v); \
|
|
+ value = g_slice_new0 (GValue); \
|
|
+ g_value_init (value, G_TYPE_##TYPE); \
|
|
+ g_value_set_##_type (value, v); \
|
|
+ return value; \
|
|
}
|
|
#define G_VARIANT_TYPE_CHAR G_VARIANT_TYPE_BYTE
|
|
IF_ENTRY(CHAR, char, "y");
|
|
diff --git a/src/ibusserializable.h b/src/ibusserializable.h
|
|
index 358af32..8fd9f8a 100644
|
|
--- a/src/ibusserializable.h
|
|
+++ b/src/ibusserializable.h
|
|
@@ -87,12 +87,11 @@
|
|
* ibus_serializable_get_attachment:
|
|
* @o: An IBusSerializable.
|
|
* @k: String formatted key for indexing value.
|
|
- * @v: Value to be attached. Should be also serializable.
|
|
*
|
|
* Get a value from attachment of an IBusSerializable.
|
|
* This macro is an convenient wrapper of ibus_serializable_get_qattachment().
|
|
*/
|
|
-#define ibus_serializable_get_attachment(o, k, v) \
|
|
+#define ibus_serializable_get_attachment(o, k) \
|
|
ibus_serializable_get_qattachment (o, g_quark_from_string (k))
|
|
|
|
/**
|
|
diff --git a/src/tests/ibus-serializable.c b/src/tests/ibus-serializable.c
|
|
index c2a7529..e2541ec 100644
|
|
--- a/src/tests/ibus-serializable.c
|
|
+++ b/src/tests/ibus-serializable.c
|
|
@@ -128,6 +128,39 @@ test_property (void)
|
|
g_variant_type_info_assert_no_infos ();
|
|
}
|
|
|
|
+static void
|
|
+test_attachment (void)
|
|
+{
|
|
+ IBusText *text = ibus_text_new_from_string ("main text");
|
|
+
|
|
+ GValue value1 = { 0 };
|
|
+ g_value_init(&value1, G_TYPE_INT);
|
|
+ g_value_set_int(&value1, 100);
|
|
+ ibus_serializable_set_attachment ((IBusSerializable *)text, "key1", &value1);
|
|
+
|
|
+ GValue value2 = { 0 };
|
|
+ g_value_init(&value2, G_TYPE_STRING);
|
|
+ g_value_set_string(&value2, "value string");
|
|
+ ibus_serializable_set_attachment ((IBusSerializable *)text, "key2", &value2);
|
|
+
|
|
+ GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)text);
|
|
+ g_object_unref ((IBusSerializable *)text);
|
|
+
|
|
+ IBusSerializable *object = (IBusSerializable *) ibus_serializable_deserialize (variant);
|
|
+ g_variant_unref (variant);
|
|
+
|
|
+ g_assert_cmpstr (((IBusText *)object)->text, ==, "main text");
|
|
+
|
|
+ const GValue *newvalue1 = ibus_serializable_get_attachment (object, "key1");
|
|
+ g_assert (newvalue1 != NULL);
|
|
+ g_assert (g_value_get_int (newvalue1) == 100);
|
|
+
|
|
+ const GValue *newvalue2 = ibus_serializable_get_attachment (object, "key2");
|
|
+ g_assert (newvalue2 != NULL);
|
|
+ g_assert_cmpstr (g_value_get_string (newvalue2), ==, "value string");
|
|
+
|
|
+ g_variant_type_info_assert_no_infos ();
|
|
+}
|
|
|
|
gint
|
|
main (gint argc,
|
|
@@ -142,6 +175,7 @@ main (gint argc,
|
|
g_test_add_func ("/ibus/enginedesc", test_engine_desc);
|
|
g_test_add_func ("/ibus/lookuptable", test_lookup_table);
|
|
g_test_add_func ("/ibus/property", test_property);
|
|
+ g_test_add_func ("/ibus/attachment", test_attachment);
|
|
|
|
return g_test_run ();
|
|
}
|
|
--
|
|
1.7.5.4
|
|
|
|
From ac9dfac13cef34288440a2ecdf067cd827fb2f8f Mon Sep 17 00:00:00 2001
|
|
From: Peng Huang <shawn.p.huang@gmail.com>
|
|
Date: Fri, 19 Aug 2011 08:23:33 -0400
|
|
Subject: [PATCH] Use GVariant as attachment for IBusSerializable.
|
|
|
|
BUG=None
|
|
TEST=Linux desktop
|
|
|
|
Review URL: http://codereview.appspot.com/4902051
|
|
---
|
|
src/ibusserializable.c | 176 ++++++-----------------------------------
|
|
src/ibusserializable.h | 81 +++++++++----------
|
|
src/tests/ibus-serializable.c | 47 ++++++++----
|
|
3 files changed, 98 insertions(+), 206 deletions(-)
|
|
|
|
diff --git a/src/ibusserializable.c b/src/ibusserializable.c
|
|
index ed89534..6251c89 100644
|
|
--- a/src/ibusserializable.c
|
|
+++ b/src/ibusserializable.c
|
|
@@ -124,114 +124,13 @@ ibus_serializable_destroy (IBusSerializable *serializable)
|
|
parent_class->destroy (IBUS_OBJECT (serializable));
|
|
}
|
|
|
|
-static GValue *
|
|
-ibus_g_value_dup (const GValue *value)
|
|
-{
|
|
- GValue *new_value;
|
|
-
|
|
- new_value = g_slice_new0 (GValue);
|
|
- g_value_init (new_value, G_VALUE_TYPE (value));
|
|
- g_value_copy (value, new_value);
|
|
-
|
|
- return new_value;
|
|
-}
|
|
-
|
|
-static void
|
|
-ibus_g_value_free (GValue *value)
|
|
-{
|
|
- g_value_unset (value);
|
|
- g_slice_free (GValue, value);
|
|
-}
|
|
-
|
|
-static GVariant *
|
|
-_g_value_serialize (GValue *value)
|
|
-{
|
|
- GType type;
|
|
-
|
|
- type = G_VALUE_TYPE (value);
|
|
- g_return_val_if_fail (type != G_TYPE_INVALID, FALSE);
|
|
-
|
|
- if (g_type_is_a (type, IBUS_TYPE_SERIALIZABLE)) {
|
|
- IBusSerializable *object;
|
|
- object = IBUS_SERIALIZABLE (g_value_get_object (value));
|
|
- return ibus_serializable_serialize (object);
|
|
- }
|
|
-
|
|
- typedef const gchar *gstring;
|
|
- switch (type) {
|
|
-#define CASE_ENTRY(TYPE, _type, signature) \
|
|
- case G_TYPE_##TYPE: \
|
|
- { \
|
|
- g##_type v; \
|
|
- v = g_value_get_##_type (value); \
|
|
- return g_variant_new (signature, v); \
|
|
- }
|
|
- CASE_ENTRY(CHAR, char, "y");
|
|
- CASE_ENTRY(BOOLEAN, boolean, "b");
|
|
- CASE_ENTRY(INT, int, "i");
|
|
- CASE_ENTRY(UINT, uint, "u");
|
|
- CASE_ENTRY(INT64, int64, "x");
|
|
- CASE_ENTRY(UINT64, uint64, "t");
|
|
- CASE_ENTRY(FLOAT, float, "d");
|
|
- CASE_ENTRY(DOUBLE, double, "d");
|
|
- CASE_ENTRY(STRING, string, "s");
|
|
-#undef CASE_ENTRY
|
|
- }
|
|
-
|
|
- g_assert_not_reached ();
|
|
-}
|
|
-
|
|
-static GValue *
|
|
-_g_value_deserialize (GVariant *variant)
|
|
-{
|
|
- GValue *value = NULL;
|
|
- const GVariantType *type;
|
|
-
|
|
- type = g_variant_get_type (variant);
|
|
- if (type == G_VARIANT_TYPE_TUPLE) {
|
|
- IBusSerializable *object;
|
|
- object = ibus_serializable_deserialize (variant);
|
|
- value = g_slice_new0 (GValue);
|
|
- g_value_init (value, G_OBJECT_TYPE (object));
|
|
- g_value_take_object (value, object);
|
|
- return value;
|
|
- }
|
|
-
|
|
- typedef gchar *gstring;
|
|
-#define IF_ENTRY(TYPE, _type, signature) \
|
|
- if (g_variant_type_equal(type, G_VARIANT_TYPE_##TYPE)) { \
|
|
- g##_type v; \
|
|
- g_variant_get (variant, signature, &v); \
|
|
- value = g_slice_new0 (GValue); \
|
|
- g_value_init (value, G_TYPE_##TYPE); \
|
|
- g_value_set_##_type (value, v); \
|
|
- return value; \
|
|
- }
|
|
-#define G_VARIANT_TYPE_CHAR G_VARIANT_TYPE_BYTE
|
|
- IF_ENTRY(CHAR, char, "y");
|
|
-#undef G_VARIANT_TYPE_CHAR
|
|
- IF_ENTRY(BOOLEAN, boolean, "b");
|
|
-#define G_VARIANT_TYPE_INT G_VARIANT_TYPE_INT32
|
|
-#define G_VARIANT_TYPE_UINT G_VARIANT_TYPE_UINT32
|
|
- IF_ENTRY(INT, int, "i");
|
|
- IF_ENTRY(UINT, uint, "u");
|
|
-#undef G_VARIANT_TYPE_INT
|
|
-#undef G_VARIANT_TYPE_UINT
|
|
- IF_ENTRY(INT64, int64, "x");
|
|
- IF_ENTRY(UINT64, uint64, "t");
|
|
- IF_ENTRY(DOUBLE, double, "d");
|
|
- IF_ENTRY(STRING, string, "s");
|
|
-
|
|
- g_return_val_if_reached (NULL);
|
|
-}
|
|
-
|
|
static void
|
|
_serialize_cb (GQuark key,
|
|
- GValue *value,
|
|
+ GVariant *value,
|
|
GVariantBuilder *array)
|
|
{
|
|
g_variant_builder_add (array, "{sv}",
|
|
- g_quark_to_string (key), _g_value_serialize (value));
|
|
+ g_quark_to_string (key), g_variant_new_variant (value));
|
|
}
|
|
|
|
static gboolean
|
|
@@ -257,21 +156,26 @@ ibus_serializable_real_deserialize (IBusSerializable *object,
|
|
GVariantIter *iter = NULL;
|
|
g_variant_get_child (variant, 1, "a{sv}", &iter);
|
|
while (g_variant_iter_loop (iter, "{&sv}", &key, &value)) {
|
|
- ibus_serializable_set_attachment (object, key, _g_value_deserialize (value));
|
|
+ GVariant *attachment = g_variant_get_variant (value);
|
|
+ ibus_serializable_set_attachment (object,
|
|
+ key,
|
|
+ attachment);
|
|
+ g_variant_unref (attachment);
|
|
+ g_variant_unref (value);
|
|
}
|
|
g_variant_iter_free (iter);
|
|
return 2;
|
|
}
|
|
|
|
static void
|
|
-_copy_cb (GQuark key,
|
|
- GValue *value,
|
|
- GData **datalist)
|
|
+_copy_cb (GQuark key,
|
|
+ GVariant *value,
|
|
+ GData **datalist)
|
|
{
|
|
g_datalist_id_set_data_full (datalist,
|
|
key,
|
|
- ibus_g_value_dup (value),
|
|
- (GDestroyNotify) ibus_g_value_free);
|
|
+ g_variant_ref (value),
|
|
+ (GDestroyNotify) g_variant_unref);
|
|
}
|
|
|
|
static gboolean
|
|
@@ -289,50 +193,21 @@ ibus_serializable_real_copy (IBusSerializable *dest,
|
|
return TRUE;
|
|
}
|
|
|
|
-gboolean
|
|
-ibus_serializable_set_qattachment (IBusSerializable *object,
|
|
+void
|
|
+ibus_serializable_set_qattachment (IBusSerializable *serializable,
|
|
GQuark key,
|
|
- const GValue *value)
|
|
+ GVariant *value)
|
|
{
|
|
- g_return_val_if_fail (IBUS_IS_SERIALIZABLE (object), FALSE);
|
|
- g_return_val_if_fail (key != 0, FALSE);
|
|
- g_return_val_if_fail (G_IS_VALUE (value), FALSE);
|
|
-
|
|
- IBusSerializablePrivate *priv;
|
|
- priv = IBUS_SERIALIZABLE_GET_PRIVATE (object);
|
|
-
|
|
- GType type = G_VALUE_TYPE (value);
|
|
-
|
|
- switch (type) {
|
|
- case G_TYPE_CHAR:
|
|
- case G_TYPE_INT:
|
|
- case G_TYPE_INT64:
|
|
- case G_TYPE_UINT:
|
|
- case G_TYPE_UINT64:
|
|
- case G_TYPE_BOOLEAN:
|
|
- case G_TYPE_DOUBLE:
|
|
- case G_TYPE_FLOAT:
|
|
- case G_TYPE_STRING:
|
|
- g_datalist_id_set_data_full (&priv->attachments,
|
|
- key,
|
|
- ibus_g_value_dup (value),
|
|
- (GDestroyNotify) ibus_g_value_free);
|
|
- return TRUE;
|
|
- }
|
|
-
|
|
- if (g_type_is_a (type, IBUS_TYPE_SERIALIZABLE)) {
|
|
- g_datalist_id_set_data_full (&priv->attachments,
|
|
- key,
|
|
- ibus_g_value_dup (value),
|
|
- (GDestroyNotify) ibus_g_value_free);
|
|
- return TRUE;
|
|
- }
|
|
+ g_return_if_fail (IBUS_IS_SERIALIZABLE (serializable));
|
|
+ g_return_if_fail (key != 0);
|
|
|
|
- g_warning ("The value of %s is not support serializing", g_type_name (type));
|
|
- return FALSE;
|
|
+ g_datalist_id_set_data_full (&serializable->priv->attachments,
|
|
+ key,
|
|
+ value ? g_variant_ref_sink (value) : NULL,
|
|
+ (GDestroyNotify) g_variant_unref);
|
|
}
|
|
|
|
-const GValue *
|
|
+GVariant *
|
|
ibus_serializable_get_qattachment (IBusSerializable *serializable,
|
|
GQuark key)
|
|
{
|
|
@@ -340,7 +215,8 @@ ibus_serializable_get_qattachment (IBusSerializable *serializable,
|
|
g_return_val_if_fail (IBUS_IS_SERIALIZABLE (serializable), NULL);
|
|
g_return_val_if_fail (key != 0, NULL);
|
|
|
|
- return (const GValue *) g_datalist_id_get_data (&serializable->priv->attachments, key);
|
|
+ return (GVariant *) g_datalist_id_get_data (
|
|
+ &serializable->priv->attachments, key);
|
|
}
|
|
|
|
void
|
|
@@ -351,7 +227,7 @@ ibus_serializable_remove_qattachment (IBusSerializable *serializable,
|
|
g_return_if_fail (IBUS_IS_SERIALIZABLE (serializable));
|
|
g_return_if_fail (key != 0);
|
|
|
|
- g_datalist_id_remove_no_notify (&serializable->priv->attachments, key);
|
|
+ g_datalist_id_set_data (&serializable->priv->attachments, key, NULL);
|
|
}
|
|
|
|
IBusSerializable *
|
|
diff --git a/src/ibusserializable.h b/src/ibusserializable.h
|
|
index 8fd9f8a..7a100c2 100644
|
|
--- a/src/ibusserializable.h
|
|
+++ b/src/ibusserializable.h
|
|
@@ -126,39 +126,40 @@ struct _IBusSerializable {
|
|
|
|
/**
|
|
* IBusSerializableSerializeFunc:
|
|
- * @object: An IBusSerializable.
|
|
- * @iter: An IBusMessageIter.
|
|
- * @returns: TRUE if succeed; FALSE otherwise.
|
|
+ * @serializable: An #IBusSerializable.
|
|
+ * @builder: A #GVariantBuilder.
|
|
+ * @returns: %TRUE if succeed; %FALSE otherwise.
|
|
*
|
|
* Prototype of serialize function.
|
|
* Serialize function convert an IBusSerializable to IBusMessageIter.
|
|
* Returns a gboolean value which indicates whether the conversion is success.
|
|
- * Return TRUE if succeed.
|
|
+ * Return %TRUE if succeed.
|
|
*/
|
|
-typedef gboolean (* IBusSerializableSerializeFunc) (IBusSerializable *object,
|
|
+typedef gboolean (* IBusSerializableSerializeFunc) (IBusSerializable *serializable,
|
|
GVariantBuilder *builder);
|
|
|
|
/**
|
|
* IBusSerializableDeserializeFunc:
|
|
- * @object: An IBusSerializable.
|
|
- * @iter: An IBusMessageIter.
|
|
- * @returns: TRUE if succeed; FALSE otherwise.
|
|
+ * @serializable: An #IBusSerializable.
|
|
+ * @variant: A #GVariant contains a tuple.
|
|
+ * @returns: The number of values in the variant(tuple) are consumed.
|
|
*
|
|
* Prototype of deserialize function.
|
|
* Deserialize function convert an IBusMessageIter to IBusSerializable.
|
|
- * Returns a gboolean value which indicates whether the conversion is success.
|
|
+ * Returns an integer value which indicates how many values in
|
|
+ * the variant(tuple) are consumed.
|
|
*/
|
|
-typedef gint (* IBusSerializableDeserializeFunc) (IBusSerializable *object,
|
|
+typedef gint (* IBusSerializableDeserializeFunc) (IBusSerializable *serializable,
|
|
GVariant *variant);
|
|
|
|
/**
|
|
* IBusSerializableCopyFunc:
|
|
- * @dest: The destination IBusSerializable.
|
|
- * @src: A source IBusMessageIter.
|
|
- * @returns: TRUE if succeed; FALSE otherwise.
|
|
+ * @dest: The destination #IBusSerializable.
|
|
+ * @src: A source #IBusMessageIter.
|
|
+ * @returns: %TRUE if succeed; %FALSE otherwise.
|
|
*
|
|
* Prototype of copy function.
|
|
- * Copy function copy from source IBusSerializable to the destination one.
|
|
+ * Copy function copy from source #IBusSerializable to the destination one.
|
|
* Returns a gboolean value which indicates whether the copying is success.
|
|
*/
|
|
typedef gboolean (* IBusSerializableCopyFunc) (IBusSerializable *dest,
|
|
@@ -188,79 +189,77 @@ GType ibus_serializable_get_type (void);
|
|
*
|
|
* Returns: a new instance of #IBusSerializable.
|
|
*/
|
|
-IBusSerializable * ibus_serializable_new (void);
|
|
+IBusSerializable *ibus_serializable_new (void);
|
|
|
|
/**
|
|
* ibus_serializable_set_qattachment:
|
|
- * @object: An IBusSerializable.
|
|
+ * @serializable: An #IBusSerializable.
|
|
* @key: String formatted key for indexing value.
|
|
- * @value: Value to be attached. Should be also serializable.
|
|
- * @returns: TRUE if succeed; FALSE otherwise.
|
|
+ * @value: Value to be attached or %NULL to remove any prevoius value.
|
|
*
|
|
- * Attach a value to an IBusSerializable. The value should be serializable as well.
|
|
- * Basic type such as integer, string are deemed to be serializable.
|
|
+ * Attach a value to an IBusSerializable. If the value is floating,
|
|
+ * the serializable will take the ownership.
|
|
*
|
|
* @see_also: ibus_serializable_set_attachment().
|
|
*/
|
|
-gboolean ibus_serializable_set_qattachment (IBusSerializable *object,
|
|
+void ibus_serializable_set_qattachment (IBusSerializable *serializable,
|
|
GQuark key,
|
|
- const GValue *value);
|
|
+ GVariant *value);
|
|
|
|
/**
|
|
* ibus_serializable_get_qattachment:
|
|
- * @object: An IBusSerializable.
|
|
+ * @serializable: An #IBusSerializable.
|
|
* @key: String formatted key for indexing value.
|
|
- * @returns: The attached value; or NULL if fail to retrieve the value.
|
|
+ * @returns: The attached value; or %NULL if fail to retrieve the value.
|
|
*
|
|
- * Get a value from attachment of an IBusSerializable.
|
|
+ * Get a value from attachment of an #IBusSerializable.
|
|
* @see_also: ibus_serializable_set_attachment().
|
|
*/
|
|
-const GValue *ibus_serializable_get_qattachment (IBusSerializable *object,
|
|
+GVariant *ibus_serializable_get_qattachment (IBusSerializable *serializable,
|
|
GQuark key);
|
|
|
|
/**
|
|
* ibus_serializable_remove_qattachment:
|
|
- * @object: An IBusSerializable.
|
|
+ * @serializable: An #IBusSerializable.
|
|
* @key: String formatted key for indexing value.
|
|
*
|
|
- * Remove a value from attachment of an IBusSerializable.
|
|
+ * Remove a value from attachment of an #IBusSerializable.
|
|
* @see_also: ibus_serializable_remove_attachment().
|
|
*/
|
|
void ibus_serializable_remove_qattachment
|
|
- (IBusSerializable *object,
|
|
+ (IBusSerializable *serializable,
|
|
GQuark key);
|
|
|
|
/**
|
|
* ibus_serializable_copy:
|
|
- * @object: An IBusSerializable.
|
|
- * @returns: A newly allocated clone object; or NULL if @object is not serializable.
|
|
+ * @serializable: An #IBusSerializable.
|
|
+ * @returns: A newly allocated clone object; or %NULL if @object is not serializable.
|
|
*
|
|
- * Clone an IBusSerializable.
|
|
+ * Clone an #IBusSerializable.
|
|
* The copy method should be implemented in extended class.
|
|
*
|
|
* @see_also: IBusSerializableCopyFunc().
|
|
*/
|
|
-IBusSerializable *ibus_serializable_copy (IBusSerializable *object);
|
|
+IBusSerializable *ibus_serializable_copy (IBusSerializable *serializable);
|
|
|
|
/**
|
|
* ibus_serializable_serialize:
|
|
- * @object: An IBusSerializable.
|
|
- * @iter: An IBusMessageIter.
|
|
- * @returns: TRUE if succeed; FALSE otherwise.
|
|
+ * @serializable: An #IBusSerializable.
|
|
+ * @returns: A #GVariant.
|
|
*
|
|
- * Serialize an IBusSerializable to an IBusMessageIter.
|
|
+ * Serialize an #IBusSerializable to a #GVariant.
|
|
* The serialize method should be implemented in extended class.
|
|
*
|
|
* @see_also: IBusSerializableCopyFunc().
|
|
*/
|
|
-GVariant *ibus_serializable_serialize (IBusSerializable *object);
|
|
+GVariant *ibus_serializable_serialize (IBusSerializable *serializable);
|
|
|
|
/**
|
|
* ibus_serializable_deserialize:
|
|
- * @iter: An IBusMessageIter.
|
|
- * @returns: The deserialized IBusSerializable.
|
|
+ * @variant: A #GVariant.
|
|
+ * @returns: The deserialized #IBusSerializable.
|
|
*
|
|
- * Deserialize an IBusMessageIter to an IBusSerializable/
|
|
+ * Deserialize a #GVariant to an #IBusSerializable/
|
|
* The deserialize method should be implemented in extended class.
|
|
*
|
|
* @see_also: IBusSerializableCopyFunc().
|
|
diff --git a/src/tests/ibus-serializable.c b/src/tests/ibus-serializable.c
|
|
index e2541ec..d2bd61a 100644
|
|
--- a/src/tests/ibus-serializable.c
|
|
+++ b/src/tests/ibus-serializable.c
|
|
@@ -12,7 +12,7 @@ void test_serializable (IBusSerializable *object)
|
|
g_variant_get_data (variant);
|
|
s1 = g_variant_print (variant, TRUE);
|
|
|
|
- object = (IBusSerializable *) ibus_serializable_deserialize (variant);
|
|
+ object = ibus_serializable_deserialize (variant);
|
|
g_variant_unref (variant);
|
|
|
|
variant = ibus_serializable_serialize (object);
|
|
@@ -131,34 +131,51 @@ test_property (void)
|
|
static void
|
|
test_attachment (void)
|
|
{
|
|
- IBusText *text = ibus_text_new_from_string ("main text");
|
|
+ IBusText *text = ibus_text_new_from_static_string ("main text");
|
|
|
|
- GValue value1 = { 0 };
|
|
- g_value_init(&value1, G_TYPE_INT);
|
|
- g_value_set_int(&value1, 100);
|
|
- ibus_serializable_set_attachment ((IBusSerializable *)text, "key1", &value1);
|
|
+ ibus_serializable_set_attachment ((IBusSerializable *)text,
|
|
+ "key1",
|
|
+ g_variant_new_int32 (100));
|
|
|
|
- GValue value2 = { 0 };
|
|
- g_value_init(&value2, G_TYPE_STRING);
|
|
- g_value_set_string(&value2, "value string");
|
|
- ibus_serializable_set_attachment ((IBusSerializable *)text, "key2", &value2);
|
|
+ ibus_serializable_set_attachment ((IBusSerializable *)text,
|
|
+ "key2",
|
|
+ g_variant_new_string ("value string"));
|
|
+
|
|
+ ibus_serializable_set_attachment ((IBusSerializable *)text,
|
|
+ "key3",
|
|
+ g_variant_new ("(iuds)",1, 2, 3.333, "test value"));
|
|
|
|
GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)text);
|
|
g_object_unref ((IBusSerializable *)text);
|
|
|
|
- IBusSerializable *object = (IBusSerializable *) ibus_serializable_deserialize (variant);
|
|
+ IBusSerializable *object = ibus_serializable_deserialize (variant);
|
|
g_variant_unref (variant);
|
|
|
|
g_assert_cmpstr (((IBusText *)object)->text, ==, "main text");
|
|
|
|
- const GValue *newvalue1 = ibus_serializable_get_attachment (object, "key1");
|
|
+ GVariant *newvalue1 = ibus_serializable_get_attachment (object, "key1");
|
|
g_assert (newvalue1 != NULL);
|
|
- g_assert (g_value_get_int (newvalue1) == 100);
|
|
+ g_assert_cmpint (g_variant_get_int32 (newvalue1), ==, 100);
|
|
|
|
- const GValue *newvalue2 = ibus_serializable_get_attachment (object, "key2");
|
|
+ GVariant *newvalue2 = ibus_serializable_get_attachment (object, "key2");
|
|
g_assert (newvalue2 != NULL);
|
|
- g_assert_cmpstr (g_value_get_string (newvalue2), ==, "value string");
|
|
+ g_assert_cmpstr (g_variant_get_string (newvalue2, NULL), ==, "value string");
|
|
+
|
|
+ {
|
|
+ GVariant *newvalue3 = ibus_serializable_get_attachment (object, "key3");
|
|
+ g_assert (newvalue3 != NULL);
|
|
+ gint32 i;
|
|
+ guint32 u;
|
|
+ gdouble d;
|
|
+ const gchar *s;
|
|
+ g_variant_get (newvalue3, "(iud&s)", &i, &u, &d, &s);
|
|
+ g_assert_cmpint (i, ==, 1);
|
|
+ g_assert_cmpuint (u, ==, 2);
|
|
+ g_assert_cmpfloat (d, ==, 3.333);
|
|
+ g_assert_cmpstr (s, ==, "test value");
|
|
+ }
|
|
|
|
+ g_object_unref (object);
|
|
g_variant_type_info_assert_no_infos ();
|
|
}
|
|
|
|
--
|
|
1.7.5.4
|
|
|
|
From adcf71e6e5de45530a09e7b9f310f2e489cd9631 Mon Sep 17 00:00:00 2001
|
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
|
Date: Wed, 24 Aug 2011 11:44:21 +0900
|
|
Subject: [PATCH] Check if BusInputContext has an enabled engine in global
|
|
input method.
|
|
|
|
BUG=RH#731610
|
|
TEST=Linux desktop
|
|
|
|
Review URL: http://codereview.appspot.com/4917041
|
|
---
|
|
bus/ibusimpl.c | 6 +++++-
|
|
1 files changed, 5 insertions(+), 1 deletions(-)
|
|
|
|
diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
|
|
index 853465c..1942504 100644
|
|
--- a/bus/ibusimpl.c
|
|
+++ b/bus/ibusimpl.c
|
|
@@ -1176,12 +1176,14 @@ bus_ibus_impl_set_focused_context (BusIBusImpl *ibus,
|
|
}
|
|
|
|
BusEngineProxy *engine = NULL;
|
|
+ gboolean is_enabled = FALSE;
|
|
|
|
if (ibus->focused_context) {
|
|
if (ibus->use_global_engine) {
|
|
/* dettach engine from the focused context */
|
|
engine = bus_input_context_get_engine (ibus->focused_context);
|
|
if (engine) {
|
|
+ is_enabled = bus_input_context_is_enabled (ibus->focused_context);
|
|
g_object_ref (engine);
|
|
bus_input_context_set_engine (ibus->focused_context, NULL);
|
|
}
|
|
@@ -1203,7 +1205,9 @@ bus_ibus_impl_set_focused_context (BusIBusImpl *ibus,
|
|
/* attach engine to the focused context */
|
|
if (engine != NULL) {
|
|
bus_input_context_set_engine (context, engine);
|
|
- bus_input_context_enable (context);
|
|
+ if (is_enabled) {
|
|
+ bus_input_context_enable (context);
|
|
+ }
|
|
g_object_unref (engine);
|
|
}
|
|
|
|
--
|
|
1.7.5.4
|
|
|
|
From 894ecc8e16b01d5594ef9b8f9c5530bb2e9d0502 Mon Sep 17 00:00:00 2001
|
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
|
Date: Thu, 25 Aug 2011 09:59:42 +0900
|
|
Subject: [PATCH] Add Disable signal when
|
|
bus_ibus_impl_set_context_engine_from_desc is called.
|
|
|
|
BUG=#1261
|
|
TEST=Linux desktop
|
|
|
|
Review URL: http://codereview.appspot.com/4875049
|
|
---
|
|
bus/inputcontext.c | 2 ++
|
|
1 files changed, 2 insertions(+), 0 deletions(-)
|
|
|
|
diff --git a/bus/inputcontext.c b/bus/inputcontext.c
|
|
index 723b5fd..3c81688 100644
|
|
--- a/bus/inputcontext.c
|
|
+++ b/bus/inputcontext.c
|
|
@@ -2292,6 +2292,8 @@ new_engine_cb (GObject *obj,
|
|
"Opertation was cancelled");
|
|
}
|
|
else {
|
|
+ /* Let BusEngineProxy call a Disable signal. */
|
|
+ bus_input_context_disable (data->context);
|
|
bus_input_context_set_engine (data->context, engine);
|
|
g_object_unref (engine);
|
|
bus_input_context_enable (data->context);
|
|
--
|
|
1.7.5.4
|
|
|