/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
/* vim:set et sts=4: */
/* ibus - The Input Bus
* Copyright (C) 2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
* Copyright (C) 2018 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
* USA
*/
#include "ibusinternal.h"
#include "ibusxevent.h"
#define IBUS_EXTENSION_EVENT_VERSION 1
#define IBUS_EXTENSION_EVENT_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), \
IBUS_TYPE_EXTENSION_EVENT, \
IBusExtensionEventPrivate))
#define IBUS_X_EVENT_VERSION 1
#define IBUS_X_EVENT_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_X_EVENT, IBusXEventPrivate))
enum {
PROP_0,
PROP_VERSION,
PROP_NAME,
PROP_IS_ENABLED,
PROP_IS_EXTENSION,
PROP_PARAMS,
PROP_EVENT_TYPE,
PROP_WINDOW,
PROP_SEND_EVENT,
PROP_SERIAL,
PROP_TIME,
PROP_STATE,
PROP_KEYVAL,
PROP_LENGTH,
PROP_STRING,
PROP_HARDWARE_KEYCODE,
PROP_GROUP,
PROP_IS_MODIFIER,
PROP_ROOT,
PROP_SUBWINDOW,
PROP_X,
PROP_Y,
PROP_X_ROOT,
PROP_Y_ROOT,
PROP_SAME_SCREEN,
PROP_PURPOSE
};
struct _IBusExtensionEventPrivate {
guint version;
gchar *name;
gboolean is_enabled;
gboolean is_extension;
gchar *params;
};
struct _IBusXEventPrivate {
guint version;
guint32 time;
guint state;
guint keyval;
gint length;
gchar *string;
guint16 hardware_keycode;
guint8 group;
gboolean is_modifier;
guint root;
guint subwindow;
gint x;
gint y;
gint x_root;
gint y_root;
gboolean same_screen;
gchar *purpose;
};
/* functions prototype */
static void ibus_extension_event_destroy (IBusExtensionEvent *event);
static void ibus_extension_event_set_property (IBusExtensionEvent *event,
guint prop_id,
const GValue *value,
GParamSpec *pspec);
static void ibus_extension_event_get_property (IBusExtensionEvent *event,
guint prop_id,
GValue *value,
GParamSpec *pspec);
static gboolean ibus_extension_event_serialize (IBusExtensionEvent *event,
GVariantBuilder
*builder);
static gint ibus_extension_event_deserialize (IBusExtensionEvent *event,
GVariant
*variant);
static gboolean ibus_extension_event_copy (IBusExtensionEvent
*dest,
const IBusExtensionEvent
*src);
static void ibus_x_event_destroy (IBusXEvent *event);
static void ibus_x_event_set_property (IBusXEvent *event,
guint prop_id,
const GValue *value,
GParamSpec *pspec);
static void ibus_x_event_get_property (IBusXEvent *event,
guint prop_id,
GValue *value,
GParamSpec *pspec);
static gboolean ibus_x_event_serialize (IBusXEvent *event,
GVariantBuilder
*builder);
static gint ibus_x_event_deserialize (IBusXEvent *event,
GVariant
*variant);
static gboolean ibus_x_event_copy (IBusXEvent *dest,
const IBusXEvent *src);
G_DEFINE_TYPE (IBusExtensionEvent, ibus_extension_event, IBUS_TYPE_SERIALIZABLE)
G_DEFINE_TYPE (IBusXEvent, ibus_x_event, IBUS_TYPE_SERIALIZABLE)
static void
ibus_extension_event_class_init (IBusExtensionEventClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
IBusObjectClass *object_class = IBUS_OBJECT_CLASS (class);
IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (class);
gobject_class->set_property =
(GObjectSetPropertyFunc) ibus_extension_event_set_property;
gobject_class->get_property =
(GObjectGetPropertyFunc) ibus_extension_event_get_property;
object_class->destroy =
(IBusObjectDestroyFunc) ibus_extension_event_destroy;
serializable_class->serialize =
(IBusSerializableSerializeFunc) ibus_extension_event_serialize;
serializable_class->deserialize =
(IBusSerializableDeserializeFunc) ibus_extension_event_deserialize;
serializable_class->copy =
(IBusSerializableCopyFunc) ibus_extension_event_copy;
/* install properties */
/**
* IBusExtensionEvent:version:
*
* Version of the #IBusExtensionEvent.
*/
g_object_class_install_property (gobject_class,
PROP_VERSION,
g_param_spec_uint ("version",
"version",
"version",
0,
G_MAXUINT32,
IBUS_EXTENSION_EVENT_VERSION,
G_PARAM_READABLE));
/**
* IBusExtensionEvent:name:
*
* Name of the extension in the #IBusExtensionEvent.
*/
g_object_class_install_property (gobject_class,
PROP_NAME,
g_param_spec_string ("name",
"name",
"name of the extension",
"",
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusExtensionEvent:is-enabled:
*
* %TRUE if the extension is enabled in the #IBusExtensionEvent.
*/
g_object_class_install_property (gobject_class,
PROP_IS_ENABLED,
g_param_spec_boolean ("is-enabled",
"is enabled",
"if the extension is enabled",
FALSE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusExtensionEvent:is-extension:
*
* %TRUE if the #IBusExtensionEvent is called by an extension.
* %FALSE if the #IBusExtensionEvent is called by an active engine or
* panel.
* If this value is %TRUE, the event is send to ibus-daemon, an active
* engine. If it's %FALSE, the event is sned to ibus-daemon, panels.
*/
g_object_class_install_property (gobject_class,
PROP_IS_EXTENSION,
g_param_spec_boolean ("is-extension",
"is extension",
"if the event is called by an extension",
FALSE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusExtensionEvent:params:
*
* Parameters to enable the extension in the #IBusExtensionEvent.
*/
g_object_class_install_property (gobject_class,
PROP_PARAMS,
g_param_spec_string ("params",
"params",
"Parameters to enable the extension",
"",
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_type_class_add_private (class, sizeof (IBusExtensionEventPrivate));
}
static void
ibus_extension_event_init (IBusExtensionEvent *event)
{
event->priv = IBUS_EXTENSION_EVENT_GET_PRIVATE (event);
event->priv->version = IBUS_EXTENSION_EVENT_VERSION;
}
static void
ibus_extension_event_destroy (IBusExtensionEvent *event)
{
g_clear_pointer (&event->priv->name, g_free);
IBUS_OBJECT_CLASS(ibus_extension_event_parent_class)->
destroy (IBUS_OBJECT (event));
}
static void
ibus_extension_event_set_property (IBusExtensionEvent *event,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
IBusExtensionEventPrivate *priv = event->priv;
switch (prop_id) {
case PROP_NAME:
g_free (priv->name);
priv->name = g_value_dup_string (value);
break;
case PROP_IS_ENABLED:
priv->is_enabled = g_value_get_boolean (value);
break;
case PROP_IS_EXTENSION:
priv->is_extension = g_value_get_boolean (value);
break;
case PROP_PARAMS:
priv->params = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (event, prop_id, pspec);
}
}
static void
ibus_extension_event_get_property (IBusExtensionEvent *event,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
IBusExtensionEventPrivate *priv = event->priv;
switch (prop_id) {
case PROP_VERSION:
g_value_set_uint (value, priv->version);
break;
case PROP_NAME:
g_value_set_string (value, priv->name);
break;
case PROP_IS_ENABLED:
g_value_set_boolean (value, priv->is_enabled);
break;
case PROP_IS_EXTENSION:
g_value_set_boolean (value, priv->is_extension);
break;
case PROP_PARAMS:
g_value_set_string (value, priv->params);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (event, prop_id, pspec);
}
}
static gboolean
ibus_extension_event_serialize (IBusExtensionEvent *event,
GVariantBuilder *builder)
{
gboolean retval;
IBusExtensionEventPrivate *priv;
retval = IBUS_SERIALIZABLE_CLASS (ibus_extension_event_parent_class)->
serialize ((IBusSerializable *)event, builder);
g_return_val_if_fail (retval, FALSE);
/* End dict iter */
priv = event->priv;
#define NOTNULL(s) ((s) != NULL ? (s) : "")
/* If you will add a new property, you can append it at the end and
* you should not change the serialized order of name, longname,
* description, ... because the order is also used in other applications
* likes ibus-qt. */
g_variant_builder_add (builder, "u", priv->version);
g_variant_builder_add (builder, "s", NOTNULL (priv->name));
g_variant_builder_add (builder, "b", priv->is_enabled);
g_variant_builder_add (builder, "b", priv->is_extension);
g_variant_builder_add (builder, "s", NOTNULL (priv->params));
#undef NOTNULL
return TRUE;
}
static gint
ibus_extension_event_deserialize (IBusExtensionEvent *event,
GVariant *variant)
{
gint retval;
IBusExtensionEventPrivate *priv;
retval = IBUS_SERIALIZABLE_CLASS (ibus_extension_event_parent_class)->
deserialize ((IBusSerializable *)event, variant);
g_return_val_if_fail (retval, 0);
priv = event->priv;
/* If you will add a new property, you can append it at the end and
* you should not change the serialized order of name, longname,
* description, ... because the order is also used in other applications
* likes ibus-qt. */
g_variant_get_child (variant, retval++, "u", &priv->version);
ibus_g_variant_get_child_string (variant, retval++,
&priv->name);
g_variant_get_child (variant, retval++, "b", &priv->is_enabled);
g_variant_get_child (variant, retval++, "b", &priv->is_extension);
ibus_g_variant_get_child_string (variant, retval++,
&priv->params);
return retval;
}
static gboolean
ibus_extension_event_copy (IBusExtensionEvent *dest,
const IBusExtensionEvent *src)
{
gboolean retval;
IBusExtensionEventPrivate *dest_priv = dest->priv;
IBusExtensionEventPrivate *src_priv = src->priv;
retval = IBUS_SERIALIZABLE_CLASS (ibus_extension_event_parent_class)->
copy ((IBusSerializable *)dest, (IBusSerializable *)src);
g_return_val_if_fail (retval, FALSE);
dest_priv->version = src_priv->version;
dest_priv->name = g_strdup (src_priv->name);
dest_priv->is_enabled = src_priv->is_enabled;
dest_priv->is_extension = src_priv->is_extension;
dest_priv->params = g_strdup (src_priv->params);
return TRUE;
}
IBusExtensionEvent *
ibus_extension_event_new (const gchar *first_property_name,
...)
{
va_list var_args;
IBusExtensionEvent *event;
va_start (var_args, first_property_name);
event = (IBusExtensionEvent *) g_object_new_valist (
IBUS_TYPE_EXTENSION_EVENT,
first_property_name,
var_args);
va_end (var_args);
g_assert (event->priv->version != 0);
return event;
}
guint
ibus_extension_event_get_version (IBusExtensionEvent *event)
{
g_return_val_if_fail (IBUS_IS_EXTENSION_EVENT (event), 0);
return event->priv->version;
}
const gchar *
ibus_extension_event_get_name (IBusExtensionEvent *event)
{
g_return_val_if_fail (IBUS_IS_EXTENSION_EVENT (event), "");
return event->priv->name;
}
gboolean
ibus_extension_event_is_enabled (IBusExtensionEvent *event)
{
g_return_val_if_fail (IBUS_IS_EXTENSION_EVENT (event), FALSE);
return event->priv->is_enabled;
}
gboolean
ibus_extension_event_is_extension (IBusExtensionEvent *event)
{
g_return_val_if_fail (IBUS_IS_EXTENSION_EVENT (event), FALSE);
return event->priv->is_extension;
}
const gchar *
ibus_extension_event_get_params (IBusExtensionEvent *event)
{
g_return_val_if_fail (IBUS_IS_EXTENSION_EVENT (event), "");
return event->priv->params;
}
static void
ibus_x_event_class_init (IBusXEventClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
IBusObjectClass *object_class = IBUS_OBJECT_CLASS (class);
IBusSerializableClass *serializable_class = IBUS_SERIALIZABLE_CLASS (class);
gobject_class->set_property =
(GObjectSetPropertyFunc) ibus_x_event_set_property;
gobject_class->get_property =
(GObjectGetPropertyFunc) ibus_x_event_get_property;
object_class->destroy = (IBusObjectDestroyFunc) ibus_x_event_destroy;
serializable_class->serialize =
(IBusSerializableSerializeFunc) ibus_x_event_serialize;
serializable_class->deserialize =
(IBusSerializableDeserializeFunc) ibus_x_event_deserialize;
serializable_class->copy =
(IBusSerializableCopyFunc) ibus_x_event_copy;
/* install properties */
/**
* IBusXEvent:version:
*
* Version of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_VERSION,
g_param_spec_uint ("version",
"version",
"version",
0,
G_MAXUINT32,
IBUS_X_EVENT_VERSION,
G_PARAM_READABLE));
/**
* IBusXEvent:event-type:
*
* IBusXEventType of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_EVENT_TYPE,
g_param_spec_int ("event-type",
"event type",
"event type",
-1,
G_MAXINT32,
-1,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:window:
*
* window of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_WINDOW,
g_param_spec_uint ("window",
"window",
"window",
0,
G_MAXUINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:send-event:
*
* send_event of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_SEND_EVENT,
g_param_spec_int ("send-event",
"send event",
"send event",
0,
G_MAXINT8,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:serial:
*
* serial of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_SERIAL,
g_param_spec_ulong ("serial",
"serial",
"serial",
0,
G_MAXUINT64,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:time:
*
* time of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_TIME,
g_param_spec_uint ("time",
"time",
"time",
0,
G_MAXUINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:state:
*
* state of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_STATE,
g_param_spec_uint ("state",
"state",
"state",
0,
G_MAXUINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:keyval:
*
* keyval of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_KEYVAL,
g_param_spec_uint ("keyval",
"keyval",
"keyval",
0,
G_MAXUINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:length:
*
* keyval of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_LENGTH,
g_param_spec_int ("length",
"length",
"length",
-1,
G_MAXINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:string:
*
* string of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_STRING,
g_param_spec_string ("string",
"string",
"string",
"",
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:hardware-keycode:
*
* hardware keycode of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_HARDWARE_KEYCODE,
g_param_spec_uint ("hardware-keycode",
"hardware keycode",
"hardware keycode",
0,
G_MAXUINT16,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:group:
*
* group of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_GROUP,
g_param_spec_uint ("group",
"group",
"group",
0,
G_MAXUINT8,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:is-modifier:
*
* is_modifier of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_IS_MODIFIER,
g_param_spec_boolean ("is-modifier",
"is modifier",
"is modifier",
FALSE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:root:
*
* root window of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_ROOT,
g_param_spec_uint ("root",
"root",
"root",
0,
G_MAXUINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:subwindow:
*
* subwindow of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_SUBWINDOW,
g_param_spec_uint ("subwindow",
"subwindow",
"subwindow",
0,
G_MAXUINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:x:
*
* x of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_X,
g_param_spec_int ("x",
"x",
"x",
G_MININT32,
G_MAXINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:y:
*
* x of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_Y,
g_param_spec_int ("y",
"y",
"y",
G_MININT32,
G_MAXINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:x-root:
*
* root-x of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_X_ROOT,
g_param_spec_int ("x-root",
"x root",
"x root",
G_MININT32,
G_MAXINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:y-root:
*
* root-y of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_Y_ROOT,
g_param_spec_int ("y-root",
"y root",
"y root",
G_MININT32,
G_MAXINT32,
0,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:same-screen:
*
* same_screen of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_SAME_SCREEN,
g_param_spec_boolean ("same-screen",
"same screen",
"same screen",
TRUE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
/**
* IBusXEvent:purpose:
*
* purpose of this IBusXEvent.
*/
g_object_class_install_property (gobject_class,
PROP_PURPOSE,
g_param_spec_string ("purpose",
"purpose",
"purpose",
"",
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
g_type_class_add_private (class, sizeof (IBusXEventPrivate));
}
static void
ibus_x_event_init (IBusXEvent *event)
{
event->priv = IBUS_X_EVENT_GET_PRIVATE (event);
event->priv->version = IBUS_X_EVENT_VERSION;
}
static void
ibus_x_event_destroy (IBusXEvent *event)
{
g_clear_pointer (&event->priv->string, g_free);
g_clear_pointer (&event->priv->purpose, g_free);
IBUS_OBJECT_CLASS(ibus_x_event_parent_class)->destroy (IBUS_OBJECT (event));
}
static void
ibus_x_event_set_property (IBusXEvent *event,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
IBusXEventPrivate *priv = event->priv;
switch (prop_id) {
case PROP_EVENT_TYPE:
event->event_type = g_value_get_int (value);
break;
case PROP_WINDOW:
event->window = g_value_get_uint (value);
break;
case PROP_SEND_EVENT:
event->send_event = g_value_get_int (value);
break;
case PROP_SERIAL:
event->serial = g_value_get_ulong (value);
break;
case PROP_TIME:
priv->time = g_value_get_uint (value);
break;
case PROP_STATE:
priv->state = g_value_get_uint (value);
break;
case PROP_KEYVAL:
priv->keyval = g_value_get_uint (value);
break;
case PROP_LENGTH:
priv->length = g_value_get_int (value);
break;
case PROP_STRING:
g_free (priv->string);
priv->string = g_value_dup_string (value);
break;
case PROP_HARDWARE_KEYCODE:
priv->hardware_keycode = g_value_get_uint (value);
break;
case PROP_GROUP:
priv->group = g_value_get_uint (value);
break;
case PROP_IS_MODIFIER:
priv->is_modifier = g_value_get_boolean (value);
break;
case PROP_ROOT:
priv->root = g_value_get_uint (value);
break;
case PROP_SUBWINDOW:
priv->subwindow = g_value_get_uint (value);
break;
case PROP_X:
priv->x = g_value_get_int (value);
break;
case PROP_Y:
priv->y = g_value_get_int (value);
break;
case PROP_X_ROOT:
priv->x_root = g_value_get_int (value);
break;
case PROP_Y_ROOT:
priv->y_root = g_value_get_int (value);
break;
case PROP_SAME_SCREEN:
priv->same_screen = g_value_get_boolean (value);
break;
case PROP_PURPOSE:
g_free (priv->purpose);
priv->purpose = g_value_dup_string (value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (event, prop_id, pspec);
}
}
static void
ibus_x_event_get_property (IBusXEvent *event,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
IBusXEventPrivate *priv = event->priv;
switch (prop_id) {
case PROP_VERSION:
g_value_set_uint (value, priv->version);
break;
case PROP_EVENT_TYPE:
g_value_set_int (value, event->event_type);
break;
case PROP_WINDOW:
g_value_set_uint (value, event->window);
break;
case PROP_SEND_EVENT:
g_value_set_int (value, event->send_event);
break;
case PROP_SERIAL:
g_value_set_ulong (value, event->serial);
break;
case PROP_TIME:
g_value_set_uint (value, priv->time);
break;
case PROP_STATE:
g_value_set_uint (value, priv->state);
break;
case PROP_KEYVAL:
g_value_set_uint (value, priv->keyval);
break;
case PROP_LENGTH:
g_value_set_int (value, priv->length);
break;
case PROP_STRING:
g_value_set_string (value, priv->string);
break;
case PROP_HARDWARE_KEYCODE:
g_value_set_uint (value, priv->hardware_keycode);
break;
case PROP_GROUP:
g_value_set_uint (value, priv->group);
break;
case PROP_IS_MODIFIER:
g_value_set_boolean (value, priv->is_modifier);
break;
case PROP_ROOT:
g_value_set_uint (value, priv->root);
break;
case PROP_SUBWINDOW:
g_value_set_uint (value, priv->subwindow);
break;
case PROP_X:
g_value_set_int (value, priv->x);
break;
case PROP_Y:
g_value_set_int (value, priv->y);
break;
case PROP_X_ROOT:
g_value_set_int (value, priv->x_root);
break;
case PROP_Y_ROOT:
g_value_set_int (value, priv->y_root);
break;
case PROP_SAME_SCREEN:
g_value_set_boolean (value, priv->same_screen);
break;
case PROP_PURPOSE:
g_value_set_string (value, priv->purpose);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (event, prop_id, pspec);
}
}
static gboolean
ibus_x_event_serialize (IBusXEvent *event,
GVariantBuilder *builder)
{
gboolean retval;
IBusXEventPrivate *priv;
retval = IBUS_SERIALIZABLE_CLASS (ibus_x_event_parent_class)->
serialize ((IBusSerializable *)event, builder);
g_return_val_if_fail (retval, FALSE);
/* End dict iter */
priv = event->priv;
#define NOTNULL(s) ((s) != NULL ? (s) : "")
/* If you will add a new property, you can append it at the end and
* you should not change the serialized order of name, longname,
* description, ... because the order is also used in other applications
* likes ibus-qt. */
g_variant_builder_add (builder, "u", priv->version);
g_variant_builder_add (builder, "u", event->event_type);
g_variant_builder_add (builder, "u", event->window);
g_variant_builder_add (builder, "i", event->send_event);
g_variant_builder_add (builder, "t", event->serial);
g_variant_builder_add (builder, "u", priv->time);
g_variant_builder_add (builder, "u", priv->state);
g_variant_builder_add (builder, "u", priv->keyval);
g_variant_builder_add (builder, "i", priv->length);
g_variant_builder_add (builder, "s", NOTNULL (priv->string));
g_variant_builder_add (builder, "u", priv->hardware_keycode);
g_variant_builder_add (builder, "u", priv->group);
g_variant_builder_add (builder, "b", priv->is_modifier);
g_variant_builder_add (builder, "u", priv->root);
g_variant_builder_add (builder, "u", priv->subwindow);
g_variant_builder_add (builder, "i", priv->x);
g_variant_builder_add (builder, "i", priv->y);
g_variant_builder_add (builder, "i", priv->x_root);
g_variant_builder_add (builder, "i", priv->y_root);
g_variant_builder_add (builder, "b", priv->same_screen);
g_variant_builder_add (builder, "s", NOTNULL (priv->purpose));
#undef NOTNULL
return TRUE;
}
static gint
ibus_x_event_deserialize (IBusXEvent *event,
GVariant *variant)
{
gint retval;
IBusXEventPrivate *priv;
retval = IBUS_SERIALIZABLE_CLASS (ibus_x_event_parent_class)->
deserialize ((IBusSerializable *)event, variant);
g_return_val_if_fail (retval, 0);
priv = event->priv;
/* If you will add a new property, you can append it at the end and
* you should not change the serialized order of name, longname,
* description, ... because the order is also used in other applications
* likes ibus-qt. */
g_variant_get_child (variant, retval++, "u", &priv->version);
g_variant_get_child (variant, retval++, "u", &event->event_type);
g_variant_get_child (variant, retval++, "u", &event->window);
g_variant_get_child (variant, retval++, "i", &event->send_event);
g_variant_get_child (variant, retval++, "t", &event->serial);
g_variant_get_child (variant, retval++, "u", &priv->time);
g_variant_get_child (variant, retval++, "u", &priv->state);
g_variant_get_child (variant, retval++, "u", &priv->keyval);
g_variant_get_child (variant, retval++, "i", &priv->length);
ibus_g_variant_get_child_string (variant, retval++,
&priv->string);
g_variant_get_child (variant, retval++, "u", &priv->hardware_keycode);
g_variant_get_child (variant, retval++, "u", &priv->group);
g_variant_get_child (variant, retval++, "b", &priv->is_modifier);
g_variant_get_child (variant, retval++, "u", &priv->root);
g_variant_get_child (variant, retval++, "u", &priv->subwindow);
g_variant_get_child (variant, retval++, "i", &priv->x);
g_variant_get_child (variant, retval++, "i", &priv->y);
g_variant_get_child (variant, retval++, "i", &priv->x_root);
g_variant_get_child (variant, retval++, "i", &priv->y_root);
g_variant_get_child (variant, retval++, "b", &priv->same_screen);
ibus_g_variant_get_child_string (variant, retval++,
&priv->purpose);
return retval;
}
static gboolean
ibus_x_event_copy (IBusXEvent *dest,
const IBusXEvent *src)
{
gboolean retval;
IBusXEventPrivate *dest_priv = dest->priv;
IBusXEventPrivate *src_priv = src->priv;
retval = IBUS_SERIALIZABLE_CLASS (ibus_x_event_parent_class)->
copy ((IBusSerializable *)dest, (IBusSerializable *)src);
g_return_val_if_fail (retval, FALSE);
dest_priv->version = src_priv->version;
dest->event_type = src->event_type;
dest->window = src->window;
dest->send_event = src->send_event;
dest->serial = src->serial;
dest_priv->time = src_priv->time;
dest_priv->state = src_priv->state;
dest_priv->keyval = src_priv->keyval;
dest_priv->length = src_priv->length;
dest_priv->string = g_strdup (src_priv->string);
dest_priv->hardware_keycode = src_priv->hardware_keycode;
dest_priv->group = src_priv->group;
dest_priv->is_modifier = src_priv->is_modifier;
dest_priv->root = src_priv->root;
dest_priv->subwindow = src_priv->subwindow;
dest_priv->x = src_priv->x;
dest_priv->y = src_priv->y;
dest_priv->x_root = src_priv->x_root;
dest_priv->y_root = src_priv->y_root;
dest_priv->same_screen = src_priv->same_screen;
dest_priv->purpose = g_strdup (src_priv->purpose);
return TRUE;
}
IBusXEvent *
ibus_x_event_new (const gchar *first_property_name,
...)
{
va_list var_args;
IBusXEvent *event;
va_start (var_args, first_property_name);
event = (IBusXEvent *) g_object_new_valist (IBUS_TYPE_X_EVENT,
first_property_name,
var_args);
va_end (var_args);
g_assert (event->priv->version != 0);
g_assert (event->event_type != IBUS_X_EVENT_NOTHING);
return event;
}
guint
ibus_x_event_get_version (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
return event->priv->version;
}
IBusXEventType
ibus_x_event_get_event_type (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
return event->event_type;
}
guint32
ibus_x_event_get_window (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
return event->window;
}
gint8
ibus_x_event_get_send_event (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), -1);
return event->send_event;
}
gulong
ibus_x_event_get_serial (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
return event->serial;
}
guint32
ibus_x_event_get_time (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->time;
}
guint
ibus_x_event_get_state (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->state;
}
guint
ibus_x_event_get_keyval (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->keyval;
}
gint
ibus_x_event_get_length (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), -1);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (-1);
}
return event->priv->length;
}
const gchar *
ibus_x_event_get_string (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), "");
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached ("");
}
return event->priv->string;
}
guint16
ibus_x_event_get_hardware_keycode (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->hardware_keycode;
}
guint8
ibus_x_event_get_group (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->group;
}
gboolean
ibus_x_event_get_is_modifier (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->is_modifier;
}
guint32
ibus_x_event_get_root (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->root;
}
guint32
ibus_x_event_get_subwindow (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->subwindow;
}
gint
ibus_x_event_get_x (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->x;
}
gint
ibus_x_event_get_y (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->y;
}
gint
ibus_x_event_get_x_root (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->x_root;
}
gint
ibus_x_event_get_y_root (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), 0);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (0);
}
return event->priv->y_root;
}
gboolean
ibus_x_event_get_same_screen (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), TRUE);
switch (event->event_type) {
case IBUS_X_EVENT_KEY_PRESS:
case IBUS_X_EVENT_KEY_RELEASE:
break;
default:
g_return_val_if_reached (TRUE);
}
return event->priv->same_screen;
}
const gchar *
ibus_x_event_get_purpose (IBusXEvent *event)
{
g_return_val_if_fail (IBUS_IS_X_EVENT (event), "");
return event->priv->purpose;
}