|
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-2013 Peng Huang <shawn.p.huang@gmail.com>
|
|
Packit Service |
1d8f1c |
* Copyright (C) 2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
|
|
Packit Service |
1d8f1c |
* Copyright (C) 2008-2018 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 |
|
|
Packit Service |
1d8f1c |
#if !defined (__IBUS_H_INSIDE__) && !defined (IBUS_COMPILATION)
|
|
Packit Service |
1d8f1c |
#error "Only <ibus.h> can be included directly"
|
|
Packit Service |
1d8f1c |
#endif
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#ifndef __IBUS_SERIALIZABLE_H_
|
|
Packit Service |
1d8f1c |
#define __IBUS_SERIALIZABLE_H_
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* SECTION: ibusserializable
|
|
Packit Service |
1d8f1c |
* @short_description: A serializable object.
|
|
Packit Service |
1d8f1c |
* @stability: Stable
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* An #IBusSerializable is an IBus object which can be serialized, that is,
|
|
Packit Service |
1d8f1c |
* to be to and from a #GVariant.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* This class is to be extended by other class that requires serialization.
|
|
Packit Service |
1d8f1c |
* An extended class should overrides following methods:
|
|
Packit Service |
1d8f1c |
* <itemizedlist>
|
|
Packit Service |
1d8f1c |
* <listitem>
|
|
Packit Service |
1d8f1c |
* <para><function>serialize(object,iter)</function>: for serialize.</para>
|
|
Packit Service |
1d8f1c |
* </listitem>
|
|
Packit Service |
1d8f1c |
* <listitem>
|
|
Packit Service |
1d8f1c |
* <para><function>deserialize(object,iter)</function>: for deserialize.</para>
|
|
Packit Service |
1d8f1c |
* </listitem>
|
|
Packit Service |
1d8f1c |
* <listitem>
|
|
Packit Service |
1d8f1c |
* <para><function>copy(desc,src)</function>: for copy between IBusSerializable.</para>
|
|
Packit Service |
1d8f1c |
* </listitem>
|
|
Packit Service |
1d8f1c |
* </itemizedlist>
|
|
Packit Service |
1d8f1c |
* See IBusSerializableSerializeFunc(), IBusSerializableDeserializeFunc(), IBusSerializableCopyFunc()
|
|
Packit Service |
1d8f1c |
* for function prototype.
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#include "ibusobject.h"
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/*
|
|
Packit Service |
1d8f1c |
* Type macros.
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* define IBusSerializable macros */
|
|
Packit Service |
1d8f1c |
#define IBUS_TYPE_SERIALIZABLE \
|
|
Packit Service |
1d8f1c |
(ibus_serializable_get_type ())
|
|
Packit Service |
1d8f1c |
#define IBUS_SERIALIZABLE(obj) \
|
|
Packit Service |
1d8f1c |
(G_TYPE_CHECK_INSTANCE_CAST ((obj), IBUS_TYPE_SERIALIZABLE, IBusSerializable))
|
|
Packit Service |
1d8f1c |
#define IBUS_SERIALIZABLE_CLASS(klass) \
|
|
Packit Service |
1d8f1c |
(G_TYPE_CHECK_CLASS_CAST ((klass), IBUS_TYPE_SERIALIZABLE, IBusSerializableClass))
|
|
Packit Service |
1d8f1c |
#define IBUS_IS_SERIALIZABLE(obj) \
|
|
Packit Service |
1d8f1c |
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), IBUS_TYPE_SERIALIZABLE))
|
|
Packit Service |
1d8f1c |
#define IBUS_IS_SERIALIZABLE_CLASS(klass) \
|
|
Packit Service |
1d8f1c |
(G_TYPE_CHECK_CLASS_TYPE ((klass), IBUS_TYPE_SERIALIZABLE))
|
|
Packit Service |
1d8f1c |
#define IBUS_SERIALIZABLE_GET_CLASS(obj) \
|
|
Packit Service |
1d8f1c |
(G_TYPE_INSTANCE_GET_CLASS ((obj), IBUS_TYPE_SERIALIZABLE, IBusSerializableClass))
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* ibus_serializable_set_attachment:
|
|
Packit Service |
1d8f1c |
* @o: An IBusSerializable.
|
|
Packit Service |
1d8f1c |
* @k: String formatted key for indexing value.
|
|
Packit Service |
1d8f1c |
* @v: Value to be attached. Should be also serializable.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Attach a value to an IBusSerializable.
|
|
Packit Service |
1d8f1c |
* This macro is an convenient wrapper of ibus_serializable_set_qattachment().
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
#define ibus_serializable_set_attachment(o, k, v) \
|
|
Packit Service |
1d8f1c |
ibus_serializable_set_qattachment (o, g_quark_from_string (k), v)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* ibus_serializable_get_attachment:
|
|
Packit Service |
1d8f1c |
* @o: An #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* @k: String formatted key for indexing value.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Get a value from attachment of an #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* This macro is an convenient wrapper of ibus_serializable_get_qattachment().
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
#define ibus_serializable_get_attachment(o, k) \
|
|
Packit Service |
1d8f1c |
ibus_serializable_get_qattachment (o, g_quark_from_string (k))
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* ibus_serializable_remove_attachment:
|
|
Packit Service |
1d8f1c |
* @o: An #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* @k: String formatted key for indexing value.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Remove a value from attachment of an #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* This macro is an convenient wrapper of ibus_serializable_remove_qattachment().
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
#define ibus_serializable_remove_attachment(o, k) \
|
|
Packit Service |
1d8f1c |
ibus_serializable_remove_qattachment (o, g_quark_from_string (k))
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
G_BEGIN_DECLS
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
typedef struct _IBusSerializable IBusSerializable;
|
|
Packit Service |
1d8f1c |
typedef struct _IBusSerializableClass IBusSerializableClass;
|
|
Packit Service |
1d8f1c |
typedef struct _IBusSerializablePrivate IBusSerializablePrivate;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusSerializable:
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* All the fields in the <structname>IBusSerializable</structname> structure are
|
|
Packit Service |
1d8f1c |
* private to the #IBusSerializable and should never be accessed directly.
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
struct _IBusSerializable {
|
|
Packit Service |
1d8f1c |
/*< private >*/
|
|
Packit Service |
1d8f1c |
IBusObject parent;
|
|
Packit Service |
1d8f1c |
IBusSerializablePrivate *priv;
|
|
Packit Service |
1d8f1c |
/* instance members */
|
|
Packit Service |
1d8f1c |
};
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusSerializableSerializeFunc:
|
|
Packit Service |
1d8f1c |
* @serializable: An #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* @builder: A #GVariantBuilder.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Prototype of serialize function.
|
|
Packit Service |
1d8f1c |
* Serialize function convert an #IBusSerializable to #GVariantBuilder.
|
|
Packit Service |
1d8f1c |
* Returns a gboolean value which indicates whether the conversion is success.
|
|
Packit Service |
1d8f1c |
* Return %TRUE if succeed.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Returns: %TRUE if succeed; %FALSE otherwise.
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
typedef gboolean (* IBusSerializableSerializeFunc) (IBusSerializable *serializable,
|
|
Packit Service |
1d8f1c |
GVariantBuilder *builder);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusSerializableDeserializeFunc:
|
|
Packit Service |
1d8f1c |
* @serializable: An #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* @variant: A #GVariant contains a tuple.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Prototype of deserialize function.
|
|
Packit Service |
1d8f1c |
* Deserialize function convert a #GVariant to #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* Returns an integer value which indicates how many values in
|
|
Packit Service |
1d8f1c |
* the variant(tuple) are consumed.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Returns: The number of values in the variant(tuple) are consumed.
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
typedef gint (* IBusSerializableDeserializeFunc) (IBusSerializable *serializable,
|
|
Packit Service |
1d8f1c |
GVariant *variant);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusSerializableCopyFunc:
|
|
Packit Service |
1d8f1c |
* @dest: The destination #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* @src: A source #IBusSerializable.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Prototype of copy function.
|
|
Packit Service |
1d8f1c |
* Copy function copy from source #IBusSerializable to the destination one.
|
|
Packit Service |
1d8f1c |
* Returns a gboolean value which indicates whether the copying is success.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Returns: %TRUE if succeed; %FALSE otherwise.
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
typedef gboolean (* IBusSerializableCopyFunc) (IBusSerializable *dest,
|
|
Packit Service |
1d8f1c |
const IBusSerializable *src);
|
|
Packit Service |
1d8f1c |
struct _IBusSerializableClass {
|
|
Packit Service |
1d8f1c |
/*< private >*/
|
|
Packit Service |
1d8f1c |
IBusObjectClass parent;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* virtual table */
|
|
Packit Service |
1d8f1c |
gboolean (* serialize) (IBusSerializable *object,
|
|
Packit Service |
1d8f1c |
GVariantBuilder *builder);
|
|
Packit Service |
1d8f1c |
gint (* deserialize) (IBusSerializable *object,
|
|
Packit Service |
1d8f1c |
GVariant *variant);
|
|
Packit Service |
1d8f1c |
gboolean (* copy) (IBusSerializable *dest,
|
|
Packit Service |
1d8f1c |
const IBusSerializable *src);
|
|
Packit Service |
1d8f1c |
/*< private >*/
|
|
Packit Service |
1d8f1c |
/* padding */
|
|
Packit Service |
1d8f1c |
gpointer pdummy[5];
|
|
Packit Service |
1d8f1c |
};
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GType ibus_serializable_get_type (void);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* ibus_serializable_new:
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Creates a new instance of an #IBusSerializable.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Returns: a new instance of #IBusSerializable.
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
IBusSerializable *ibus_serializable_new (void);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* ibus_serializable_set_qattachment:
|
|
Packit Service |
1d8f1c |
* @serializable: An #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* @key: String formatted key for indexing value.
|
|
Packit Service |
1d8f1c |
* @value: Value to be attached or %NULL to remove any prevoius value.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Attach a value to an #IBusSerializable. If the value is floating,
|
|
Packit Service |
1d8f1c |
* the serializable will take the ownership.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: ibus_serializable_set_attachment().
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
void ibus_serializable_set_qattachment (IBusSerializable *serializable,
|
|
Packit Service |
1d8f1c |
GQuark key,
|
|
Packit Service |
1d8f1c |
GVariant *value);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* ibus_serializable_get_qattachment:
|
|
Packit Service |
1d8f1c |
* @serializable: An #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* @key: String formatted key for indexing value.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Gets a value from attachment of an #IBusSerializable.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Returns: The attached value; or %NULL if fail to retrieve the value.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: ibus_serializable_set_attachment().
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
GVariant *ibus_serializable_get_qattachment (IBusSerializable *serializable,
|
|
Packit Service |
1d8f1c |
GQuark key);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* ibus_serializable_remove_qattachment:
|
|
Packit Service |
1d8f1c |
* @serializable: An #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* @key: String formatted key for indexing value.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Remove a value from attachment of an #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* See also: ibus_serializable_remove_attachment().
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
void ibus_serializable_remove_qattachment
|
|
Packit Service |
1d8f1c |
(IBusSerializable *serializable,
|
|
Packit Service |
1d8f1c |
GQuark key);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* ibus_serializable_copy:
|
|
Packit Service |
1d8f1c |
* @serializable: An #IBusSerializable.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Clone an #IBusSerializable.
|
|
Packit Service |
1d8f1c |
* The copy method should be implemented in extended class.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Returns: (transfer none): A newly allocated clone object; or %NULL
|
|
Packit Service |
1d8f1c |
* if @object is not serializable.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: IBusSerializableCopyFunc().
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
IBusSerializable *ibus_serializable_copy (IBusSerializable *serializable);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* ibus_serializable_serialize_object:
|
|
Packit Service |
1d8f1c |
* @serializable: An #IBusSerializable.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Serialize an #IBusSerializable to a #GVariant.
|
|
Packit Service |
1d8f1c |
* The serialize method should be implemented in extended class.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Returns: A #GVariant.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: IBusSerializableCopyFunc().
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
GVariant *ibus_serializable_serialize_object
|
|
Packit Service |
1d8f1c |
(IBusSerializable *serializable);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* ibus_serializable_deserialize_object:
|
|
Packit Service |
1d8f1c |
* @variant: A #GVariant.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Deserialize a #GVariant to an #IBusSerializable/
|
|
Packit Service |
1d8f1c |
* The deserialize method should be implemented in extended class.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Returns: (transfer none): The deserialized #IBusSerializable.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: IBusSerializableCopyFunc().
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
IBusSerializable *ibus_serializable_deserialize_object
|
|
Packit Service |
1d8f1c |
(GVariant *variant);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#define ibus_serializable_serialize ibus_serializable_serialize_object
|
|
Packit Service |
1d8f1c |
#define ibus_serializable_deserialize ibus_serializable_deserialize_object
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
G_END_DECLS
|
|
Packit Service |
1d8f1c |
#endif
|
|
Packit Service |
1d8f1c |
|