Cleanups: fix deprecated g_type_class_add_private()
- use G_DECLARE_ and G_DEFINE_ macros - move all data into ClassNamePrivate - use _get_instance_private() This should not introduce any functional changes or breakage. Skipped two classes (EekKeyboard and EekboardContextService) for now in order not to break the build. These two classes are used in some very funky WIP code that tries to circumvent encapsulation. (Funky code is in eekboard/key-emitter.c and eekboard/eekboard-context-service.c)
This commit is contained in:
@ -40,23 +40,19 @@ enum {
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0, };
|
static guint signals[LAST_SIGNAL] = { 0, };
|
||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (EekContainer, eek_container, EEK_TYPE_ELEMENT);
|
typedef struct _EekContainerPrivate
|
||||||
|
|
||||||
#define EEK_CONTAINER_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_CONTAINER, EekContainerPrivate))
|
|
||||||
|
|
||||||
|
|
||||||
struct _EekContainerPrivate
|
|
||||||
{
|
{
|
||||||
GList *head;
|
GList *head;
|
||||||
GList *last;
|
GList *last;
|
||||||
};
|
} EekContainerPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (EekContainer, eek_container, EEK_TYPE_ELEMENT)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_container_real_add_child (EekContainer *self,
|
eek_container_real_add_child (EekContainer *self,
|
||||||
EekElement *child)
|
EekElement *child)
|
||||||
{
|
{
|
||||||
EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
|
EekContainerPrivate *priv = eek_container_get_instance_private (self);
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_ELEMENT(child));
|
g_return_if_fail (EEK_IS_ELEMENT(child));
|
||||||
g_object_ref (child);
|
g_object_ref (child);
|
||||||
@ -75,7 +71,7 @@ static void
|
|||||||
eek_container_real_remove_child (EekContainer *self,
|
eek_container_real_remove_child (EekContainer *self,
|
||||||
EekElement *child)
|
EekElement *child)
|
||||||
{
|
{
|
||||||
EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
|
EekContainerPrivate *priv = eek_container_get_instance_private (self);
|
||||||
GList *head;
|
GList *head;
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_ELEMENT(child));
|
g_return_if_fail (EEK_IS_ELEMENT(child));
|
||||||
@ -94,7 +90,7 @@ eek_container_real_foreach_child (EekContainer *self,
|
|||||||
EekCallback callback,
|
EekCallback callback,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
|
EekContainerPrivate *priv = eek_container_get_instance_private (self);
|
||||||
GList *head;
|
GList *head;
|
||||||
|
|
||||||
for (head = priv->head; head; head = g_list_next (head))
|
for (head = priv->head; head; head = g_list_next (head))
|
||||||
@ -106,7 +102,7 @@ eek_container_real_find (EekContainer *self,
|
|||||||
EekCompareFunc func,
|
EekCompareFunc func,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
|
EekContainerPrivate *priv = eek_container_get_instance_private (self);
|
||||||
GList *head;
|
GList *head;
|
||||||
|
|
||||||
head = g_list_find_custom (priv->head, user_data, (GCompareFunc)func);
|
head = g_list_find_custom (priv->head, user_data, (GCompareFunc)func);
|
||||||
@ -118,7 +114,8 @@ eek_container_real_find (EekContainer *self,
|
|||||||
static void
|
static void
|
||||||
eek_container_dispose (GObject *object)
|
eek_container_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(object);
|
EekContainer *self = EEK_CONTAINER (object);
|
||||||
|
EekContainerPrivate *priv = eek_container_get_instance_private (self);
|
||||||
GList *head;
|
GList *head;
|
||||||
|
|
||||||
for (head = priv->head; head; head = priv->head) {
|
for (head = priv->head; head; head = priv->head) {
|
||||||
@ -134,9 +131,6 @@ eek_container_class_init (EekContainerClass *klass)
|
|||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class,
|
|
||||||
sizeof (EekContainerPrivate));
|
|
||||||
|
|
||||||
klass->add_child = eek_container_real_add_child;
|
klass->add_child = eek_container_real_add_child;
|
||||||
klass->remove_child = eek_container_real_remove_child;
|
klass->remove_child = eek_container_real_remove_child;
|
||||||
klass->foreach_child = eek_container_real_foreach_child;
|
klass->foreach_child = eek_container_real_foreach_child;
|
||||||
@ -189,7 +183,7 @@ eek_container_class_init (EekContainerClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_container_init (EekContainer *self)
|
eek_container_init (EekContainer *self)
|
||||||
{
|
{
|
||||||
self->priv = EEK_CONTAINER_GET_PRIVATE(self);
|
/* void */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -30,14 +30,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEK_TYPE_CONTAINER (eek_container_get_type())
|
#define EEK_TYPE_CONTAINER (eek_container_get_type())
|
||||||
#define EEK_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_CONTAINER, EekContainer))
|
G_DECLARE_DERIVABLE_TYPE (EekContainer, eek_container, EEK, CONTAINER, EekElement)
|
||||||
#define EEK_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_CONTAINER, EekContainerClass))
|
|
||||||
#define EEK_IS_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_CONTAINER))
|
|
||||||
#define EEK_IS_CONTAINER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_CONTAINER))
|
|
||||||
#define EEK_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_CONTAINER, EekContainerClass))
|
|
||||||
|
|
||||||
typedef struct _EekContainerClass EekContainerClass;
|
|
||||||
typedef struct _EekContainerPrivate EekContainerPrivate;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EekCallback:
|
* EekCallback:
|
||||||
@ -50,14 +43,6 @@ typedef struct _EekContainerPrivate EekContainerPrivate;
|
|||||||
typedef void (*EekCallback) (EekElement *element, gpointer user_data);
|
typedef void (*EekCallback) (EekElement *element, gpointer user_data);
|
||||||
typedef gint (*EekCompareFunc) (EekElement *element, gpointer user_data);
|
typedef gint (*EekCompareFunc) (EekElement *element, gpointer user_data);
|
||||||
|
|
||||||
struct _EekContainer
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
EekElement parent;
|
|
||||||
|
|
||||||
EekContainerPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EekContainerClass:
|
* EekContainerClass:
|
||||||
* @foreach_child: virtual function for iterating over the container's children
|
* @foreach_child: virtual function for iterating over the container's children
|
||||||
|
|||||||
@ -52,20 +52,16 @@ enum {
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0, };
|
static guint signals[LAST_SIGNAL] = { 0, };
|
||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (EekElement, eek_element, G_TYPE_OBJECT);
|
typedef struct _EekElementPrivate
|
||||||
|
|
||||||
#define EEK_ELEMENT_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_ELEMENT, EekElementPrivate))
|
|
||||||
|
|
||||||
|
|
||||||
struct _EekElementPrivate
|
|
||||||
{
|
{
|
||||||
gchar *name;
|
gchar *name;
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
EekElement *parent;
|
EekElement *parent;
|
||||||
gint group;
|
gint group;
|
||||||
gint level;
|
gint level;
|
||||||
};
|
} EekElementPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (EekElement, eek_element, G_TYPE_OBJECT)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_element_real_symbol_index_changed (EekElement *self,
|
eek_element_real_symbol_index_changed (EekElement *self,
|
||||||
@ -78,7 +74,8 @@ eek_element_real_symbol_index_changed (EekElement *self,
|
|||||||
static void
|
static void
|
||||||
eek_element_finalize (GObject *object)
|
eek_element_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
EekElementPrivate *priv = EEK_ELEMENT_GET_PRIVATE(object);
|
EekElement *self = EEK_ELEMENT (object);
|
||||||
|
EekElementPrivate *priv = eek_element_get_instance_private (self);
|
||||||
|
|
||||||
g_free (priv->name);
|
g_free (priv->name);
|
||||||
G_OBJECT_CLASS (eek_element_parent_class)->finalize (object);
|
G_OBJECT_CLASS (eek_element_parent_class)->finalize (object);
|
||||||
@ -146,9 +143,6 @@ eek_element_class_init (EekElementClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class,
|
|
||||||
sizeof (EekElementPrivate));
|
|
||||||
|
|
||||||
/* signals */
|
/* signals */
|
||||||
klass->symbol_index_changed = eek_element_real_symbol_index_changed;
|
klass->symbol_index_changed = eek_element_real_symbol_index_changed;
|
||||||
|
|
||||||
@ -238,9 +232,8 @@ eek_element_class_init (EekElementClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_element_init (EekElement *self)
|
eek_element_init (EekElement *self)
|
||||||
{
|
{
|
||||||
EekElementPrivate *priv;
|
EekElementPrivate *priv = eek_element_get_instance_private (self);
|
||||||
|
|
||||||
priv = self->priv = EEK_ELEMENT_GET_PRIVATE(self);
|
|
||||||
priv->group = -1;
|
priv->group = -1;
|
||||||
priv->level = -1;
|
priv->level = -1;
|
||||||
}
|
}
|
||||||
@ -259,10 +252,12 @@ eek_element_set_parent (EekElement *element,
|
|||||||
g_return_if_fail (EEK_IS_ELEMENT(element));
|
g_return_if_fail (EEK_IS_ELEMENT(element));
|
||||||
g_return_if_fail (parent == NULL || EEK_IS_ELEMENT(parent));
|
g_return_if_fail (parent == NULL || EEK_IS_ELEMENT(parent));
|
||||||
|
|
||||||
if (element->priv->parent == parent)
|
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||||
|
|
||||||
|
if (priv->parent == parent)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (element->priv->parent != NULL) {
|
if (priv->parent != NULL) {
|
||||||
/* release self-reference acquired when setting parent */
|
/* release self-reference acquired when setting parent */
|
||||||
g_object_unref (element);
|
g_object_unref (element);
|
||||||
}
|
}
|
||||||
@ -271,7 +266,7 @@ eek_element_set_parent (EekElement *element,
|
|||||||
g_object_ref (element);
|
g_object_ref (element);
|
||||||
}
|
}
|
||||||
|
|
||||||
element->priv->parent = parent;
|
priv->parent = parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -285,7 +280,10 @@ EekElement *
|
|||||||
eek_element_get_parent (EekElement *element)
|
eek_element_get_parent (EekElement *element)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL);
|
g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL);
|
||||||
return element->priv->parent;
|
|
||||||
|
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||||
|
|
||||||
|
return priv->parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -300,8 +298,11 @@ eek_element_set_name (EekElement *element,
|
|||||||
const gchar *name)
|
const gchar *name)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_ELEMENT(element));
|
g_return_if_fail (EEK_IS_ELEMENT(element));
|
||||||
g_free (element->priv->name);
|
|
||||||
element->priv->name = g_strdup (name);
|
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||||
|
|
||||||
|
g_free (priv->name);
|
||||||
|
priv->name = g_strdup (name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -315,7 +316,10 @@ const gchar *
|
|||||||
eek_element_get_name (EekElement *element)
|
eek_element_get_name (EekElement *element)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL);
|
g_return_val_if_fail (EEK_IS_ELEMENT(element), NULL);
|
||||||
return element->priv->name;
|
|
||||||
|
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||||
|
|
||||||
|
return priv->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -332,7 +336,10 @@ eek_element_set_bounds (EekElement *element,
|
|||||||
EekBounds *bounds)
|
EekBounds *bounds)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_ELEMENT(element));
|
g_return_if_fail (EEK_IS_ELEMENT(element));
|
||||||
memcpy (&element->priv->bounds, bounds, sizeof(EekBounds));
|
|
||||||
|
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||||
|
|
||||||
|
memcpy (&priv->bounds, bounds, sizeof(EekBounds));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -350,7 +357,10 @@ eek_element_get_bounds (EekElement *element,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_ELEMENT(element));
|
g_return_if_fail (EEK_IS_ELEMENT(element));
|
||||||
g_return_if_fail (bounds != NULL);
|
g_return_if_fail (bounds != NULL);
|
||||||
memcpy (bounds, &element->priv->bounds, sizeof(EekBounds));
|
|
||||||
|
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||||
|
|
||||||
|
memcpy (bounds, &priv->bounds, sizeof(EekBounds));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -486,11 +496,14 @@ eek_element_set_group (EekElement *element,
|
|||||||
gint group)
|
gint group)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_ELEMENT(element));
|
g_return_if_fail (EEK_IS_ELEMENT(element));
|
||||||
if (element->priv->group != group) {
|
|
||||||
element->priv->group = group;
|
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||||
|
|
||||||
|
if (priv->group != group) {
|
||||||
|
priv->group = group;
|
||||||
g_object_notify (G_OBJECT(element), "group");
|
g_object_notify (G_OBJECT(element), "group");
|
||||||
g_signal_emit (element, signals[SYMBOL_INDEX_CHANGED], 0,
|
g_signal_emit (element, signals[SYMBOL_INDEX_CHANGED], 0,
|
||||||
group, element->priv->level);
|
group, priv->level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -509,11 +522,14 @@ eek_element_set_level (EekElement *element,
|
|||||||
gint level)
|
gint level)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_ELEMENT(element));
|
g_return_if_fail (EEK_IS_ELEMENT(element));
|
||||||
if (element->priv->level != level) {
|
|
||||||
element->priv->level = level;
|
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||||
|
|
||||||
|
if (priv->level != level) {
|
||||||
|
priv->level = level;
|
||||||
g_object_notify (G_OBJECT(element), "level");
|
g_object_notify (G_OBJECT(element), "level");
|
||||||
g_signal_emit (element, signals[SYMBOL_INDEX_CHANGED], 0,
|
g_signal_emit (element, signals[SYMBOL_INDEX_CHANGED], 0,
|
||||||
element->priv->group, level);
|
priv->group, level);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -530,7 +546,10 @@ gint
|
|||||||
eek_element_get_group (EekElement *element)
|
eek_element_get_group (EekElement *element)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_ELEMENT(element), -1);
|
g_return_val_if_fail (EEK_IS_ELEMENT(element), -1);
|
||||||
return element->priv->group;
|
|
||||||
|
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||||
|
|
||||||
|
return priv->group;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -546,5 +565,8 @@ gint
|
|||||||
eek_element_get_level (EekElement *element)
|
eek_element_get_level (EekElement *element)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_ELEMENT(element), -1);
|
g_return_val_if_fail (EEK_IS_ELEMENT(element), -1);
|
||||||
return element->priv->level;
|
|
||||||
|
EekElementPrivate *priv = eek_element_get_instance_private (element);
|
||||||
|
|
||||||
|
return priv->level;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,22 +30,7 @@
|
|||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
#define EEK_TYPE_ELEMENT (eek_element_get_type())
|
#define EEK_TYPE_ELEMENT (eek_element_get_type())
|
||||||
#define EEK_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_ELEMENT, EekElement))
|
G_DECLARE_DERIVABLE_TYPE (EekElement, eek_element, EEK, ELEMENT, GObject)
|
||||||
#define EEK_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_ELEMENT, EekElementClass))
|
|
||||||
#define EEK_IS_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_ELEMENT))
|
|
||||||
#define EEK_IS_ELEMENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_ELEMENT))
|
|
||||||
#define EEK_ELEMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_ELEMENT, EekElementClass))
|
|
||||||
|
|
||||||
typedef struct _EekElementClass EekElementClass;
|
|
||||||
typedef struct _EekElementPrivate EekElementPrivate;
|
|
||||||
|
|
||||||
struct _EekElement
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
GObject parent;
|
|
||||||
|
|
||||||
EekElementPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EekElementClass
|
struct _EekElementClass
|
||||||
{
|
{
|
||||||
|
|||||||
@ -47,18 +47,13 @@ enum {
|
|||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (EekGtkKeyboard, eek_gtk_keyboard, GTK_TYPE_DRAWING_AREA);
|
|
||||||
|
|
||||||
#define EEK_GTK_KEYBOARD_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_GTK_KEYBOARD, EekGtkKeyboardPrivate))
|
|
||||||
|
|
||||||
/* since 2.91.5 GDK_DRAWABLE was removed and gdk_cairo_create takes
|
/* since 2.91.5 GDK_DRAWABLE was removed and gdk_cairo_create takes
|
||||||
GdkWindow as the argument */
|
GdkWindow as the argument */
|
||||||
#ifndef GDK_DRAWABLE
|
#ifndef GDK_DRAWABLE
|
||||||
#define GDK_DRAWABLE(x) (x)
|
#define GDK_DRAWABLE(x) (x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct _EekGtkKeyboardPrivate
|
typedef struct _EekGtkKeyboardPrivate
|
||||||
{
|
{
|
||||||
EekRenderer *renderer;
|
EekRenderer *renderer;
|
||||||
EekKeyboard *keyboard;
|
EekKeyboard *keyboard;
|
||||||
@ -66,7 +61,11 @@ struct _EekGtkKeyboardPrivate
|
|||||||
gulong key_unlocked_handler;
|
gulong key_unlocked_handler;
|
||||||
gulong symbol_index_changed_handler;
|
gulong symbol_index_changed_handler;
|
||||||
EekTheme *theme;
|
EekTheme *theme;
|
||||||
};
|
|
||||||
|
GdkEventSequence *sequence; // unowned reference
|
||||||
|
} EekGtkKeyboardPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_PRIVATE (EekGtkKeyboard, eek_gtk_keyboard, GTK_TYPE_DRAWING_AREA)
|
||||||
|
|
||||||
static void on_key_pressed (EekKey *key,
|
static void on_key_pressed (EekKey *key,
|
||||||
EekGtkKeyboard *self);
|
EekGtkKeyboard *self);
|
||||||
@ -107,7 +106,8 @@ static gboolean
|
|||||||
eek_gtk_keyboard_real_draw (GtkWidget *self,
|
eek_gtk_keyboard_real_draw (GtkWidget *self,
|
||||||
cairo_t *cr)
|
cairo_t *cr)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
EekGtkKeyboardPrivate *priv =
|
||||||
|
eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self));
|
||||||
GtkAllocation allocation;
|
GtkAllocation allocation;
|
||||||
GList *list, *head;
|
GList *list, *head;
|
||||||
|
|
||||||
@ -149,7 +149,8 @@ static void
|
|||||||
eek_gtk_keyboard_real_size_allocate (GtkWidget *self,
|
eek_gtk_keyboard_real_size_allocate (GtkWidget *self,
|
||||||
GtkAllocation *allocation)
|
GtkAllocation *allocation)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
EekGtkKeyboardPrivate *priv =
|
||||||
|
eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self));
|
||||||
|
|
||||||
if (priv->renderer)
|
if (priv->renderer)
|
||||||
eek_renderer_set_allocation_size (priv->renderer,
|
eek_renderer_set_allocation_size (priv->renderer,
|
||||||
@ -162,7 +163,7 @@ eek_gtk_keyboard_real_size_allocate (GtkWidget *self,
|
|||||||
|
|
||||||
static void depress(EekGtkKeyboard *self,
|
static void depress(EekGtkKeyboard *self,
|
||||||
gdouble x, gdouble y, guint32 time) {
|
gdouble x, gdouble y, guint32 time) {
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y);
|
EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y);
|
||||||
if (key) {
|
if (key) {
|
||||||
eek_keyboard_press_key(priv->keyboard, key, time);
|
eek_keyboard_press_key(priv->keyboard, key, time);
|
||||||
@ -172,7 +173,7 @@ static void depress(EekGtkKeyboard *self,
|
|||||||
|
|
||||||
static void drag(EekGtkKeyboard *self,
|
static void drag(EekGtkKeyboard *self,
|
||||||
gdouble x, gdouble y, guint32 time) {
|
gdouble x, gdouble y, guint32 time) {
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y);
|
EekKey *key = eek_renderer_find_key_by_position (priv->renderer, x, y);
|
||||||
|
|
||||||
if (key) {
|
if (key) {
|
||||||
@ -198,7 +199,7 @@ static void drag(EekGtkKeyboard *self,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void release(EekGtkKeyboard *self, guint32 time) {
|
static void release(EekGtkKeyboard *self, guint32 time) {
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
|
|
||||||
GList *list = eek_keyboard_get_pressed_keys (priv->keyboard);
|
GList *list = eek_keyboard_get_pressed_keys (priv->keyboard);
|
||||||
for (GList *head = list; head; head = g_list_next (head)) {
|
for (GList *head = list; head; head = g_list_next (head)) {
|
||||||
@ -244,19 +245,22 @@ eek_gtk_keyboard_real_motion_notify_event (GtkWidget *self,
|
|||||||
// Only one touch stream at a time allowed. Others will be completely ignored.
|
// Only one touch stream at a time allowed. Others will be completely ignored.
|
||||||
static gboolean
|
static gboolean
|
||||||
handle_touch_event (GtkWidget *widget,
|
handle_touch_event (GtkWidget *widget,
|
||||||
GdkEventTouch *event) {
|
GdkEventTouch *event)
|
||||||
EekGtkKeyboard *self = EEK_GTK_KEYBOARD(widget);
|
{
|
||||||
|
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget);
|
||||||
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
|
|
||||||
if (event->type == GDK_TOUCH_BEGIN) {
|
if (event->type == GDK_TOUCH_BEGIN) {
|
||||||
if (self->sequence) {
|
if (priv->sequence) {
|
||||||
// Ignore second and following touch points
|
// Ignore second and following touch points
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
self->sequence = event->sequence;
|
priv->sequence = event->sequence;
|
||||||
depress(self, event->x, event->y, event->time);
|
depress(self, event->x, event->y, event->time);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self->sequence != event->sequence) {
|
if (priv->sequence != event->sequence) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,16 +270,16 @@ handle_touch_event (GtkWidget *widget,
|
|||||||
if (event->type == GDK_TOUCH_END || event->type == GDK_TOUCH_CANCEL) {
|
if (event->type == GDK_TOUCH_END || event->type == GDK_TOUCH_CANCEL) {
|
||||||
// TODO: can the event have different coords than the previous update event?
|
// TODO: can the event have different coords than the previous update event?
|
||||||
release(self, event->time);
|
release(self, event->time);
|
||||||
self->sequence = NULL;
|
priv->sequence = NULL;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_gtk_keyboard_real_unmap (GtkWidget *self)
|
eek_gtk_keyboard_real_unmap (GtkWidget *self)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
EekGtkKeyboardPrivate *priv =
|
||||||
|
eek_gtk_keyboard_get_instance_private (EEK_GTK_KEYBOARD (self));
|
||||||
|
|
||||||
if (priv->keyboard) {
|
if (priv->keyboard) {
|
||||||
GList *list, *head;
|
GList *list, *head;
|
||||||
@ -302,7 +306,9 @@ eek_gtk_keyboard_real_query_tooltip (GtkWidget *widget,
|
|||||||
gboolean keyboard_tooltip,
|
gboolean keyboard_tooltip,
|
||||||
GtkTooltip *tooltip)
|
GtkTooltip *tooltip)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget);
|
||||||
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
|
|
||||||
EekKey *key;
|
EekKey *key;
|
||||||
|
|
||||||
key = eek_renderer_find_key_by_position (priv->renderer,
|
key = eek_renderer_find_key_by_position (priv->renderer,
|
||||||
@ -323,7 +329,7 @@ static void
|
|||||||
eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
|
eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
|
||||||
EekKeyboard *keyboard)
|
EekKeyboard *keyboard)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
priv->keyboard = g_object_ref (keyboard);
|
priv->keyboard = g_object_ref (keyboard);
|
||||||
|
|
||||||
priv->key_locked_handler =
|
priv->key_locked_handler =
|
||||||
@ -359,7 +365,8 @@ eek_gtk_keyboard_set_property (GObject *object,
|
|||||||
static void
|
static void
|
||||||
eek_gtk_keyboard_dispose (GObject *object)
|
eek_gtk_keyboard_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(object);
|
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (object);
|
||||||
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
|
|
||||||
if (priv->renderer) {
|
if (priv->renderer) {
|
||||||
g_object_unref (priv->renderer);
|
g_object_unref (priv->renderer);
|
||||||
@ -408,9 +415,6 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class,
|
|
||||||
sizeof (EekGtkKeyboardPrivate));
|
|
||||||
|
|
||||||
widget_class->realize = eek_gtk_keyboard_real_realize;
|
widget_class->realize = eek_gtk_keyboard_real_realize;
|
||||||
widget_class->unmap = eek_gtk_keyboard_real_unmap;
|
widget_class->unmap = eek_gtk_keyboard_real_unmap;
|
||||||
widget_class->draw = eek_gtk_keyboard_real_draw;
|
widget_class->draw = eek_gtk_keyboard_real_draw;
|
||||||
@ -441,7 +445,7 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_gtk_keyboard_init (EekGtkKeyboard *self)
|
eek_gtk_keyboard_init (EekGtkKeyboard *self)
|
||||||
{
|
{
|
||||||
self->priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
/* void */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -523,7 +527,8 @@ static void
|
|||||||
render_pressed_key (GtkWidget *widget,
|
render_pressed_key (GtkWidget *widget,
|
||||||
EekKey *key)
|
EekKey *key)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget);
|
||||||
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
EekBounds bounds, large_bounds;
|
EekBounds bounds, large_bounds;
|
||||||
|
|
||||||
GdkWindow *window = gtk_widget_get_window (widget);
|
GdkWindow *window = gtk_widget_get_window (widget);
|
||||||
@ -562,7 +567,8 @@ static void
|
|||||||
render_locked_key (GtkWidget *widget,
|
render_locked_key (GtkWidget *widget,
|
||||||
EekKey *key)
|
EekKey *key)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget);
|
||||||
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
|
|
||||||
GdkWindow *window = gtk_widget_get_window (widget);
|
GdkWindow *window = gtk_widget_get_window (widget);
|
||||||
@ -593,7 +599,8 @@ static void
|
|||||||
render_released_key (GtkWidget *widget,
|
render_released_key (GtkWidget *widget,
|
||||||
EekKey *key)
|
EekKey *key)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
EekGtkKeyboard *self = EEK_GTK_KEYBOARD (widget);
|
||||||
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
EekBounds bounds, large_bounds;
|
EekBounds bounds, large_bounds;
|
||||||
|
|
||||||
GdkWindow *window = gtk_widget_get_window (widget);
|
GdkWindow *window = gtk_widget_get_window (widget);
|
||||||
@ -624,7 +631,7 @@ static void
|
|||||||
on_key_pressed (EekKey *key,
|
on_key_pressed (EekKey *key,
|
||||||
EekGtkKeyboard *self)
|
EekGtkKeyboard *self)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
|
|
||||||
/* renderer may have not been set yet if the widget is a popup */
|
/* renderer may have not been set yet if the widget is a popup */
|
||||||
if (!priv->renderer)
|
if (!priv->renderer)
|
||||||
@ -645,7 +652,7 @@ static void
|
|||||||
on_key_released (EekKey *key,
|
on_key_released (EekKey *key,
|
||||||
EekGtkKeyboard *self)
|
EekGtkKeyboard *self)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
|
||||||
|
|
||||||
/* renderer may have not been set yet if the widget is a popup */
|
/* renderer may have not been set yet if the widget is a popup */
|
||||||
if (!priv->renderer)
|
if (!priv->renderer)
|
||||||
@ -668,7 +675,7 @@ on_key_locked (EekKeyboard *keyboard,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *widget = user_data;
|
GtkWidget *widget = user_data;
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (user_data);
|
||||||
|
|
||||||
/* renderer may have not been set yet if the widget is a popup */
|
/* renderer may have not been set yet if the widget is a popup */
|
||||||
if (!priv->renderer)
|
if (!priv->renderer)
|
||||||
@ -683,7 +690,7 @@ on_key_unlocked (EekKeyboard *keyboard,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
GtkWidget *widget = user_data;
|
GtkWidget *widget = user_data;
|
||||||
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(widget);
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (user_data);
|
||||||
|
|
||||||
/* renderer may have not been set yet if the widget is a popup */
|
/* renderer may have not been set yet if the widget is a popup */
|
||||||
if (!priv->renderer)
|
if (!priv->renderer)
|
||||||
@ -707,11 +714,9 @@ void
|
|||||||
eek_gtk_keyboard_set_theme (EekGtkKeyboard *keyboard,
|
eek_gtk_keyboard_set_theme (EekGtkKeyboard *keyboard,
|
||||||
EekTheme *theme)
|
EekTheme *theme)
|
||||||
{
|
{
|
||||||
EekGtkKeyboardPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_GTK_KEYBOARD(keyboard));
|
g_return_if_fail (EEK_IS_GTK_KEYBOARD(keyboard));
|
||||||
g_return_if_fail (EEK_IS_THEME(theme));
|
g_return_if_fail (EEK_IS_THEME(theme));
|
||||||
|
|
||||||
priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
|
EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (keyboard);
|
||||||
priv->theme = g_object_ref (theme);
|
priv->theme = g_object_ref (theme);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -32,25 +32,7 @@
|
|||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
#define EEK_TYPE_GTK_KEYBOARD (eek_gtk_keyboard_get_type())
|
#define EEK_TYPE_GTK_KEYBOARD (eek_gtk_keyboard_get_type())
|
||||||
#define EEK_GTK_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_GTK_KEYBOARD, EekGtkKeyboard))
|
G_DECLARE_DERIVABLE_TYPE (EekGtkKeyboard, eek_gtk_keyboard, EEK, GTK_KEYBOARD, GtkDrawingArea)
|
||||||
#define EEK_GTK_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_GTK_KEYBOARD, EekGtkKeyboardClass))
|
|
||||||
#define EEK_IS_GTK_KEYBOARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_GTK_KEYBOARD))
|
|
||||||
#define EEK_IS_GTK_KEYBOARD_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_GTK_KEYBOARD))
|
|
||||||
#define EEK_GTK_KEYBOARD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_GTK_KEYBOARD, EekGtkKeyboardClass))
|
|
||||||
|
|
||||||
typedef struct _EekGtkKeyboard EekGtkKeyboard;
|
|
||||||
typedef struct _EekGtkKeyboardClass EekGtkKeyboardClass;
|
|
||||||
typedef struct _EekGtkKeyboardPrivate EekGtkKeyboardPrivate;
|
|
||||||
|
|
||||||
struct _EekGtkKeyboard
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
GtkDrawingArea parent;
|
|
||||||
|
|
||||||
GdkEventSequence *sequence; // unowned reference
|
|
||||||
|
|
||||||
EekGtkKeyboardPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EekGtkKeyboardClass
|
struct _EekGtkKeyboardClass
|
||||||
{
|
{
|
||||||
|
|||||||
@ -54,13 +54,7 @@ enum {
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0, };
|
static guint signals[LAST_SIGNAL] = { 0, };
|
||||||
|
|
||||||
G_DEFINE_TYPE (EekKey, eek_key, EEK_TYPE_ELEMENT);
|
typedef struct _EekKeyPrivate
|
||||||
|
|
||||||
#define EEK_KEY_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_KEY, EekKeyPrivate))
|
|
||||||
|
|
||||||
|
|
||||||
struct _EekKeyPrivate
|
|
||||||
{
|
{
|
||||||
guint keycode;
|
guint keycode;
|
||||||
EekSymbolMatrix *symbol_matrix;
|
EekSymbolMatrix *symbol_matrix;
|
||||||
@ -69,12 +63,14 @@ struct _EekKeyPrivate
|
|||||||
gulong oref; // UI outline reference
|
gulong oref; // UI outline reference
|
||||||
gboolean is_pressed;
|
gboolean is_pressed;
|
||||||
gboolean is_locked;
|
gboolean is_locked;
|
||||||
};
|
} EekKeyPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_PRIVATE (EekKey, eek_key, EEK_TYPE_ELEMENT)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_key_real_locked (EekKey *self)
|
eek_key_real_locked (EekKey *self)
|
||||||
{
|
{
|
||||||
EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
|
EekKeyPrivate *priv = eek_key_get_instance_private (self);
|
||||||
|
|
||||||
priv->is_locked = TRUE;
|
priv->is_locked = TRUE;
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@ -85,7 +81,7 @@ eek_key_real_locked (EekKey *self)
|
|||||||
static void
|
static void
|
||||||
eek_key_real_unlocked (EekKey *self)
|
eek_key_real_unlocked (EekKey *self)
|
||||||
{
|
{
|
||||||
EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(self);
|
EekKeyPrivate *priv = eek_key_get_instance_private (self);
|
||||||
|
|
||||||
priv->is_locked = FALSE;
|
priv->is_locked = FALSE;
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
@ -96,8 +92,11 @@ eek_key_real_unlocked (EekKey *self)
|
|||||||
static void
|
static void
|
||||||
eek_key_finalize (GObject *object)
|
eek_key_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(object);
|
EekKey *self = EEK_KEY (object);
|
||||||
|
EekKeyPrivate *priv = eek_key_get_instance_private (self);
|
||||||
|
|
||||||
eek_symbol_matrix_free (priv->symbol_matrix);
|
eek_symbol_matrix_free (priv->symbol_matrix);
|
||||||
|
|
||||||
G_OBJECT_CLASS (eek_key_parent_class)->finalize (object);
|
G_OBJECT_CLASS (eek_key_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,9 +173,6 @@ eek_key_class_init (EekKeyClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class,
|
|
||||||
sizeof (EekKeyPrivate));
|
|
||||||
|
|
||||||
gobject_class->set_property = eek_key_set_property;
|
gobject_class->set_property = eek_key_set_property;
|
||||||
gobject_class->get_property = eek_key_get_property;
|
gobject_class->get_property = eek_key_get_property;
|
||||||
gobject_class->finalize = eek_key_finalize;
|
gobject_class->finalize = eek_key_finalize;
|
||||||
@ -285,9 +281,7 @@ eek_key_class_init (EekKeyClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_key_init (EekKey *self)
|
eek_key_init (EekKey *self)
|
||||||
{
|
{
|
||||||
EekKeyPrivate *priv;
|
EekKeyPrivate *priv = eek_key_get_instance_private (self);
|
||||||
|
|
||||||
priv = self->priv = EEK_KEY_GET_PRIVATE(self);
|
|
||||||
priv->symbol_matrix = eek_symbol_matrix_new (0, 0);
|
priv->symbol_matrix = eek_symbol_matrix_new (0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -307,7 +301,10 @@ eek_key_set_keycode (EekKey *key,
|
|||||||
guint keycode)
|
guint keycode)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_KEY (key));
|
g_return_if_fail (EEK_IS_KEY (key));
|
||||||
key->priv->keycode = keycode;
|
|
||||||
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
|
|
||||||
|
priv->keycode = keycode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -321,7 +318,10 @@ guint
|
|||||||
eek_key_get_keycode (EekKey *key)
|
eek_key_get_keycode (EekKey *key)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_KEY (key), EEK_INVALID_KEYCODE);
|
g_return_val_if_fail (EEK_IS_KEY (key), EEK_INVALID_KEYCODE);
|
||||||
return key->priv->keycode;
|
|
||||||
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
|
|
||||||
|
return priv->keycode;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -337,8 +337,10 @@ eek_key_set_symbol_matrix (EekKey *key,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_KEY(key));
|
g_return_if_fail (EEK_IS_KEY(key));
|
||||||
|
|
||||||
eek_symbol_matrix_free (key->priv->symbol_matrix);
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
key->priv->symbol_matrix = eek_symbol_matrix_copy (matrix);
|
|
||||||
|
eek_symbol_matrix_free (priv->symbol_matrix);
|
||||||
|
priv->symbol_matrix = eek_symbol_matrix_copy (matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -352,7 +354,10 @@ EekSymbolMatrix *
|
|||||||
eek_key_get_symbol_matrix (EekKey *key)
|
eek_key_get_symbol_matrix (EekKey *key)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_KEY(key), NULL);
|
g_return_val_if_fail (EEK_IS_KEY(key), NULL);
|
||||||
return key->priv->symbol_matrix;
|
|
||||||
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
|
|
||||||
|
return priv->symbol_matrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -440,7 +445,7 @@ eek_key_get_symbol_at_index (EekKey *key,
|
|||||||
gint fallback_group,
|
gint fallback_group,
|
||||||
gint fallback_level)
|
gint fallback_level)
|
||||||
{
|
{
|
||||||
EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(key);
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
gint num_symbols;
|
gint num_symbols;
|
||||||
|
|
||||||
g_return_val_if_fail (fallback_group >= 0, NULL);
|
g_return_val_if_fail (fallback_group >= 0, NULL);
|
||||||
@ -492,12 +497,14 @@ eek_key_set_index (EekKey *key,
|
|||||||
g_return_if_fail (0 <= column);
|
g_return_if_fail (0 <= column);
|
||||||
g_return_if_fail (0 <= row);
|
g_return_if_fail (0 <= row);
|
||||||
|
|
||||||
if (key->priv->column != column) {
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
key->priv->column = column;
|
|
||||||
|
if (priv->column != column) {
|
||||||
|
priv->column = column;
|
||||||
g_object_notify (G_OBJECT(key), "column");
|
g_object_notify (G_OBJECT(key), "column");
|
||||||
}
|
}
|
||||||
if (key->priv->row != row) {
|
if (priv->row != row) {
|
||||||
key->priv->row = row;
|
priv->row = row;
|
||||||
g_object_notify (G_OBJECT(key), "row");
|
g_object_notify (G_OBJECT(key), "row");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -518,10 +525,12 @@ eek_key_get_index (EekKey *key,
|
|||||||
g_return_if_fail (EEK_IS_KEY(key));
|
g_return_if_fail (EEK_IS_KEY(key));
|
||||||
g_return_if_fail (column != NULL || row != NULL);
|
g_return_if_fail (column != NULL || row != NULL);
|
||||||
|
|
||||||
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
|
|
||||||
if (column != NULL)
|
if (column != NULL)
|
||||||
*column = key->priv->column;
|
*column = priv->column;
|
||||||
if (row != NULL)
|
if (row != NULL)
|
||||||
*row = key->priv->row;
|
*row = priv->row;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -536,8 +545,11 @@ eek_key_set_oref (EekKey *key,
|
|||||||
guint oref)
|
guint oref)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_KEY(key));
|
g_return_if_fail (EEK_IS_KEY(key));
|
||||||
if (key->priv->oref != oref) {
|
|
||||||
key->priv->oref = oref;
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
|
|
||||||
|
if (priv->oref != oref) {
|
||||||
|
priv->oref = oref;
|
||||||
g_object_notify (G_OBJECT(key), "oref");
|
g_object_notify (G_OBJECT(key), "oref");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -553,7 +565,10 @@ guint
|
|||||||
eek_key_get_oref (EekKey *key)
|
eek_key_get_oref (EekKey *key)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_KEY (key), 0);
|
g_return_val_if_fail (EEK_IS_KEY (key), 0);
|
||||||
return key->priv->oref;
|
|
||||||
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
|
|
||||||
|
return priv->oref;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -566,7 +581,10 @@ gboolean
|
|||||||
eek_key_is_pressed (EekKey *key)
|
eek_key_is_pressed (EekKey *key)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_KEY(key), FALSE);
|
g_return_val_if_fail (EEK_IS_KEY(key), FALSE);
|
||||||
return key->priv->is_pressed;
|
|
||||||
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
|
|
||||||
|
return priv->is_pressed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -579,11 +597,17 @@ gboolean
|
|||||||
eek_key_is_locked (EekKey *key)
|
eek_key_is_locked (EekKey *key)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_KEY(key), FALSE);
|
g_return_val_if_fail (EEK_IS_KEY(key), FALSE);
|
||||||
return key->priv->is_locked;
|
|
||||||
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
|
|
||||||
|
return priv->is_locked;
|
||||||
}
|
}
|
||||||
|
|
||||||
void eek_key_set_pressed(EekKey *key, gboolean value)
|
void eek_key_set_pressed(EekKey *key, gboolean value)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_KEY(key));
|
g_return_if_fail (EEK_IS_KEY(key));
|
||||||
key->priv->is_pressed = value;
|
|
||||||
|
EekKeyPrivate *priv = eek_key_get_instance_private (key);
|
||||||
|
|
||||||
|
priv->is_pressed = value;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,31 +31,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEK_TYPE_KEY (eek_key_get_type())
|
#define EEK_TYPE_KEY (eek_key_get_type())
|
||||||
#define EEK_KEY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_KEY, EekKey))
|
G_DECLARE_DERIVABLE_TYPE(EekKey, eek_key, EEK, KEY, EekElement)
|
||||||
#define EEK_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_KEY, EekKeyClass))
|
|
||||||
#define EEK_IS_KEY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_KEY))
|
|
||||||
#define EEK_IS_KEY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_KEY))
|
|
||||||
#define EEK_KEY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_KEY, EekKeyClass))
|
|
||||||
|
|
||||||
typedef struct _EekKeyClass EekKeyClass;
|
|
||||||
typedef struct _EekKeyPrivate EekKeyPrivate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekKey:
|
|
||||||
*
|
|
||||||
* Contains information about the state of a key.
|
|
||||||
* TODO: rewrite as a plain struct
|
|
||||||
*
|
|
||||||
* The #EekKey structure contains only private data and should only be
|
|
||||||
* accessed using the provided API.
|
|
||||||
*/
|
|
||||||
struct _EekKey
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
EekElement parent;
|
|
||||||
|
|
||||||
EekKeyPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EekKeyClass:
|
* EekKeyClass:
|
||||||
|
|||||||
@ -50,9 +50,10 @@
|
|||||||
#define EEK_KEYSYM_Hyper_L 0xffed
|
#define EEK_KEYSYM_Hyper_L 0xffed
|
||||||
#define EEK_KEYSYM_Hyper_R 0xffee
|
#define EEK_KEYSYM_Hyper_R 0xffee
|
||||||
|
|
||||||
struct _EekKeysymPrivate {
|
typedef struct _EekKeysymPrivate
|
||||||
|
{
|
||||||
guint xkeysym;
|
guint xkeysym;
|
||||||
};
|
} EekKeysymPrivate;
|
||||||
|
|
||||||
struct _EekKeysymEntry {
|
struct _EekKeysymEntry {
|
||||||
guint xkeysym;
|
guint xkeysym;
|
||||||
@ -68,12 +69,11 @@ typedef struct _EekKeysymEntry EekKeysymEntry;
|
|||||||
|
|
||||||
static void eek_serializable_iface_init (EekSerializableIface *iface);
|
static void eek_serializable_iface_init (EekSerializableIface *iface);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (EekKeysym, eek_keysym, EEK_TYPE_SYMBOL,
|
G_DEFINE_TYPE_EXTENDED (EekKeysym, eek_keysym, EEK_TYPE_SYMBOL,
|
||||||
|
0, /* GTypeFlags */
|
||||||
|
G_ADD_PRIVATE (EekKeysym)
|
||||||
G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
|
G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
|
||||||
eek_serializable_iface_init));
|
eek_serializable_iface_init))
|
||||||
|
|
||||||
#define EEK_KEYSYM_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_KEYSYM, EekKeysymPrivate))
|
|
||||||
|
|
||||||
static EekSerializableIface *eek_keysym_parent_serializable_iface;
|
static EekSerializableIface *eek_keysym_parent_serializable_iface;
|
||||||
|
|
||||||
@ -81,7 +81,8 @@ static void
|
|||||||
eek_keysym_real_serialize (EekSerializable *self,
|
eek_keysym_real_serialize (EekSerializable *self,
|
||||||
GVariantBuilder *builder)
|
GVariantBuilder *builder)
|
||||||
{
|
{
|
||||||
EekKeysymPrivate *priv = EEK_KEYSYM_GET_PRIVATE(self);
|
EekKeysymPrivate *priv = eek_keysym_get_instance_private (
|
||||||
|
EEK_KEYSYM(self));
|
||||||
|
|
||||||
eek_keysym_parent_serializable_iface->serialize (self, builder);
|
eek_keysym_parent_serializable_iface->serialize (self, builder);
|
||||||
|
|
||||||
@ -93,7 +94,8 @@ eek_keysym_real_deserialize (EekSerializable *self,
|
|||||||
GVariant *variant,
|
GVariant *variant,
|
||||||
gsize index)
|
gsize index)
|
||||||
{
|
{
|
||||||
EekKeysymPrivate *priv = EEK_KEYSYM_GET_PRIVATE(self);
|
EekKeysymPrivate *priv = eek_keysym_get_instance_private (
|
||||||
|
EEK_KEYSYM(self));
|
||||||
|
|
||||||
index = eek_keysym_parent_serializable_iface->deserialize (self,
|
index = eek_keysym_parent_serializable_iface->deserialize (self,
|
||||||
variant,
|
variant,
|
||||||
@ -200,15 +202,13 @@ get_modifier_mask (guint xkeysym)
|
|||||||
static void
|
static void
|
||||||
eek_keysym_class_init (EekKeysymClass *klass)
|
eek_keysym_class_init (EekKeysymClass *klass)
|
||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
/* void */
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class, sizeof (EekKeysymPrivate));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_keysym_init (EekKeysym *self)
|
eek_keysym_init (EekKeysym *self)
|
||||||
{
|
{
|
||||||
self->priv = EEK_KEYSYM_GET_PRIVATE(self);
|
/* void */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -291,7 +291,7 @@ eek_keysym_new_with_modifier (guint xkeysym,
|
|||||||
g_slice_free (EekKeysymEntry, unichar_entry);
|
g_slice_free (EekKeysymEntry, unichar_entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
priv = EEK_KEYSYM_GET_PRIVATE(keysym);
|
priv = eek_keysym_get_instance_private (keysym);
|
||||||
priv->xkeysym = xkeysym;
|
priv->xkeysym = xkeysym;
|
||||||
|
|
||||||
return keysym;
|
return keysym;
|
||||||
@ -345,6 +345,6 @@ eek_keysym_get_xkeysym (EekKeysym *keysym)
|
|||||||
EekKeysymPrivate *priv;
|
EekKeysymPrivate *priv;
|
||||||
|
|
||||||
g_assert (EEK_IS_KEYSYM(keysym));
|
g_assert (EEK_IS_KEYSYM(keysym));
|
||||||
priv = EEK_KEYSYM_GET_PRIVATE(keysym);
|
priv = eek_keysym_get_instance_private (keysym);
|
||||||
return priv->xkeysym;
|
return priv->xkeysym;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,27 +38,7 @@ G_BEGIN_DECLS
|
|||||||
#define EEK_INVALID_KEYSYM (0)
|
#define EEK_INVALID_KEYSYM (0)
|
||||||
|
|
||||||
#define EEK_TYPE_KEYSYM (eek_keysym_get_type())
|
#define EEK_TYPE_KEYSYM (eek_keysym_get_type())
|
||||||
#define EEK_KEYSYM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_KEYSYM, EekKeysym))
|
G_DECLARE_DERIVABLE_TYPE (EekKeysym, eek_keysym, EEK, KEYSYM, EekSymbol)
|
||||||
#define EEK_KEYSYM_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_KEYSYM, EekKeysymClass))
|
|
||||||
#define EEK_IS_KEYSYM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_KEYSYM))
|
|
||||||
#define EEK_IS_KEYSYM_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_KEYSYM))
|
|
||||||
#define EEK_KEYSYM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_KEYSYM, EekKeysymClass))
|
|
||||||
|
|
||||||
typedef struct _EekKeysymClass EekKeysymClass;
|
|
||||||
typedef struct _EekKeysymPrivate EekKeysymPrivate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekKeysym:
|
|
||||||
*
|
|
||||||
* The #EekKeysym structure contains only private data and should only
|
|
||||||
* be accessed using the provided API.
|
|
||||||
*/
|
|
||||||
struct _EekKeysym {
|
|
||||||
/*< private >*/
|
|
||||||
EekSymbol parent;
|
|
||||||
|
|
||||||
EekKeysymPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EekKeysymClass {
|
struct _EekKeysymClass {
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
|
|||||||
@ -34,7 +34,7 @@
|
|||||||
#include "eek-keyboard.h"
|
#include "eek-keyboard.h"
|
||||||
#include "eekboard/eekboard-context-service.h"
|
#include "eekboard/eekboard-context-service.h"
|
||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (EekLayout, eek_layout, G_TYPE_OBJECT);
|
G_DEFINE_ABSTRACT_TYPE (EekLayout, eek_layout, G_TYPE_OBJECT)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_layout_class_init (EekLayoutClass *klass)
|
eek_layout_class_init (EekLayoutClass *klass)
|
||||||
|
|||||||
@ -31,20 +31,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEK_TYPE_LAYOUT (eek_layout_get_type())
|
#define EEK_TYPE_LAYOUT (eek_layout_get_type())
|
||||||
#define EEK_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_LAYOUT, EekLayout))
|
G_DECLARE_DERIVABLE_TYPE (EekLayout, eek_layout, EEK, LAYOUT, GObject)
|
||||||
#define EEK_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_LAYOUT, EekLayoutClass))
|
|
||||||
#define EEK_IS_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_LAYOUT))
|
|
||||||
#define EEK_IS_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_LAYOUT))
|
|
||||||
#define EEK_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_LAYOUT, EekLayoutClass))
|
|
||||||
|
|
||||||
typedef struct _EekLayoutClass EekLayoutClass;
|
|
||||||
typedef struct _EekLayout EekLayout;
|
|
||||||
|
|
||||||
struct _EekLayout
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
GObject parent;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EekLayoutClass:
|
* EekLayoutClass:
|
||||||
|
|||||||
@ -36,12 +36,7 @@ enum {
|
|||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (EekRenderer, eek_renderer, G_TYPE_OBJECT);
|
typedef struct _EekRendererPrivate
|
||||||
|
|
||||||
#define EEK_RENDERER_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_RENDERER, EekRendererPrivate))
|
|
||||||
|
|
||||||
struct _EekRendererPrivate
|
|
||||||
{
|
{
|
||||||
EekKeyboard *keyboard;
|
EekKeyboard *keyboard;
|
||||||
PangoContext *pcontext;
|
PangoContext *pcontext;
|
||||||
@ -62,7 +57,9 @@ struct _EekRendererPrivate
|
|||||||
gulong symbol_index_changed_handler;
|
gulong symbol_index_changed_handler;
|
||||||
|
|
||||||
EekTheme *theme;
|
EekTheme *theme;
|
||||||
};
|
} EekRendererPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_PRIVATE (EekRenderer, eek_renderer, G_TYPE_OBJECT)
|
||||||
|
|
||||||
static const EekColor DEFAULT_FOREGROUND_COLOR = {0.3, 0.3, 0.3, 1.0};
|
static const EekColor DEFAULT_FOREGROUND_COLOR = {0.3, 0.3, 0.3, 1.0};
|
||||||
static const EekColor DEFAULT_BACKGROUND_COLOR = {1.0, 1.0, 1.0, 1.0};
|
static const EekColor DEFAULT_BACKGROUND_COLOR = {1.0, 1.0, 1.0, 1.0};
|
||||||
@ -106,7 +103,7 @@ create_keyboard_surface_key_callback (EekElement *element,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
CreateKeyboardSurfaceCallbackData *data = user_data;
|
CreateKeyboardSurfaceCallbackData *data = user_data;
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(data->renderer);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
|
|
||||||
cairo_save (data->cr);
|
cairo_save (data->cr);
|
||||||
@ -129,7 +126,7 @@ create_keyboard_surface_section_callback (EekElement *element,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
CreateKeyboardSurfaceCallbackData *data = user_data;
|
CreateKeyboardSurfaceCallbackData *data = user_data;
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(data->renderer);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
gint angle;
|
gint angle;
|
||||||
|
|
||||||
@ -151,7 +148,7 @@ create_keyboard_surface_section_callback (EekElement *element,
|
|||||||
static cairo_surface_t *
|
static cairo_surface_t *
|
||||||
create_keyboard_surface (EekRenderer *renderer)
|
create_keyboard_surface (EekRenderer *renderer)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
cairo_surface_t *keyboard_surface;
|
cairo_surface_t *keyboard_surface;
|
||||||
CreateKeyboardSurfaceCallbackData data;
|
CreateKeyboardSurfaceCallbackData data;
|
||||||
@ -202,7 +199,7 @@ render_key_outline (EekRenderer *renderer,
|
|||||||
EekKey *key,
|
EekKey *key,
|
||||||
gboolean active)
|
gboolean active)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
EekOutline *outline;
|
EekOutline *outline;
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
guint oref;
|
guint oref;
|
||||||
@ -353,7 +350,7 @@ static void
|
|||||||
calculate_font_size_key_callback (EekElement *element, gpointer user_data)
|
calculate_font_size_key_callback (EekElement *element, gpointer user_data)
|
||||||
{
|
{
|
||||||
CalculateFontSizeCallbackData *data = user_data;
|
CalculateFontSizeCallbackData *data = user_data;
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(data->renderer);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||||
gdouble sx, sy;
|
gdouble sx, sy;
|
||||||
PangoFontDescription *font;
|
PangoFontDescription *font;
|
||||||
PangoRectangle extents = { 0, };
|
PangoRectangle extents = { 0, };
|
||||||
@ -413,7 +410,7 @@ calculate_font_size (EekRenderer *renderer,
|
|||||||
const PangoFontDescription *base_font,
|
const PangoFontDescription *base_font,
|
||||||
gboolean ascii)
|
gboolean ascii)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
CalculateFontSizeCallbackData data;
|
CalculateFontSizeCallbackData data;
|
||||||
|
|
||||||
data.size = G_MAXDOUBLE;
|
data.size = G_MAXDOUBLE;
|
||||||
@ -432,7 +429,7 @@ render_key (EekRenderer *self,
|
|||||||
EekKey *key,
|
EekKey *key,
|
||||||
gboolean active)
|
gboolean active)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||||
EekOutline *outline;
|
EekOutline *outline;
|
||||||
cairo_surface_t *outline_surface;
|
cairo_surface_t *outline_surface;
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
@ -605,7 +602,7 @@ eek_renderer_real_render_key_label (EekRenderer *self,
|
|||||||
PangoLayout *layout,
|
PangoLayout *layout,
|
||||||
EekKey *key)
|
EekKey *key)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||||
EekSymbol *symbol;
|
EekSymbol *symbol;
|
||||||
EekSymbolCategory category;
|
EekSymbolCategory category;
|
||||||
const gchar *label;
|
const gchar *label;
|
||||||
@ -698,7 +695,7 @@ static void
|
|||||||
eek_renderer_real_render_keyboard (EekRenderer *self,
|
eek_renderer_real_render_keyboard (EekRenderer *self,
|
||||||
cairo_t *cr)
|
cairo_t *cr)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||||
cairo_pattern_t *source;
|
cairo_pattern_t *source;
|
||||||
|
|
||||||
g_return_if_fail (priv->keyboard);
|
g_return_if_fail (priv->keyboard);
|
||||||
@ -720,7 +717,8 @@ eek_renderer_set_property (GObject *object,
|
|||||||
const GValue *value,
|
const GValue *value,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (
|
||||||
|
EEK_RENDERER(object));
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_KEYBOARD:
|
case PROP_KEYBOARD:
|
||||||
@ -748,7 +746,8 @@ eek_renderer_get_property (GObject *object,
|
|||||||
GValue *value,
|
GValue *value,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (
|
||||||
|
EEK_RENDERER(object));
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_KEYBOARD:
|
case PROP_KEYBOARD:
|
||||||
@ -763,7 +762,8 @@ eek_renderer_get_property (GObject *object,
|
|||||||
static void
|
static void
|
||||||
eek_renderer_dispose (GObject *object)
|
eek_renderer_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
|
EekRenderer *self = EEK_RENDERER (object);
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||||
|
|
||||||
if (priv->keyboard) {
|
if (priv->keyboard) {
|
||||||
if (g_signal_handler_is_connected (priv->keyboard,
|
if (g_signal_handler_is_connected (priv->keyboard,
|
||||||
@ -787,7 +787,9 @@ eek_renderer_dispose (GObject *object)
|
|||||||
static void
|
static void
|
||||||
eek_renderer_finalize (GObject *object)
|
eek_renderer_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
|
EekRenderer *self = EEK_RENDERER(object);
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||||
|
|
||||||
g_hash_table_destroy (priv->outline_surface_cache);
|
g_hash_table_destroy (priv->outline_surface_cache);
|
||||||
g_hash_table_destroy (priv->active_outline_surface_cache);
|
g_hash_table_destroy (priv->active_outline_surface_cache);
|
||||||
pango_font_description_free (priv->ascii_font);
|
pango_font_description_free (priv->ascii_font);
|
||||||
@ -801,9 +803,6 @@ eek_renderer_class_init (EekRendererClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class,
|
|
||||||
sizeof (EekRendererPrivate));
|
|
||||||
|
|
||||||
klass->render_key_label = eek_renderer_real_render_key_label;
|
klass->render_key_label = eek_renderer_real_render_key_label;
|
||||||
klass->render_key_outline = eek_renderer_real_render_key_outline;
|
klass->render_key_outline = eek_renderer_real_render_key_outline;
|
||||||
klass->render_key = eek_renderer_real_render_key;
|
klass->render_key = eek_renderer_real_render_key;
|
||||||
@ -836,9 +835,8 @@ eek_renderer_class_init (EekRendererClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_renderer_init (EekRenderer *self)
|
eek_renderer_init (EekRenderer *self)
|
||||||
{
|
{
|
||||||
EekRendererPrivate *priv;
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
|
||||||
|
|
||||||
priv = self->priv = EEK_RENDERER_GET_PRIVATE(self);
|
|
||||||
priv->keyboard = NULL;
|
priv->keyboard = NULL;
|
||||||
priv->pcontext = NULL;
|
priv->pcontext = NULL;
|
||||||
priv->default_foreground_color = DEFAULT_FOREGROUND_COLOR;
|
priv->default_foreground_color = DEFAULT_FOREGROUND_COLOR;
|
||||||
@ -865,15 +863,17 @@ eek_renderer_init (EekRenderer *self)
|
|||||||
static void
|
static void
|
||||||
invalidate (EekRenderer *renderer)
|
invalidate (EekRenderer *renderer)
|
||||||
{
|
{
|
||||||
if (renderer->priv->outline_surface_cache)
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
g_hash_table_remove_all (renderer->priv->outline_surface_cache);
|
|
||||||
|
|
||||||
if (renderer->priv->active_outline_surface_cache)
|
if (priv->outline_surface_cache)
|
||||||
g_hash_table_remove_all (renderer->priv->active_outline_surface_cache);
|
g_hash_table_remove_all (priv->outline_surface_cache);
|
||||||
|
|
||||||
if (renderer->priv->keyboard_surface) {
|
if (priv->active_outline_surface_cache)
|
||||||
cairo_surface_destroy (renderer->priv->keyboard_surface);
|
g_hash_table_remove_all (priv->active_outline_surface_cache);
|
||||||
renderer->priv->keyboard_surface = NULL;
|
|
||||||
|
if (priv->keyboard_surface) {
|
||||||
|
cairo_surface_destroy (priv->keyboard_surface);
|
||||||
|
priv->keyboard_surface = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -908,10 +908,12 @@ eek_renderer_set_allocation_size (EekRenderer *renderer,
|
|||||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||||
g_return_if_fail (width > 0.0 && height > 0.0);
|
g_return_if_fail (width > 0.0 && height > 0.0);
|
||||||
|
|
||||||
renderer->priv->allocation_width = width;
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
renderer->priv->allocation_height = height;
|
|
||||||
|
|
||||||
eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard), &bounds);
|
priv->allocation_width = width;
|
||||||
|
priv->allocation_height = height;
|
||||||
|
|
||||||
|
eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
|
||||||
|
|
||||||
if (bounds.height * width / bounds.width <= height)
|
if (bounds.height * width / bounds.width <= height)
|
||||||
scale = width / bounds.width;
|
scale = width / bounds.width;
|
||||||
@ -924,8 +926,8 @@ eek_renderer_set_allocation_size (EekRenderer *renderer,
|
|||||||
scale = bounds.height / height;
|
scale = bounds.height / height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scale != renderer->priv->scale) {
|
if (scale != priv->scale) {
|
||||||
renderer->priv->scale = scale;
|
priv->scale = scale;
|
||||||
invalidate (renderer);
|
invalidate (renderer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -939,11 +941,13 @@ eek_renderer_get_size (EekRenderer *renderer,
|
|||||||
|
|
||||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||||
|
|
||||||
eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard), &bounds);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
|
|
||||||
|
eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
|
||||||
if (width)
|
if (width)
|
||||||
*width = bounds.width * renderer->priv->scale;
|
*width = bounds.width * priv->scale;
|
||||||
if (height)
|
if (height)
|
||||||
*height = bounds.height * renderer->priv->scale;
|
*height = bounds.height * priv->scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -962,20 +966,22 @@ eek_renderer_get_key_bounds (EekRenderer *renderer,
|
|||||||
g_return_if_fail (EEK_IS_KEY(key));
|
g_return_if_fail (EEK_IS_KEY(key));
|
||||||
g_return_if_fail (bounds != NULL);
|
g_return_if_fail (bounds != NULL);
|
||||||
|
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
|
|
||||||
section = eek_element_get_parent (EEK_ELEMENT(key));
|
section = eek_element_get_parent (EEK_ELEMENT(key));
|
||||||
|
|
||||||
eek_element_get_bounds (EEK_ELEMENT(key), bounds);
|
eek_element_get_bounds (EEK_ELEMENT(key), bounds);
|
||||||
eek_element_get_bounds (section, §ion_bounds);
|
eek_element_get_bounds (section, §ion_bounds);
|
||||||
eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard),
|
eek_element_get_bounds (EEK_ELEMENT(priv->keyboard),
|
||||||
&keyboard_bounds);
|
&keyboard_bounds);
|
||||||
|
|
||||||
if (!rotate) {
|
if (!rotate) {
|
||||||
bounds->x += keyboard_bounds.x + section_bounds.x;
|
bounds->x += keyboard_bounds.x + section_bounds.x;
|
||||||
bounds->y += keyboard_bounds.y + section_bounds.y;
|
bounds->y += keyboard_bounds.y + section_bounds.y;
|
||||||
bounds->x *= renderer->priv->scale;
|
bounds->x *= priv->scale;
|
||||||
bounds->y *= renderer->priv->scale;
|
bounds->y *= priv->scale;
|
||||||
bounds->width *= renderer->priv->scale;
|
bounds->width *= priv->scale;
|
||||||
bounds->height *= renderer->priv->scale;
|
bounds->height *= priv->scale;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
points[0].x = bounds->x;
|
points[0].x = bounds->x;
|
||||||
@ -1007,24 +1013,30 @@ eek_renderer_get_key_bounds (EekRenderer *renderer,
|
|||||||
bounds->y = keyboard_bounds.y + section_bounds.y + min.y;
|
bounds->y = keyboard_bounds.y + section_bounds.y + min.y;
|
||||||
bounds->width = (max.x - min.x);
|
bounds->width = (max.x - min.x);
|
||||||
bounds->height = (max.y - min.y);
|
bounds->height = (max.y - min.y);
|
||||||
bounds->x *= renderer->priv->scale;
|
bounds->x *= priv->scale;
|
||||||
bounds->y *= renderer->priv->scale;
|
bounds->y *= priv->scale;
|
||||||
bounds->width *= renderer->priv->scale;
|
bounds->width *= priv->scale;
|
||||||
bounds->height *= renderer->priv->scale;
|
bounds->height *= priv->scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
gdouble
|
gdouble
|
||||||
eek_renderer_get_scale (EekRenderer *renderer)
|
eek_renderer_get_scale (EekRenderer *renderer)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_RENDERER(renderer), 0);
|
g_return_val_if_fail (EEK_IS_RENDERER(renderer), 0);
|
||||||
return renderer->priv->scale;
|
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
|
|
||||||
|
return priv->scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
PangoLayout *
|
PangoLayout *
|
||||||
eek_renderer_create_pango_layout (EekRenderer *renderer)
|
eek_renderer_create_pango_layout (EekRenderer *renderer)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL);
|
g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL);
|
||||||
return pango_layout_new (renderer->priv->pcontext);
|
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
|
|
||||||
|
return pango_layout_new (priv->pcontext);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1102,7 +1114,9 @@ eek_renderer_set_default_foreground_color (EekRenderer *renderer,
|
|||||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||||
g_return_if_fail (color);
|
g_return_if_fail (color);
|
||||||
|
|
||||||
memcpy (&renderer->priv->default_foreground_color, color, sizeof(EekColor));
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
|
|
||||||
|
memcpy (&priv->default_foreground_color, color, sizeof(EekColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1112,7 +1126,9 @@ eek_renderer_set_default_background_color (EekRenderer *renderer,
|
|||||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||||
g_return_if_fail (color);
|
g_return_if_fail (color);
|
||||||
|
|
||||||
memcpy (&renderer->priv->default_background_color, color, sizeof(EekColor));
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
|
|
||||||
|
memcpy (&priv->default_background_color, color, sizeof(EekColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1125,11 +1141,13 @@ eek_renderer_get_foreground_color (EekRenderer *renderer,
|
|||||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||||
g_return_if_fail (color);
|
g_return_if_fail (color);
|
||||||
|
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
|
|
||||||
theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
|
theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
|
||||||
if (theme_node)
|
if (theme_node)
|
||||||
eek_theme_node_get_foreground_color (theme_node, color);
|
eek_theme_node_get_foreground_color (theme_node, color);
|
||||||
else
|
else
|
||||||
memcpy (color, &renderer->priv->default_foreground_color,
|
memcpy (color, &priv->default_foreground_color,
|
||||||
sizeof(EekColor));
|
sizeof(EekColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1143,11 +1161,13 @@ eek_renderer_get_background_color (EekRenderer *renderer,
|
|||||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||||
g_return_if_fail (color);
|
g_return_if_fail (color);
|
||||||
|
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
|
|
||||||
theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
|
theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
|
||||||
if (theme_node)
|
if (theme_node)
|
||||||
eek_theme_node_get_background_color (theme_node, color);
|
eek_theme_node_get_background_color (theme_node, color);
|
||||||
else
|
else
|
||||||
memcpy (color, &renderer->priv->default_background_color,
|
memcpy (color, &priv->default_background_color,
|
||||||
sizeof(EekColor));
|
sizeof(EekColor));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1210,12 +1230,14 @@ find_key_by_position_key_callback (EekElement *element,
|
|||||||
points[3].x = points[0].x;
|
points[3].x = points[0].x;
|
||||||
points[3].y = points[2].y;
|
points[3].y = points[2].y;
|
||||||
|
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||||
|
|
||||||
for (i = 0; i < G_N_ELEMENTS(points); i++) {
|
for (i = 0; i < G_N_ELEMENTS(points); i++) {
|
||||||
eek_point_rotate (&points[i], data->angle);
|
eek_point_rotate (&points[i], data->angle);
|
||||||
points[i].x += data->origin.x;
|
points[i].x += data->origin.x;
|
||||||
points[i].y += data->origin.y;
|
points[i].y += data->origin.y;
|
||||||
points[i].x *= data->renderer->priv->scale;
|
points[i].x *= priv->scale;
|
||||||
points[i].y *= data->renderer->priv->scale;
|
points[i].y *= priv->scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
b1 = sign (&data->point, &points[0], &points[1]) < 0.0;
|
b1 = sign (&data->point, &points[0], &points[1]) < 0.0;
|
||||||
@ -1270,12 +1292,14 @@ eek_renderer_find_key_by_position (EekRenderer *renderer,
|
|||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL);
|
g_return_val_if_fail (EEK_IS_RENDERER(renderer), NULL);
|
||||||
|
|
||||||
eek_element_get_bounds (EEK_ELEMENT(renderer->priv->keyboard), &bounds);
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
|
|
||||||
if (x < bounds.x * renderer->priv->scale ||
|
eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
|
||||||
y < bounds.y * renderer->priv->scale ||
|
|
||||||
x > bounds.width * renderer->priv->scale ||
|
if (x < bounds.x * priv->scale ||
|
||||||
y > bounds.height * renderer->priv->scale)
|
y < bounds.y * priv->scale ||
|
||||||
|
x > bounds.width * priv->scale ||
|
||||||
|
y > bounds.height * priv->scale)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
data.point.x = x;
|
data.point.x = x;
|
||||||
@ -1285,7 +1309,7 @@ eek_renderer_find_key_by_position (EekRenderer *renderer,
|
|||||||
data.key = NULL;
|
data.key = NULL;
|
||||||
data.renderer = renderer;
|
data.renderer = renderer;
|
||||||
|
|
||||||
eek_container_find (EEK_CONTAINER(renderer->priv->keyboard),
|
eek_container_find (EEK_CONTAINER(priv->keyboard),
|
||||||
find_key_by_position_section_callback,
|
find_key_by_position_section_callback,
|
||||||
&data);
|
&data);
|
||||||
return data.key;
|
return data.key;
|
||||||
@ -1305,9 +1329,11 @@ create_theme_node_key_callback (EekElement *element,
|
|||||||
CreateThemeNodeData *data = user_data;
|
CreateThemeNodeData *data = user_data;
|
||||||
EekThemeNode *theme_node;
|
EekThemeNode *theme_node;
|
||||||
|
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||||
|
|
||||||
theme_node = eek_theme_node_new (data->context,
|
theme_node = eek_theme_node_new (data->context,
|
||||||
data->parent,
|
data->parent,
|
||||||
data->renderer->priv->theme,
|
priv->theme,
|
||||||
EEK_TYPE_KEY,
|
EEK_TYPE_KEY,
|
||||||
eek_element_get_name (element),
|
eek_element_get_name (element),
|
||||||
"key",
|
"key",
|
||||||
@ -1320,7 +1346,7 @@ create_theme_node_key_callback (EekElement *element,
|
|||||||
|
|
||||||
theme_node = eek_theme_node_new (data->context,
|
theme_node = eek_theme_node_new (data->context,
|
||||||
data->parent,
|
data->parent,
|
||||||
data->renderer->priv->theme,
|
priv->theme,
|
||||||
EEK_TYPE_KEY,
|
EEK_TYPE_KEY,
|
||||||
eek_element_get_name (element),
|
eek_element_get_name (element),
|
||||||
"key",
|
"key",
|
||||||
@ -1339,9 +1365,11 @@ create_theme_node_section_callback (EekElement *element,
|
|||||||
CreateThemeNodeData *data = user_data;
|
CreateThemeNodeData *data = user_data;
|
||||||
EekThemeNode *theme_node, *parent;
|
EekThemeNode *theme_node, *parent;
|
||||||
|
|
||||||
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
|
||||||
|
|
||||||
theme_node = eek_theme_node_new (data->context,
|
theme_node = eek_theme_node_new (data->context,
|
||||||
data->parent,
|
data->parent,
|
||||||
data->renderer->priv->theme,
|
priv->theme,
|
||||||
EEK_TYPE_SECTION,
|
EEK_TYPE_SECTION,
|
||||||
eek_element_get_name (element),
|
eek_element_get_name (element),
|
||||||
"section",
|
"section",
|
||||||
@ -1370,22 +1398,25 @@ eek_renderer_set_theme (EekRenderer *renderer,
|
|||||||
|
|
||||||
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
g_return_if_fail (EEK_IS_RENDERER(renderer));
|
||||||
g_return_if_fail (EEK_IS_THEME(theme));
|
g_return_if_fail (EEK_IS_THEME(theme));
|
||||||
g_return_if_fail (renderer->priv->keyboard);
|
|
||||||
|
|
||||||
if (renderer->priv->theme)
|
EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
|
||||||
g_object_unref (renderer->priv->theme);
|
|
||||||
renderer->priv->theme = g_object_ref (theme);
|
g_return_if_fail (priv->keyboard);
|
||||||
|
|
||||||
|
if (priv->theme)
|
||||||
|
g_object_unref (priv->theme);
|
||||||
|
priv->theme = g_object_ref (theme);
|
||||||
|
|
||||||
theme_context = eek_theme_context_new ();
|
theme_context = eek_theme_context_new ();
|
||||||
theme_node = eek_theme_node_new (theme_context,
|
theme_node = eek_theme_node_new (theme_context,
|
||||||
NULL,
|
NULL,
|
||||||
renderer->priv->theme,
|
priv->theme,
|
||||||
EEK_TYPE_KEYBOARD,
|
EEK_TYPE_KEYBOARD,
|
||||||
"keyboard",
|
"keyboard",
|
||||||
"keyboard",
|
"keyboard",
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
g_object_set_data_full (G_OBJECT(renderer->priv->keyboard),
|
g_object_set_data_full (G_OBJECT(priv->keyboard),
|
||||||
"theme-node",
|
"theme-node",
|
||||||
theme_node,
|
theme_node,
|
||||||
(GDestroyNotify)g_object_unref);
|
(GDestroyNotify)g_object_unref);
|
||||||
@ -1393,7 +1424,7 @@ eek_renderer_set_theme (EekRenderer *renderer,
|
|||||||
data.context = theme_context;
|
data.context = theme_context;
|
||||||
data.parent = theme_node;
|
data.parent = theme_node;
|
||||||
data.renderer = renderer;
|
data.renderer = renderer;
|
||||||
eek_container_foreach_child (EEK_CONTAINER(renderer->priv->keyboard),
|
eek_container_foreach_child (EEK_CONTAINER(priv->keyboard),
|
||||||
create_theme_node_section_callback,
|
create_theme_node_section_callback,
|
||||||
&data);
|
&data);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -31,21 +31,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEK_TYPE_RENDERER (eek_renderer_get_type())
|
#define EEK_TYPE_RENDERER (eek_renderer_get_type())
|
||||||
#define EEK_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_RENDERER, EekRenderer))
|
G_DECLARE_DERIVABLE_TYPE (EekRenderer, eek_renderer, EEK, RENDERER, GObject)
|
||||||
#define EEK_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_RENDERER, EekRendererClass))
|
|
||||||
#define EEK_IS_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_RENDERER))
|
|
||||||
#define EEK_IS_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_RENDERER))
|
|
||||||
#define EEK_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_RENDERER, EekRendererClass))
|
|
||||||
|
|
||||||
typedef struct _EekRenderer EekRenderer;
|
|
||||||
typedef struct _EekRendererClass EekRendererClass;
|
|
||||||
typedef struct _EekRendererPrivate EekRendererPrivate;
|
|
||||||
|
|
||||||
struct _EekRenderer {
|
|
||||||
GObject parent;
|
|
||||||
|
|
||||||
EekRendererPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EekRendererClass
|
struct _EekRendererClass
|
||||||
{
|
{
|
||||||
|
|||||||
@ -52,11 +52,6 @@ enum {
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0, };
|
static guint signals[LAST_SIGNAL] = { 0, };
|
||||||
|
|
||||||
G_DEFINE_TYPE (EekSection, eek_section, EEK_TYPE_CONTAINER);
|
|
||||||
|
|
||||||
#define EEK_SECTION_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_SECTION, EekSectionPrivate))
|
|
||||||
|
|
||||||
struct _EekRow
|
struct _EekRow
|
||||||
{
|
{
|
||||||
gint num_columns;
|
gint num_columns;
|
||||||
@ -65,17 +60,19 @@ struct _EekRow
|
|||||||
|
|
||||||
typedef struct _EekRow EekRow;
|
typedef struct _EekRow EekRow;
|
||||||
|
|
||||||
struct _EekSectionPrivate
|
typedef struct _EekSectionPrivate
|
||||||
{
|
{
|
||||||
gint angle;
|
gint angle;
|
||||||
GSList *rows;
|
GSList *rows;
|
||||||
EekModifierType modifiers;
|
EekModifierType modifiers;
|
||||||
};
|
} EekSectionPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_PRIVATE (EekSection, eek_section, EEK_TYPE_CONTAINER)
|
||||||
|
|
||||||
static gint
|
static gint
|
||||||
eek_section_real_get_n_rows (EekSection *self)
|
eek_section_real_get_n_rows (EekSection *self)
|
||||||
{
|
{
|
||||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||||
|
|
||||||
return g_slist_length (priv->rows);
|
return g_slist_length (priv->rows);
|
||||||
}
|
}
|
||||||
@ -85,7 +82,7 @@ eek_section_real_add_row (EekSection *self,
|
|||||||
gint num_columns,
|
gint num_columns,
|
||||||
EekOrientation orientation)
|
EekOrientation orientation)
|
||||||
{
|
{
|
||||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||||
EekRow *row;
|
EekRow *row;
|
||||||
|
|
||||||
row = g_slice_new (EekRow);
|
row = g_slice_new (EekRow);
|
||||||
@ -100,7 +97,7 @@ eek_section_real_get_row (EekSection *self,
|
|||||||
gint *num_columns,
|
gint *num_columns,
|
||||||
EekOrientation *orientation)
|
EekOrientation *orientation)
|
||||||
{
|
{
|
||||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||||
EekRow *row;
|
EekRow *row;
|
||||||
|
|
||||||
row = g_slist_nth_data (priv->rows, index);
|
row = g_slist_nth_data (priv->rows, index);
|
||||||
@ -138,7 +135,9 @@ eek_section_real_create_key (EekSection *self,
|
|||||||
num_rows = eek_section_get_n_rows (self);
|
num_rows = eek_section_get_n_rows (self);
|
||||||
g_return_val_if_fail (0 <= row_index && row_index < num_rows, NULL);
|
g_return_val_if_fail (0 <= row_index && row_index < num_rows, NULL);
|
||||||
|
|
||||||
row = g_slist_nth_data (self->priv->rows, row_index);
|
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||||
|
|
||||||
|
row = g_slist_nth_data (priv->rows, row_index);
|
||||||
if (row->num_columns < column_index + 1)
|
if (row->num_columns < column_index + 1)
|
||||||
row->num_columns = column_index + 1;
|
row->num_columns = column_index + 1;
|
||||||
|
|
||||||
@ -158,7 +157,7 @@ eek_section_real_create_key (EekSection *self,
|
|||||||
static void
|
static void
|
||||||
set_level_from_modifiers (EekSection *self)
|
set_level_from_modifiers (EekSection *self)
|
||||||
{
|
{
|
||||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||||
EekKeyboard *keyboard;
|
EekKeyboard *keyboard;
|
||||||
EekModifierType num_lock_mask;
|
EekModifierType num_lock_mask;
|
||||||
gint level = -1;
|
gint level = -1;
|
||||||
@ -173,7 +172,7 @@ set_level_from_modifiers (EekSection *self)
|
|||||||
static void
|
static void
|
||||||
eek_section_real_key_pressed (EekSection *self, EekKey *key)
|
eek_section_real_key_pressed (EekSection *self, EekKey *key)
|
||||||
{
|
{
|
||||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||||
EekSymbol *symbol;
|
EekSymbol *symbol;
|
||||||
EekKeyboard *keyboard;
|
EekKeyboard *keyboard;
|
||||||
EekModifierBehavior behavior;
|
EekModifierBehavior behavior;
|
||||||
@ -195,7 +194,7 @@ eek_section_real_key_pressed (EekSection *self, EekKey *key)
|
|||||||
static void
|
static void
|
||||||
eek_section_real_key_released (EekSection *self, EekKey *key)
|
eek_section_real_key_released (EekSection *self, EekKey *key)
|
||||||
{
|
{
|
||||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
|
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||||
EekSymbol *symbol;
|
EekSymbol *symbol;
|
||||||
EekKeyboard *keyboard;
|
EekKeyboard *keyboard;
|
||||||
EekModifierBehavior behavior;
|
EekModifierBehavior behavior;
|
||||||
@ -225,7 +224,8 @@ eek_section_real_key_released (EekSection *self, EekKey *key)
|
|||||||
static void
|
static void
|
||||||
eek_section_finalize (GObject *object)
|
eek_section_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(object);
|
EekSection *self = EEK_SECTION (object);
|
||||||
|
EekSectionPrivate *priv = eek_section_get_instance_private (self);
|
||||||
GSList *head;
|
GSList *head;
|
||||||
|
|
||||||
for (head = priv->rows; head; head = g_slist_next (head))
|
for (head = priv->rows; head; head = g_slist_next (head))
|
||||||
@ -291,8 +291,6 @@ eek_section_class_init (EekSectionClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class, sizeof (EekSectionPrivate));
|
|
||||||
|
|
||||||
klass->get_n_rows = eek_section_real_get_n_rows;
|
klass->get_n_rows = eek_section_real_get_n_rows;
|
||||||
klass->add_row = eek_section_real_add_row;
|
klass->add_row = eek_section_real_add_row;
|
||||||
klass->get_row = eek_section_real_get_row;
|
klass->get_row = eek_section_real_get_row;
|
||||||
@ -367,7 +365,7 @@ eek_section_class_init (EekSectionClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_section_init (EekSection *self)
|
eek_section_init (EekSection *self)
|
||||||
{
|
{
|
||||||
self->priv = EEK_SECTION_GET_PRIVATE (self);
|
/* void */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -382,8 +380,11 @@ eek_section_set_angle (EekSection *section,
|
|||||||
gint angle)
|
gint angle)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEK_IS_SECTION(section));
|
g_return_if_fail (EEK_IS_SECTION(section));
|
||||||
if (section->priv->angle != angle) {
|
|
||||||
section->priv->angle = angle;
|
EekSectionPrivate *priv = eek_section_get_instance_private (section);
|
||||||
|
|
||||||
|
if (priv->angle != angle) {
|
||||||
|
priv->angle = angle;
|
||||||
g_object_notify (G_OBJECT(section), "angle");
|
g_object_notify (G_OBJECT(section), "angle");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -398,7 +399,10 @@ gint
|
|||||||
eek_section_get_angle (EekSection *section)
|
eek_section_get_angle (EekSection *section)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEK_IS_SECTION(section), -1);
|
g_return_val_if_fail (EEK_IS_SECTION(section), -1);
|
||||||
return section->priv->angle;
|
|
||||||
|
EekSectionPrivate *priv = eek_section_get_instance_private (section);
|
||||||
|
|
||||||
|
return priv->angle;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -32,28 +32,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEK_TYPE_SECTION (eek_section_get_type())
|
#define EEK_TYPE_SECTION (eek_section_get_type())
|
||||||
#define EEK_SECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_SECTION, EekSection))
|
G_DECLARE_DERIVABLE_TYPE(EekSection, eek_section, EEK, SECTION, EekContainer)
|
||||||
#define EEK_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_SECTION, EekSectionClass))
|
|
||||||
#define EEK_IS_SECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_SECTION))
|
|
||||||
#define EEK_IS_SECTION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_SECTION))
|
|
||||||
#define EEK_SECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_SECTION, EekSectionClass))
|
|
||||||
|
|
||||||
typedef struct _EekSectionClass EekSectionClass;
|
|
||||||
typedef struct _EekSectionPrivate EekSectionPrivate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekSection:
|
|
||||||
*
|
|
||||||
* The #EekSection structure contains only private data and should
|
|
||||||
* only be accessed using the provided API.
|
|
||||||
*/
|
|
||||||
struct _EekSection
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
EekContainer parent;
|
|
||||||
|
|
||||||
EekSectionPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EekSectionClass:
|
* EekSectionClass:
|
||||||
|
|||||||
@ -44,29 +44,31 @@ enum {
|
|||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _EekSymbolPrivate {
|
typedef struct _EekSymbolPrivate
|
||||||
|
{
|
||||||
gchar *name;
|
gchar *name;
|
||||||
gchar *label;
|
gchar *label;
|
||||||
EekSymbolCategory category;
|
EekSymbolCategory category;
|
||||||
EekModifierType modifier_mask;
|
EekModifierType modifier_mask;
|
||||||
gchar *icon_name;
|
gchar *icon_name;
|
||||||
gchar *tooltip;
|
gchar *tooltip;
|
||||||
};
|
} EekSymbolPrivate;
|
||||||
|
|
||||||
static void eek_serializable_iface_init (EekSerializableIface *iface);
|
static void eek_serializable_iface_init (EekSerializableIface *iface);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (EekSymbol, eek_symbol, G_TYPE_OBJECT,
|
G_DEFINE_TYPE_EXTENDED (EekSymbol,
|
||||||
|
eek_symbol,
|
||||||
|
G_TYPE_OBJECT,
|
||||||
|
0, /* GTypeFlags */
|
||||||
|
G_ADD_PRIVATE (EekSymbol)
|
||||||
G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
|
G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
|
||||||
eek_serializable_iface_init));
|
eek_serializable_iface_init))
|
||||||
|
|
||||||
#define EEK_SYMBOL_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_SYMBOL, EekSymbolPrivate))
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eek_symbol_real_serialize (EekSerializable *self,
|
eek_symbol_real_serialize (EekSerializable *self,
|
||||||
GVariantBuilder *builder)
|
GVariantBuilder *builder)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv = EEK_SYMBOL_GET_PRIVATE(self);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (EEK_SYMBOL (self));
|
||||||
#define NOTNULL(s) ((s) != NULL ? (s) : "")
|
#define NOTNULL(s) ((s) != NULL ? (s) : "")
|
||||||
g_variant_builder_add (builder, "s", NOTNULL(priv->name));
|
g_variant_builder_add (builder, "s", NOTNULL(priv->name));
|
||||||
g_variant_builder_add (builder, "s", NOTNULL(priv->label));
|
g_variant_builder_add (builder, "s", NOTNULL(priv->label));
|
||||||
@ -82,7 +84,7 @@ eek_symbol_real_deserialize (EekSerializable *self,
|
|||||||
GVariant *variant,
|
GVariant *variant,
|
||||||
gsize index)
|
gsize index)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv = EEK_SYMBOL_GET_PRIVATE(self);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (EEK_SYMBOL (self));
|
||||||
|
|
||||||
g_variant_get_child (variant, index++, "s", &priv->name);
|
g_variant_get_child (variant, index++, "s", &priv->name);
|
||||||
g_variant_get_child (variant, index++, "s", &priv->label);
|
g_variant_get_child (variant, index++, "s", &priv->label);
|
||||||
@ -172,7 +174,8 @@ eek_symbol_get_property (GObject *object,
|
|||||||
static void
|
static void
|
||||||
eek_symbol_finalize (GObject *object)
|
eek_symbol_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv = EEK_SYMBOL_GET_PRIVATE(object);
|
EekSymbol *self = EEK_SYMBOL (object);
|
||||||
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (self);
|
||||||
|
|
||||||
g_free (priv->name);
|
g_free (priv->name);
|
||||||
g_free (priv->label);
|
g_free (priv->label);
|
||||||
@ -187,8 +190,6 @@ eek_symbol_class_init (EekSymbolClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class, sizeof (EekSymbolPrivate));
|
|
||||||
|
|
||||||
gobject_class->set_property = eek_symbol_set_property;
|
gobject_class->set_property = eek_symbol_set_property;
|
||||||
gobject_class->get_property = eek_symbol_get_property;
|
gobject_class->get_property = eek_symbol_get_property;
|
||||||
gobject_class->finalize = eek_symbol_finalize;
|
gobject_class->finalize = eek_symbol_finalize;
|
||||||
@ -241,9 +242,8 @@ eek_symbol_class_init (EekSymbolClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_symbol_init (EekSymbol *self)
|
eek_symbol_init (EekSymbol *self)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (self);
|
||||||
|
|
||||||
priv = self->priv = EEK_SYMBOL_GET_PRIVATE(self);
|
|
||||||
priv->category = EEK_SYMBOL_CATEGORY_UNKNOWN;
|
priv->category = EEK_SYMBOL_CATEGORY_UNKNOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,11 +270,10 @@ void
|
|||||||
eek_symbol_set_name (EekSymbol *symbol,
|
eek_symbol_set_name (EekSymbol *symbol,
|
||||||
const gchar *name)
|
const gchar *name)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
g_free (priv->name);
|
g_free (priv->name);
|
||||||
priv->name = g_strdup (name);
|
priv->name = g_strdup (name);
|
||||||
}
|
}
|
||||||
@ -288,11 +287,10 @@ eek_symbol_set_name (EekSymbol *symbol,
|
|||||||
const gchar *
|
const gchar *
|
||||||
eek_symbol_get_name (EekSymbol *symbol)
|
eek_symbol_get_name (EekSymbol *symbol)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL);
|
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL);
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
if (priv->name == NULL || *priv->name == '\0')
|
if (priv->name == NULL || *priv->name == '\0')
|
||||||
return NULL;
|
return NULL;
|
||||||
return priv->name;
|
return priv->name;
|
||||||
@ -309,11 +307,10 @@ void
|
|||||||
eek_symbol_set_label (EekSymbol *symbol,
|
eek_symbol_set_label (EekSymbol *symbol,
|
||||||
const gchar *label)
|
const gchar *label)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
g_free (priv->label);
|
g_free (priv->label);
|
||||||
priv->label = g_strdup (label);
|
priv->label = g_strdup (label);
|
||||||
}
|
}
|
||||||
@ -327,11 +324,10 @@ eek_symbol_set_label (EekSymbol *symbol,
|
|||||||
const gchar *
|
const gchar *
|
||||||
eek_symbol_get_label (EekSymbol *symbol)
|
eek_symbol_get_label (EekSymbol *symbol)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL);
|
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL);
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
if (priv->label == NULL || *priv->label == '\0')
|
if (priv->label == NULL || *priv->label == '\0')
|
||||||
return NULL;
|
return NULL;
|
||||||
return priv->label;
|
return priv->label;
|
||||||
@ -348,11 +344,10 @@ void
|
|||||||
eek_symbol_set_category (EekSymbol *symbol,
|
eek_symbol_set_category (EekSymbol *symbol,
|
||||||
EekSymbolCategory category)
|
EekSymbolCategory category)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
priv->category = category;
|
priv->category = category;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,11 +360,10 @@ eek_symbol_set_category (EekSymbol *symbol,
|
|||||||
EekSymbolCategory
|
EekSymbolCategory
|
||||||
eek_symbol_get_category (EekSymbol *symbol)
|
eek_symbol_get_category (EekSymbol *symbol)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), EEK_SYMBOL_CATEGORY_UNKNOWN);
|
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), EEK_SYMBOL_CATEGORY_UNKNOWN);
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
return priv->category;
|
return priv->category;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,11 +378,10 @@ void
|
|||||||
eek_symbol_set_modifier_mask (EekSymbol *symbol,
|
eek_symbol_set_modifier_mask (EekSymbol *symbol,
|
||||||
EekModifierType mask)
|
EekModifierType mask)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
priv->modifier_mask = mask;
|
priv->modifier_mask = mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -401,11 +394,10 @@ eek_symbol_set_modifier_mask (EekSymbol *symbol,
|
|||||||
EekModifierType
|
EekModifierType
|
||||||
eek_symbol_get_modifier_mask (EekSymbol *symbol)
|
eek_symbol_get_modifier_mask (EekSymbol *symbol)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), 0);
|
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), 0);
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
return priv->modifier_mask;
|
return priv->modifier_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -433,11 +425,10 @@ void
|
|||||||
eek_symbol_set_icon_name (EekSymbol *symbol,
|
eek_symbol_set_icon_name (EekSymbol *symbol,
|
||||||
const gchar *icon_name)
|
const gchar *icon_name)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
g_free (priv->icon_name);
|
g_free (priv->icon_name);
|
||||||
priv->icon_name = g_strdup (icon_name);
|
priv->icon_name = g_strdup (icon_name);
|
||||||
}
|
}
|
||||||
@ -451,11 +442,10 @@ eek_symbol_set_icon_name (EekSymbol *symbol,
|
|||||||
const gchar *
|
const gchar *
|
||||||
eek_symbol_get_icon_name (EekSymbol *symbol)
|
eek_symbol_get_icon_name (EekSymbol *symbol)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL);
|
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL);
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
if (priv->icon_name == NULL || *priv->icon_name == '\0')
|
if (priv->icon_name == NULL || *priv->icon_name == '\0')
|
||||||
return NULL;
|
return NULL;
|
||||||
return priv->icon_name;
|
return priv->icon_name;
|
||||||
@ -472,11 +462,10 @@ void
|
|||||||
eek_symbol_set_tooltip (EekSymbol *symbol,
|
eek_symbol_set_tooltip (EekSymbol *symbol,
|
||||||
const gchar *tooltip)
|
const gchar *tooltip)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
g_return_if_fail (EEK_IS_SYMBOL(symbol));
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
g_free (priv->tooltip);
|
g_free (priv->tooltip);
|
||||||
priv->tooltip = g_strdup (tooltip);
|
priv->tooltip = g_strdup (tooltip);
|
||||||
}
|
}
|
||||||
@ -490,11 +479,10 @@ eek_symbol_set_tooltip (EekSymbol *symbol,
|
|||||||
const gchar *
|
const gchar *
|
||||||
eek_symbol_get_tooltip (EekSymbol *symbol)
|
eek_symbol_get_tooltip (EekSymbol *symbol)
|
||||||
{
|
{
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
|
|
||||||
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL);
|
g_return_val_if_fail (EEK_IS_SYMBOL(symbol), NULL);
|
||||||
|
|
||||||
priv = EEK_SYMBOL_GET_PRIVATE(symbol);
|
EekSymbolPrivate *priv = eek_symbol_get_instance_private (symbol);
|
||||||
|
|
||||||
if (priv->tooltip == NULL || *priv->tooltip == '\0')
|
if (priv->tooltip == NULL || *priv->tooltip == '\0')
|
||||||
return NULL;
|
return NULL;
|
||||||
return priv->tooltip;
|
return priv->tooltip;
|
||||||
|
|||||||
@ -59,27 +59,7 @@ typedef enum {
|
|||||||
} EekSymbolCategory;
|
} EekSymbolCategory;
|
||||||
|
|
||||||
#define EEK_TYPE_SYMBOL (eek_symbol_get_type())
|
#define EEK_TYPE_SYMBOL (eek_symbol_get_type())
|
||||||
#define EEK_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_SYMBOL, EekSymbol))
|
G_DECLARE_DERIVABLE_TYPE(EekSymbol, eek_symbol, EEK, SYMBOL, GObject)
|
||||||
#define EEK_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_SYMBOL, EekSymbolClass))
|
|
||||||
#define EEK_IS_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_SYMBOL))
|
|
||||||
#define EEK_IS_SYMBOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_SYMBOL))
|
|
||||||
#define EEK_SYMBOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_SYMBOL, EekSymbolClass))
|
|
||||||
|
|
||||||
typedef struct _EekSymbolClass EekSymbolClass;
|
|
||||||
typedef struct _EekSymbolPrivate EekSymbolPrivate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekSymbol:
|
|
||||||
*
|
|
||||||
* The #EekSymbol structure contains only private data and should only
|
|
||||||
* be accessed using the provided API.
|
|
||||||
*/
|
|
||||||
struct _EekSymbol {
|
|
||||||
/*< private >*/
|
|
||||||
GObject parent;
|
|
||||||
|
|
||||||
EekSymbolPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EekSymbolClass:
|
* EekSymbolClass:
|
||||||
|
|||||||
@ -36,18 +36,20 @@ enum {
|
|||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _EekTextPrivate {
|
typedef struct _EekTextPrivate
|
||||||
|
{
|
||||||
gchar *text;
|
gchar *text;
|
||||||
};
|
} EekTextPrivate;
|
||||||
|
|
||||||
static void eek_serializable_iface_init (EekSerializableIface *iface);
|
static void eek_serializable_iface_init (EekSerializableIface *iface);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (EekText, eek_text, EEK_TYPE_SYMBOL,
|
G_DEFINE_TYPE_EXTENDED (EekText,
|
||||||
|
eek_text,
|
||||||
|
EEK_TYPE_SYMBOL,
|
||||||
|
0, /* GTypeFlags */
|
||||||
|
G_ADD_PRIVATE (EekText)
|
||||||
G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
|
G_IMPLEMENT_INTERFACE (EEK_TYPE_SERIALIZABLE,
|
||||||
eek_serializable_iface_init));
|
eek_serializable_iface_init))
|
||||||
|
|
||||||
#define EEK_TEXT_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_TEXT, EekTextPrivate))
|
|
||||||
|
|
||||||
static EekSerializableIface *eek_text_parent_serializable_iface;
|
static EekSerializableIface *eek_text_parent_serializable_iface;
|
||||||
|
|
||||||
@ -55,7 +57,7 @@ static void
|
|||||||
eek_text_real_serialize (EekSerializable *self,
|
eek_text_real_serialize (EekSerializable *self,
|
||||||
GVariantBuilder *builder)
|
GVariantBuilder *builder)
|
||||||
{
|
{
|
||||||
EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(self);
|
EekTextPrivate *priv = eek_text_get_instance_private (EEK_TEXT (self));
|
||||||
|
|
||||||
eek_text_parent_serializable_iface->serialize (self, builder);
|
eek_text_parent_serializable_iface->serialize (self, builder);
|
||||||
|
|
||||||
@ -67,7 +69,7 @@ eek_text_real_deserialize (EekSerializable *self,
|
|||||||
GVariant *variant,
|
GVariant *variant,
|
||||||
gsize index)
|
gsize index)
|
||||||
{
|
{
|
||||||
EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(self);
|
EekTextPrivate *priv = eek_text_get_instance_private (EEK_TEXT (self));
|
||||||
|
|
||||||
index = eek_text_parent_serializable_iface->deserialize (self,
|
index = eek_text_parent_serializable_iface->deserialize (self,
|
||||||
variant,
|
variant,
|
||||||
@ -93,7 +95,9 @@ eek_text_set_property (GObject *object,
|
|||||||
const GValue *value,
|
const GValue *value,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(object);
|
EekText *self = EEK_TEXT (object);
|
||||||
|
EekTextPrivate *priv = eek_text_get_instance_private (self);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_TEXT:
|
case PROP_TEXT:
|
||||||
g_free (priv->text);
|
g_free (priv->text);
|
||||||
@ -111,7 +115,9 @@ eek_text_get_property (GObject *object,
|
|||||||
GValue *value,
|
GValue *value,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(object);
|
EekText *self = EEK_TEXT (object);
|
||||||
|
EekTextPrivate *priv = eek_text_get_instance_private (self);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_TEXT:
|
case PROP_TEXT:
|
||||||
g_value_set_string (value, priv->text);
|
g_value_set_string (value, priv->text);
|
||||||
@ -125,7 +131,8 @@ eek_text_get_property (GObject *object,
|
|||||||
static void
|
static void
|
||||||
eek_text_finalize (GObject *object)
|
eek_text_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(object);
|
EekText *self = EEK_TEXT (object);
|
||||||
|
EekTextPrivate *priv = eek_text_get_instance_private (self);
|
||||||
|
|
||||||
g_free (priv->text);
|
g_free (priv->text);
|
||||||
G_OBJECT_CLASS (eek_text_parent_class)->finalize (object);
|
G_OBJECT_CLASS (eek_text_parent_class)->finalize (object);
|
||||||
@ -137,8 +144,6 @@ eek_text_class_init (EekTextClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class, sizeof (EekTextPrivate));
|
|
||||||
|
|
||||||
gobject_class->set_property = eek_text_set_property;
|
gobject_class->set_property = eek_text_set_property;
|
||||||
gobject_class->get_property = eek_text_get_property;
|
gobject_class->get_property = eek_text_get_property;
|
||||||
gobject_class->finalize = eek_text_finalize;
|
gobject_class->finalize = eek_text_finalize;
|
||||||
@ -154,7 +159,7 @@ eek_text_class_init (EekTextClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_text_init (EekText *self)
|
eek_text_init (EekText *self)
|
||||||
{
|
{
|
||||||
self->priv = EEK_TEXT_GET_PRIVATE(self);
|
/* void */
|
||||||
}
|
}
|
||||||
|
|
||||||
EekText *
|
EekText *
|
||||||
@ -176,7 +181,7 @@ eek_text_new (const gchar *text)
|
|||||||
const gchar *
|
const gchar *
|
||||||
eek_text_get_text (EekText *text)
|
eek_text_get_text (EekText *text)
|
||||||
{
|
{
|
||||||
EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(text);
|
EekTextPrivate *priv = eek_text_get_instance_private (text);
|
||||||
|
|
||||||
return priv->text;
|
return priv->text;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,27 +30,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEK_TYPE_TEXT (eek_text_get_type())
|
#define EEK_TYPE_TEXT (eek_text_get_type())
|
||||||
#define EEK_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_TEXT, EekText))
|
G_DECLARE_DERIVABLE_TYPE(EekText, eek_text, EEK, TEXT, EekSymbol)
|
||||||
#define EEK_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_TEXT, EekTextClass))
|
|
||||||
#define EEK_IS_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_TEXT))
|
|
||||||
#define EEK_IS_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_TEXT))
|
|
||||||
#define EEK_TEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_TEXT, EekTextClass))
|
|
||||||
|
|
||||||
typedef struct _EekTextClass EekTextClass;
|
|
||||||
typedef struct _EekTextPrivate EekTextPrivate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekText:
|
|
||||||
*
|
|
||||||
* The #EekText structure contains only private data and should only
|
|
||||||
* be accessed using the provided API.
|
|
||||||
*/
|
|
||||||
struct _EekText {
|
|
||||||
/*< private >*/
|
|
||||||
EekSymbol parent;
|
|
||||||
|
|
||||||
EekTextPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EekTextClass {
|
struct _EekTextClass {
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
|
|||||||
@ -52,20 +52,13 @@
|
|||||||
|
|
||||||
static void initable_iface_init (GInitableIface *initable_iface);
|
static void initable_iface_init (GInitableIface *initable_iface);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (EekXkbLayout, eek_xkb_layout, EEK_TYPE_LAYOUT,
|
|
||||||
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
|
||||||
initable_iface_init));
|
|
||||||
|
|
||||||
#define EEK_XKB_LAYOUT_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutPrivate))
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_DISPLAY,
|
PROP_DISPLAY,
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _EekXkbLayoutPrivate
|
typedef struct _EekXkbLayoutPrivate
|
||||||
{
|
{
|
||||||
/* Configuration names that should synch'ed to the symbolic names
|
/* Configuration names that should synch'ed to the symbolic names
|
||||||
in priv->xkb->names. Since we use GLib's memory allocator,
|
in priv->xkb->names. Since we use GLib's memory allocator,
|
||||||
@ -82,7 +75,13 @@ struct _EekXkbLayoutPrivate
|
|||||||
|
|
||||||
gint scale_numerator;
|
gint scale_numerator;
|
||||||
gint scale_denominator;
|
gint scale_denominator;
|
||||||
};
|
} EekXkbLayoutPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_EXTENDED (EekXkbLayout, eek_xkb_layout, EEK_TYPE_LAYOUT,
|
||||||
|
0, /* GTypeFlags */
|
||||||
|
G_ADD_PRIVATE(EekXkbLayout)
|
||||||
|
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
||||||
|
initable_iface_init))
|
||||||
|
|
||||||
static guint find_keycode (EekXkbLayout *layout,
|
static guint find_keycode (EekXkbLayout *layout,
|
||||||
gchar *key_name);
|
gchar *key_name);
|
||||||
@ -101,7 +100,7 @@ G_INLINE_FUNC gint
|
|||||||
xkb_to_pixmap_coord (EekXkbLayout *layout,
|
xkb_to_pixmap_coord (EekXkbLayout *layout,
|
||||||
gint n)
|
gint n)
|
||||||
{
|
{
|
||||||
EekXkbLayoutPrivate *priv = layout->priv;
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
return n * priv->scale_numerator / priv->scale_denominator;
|
return n * priv->scale_numerator / priv->scale_denominator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +108,7 @@ G_INLINE_FUNC gdouble
|
|||||||
xkb_to_pixmap_double (EekXkbLayout *layout,
|
xkb_to_pixmap_double (EekXkbLayout *layout,
|
||||||
gdouble d)
|
gdouble d)
|
||||||
{
|
{
|
||||||
EekXkbLayoutPrivate *priv = layout->priv;
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
return d * priv->scale_numerator / priv->scale_denominator;
|
return d * priv->scale_numerator / priv->scale_denominator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,7 +126,7 @@ create_key (EekXkbLayout *layout,
|
|||||||
XkbBoundsRec *xkbbounds;
|
XkbBoundsRec *xkbbounds;
|
||||||
XkbShapeRec *xkbshape;
|
XkbShapeRec *xkbshape;
|
||||||
XkbOutlineRec *xkboutline;
|
XkbOutlineRec *xkboutline;
|
||||||
EekXkbLayoutPrivate *priv = layout->priv;
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
EekKey *key;
|
EekKey *key;
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
EekSymbolMatrix *matrix = NULL;
|
EekSymbolMatrix *matrix = NULL;
|
||||||
@ -237,7 +236,7 @@ create_section (EekXkbLayout *layout,
|
|||||||
XkbSectionRec *xkbsection)
|
XkbSectionRec *xkbsection)
|
||||||
{
|
{
|
||||||
XkbGeometryRec *xkbgeometry;
|
XkbGeometryRec *xkbgeometry;
|
||||||
EekXkbLayoutPrivate *priv;
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
EekSection *section;
|
EekSection *section;
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
gchar *name;
|
gchar *name;
|
||||||
@ -249,7 +248,6 @@ create_section (EekXkbLayout *layout,
|
|||||||
bounds.width = xkb_to_pixmap_coord(layout, xkbsection->width);
|
bounds.width = xkb_to_pixmap_coord(layout, xkbsection->width);
|
||||||
bounds.height = xkb_to_pixmap_coord(layout, xkbsection->height);
|
bounds.height = xkb_to_pixmap_coord(layout, xkbsection->height);
|
||||||
|
|
||||||
priv = layout->priv;
|
|
||||||
xkbgeometry = priv->xkb->geom;
|
xkbgeometry = priv->xkb->geom;
|
||||||
section = eek_keyboard_create_section (keyboard);
|
section = eek_keyboard_create_section (keyboard);
|
||||||
name = XGetAtomName (priv->display, xkbsection->name);
|
name = XGetAtomName (priv->display, xkbsection->name);
|
||||||
@ -293,7 +291,7 @@ create_section (EekXkbLayout *layout,
|
|||||||
static void
|
static void
|
||||||
create_keyboard (EekXkbLayout *layout, EekKeyboard *keyboard)
|
create_keyboard (EekXkbLayout *layout, EekKeyboard *keyboard)
|
||||||
{
|
{
|
||||||
EekXkbLayoutPrivate *priv = layout->priv;
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
XkbGeometryRec *xkbgeometry;
|
XkbGeometryRec *xkbgeometry;
|
||||||
EekBounds bounds;
|
EekBounds bounds;
|
||||||
gint i;
|
gint i;
|
||||||
@ -337,7 +335,8 @@ eek_xkb_layout_real_create_keyboard (EekboardContextService *manager,
|
|||||||
eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds);
|
eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds);
|
||||||
|
|
||||||
/* resolve modifiers dynamically assigned at run time */
|
/* resolve modifiers dynamically assigned at run time */
|
||||||
EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (self);
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (
|
||||||
|
EEK_XKB_LAYOUT(self));
|
||||||
eek_keyboard_set_num_lock_mask (keyboard,
|
eek_keyboard_set_num_lock_mask (keyboard,
|
||||||
XkbKeysymToModifiers (priv->display,
|
XkbKeysymToModifiers (priv->display,
|
||||||
XK_Num_Lock));
|
XK_Num_Lock));
|
||||||
@ -358,7 +357,8 @@ eek_xkb_layout_real_create_keyboard (EekboardContextService *manager,
|
|||||||
static void
|
static void
|
||||||
eek_xkb_layout_finalize (GObject *object)
|
eek_xkb_layout_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
EekXkbLayoutPrivate *priv = EEK_XKB_LAYOUT_GET_PRIVATE (object);
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (
|
||||||
|
EEK_XKB_LAYOUT (object));
|
||||||
|
|
||||||
g_free (priv->names.keycodes);
|
g_free (priv->names.keycodes);
|
||||||
g_free (priv->names.geometry);
|
g_free (priv->names.geometry);
|
||||||
@ -374,10 +374,11 @@ eek_xkb_layout_set_property (GObject *object,
|
|||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
|
EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
|
||||||
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_DISPLAY:
|
case PROP_DISPLAY:
|
||||||
layout->priv->display = g_value_get_pointer (value);
|
priv->display = g_value_get_pointer (value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -392,10 +393,11 @@ eek_xkb_layout_get_property (GObject *object,
|
|||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
|
EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
|
||||||
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_DISPLAY:
|
case PROP_DISPLAY:
|
||||||
g_value_set_pointer (value, layout->priv->display);
|
g_value_set_pointer (value, priv->display);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -410,8 +412,6 @@ eek_xkb_layout_class_init (EekXkbLayoutClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class, sizeof (EekXkbLayoutPrivate));
|
|
||||||
|
|
||||||
layout_class->create_keyboard = eek_xkb_layout_real_create_keyboard;
|
layout_class->create_keyboard = eek_xkb_layout_real_create_keyboard;
|
||||||
|
|
||||||
gobject_class->finalize = eek_xkb_layout_finalize;
|
gobject_class->finalize = eek_xkb_layout_finalize;
|
||||||
@ -429,14 +429,14 @@ eek_xkb_layout_class_init (EekXkbLayoutClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_xkb_layout_init (EekXkbLayout *self)
|
eek_xkb_layout_init (EekXkbLayout *self)
|
||||||
{
|
{
|
||||||
self->priv = EEK_XKB_LAYOUT_GET_PRIVATE (self);
|
/* void */
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
get_names_from_server (EekXkbLayout *layout,
|
get_names_from_server (EekXkbLayout *layout,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
EekXkbLayoutPrivate *priv = layout->priv;
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
gchar *name;
|
gchar *name;
|
||||||
|
|
||||||
XkbGetNames (priv->display, XkbAllNamesMask, priv->xkb);
|
XkbGetNames (priv->display, XkbAllNamesMask, priv->xkb);
|
||||||
@ -516,19 +516,21 @@ eek_xkb_layout_set_names (EekXkbLayout *layout,
|
|||||||
XkbComponentNamesRec *names,
|
XkbComponentNamesRec *names,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
if (g_strcmp0 (names->keycodes, layout->priv->names.keycodes)) {
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
g_free (layout->priv->names.keycodes);
|
|
||||||
layout->priv->names.keycodes = g_strdup (names->keycodes);
|
if (g_strcmp0 (names->keycodes, priv->names.keycodes)) {
|
||||||
|
g_free (priv->names.keycodes);
|
||||||
|
priv->names.keycodes = g_strdup (names->keycodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_strcmp0 (names->geometry, layout->priv->names.geometry)) {
|
if (g_strcmp0 (names->geometry, priv->names.geometry)) {
|
||||||
g_free (layout->priv->names.geometry);
|
g_free (priv->names.geometry);
|
||||||
layout->priv->names.geometry = g_strdup (names->geometry);
|
priv->names.geometry = g_strdup (names->geometry);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (g_strcmp0 (names->symbols, layout->priv->names.symbols)) {
|
if (g_strcmp0 (names->symbols, priv->names.symbols)) {
|
||||||
g_free (layout->priv->names.symbols);
|
g_free (priv->names.symbols);
|
||||||
layout->priv->names.symbols = g_strdup (names->symbols);
|
priv->names.symbols = g_strdup (names->symbols);
|
||||||
}
|
}
|
||||||
|
|
||||||
return get_keyboard_from_server (layout, error);
|
return get_keyboard_from_server (layout, error);
|
||||||
@ -538,7 +540,7 @@ static gboolean
|
|||||||
get_keyboard_from_server (EekXkbLayout *layout,
|
get_keyboard_from_server (EekXkbLayout *layout,
|
||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
EekXkbLayoutPrivate *priv = layout->priv;
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
|
|
||||||
if (priv->xkb) {
|
if (priv->xkb) {
|
||||||
XkbFreeKeyboard (priv->xkb, 0, True);
|
XkbFreeKeyboard (priv->xkb, 0, True);
|
||||||
@ -589,7 +591,7 @@ find_keycode (EekXkbLayout *layout, gchar *key_name)
|
|||||||
XkbKeyAliasPtr palias;
|
XkbKeyAliasPtr palias;
|
||||||
guint is_name_matched;
|
guint is_name_matched;
|
||||||
gchar *src, *dst;
|
gchar *src, *dst;
|
||||||
EekXkbLayoutPrivate *priv = layout->priv;
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
|
|
||||||
if (!priv->xkb)
|
if (!priv->xkb)
|
||||||
return EEK_INVALID_KEYCODE;
|
return EEK_INVALID_KEYCODE;
|
||||||
@ -642,7 +644,7 @@ setup_scaling (EekXkbLayout *layout,
|
|||||||
gdouble width,
|
gdouble width,
|
||||||
gdouble height)
|
gdouble height)
|
||||||
{
|
{
|
||||||
EekXkbLayoutPrivate *priv = layout->priv;
|
EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
|
||||||
|
|
||||||
g_return_if_fail (priv->xkb);
|
g_return_if_fail (priv->xkb);
|
||||||
|
|
||||||
|
|||||||
@ -31,23 +31,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEK_TYPE_XKB_LAYOUT (eek_xkb_layout_get_type())
|
#define EEK_TYPE_XKB_LAYOUT (eek_xkb_layout_get_type())
|
||||||
#define EEK_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayout))
|
G_DECLARE_DERIVABLE_TYPE (EekXkbLayout, eek_xkb_layout, EEK, XKB_LAYOUT, EekLayout)
|
||||||
#define EEK_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutClass))
|
|
||||||
#define EEK_IS_XKB_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_XKB_LAYOUT))
|
|
||||||
#define EEK_IS_XKB_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_XKB_LAYOUT))
|
|
||||||
#define EEK_XKB_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_XKB_LAYOUT, EekXkbLayoutClass))
|
|
||||||
|
|
||||||
typedef struct _EekXkbLayout EekXkbLayout;
|
|
||||||
typedef struct _EekXkbLayoutClass EekXkbLayoutClass;
|
|
||||||
typedef struct _EekXkbLayoutPrivate EekXkbLayoutPrivate;
|
|
||||||
|
|
||||||
struct _EekXkbLayout
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
EekLayout parent;
|
|
||||||
|
|
||||||
EekXkbLayoutPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EekXkbLayoutClass
|
struct _EekXkbLayoutClass
|
||||||
{
|
{
|
||||||
|
|||||||
@ -42,13 +42,6 @@ static GInitableIface *parent_initable_iface;
|
|||||||
|
|
||||||
static void initable_iface_init (GInitableIface *initable_iface);
|
static void initable_iface_init (GInitableIface *initable_iface);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (EekXklLayout, eek_xkl_layout, EEK_TYPE_XKB_LAYOUT,
|
|
||||||
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
|
||||||
initable_iface_init));
|
|
||||||
|
|
||||||
#define EEK_XKL_LAYOUT_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayoutPrivate))
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PROP_0,
|
PROP_0,
|
||||||
PROP_MODEL,
|
PROP_MODEL,
|
||||||
@ -58,11 +51,17 @@ enum {
|
|||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _EekXklLayoutPrivate
|
typedef struct _EekXklLayoutPrivate
|
||||||
{
|
{
|
||||||
XklEngine *engine;
|
XklEngine *engine;
|
||||||
XklConfigRec *config;
|
XklConfigRec *config;
|
||||||
};
|
} EekXklLayoutPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_EXTENDED (EekXklLayout, eek_xkl_layout, EEK_TYPE_XKB_LAYOUT,
|
||||||
|
0, /* GTypeFlags */
|
||||||
|
G_ADD_PRIVATE (EekXklLayout)
|
||||||
|
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
||||||
|
initable_iface_init))
|
||||||
|
|
||||||
/* from gnome-keyboard-properties-xkbpv.c:
|
/* from gnome-keyboard-properties-xkbpv.c:
|
||||||
* BAD STYLE: Taken from xklavier_private_xkb.h
|
* BAD STYLE: Taken from xklavier_private_xkb.h
|
||||||
@ -83,7 +82,8 @@ static gboolean set_xkb_component_names (EekXklLayout *layout,
|
|||||||
static void
|
static void
|
||||||
eek_xkl_layout_dispose (GObject *object)
|
eek_xkl_layout_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (object);
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (
|
||||||
|
EEK_XKL_LAYOUT (object));
|
||||||
|
|
||||||
if (priv->config) {
|
if (priv->config) {
|
||||||
g_object_unref (priv->config);
|
g_object_unref (priv->config);
|
||||||
@ -157,8 +157,6 @@ eek_xkl_layout_class_init (EekXklLayoutClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class, sizeof (EekXklLayoutPrivate));
|
|
||||||
|
|
||||||
gobject_class->dispose = eek_xkl_layout_dispose;
|
gobject_class->dispose = eek_xkl_layout_dispose;
|
||||||
gobject_class->set_property = eek_xkl_layout_set_property;
|
gobject_class->set_property = eek_xkl_layout_set_property;
|
||||||
gobject_class->get_property = eek_xkl_layout_get_property;
|
gobject_class->get_property = eek_xkl_layout_get_property;
|
||||||
@ -215,7 +213,7 @@ eek_xkl_layout_class_init (EekXklLayoutClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_xkl_layout_init (EekXklLayout *self)
|
eek_xkl_layout_init (EekXklLayout *self)
|
||||||
{
|
{
|
||||||
self->priv = EEK_XKL_LAYOUT_GET_PRIVATE (self);
|
/* void */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -266,7 +264,7 @@ gboolean
|
|||||||
eek_xkl_layout_set_config (EekXklLayout *layout,
|
eek_xkl_layout_set_config (EekXklLayout *layout,
|
||||||
XklConfigRec *config)
|
XklConfigRec *config)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
XklConfigRec *c;
|
XklConfigRec *c;
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
|
|
||||||
@ -329,7 +327,7 @@ gboolean
|
|||||||
eek_xkl_layout_set_model (EekXklLayout *layout,
|
eek_xkl_layout_set_model (EekXklLayout *layout,
|
||||||
const gchar *model)
|
const gchar *model)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
XklConfigRec *config;
|
XklConfigRec *config;
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
|
|
||||||
@ -357,7 +355,7 @@ gboolean
|
|||||||
eek_xkl_layout_set_layouts (EekXklLayout *layout,
|
eek_xkl_layout_set_layouts (EekXklLayout *layout,
|
||||||
gchar **layouts)
|
gchar **layouts)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
XklConfigRec *config;
|
XklConfigRec *config;
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
|
|
||||||
@ -385,7 +383,7 @@ gboolean
|
|||||||
eek_xkl_layout_set_variants (EekXklLayout *layout,
|
eek_xkl_layout_set_variants (EekXklLayout *layout,
|
||||||
gchar **variants)
|
gchar **variants)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
XklConfigRec *config;
|
XklConfigRec *config;
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
|
|
||||||
@ -413,7 +411,7 @@ gboolean
|
|||||||
eek_xkl_layout_set_options (EekXklLayout *layout,
|
eek_xkl_layout_set_options (EekXklLayout *layout,
|
||||||
gchar **options)
|
gchar **options)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
XklConfigRec *config;
|
XklConfigRec *config;
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
|
|
||||||
@ -497,7 +495,7 @@ eek_xkl_layout_disable_option (EekXklLayout *layout,
|
|||||||
gchar *
|
gchar *
|
||||||
eek_xkl_layout_get_model (EekXklLayout *layout)
|
eek_xkl_layout_get_model (EekXklLayout *layout)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
|
|
||||||
g_return_val_if_fail (priv, NULL);
|
g_return_val_if_fail (priv, NULL);
|
||||||
return g_strdup (priv->config->model);
|
return g_strdup (priv->config->model);
|
||||||
@ -513,7 +511,7 @@ eek_xkl_layout_get_model (EekXklLayout *layout)
|
|||||||
gchar **
|
gchar **
|
||||||
eek_xkl_layout_get_layouts (EekXklLayout *layout)
|
eek_xkl_layout_get_layouts (EekXklLayout *layout)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
|
|
||||||
g_return_val_if_fail (priv, NULL);
|
g_return_val_if_fail (priv, NULL);
|
||||||
return g_strdupv (priv->config->layouts);
|
return g_strdupv (priv->config->layouts);
|
||||||
@ -529,7 +527,7 @@ eek_xkl_layout_get_layouts (EekXklLayout *layout)
|
|||||||
gchar **
|
gchar **
|
||||||
eek_xkl_layout_get_variants (EekXklLayout *layout)
|
eek_xkl_layout_get_variants (EekXklLayout *layout)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
|
|
||||||
g_return_val_if_fail (priv, NULL);
|
g_return_val_if_fail (priv, NULL);
|
||||||
return g_strdupv (priv->config->variants);
|
return g_strdupv (priv->config->variants);
|
||||||
@ -545,7 +543,7 @@ eek_xkl_layout_get_variants (EekXklLayout *layout)
|
|||||||
gchar **
|
gchar **
|
||||||
eek_xkl_layout_get_options (EekXklLayout *layout)
|
eek_xkl_layout_get_options (EekXklLayout *layout)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
|
|
||||||
g_return_val_if_fail (priv, NULL);
|
g_return_val_if_fail (priv, NULL);
|
||||||
return g_strdupv (priv->config->options);
|
return g_strdupv (priv->config->options);
|
||||||
@ -554,7 +552,7 @@ eek_xkl_layout_get_options (EekXklLayout *layout)
|
|||||||
static gboolean
|
static gboolean
|
||||||
set_xkb_component_names (EekXklLayout *layout, XklConfigRec *config)
|
set_xkb_component_names (EekXklLayout *layout, XklConfigRec *config)
|
||||||
{
|
{
|
||||||
EekXklLayoutPrivate *priv = layout->priv;
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
XkbComponentNamesRec names;
|
XkbComponentNamesRec names;
|
||||||
gboolean retval = FALSE;
|
gboolean retval = FALSE;
|
||||||
|
|
||||||
@ -628,21 +626,22 @@ initable_init (GInitable *initable,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
EekXklLayout *layout = EEK_XKL_LAYOUT (initable);
|
EekXklLayout *layout = EEK_XKL_LAYOUT (initable);
|
||||||
|
EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
|
||||||
Display *display;
|
Display *display;
|
||||||
|
|
||||||
if (!parent_initable_iface->init (initable, cancellable, error))
|
if (!parent_initable_iface->init (initable, cancellable, error))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
layout->priv->config = xkl_config_rec_new ();
|
priv->config = xkl_config_rec_new ();
|
||||||
|
|
||||||
g_object_get (G_OBJECT (initable),
|
g_object_get (G_OBJECT (initable),
|
||||||
"display", &display,
|
"display", &display,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
layout->priv->engine = xkl_engine_get_instance (display);
|
priv->engine = xkl_engine_get_instance (display);
|
||||||
|
|
||||||
if (!xkl_config_rec_get_from_server (layout->priv->config,
|
if (!xkl_config_rec_get_from_server (priv->config,
|
||||||
layout->priv->engine)) {
|
priv->engine)) {
|
||||||
g_set_error (error,
|
g_set_error (error,
|
||||||
EEK_ERROR,
|
EEK_ERROR,
|
||||||
EEK_ERROR_LAYOUT_ERROR,
|
EEK_ERROR_LAYOUT_ERROR,
|
||||||
@ -650,7 +649,7 @@ initable_init (GInitable *initable,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_xkb_component_names (layout, layout->priv->config);
|
set_xkb_component_names (layout, priv->config);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -31,23 +31,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEK_TYPE_XKL_LAYOUT (eek_xkl_layout_get_type())
|
#define EEK_TYPE_XKL_LAYOUT (eek_xkl_layout_get_type())
|
||||||
#define EEK_XKL_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayout))
|
G_DECLARE_DERIVABLE_TYPE (EekXklLayout, eek_xkl_layout, EEK, XKL_LAYOUT, EekLayout)
|
||||||
#define EEK_XKL_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_XKL_LAYOUT, EekXklLayoutClass))
|
|
||||||
#define EEK_IS_XKL_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_XKL_LAYOUT))
|
|
||||||
#define EEK_IS_XKL_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_XKL_LAYOUT))
|
|
||||||
#define EEK_XKL_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_XKL_LAYOUT, EekXklLayoutClass))
|
|
||||||
|
|
||||||
typedef struct _EekXklLayout EekXklLayout;
|
|
||||||
typedef struct _EekXklLayoutClass EekXklLayoutClass;
|
|
||||||
typedef struct _EekXklLayoutPrivate EekXklLayoutPrivate;
|
|
||||||
|
|
||||||
struct _EekXklLayout
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
EekXkbLayout parent;
|
|
||||||
|
|
||||||
EekXklLayoutPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EekXklLayoutClass
|
struct _EekXklLayoutClass
|
||||||
{
|
{
|
||||||
|
|||||||
@ -43,19 +43,18 @@ enum {
|
|||||||
|
|
||||||
static void initable_iface_init (GInitableIface *initable_iface);
|
static void initable_iface_init (GInitableIface *initable_iface);
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (EekXmlLayout, eek_xml_layout, EEK_TYPE_LAYOUT,
|
typedef struct _EekXmlLayoutPrivate
|
||||||
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
|
||||||
initable_iface_init));
|
|
||||||
|
|
||||||
#define EEK_XML_LAYOUT_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_XML_LAYOUT, EekXmlLayoutPrivate))
|
|
||||||
|
|
||||||
struct _EekXmlLayoutPrivate
|
|
||||||
{
|
{
|
||||||
gchar *id;
|
gchar *id;
|
||||||
gchar *keyboards_dir;
|
gchar *keyboards_dir;
|
||||||
EekXmlKeyboardDesc *desc;
|
EekXmlKeyboardDesc *desc;
|
||||||
};
|
} EekXmlLayoutPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_EXTENDED (EekXmlLayout, eek_xml_layout, EEK_TYPE_LAYOUT,
|
||||||
|
0, /* GTypeFlags */
|
||||||
|
G_ADD_PRIVATE(EekXmlLayout)
|
||||||
|
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE,
|
||||||
|
initable_iface_init))
|
||||||
|
|
||||||
G_DEFINE_BOXED_TYPE(EekXmlKeyboardDesc, eek_xml_keyboard_desc, eek_xml_keyboard_desc_copy, eek_xml_keyboard_desc_free);
|
G_DEFINE_BOXED_TYPE(EekXmlKeyboardDesc, eek_xml_keyboard_desc, eek_xml_keyboard_desc_copy, eek_xml_keyboard_desc_free);
|
||||||
|
|
||||||
@ -903,6 +902,7 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager,
|
|||||||
gdouble initial_height)
|
gdouble initial_height)
|
||||||
{
|
{
|
||||||
EekXmlLayout *layout = EEK_XML_LAYOUT (self);
|
EekXmlLayout *layout = EEK_XML_LAYOUT (self);
|
||||||
|
EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout);
|
||||||
gboolean retval;
|
gboolean retval;
|
||||||
|
|
||||||
/* Create an empty keyboard to which geometry and symbols
|
/* Create an empty keyboard to which geometry and symbols
|
||||||
@ -911,8 +911,8 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager,
|
|||||||
keyboard->manager = manager;
|
keyboard->manager = manager;
|
||||||
|
|
||||||
/* Read geometry information. */
|
/* Read geometry information. */
|
||||||
gchar *filename = g_strdup_printf ("%s.xml", layout->priv->desc->geometry);
|
gchar *filename = g_strdup_printf ("%s.xml", priv->desc->geometry);
|
||||||
gchar *path = g_build_filename (layout->priv->keyboards_dir, "geometry", filename, NULL);
|
gchar *path = g_build_filename (priv->keyboards_dir, "geometry", filename, NULL);
|
||||||
g_free (filename);
|
g_free (filename);
|
||||||
|
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
@ -921,7 +921,7 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager,
|
|||||||
if (!retval) {
|
if (!retval) {
|
||||||
g_object_unref (keyboard);
|
g_object_unref (keyboard);
|
||||||
g_warning ("can't parse geometry file %s: %s",
|
g_warning ("can't parse geometry file %s: %s",
|
||||||
layout->priv->desc->geometry,
|
priv->desc->geometry,
|
||||||
error->message);
|
error->message);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -929,8 +929,8 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager,
|
|||||||
|
|
||||||
/* Read symbols information. */
|
/* Read symbols information. */
|
||||||
GList *loaded = NULL;
|
GList *loaded = NULL;
|
||||||
retval = parse_symbols_with_prerequisites (layout->priv->keyboards_dir,
|
retval = parse_symbols_with_prerequisites (priv->keyboards_dir,
|
||||||
layout->priv->desc->symbols,
|
priv->desc->symbols,
|
||||||
keyboard,
|
keyboard,
|
||||||
&loaded,
|
&loaded,
|
||||||
&error);
|
&error);
|
||||||
@ -938,7 +938,7 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager,
|
|||||||
if (!retval) {
|
if (!retval) {
|
||||||
g_object_unref (keyboard);
|
g_object_unref (keyboard);
|
||||||
g_warning ("can't parse symbols file %s: %s",
|
g_warning ("can't parse symbols file %s: %s",
|
||||||
layout->priv->desc->symbols,
|
priv->desc->symbols,
|
||||||
error->message);
|
error->message);
|
||||||
g_error_free (error);
|
g_error_free (error);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -961,10 +961,12 @@ eek_xml_layout_set_property (GObject *object,
|
|||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekXmlLayout *layout = EEK_XML_LAYOUT (object);
|
EekXmlLayout *layout = EEK_XML_LAYOUT (object);
|
||||||
|
EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_ID:
|
case PROP_ID:
|
||||||
g_free (layout->priv->id);
|
g_free (priv->id);
|
||||||
layout->priv->id = g_value_dup_string (value);
|
priv->id = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -979,9 +981,11 @@ eek_xml_layout_get_property (GObject *object,
|
|||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekXmlLayout *layout = EEK_XML_LAYOUT (object);
|
EekXmlLayout *layout = EEK_XML_LAYOUT (object);
|
||||||
|
EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_ID:
|
case PROP_ID:
|
||||||
g_value_set_string (value, layout->priv->id);
|
g_value_set_string (value, priv->id);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -992,7 +996,8 @@ eek_xml_layout_get_property (GObject *object,
|
|||||||
static void
|
static void
|
||||||
eek_xml_layout_finalize (GObject *object)
|
eek_xml_layout_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
EekXmlLayoutPrivate *priv = EEK_XML_LAYOUT_GET_PRIVATE (object);
|
EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (
|
||||||
|
EEK_XML_LAYOUT (object));
|
||||||
|
|
||||||
g_free (priv->id);
|
g_free (priv->id);
|
||||||
|
|
||||||
@ -1011,8 +1016,6 @@ eek_xml_layout_class_init (EekXmlLayoutClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class, sizeof (EekXmlLayoutPrivate));
|
|
||||||
|
|
||||||
layout_class->create_keyboard = eek_xml_layout_real_create_keyboard;
|
layout_class->create_keyboard = eek_xml_layout_real_create_keyboard;
|
||||||
|
|
||||||
gobject_class->set_property = eek_xml_layout_set_property;
|
gobject_class->set_property = eek_xml_layout_set_property;
|
||||||
@ -1031,7 +1034,7 @@ eek_xml_layout_class_init (EekXmlLayoutClass *klass)
|
|||||||
static void
|
static void
|
||||||
eek_xml_layout_init (EekXmlLayout *self)
|
eek_xml_layout_init (EekXmlLayout *self)
|
||||||
{
|
{
|
||||||
self->priv = EEK_XML_LAYOUT_GET_PRIVATE (self);
|
/* void */
|
||||||
}
|
}
|
||||||
|
|
||||||
EekLayout *
|
EekLayout *
|
||||||
@ -1050,16 +1053,17 @@ initable_init (GInitable *initable,
|
|||||||
GError **error)
|
GError **error)
|
||||||
{
|
{
|
||||||
EekXmlLayout *layout = EEK_XML_LAYOUT (initable);
|
EekXmlLayout *layout = EEK_XML_LAYOUT (initable);
|
||||||
|
EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout);
|
||||||
GList *keyboards, *p;
|
GList *keyboards, *p;
|
||||||
gchar *path;
|
gchar *path;
|
||||||
EekXmlKeyboardDesc *desc;
|
EekXmlKeyboardDesc *desc;
|
||||||
|
|
||||||
layout->priv->keyboards_dir = (gchar *) g_getenv ("EEKBOARD_KEYBOARDSDIR");
|
priv->keyboards_dir = (gchar *) g_getenv ("EEKBOARD_KEYBOARDSDIR");
|
||||||
if (layout->priv->keyboards_dir == NULL)
|
if (priv->keyboards_dir == NULL)
|
||||||
layout->priv->keyboards_dir = KEYBOARDSDIR;
|
priv->keyboards_dir = KEYBOARDSDIR;
|
||||||
layout->priv->keyboards_dir = g_strdup (layout->priv->keyboards_dir);
|
priv->keyboards_dir = g_strdup (priv->keyboards_dir);
|
||||||
|
|
||||||
path = g_build_filename (layout->priv->keyboards_dir, "keyboards.xml", NULL);
|
path = g_build_filename (priv->keyboards_dir, "keyboards.xml", NULL);
|
||||||
keyboards = parse_keyboards (path, error);
|
keyboards = parse_keyboards (path, error);
|
||||||
g_free (path);
|
g_free (path);
|
||||||
if (error && *error)
|
if (error && *error)
|
||||||
@ -1067,7 +1071,7 @@ initable_init (GInitable *initable,
|
|||||||
|
|
||||||
for (p = keyboards; p; p = p->next) {
|
for (p = keyboards; p; p = p->next) {
|
||||||
desc = p->data;
|
desc = p->data;
|
||||||
if (g_strcmp0 (desc->id, layout->priv->id) == 0)
|
if (g_strcmp0 (desc->id, priv->id) == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (p == NULL) {
|
if (p == NULL) {
|
||||||
@ -1075,12 +1079,12 @@ initable_init (GInitable *initable,
|
|||||||
EEK_ERROR,
|
EEK_ERROR,
|
||||||
EEK_ERROR_LAYOUT_ERROR,
|
EEK_ERROR_LAYOUT_ERROR,
|
||||||
"no such keyboard %s",
|
"no such keyboard %s",
|
||||||
layout->priv->id);
|
priv->id);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
keyboards = g_list_remove_link (keyboards, p);
|
keyboards = g_list_remove_link (keyboards, p);
|
||||||
layout->priv->desc = p->data;
|
priv->desc = p->data;
|
||||||
g_list_free_1 (p);
|
g_list_free_1 (p);
|
||||||
g_list_free_full (keyboards, (GDestroyNotify) keyboard_desc_free);
|
g_list_free_full (keyboards, (GDestroyNotify) keyboard_desc_free);
|
||||||
|
|
||||||
|
|||||||
@ -29,29 +29,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEK_TYPE_XML_LAYOUT (eek_xml_layout_get_type())
|
#define EEK_TYPE_XML_LAYOUT (eek_xml_layout_get_type())
|
||||||
#define EEK_XML_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_XML_LAYOUT, EekXmlLayout))
|
G_DECLARE_DERIVABLE_TYPE (EekXmlLayout, eek_xml_layout, EEK, XML_LAYOUT, EekLayout)
|
||||||
#define EEK_XML_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEK_TYPE_XML_LAYOUT, EekXmlLayoutClass))
|
|
||||||
#define EEK_IS_XML_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEK_TYPE_XML_LAYOUT))
|
|
||||||
#define EEK_IS_XML_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEK_TYPE_XML_LAYOUT))
|
|
||||||
#define EEK_XML_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEK_TYPE_XML_LAYOUT, EekXmlLayoutClass))
|
|
||||||
|
|
||||||
typedef struct _EekXmlLayout EekXmlLayout;
|
|
||||||
typedef struct _EekXmlLayoutClass EekXmlLayoutClass;
|
|
||||||
typedef struct _EekXmlLayoutPrivate EekXmlLayoutPrivate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekXmlLayout:
|
|
||||||
*
|
|
||||||
* The #EekXmlLayout structure contains only private data and should
|
|
||||||
* only be accessed using the provided API.
|
|
||||||
*/
|
|
||||||
struct _EekXmlLayout
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
EekLayout parent;
|
|
||||||
|
|
||||||
EekXmlLayoutPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EekXmlLayoutClass:
|
* EekXmlLayoutClass:
|
||||||
|
|||||||
@ -36,15 +36,12 @@ enum {
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0, };
|
static guint signals[LAST_SIGNAL] = { 0, };
|
||||||
|
|
||||||
G_DEFINE_TYPE (EekboardClient, eekboard_client, G_TYPE_DBUS_PROXY);
|
typedef struct _EekboardClientPrivate
|
||||||
|
|
||||||
#define EEKBOARD_CLIENT_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEKBOARD_TYPE_CLIENT, EekboardClientPrivate))
|
|
||||||
|
|
||||||
struct _EekboardClientPrivate
|
|
||||||
{
|
{
|
||||||
GHashTable *context_hash;
|
GHashTable *context_hash;
|
||||||
};
|
} EekboardClientPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_PRIVATE (EekboardClient, eekboard_client, G_TYPE_DBUS_PROXY)
|
||||||
|
|
||||||
static void send_destroy_context (EekboardClient *client,
|
static void send_destroy_context (EekboardClient *client,
|
||||||
EekboardContext *context,
|
EekboardContext *context,
|
||||||
@ -53,7 +50,7 @@ static void send_destroy_context (EekboardClient *client,
|
|||||||
static void
|
static void
|
||||||
eekboard_client_real_destroyed (EekboardClient *self)
|
eekboard_client_real_destroyed (EekboardClient *self)
|
||||||
{
|
{
|
||||||
EekboardClientPrivate *priv = EEKBOARD_CLIENT_GET_PRIVATE(self);
|
EekboardClientPrivate *priv = eekboard_client_get_instance_private (self);
|
||||||
|
|
||||||
// g_debug ("eekboard_client_real_destroyed");
|
// g_debug ("eekboard_client_real_destroyed");
|
||||||
g_hash_table_remove_all (priv->context_hash);
|
g_hash_table_remove_all (priv->context_hash);
|
||||||
@ -63,7 +60,7 @@ static void
|
|||||||
eekboard_client_dispose (GObject *object)
|
eekboard_client_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
EekboardClient *client = EEKBOARD_CLIENT(object);
|
EekboardClient *client = EEKBOARD_CLIENT(object);
|
||||||
EekboardClientPrivate *priv = EEKBOARD_CLIENT_GET_PRIVATE(client);
|
EekboardClientPrivate *priv = eekboard_client_get_instance_private (client);
|
||||||
|
|
||||||
if (priv->context_hash) {
|
if (priv->context_hash) {
|
||||||
GHashTableIter iter;
|
GHashTableIter iter;
|
||||||
@ -86,9 +83,6 @@ eekboard_client_class_init (EekboardClientClass *klass)
|
|||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class,
|
|
||||||
sizeof (EekboardClientPrivate));
|
|
||||||
|
|
||||||
klass->destroyed = eekboard_client_real_destroyed;
|
klass->destroyed = eekboard_client_real_destroyed;
|
||||||
|
|
||||||
gobject_class->dispose = eekboard_client_dispose;
|
gobject_class->dispose = eekboard_client_dispose;
|
||||||
@ -115,8 +109,9 @@ eekboard_client_class_init (EekboardClientClass *klass)
|
|||||||
static void
|
static void
|
||||||
eekboard_client_init (EekboardClient *self)
|
eekboard_client_init (EekboardClient *self)
|
||||||
{
|
{
|
||||||
self->priv = EEKBOARD_CLIENT_GET_PRIVATE(self);
|
EekboardClientPrivate *priv = eekboard_client_get_instance_private (self);
|
||||||
self->priv->context_hash =
|
|
||||||
|
priv->context_hash =
|
||||||
g_hash_table_new_full (g_str_hash,
|
g_hash_table_new_full (g_str_hash,
|
||||||
g_str_equal,
|
g_str_equal,
|
||||||
(GDestroyNotify)g_free,
|
(GDestroyNotify)g_free,
|
||||||
@ -189,7 +184,9 @@ on_context_destroyed (EekboardContext *context,
|
|||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
EekboardClient *client = user_data;
|
EekboardClient *client = user_data;
|
||||||
g_hash_table_remove (client->priv->context_hash,
|
EekboardClientPrivate *priv = eekboard_client_get_instance_private (client);
|
||||||
|
|
||||||
|
g_hash_table_remove (priv->context_hash,
|
||||||
g_dbus_proxy_get_object_path (G_DBUS_PROXY(context)));
|
g_dbus_proxy_get_object_path (G_DBUS_PROXY(context)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -239,7 +236,9 @@ eekboard_client_create_context (EekboardClient *client,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_hash_table_insert (client->priv->context_hash,
|
EekboardClientPrivate *priv = eekboard_client_get_instance_private (client);
|
||||||
|
|
||||||
|
g_hash_table_insert (priv->context_hash,
|
||||||
g_strdup (object_path),
|
g_strdup (object_path),
|
||||||
g_object_ref (context));
|
g_object_ref (context));
|
||||||
g_signal_connect (context, "destroyed",
|
g_signal_connect (context, "destroyed",
|
||||||
@ -284,9 +283,11 @@ eekboard_client_push_context (EekboardClient *client,
|
|||||||
g_return_if_fail (EEKBOARD_IS_CLIENT(client));
|
g_return_if_fail (EEKBOARD_IS_CLIENT(client));
|
||||||
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
||||||
|
|
||||||
|
EekboardClientPrivate *priv = eekboard_client_get_instance_private (client);
|
||||||
|
|
||||||
object_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY(context));
|
object_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY(context));
|
||||||
|
|
||||||
context = g_hash_table_lookup (client->priv->context_hash,
|
context = g_hash_table_lookup (priv->context_hash,
|
||||||
object_path);
|
object_path);
|
||||||
if (!context)
|
if (!context)
|
||||||
return;
|
return;
|
||||||
@ -394,8 +395,10 @@ eekboard_client_destroy_context (EekboardClient *client,
|
|||||||
g_return_if_fail (EEKBOARD_IS_CLIENT(client));
|
g_return_if_fail (EEKBOARD_IS_CLIENT(client));
|
||||||
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
||||||
|
|
||||||
|
EekboardClientPrivate *priv = eekboard_client_get_instance_private (client);
|
||||||
|
|
||||||
object_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY(context));
|
object_path = g_dbus_proxy_get_object_path (G_DBUS_PROXY(context));
|
||||||
g_hash_table_remove (client->priv->context_hash, object_path);
|
g_hash_table_remove (priv->context_hash, object_path);
|
||||||
|
|
||||||
send_destroy_context (client, context, cancellable);
|
send_destroy_context (client, context, cancellable);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -26,22 +26,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEKBOARD_TYPE_CLIENT (eekboard_client_get_type())
|
#define EEKBOARD_TYPE_CLIENT (eekboard_client_get_type())
|
||||||
#define EEKBOARD_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEKBOARD_TYPE_CLIENT, EekboardClient))
|
G_DECLARE_DERIVABLE_TYPE (EekboardClient, eekboard_client, EEKBOARD, CLIENT, GDBusProxy)
|
||||||
#define EEKBOARD_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEKBOARD_TYPE_CLIENT, EekboardClientClass))
|
|
||||||
#define EEKBOARD_IS_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEKBOARD_TYPE_CLIENT))
|
|
||||||
#define EEKBOARD_IS_CLIENT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEKBOARD_TYPE_CLIENT))
|
|
||||||
#define EEKBOARD_CLIENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEKBOARD_TYPE_CLIENT, EekboardClientClass))
|
|
||||||
|
|
||||||
typedef struct _EekboardClient EekboardClient;
|
|
||||||
typedef struct _EekboardClientClass EekboardClientClass;
|
|
||||||
typedef struct _EekboardClientPrivate EekboardClientPrivate;
|
|
||||||
|
|
||||||
struct _EekboardClient {
|
|
||||||
/*< private >*/
|
|
||||||
GDBusProxy parent;
|
|
||||||
|
|
||||||
EekboardClientPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _EekboardClientClass {
|
struct _EekboardClientClass {
|
||||||
/*< private >*/
|
/*< private >*/
|
||||||
|
|||||||
@ -49,18 +49,15 @@ enum {
|
|||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_TYPE (EekboardContext, eekboard_context, G_TYPE_DBUS_PROXY);
|
typedef struct _EekboardContextPrivate
|
||||||
|
|
||||||
#define EEKBOARD_CONTEXT_GET_PRIVATE(obj) \
|
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEKBOARD_TYPE_CONTEXT, EekboardContextPrivate))
|
|
||||||
|
|
||||||
struct _EekboardContextPrivate
|
|
||||||
{
|
{
|
||||||
gboolean visible;
|
gboolean visible;
|
||||||
gboolean enabled;
|
gboolean enabled;
|
||||||
gboolean fullscreen;
|
gboolean fullscreen;
|
||||||
gint group;
|
gint group;
|
||||||
};
|
} EekboardContextPrivate;
|
||||||
|
|
||||||
|
G_DEFINE_TYPE_WITH_PRIVATE (EekboardContext, eekboard_context, G_TYPE_DBUS_PROXY)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eekboard_context_real_g_signal (GDBusProxy *self,
|
eekboard_context_real_g_signal (GDBusProxy *self,
|
||||||
@ -69,6 +66,7 @@ eekboard_context_real_g_signal (GDBusProxy *self,
|
|||||||
GVariant *parameters)
|
GVariant *parameters)
|
||||||
{
|
{
|
||||||
EekboardContext *context = EEKBOARD_CONTEXT (self);
|
EekboardContext *context = EEKBOARD_CONTEXT (self);
|
||||||
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
if (g_strcmp0 (signal_name, "Enabled") == 0) {
|
if (g_strcmp0 (signal_name, "Enabled") == 0) {
|
||||||
g_signal_emit (context, signals[ENABLED], 0);
|
g_signal_emit (context, signals[ENABLED], 0);
|
||||||
@ -111,8 +109,8 @@ eekboard_context_real_g_signal (GDBusProxy *self,
|
|||||||
gboolean visible = FALSE;
|
gboolean visible = FALSE;
|
||||||
|
|
||||||
g_variant_get (parameters, "(b)", &visible);
|
g_variant_get (parameters, "(b)", &visible);
|
||||||
if (visible != context->priv->visible) {
|
if (visible != priv->visible) {
|
||||||
context->priv->visible = visible;
|
priv->visible = visible;
|
||||||
g_object_notify (G_OBJECT(context), "visible");
|
g_object_notify (G_OBJECT(context), "visible");
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -122,8 +120,8 @@ eekboard_context_real_g_signal (GDBusProxy *self,
|
|||||||
gint group = 0;
|
gint group = 0;
|
||||||
|
|
||||||
g_variant_get (parameters, "(i)", &group);
|
g_variant_get (parameters, "(i)", &group);
|
||||||
if (group != context->priv->group) {
|
if (group != priv->group) {
|
||||||
context->priv->group = group;
|
priv->group = group;
|
||||||
/* g_object_notify (G_OBJECT(context), "group"); */
|
/* g_object_notify (G_OBJECT(context), "group"); */
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -135,13 +133,17 @@ eekboard_context_real_g_signal (GDBusProxy *self,
|
|||||||
static void
|
static void
|
||||||
eekboard_context_real_enabled (EekboardContext *self)
|
eekboard_context_real_enabled (EekboardContext *self)
|
||||||
{
|
{
|
||||||
self->priv->enabled = TRUE;
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (self);
|
||||||
|
|
||||||
|
priv->enabled = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eekboard_context_real_disabled (EekboardContext *self)
|
eekboard_context_real_disabled (EekboardContext *self)
|
||||||
{
|
{
|
||||||
self->priv->enabled = FALSE;
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (self);
|
||||||
|
|
||||||
|
priv->enabled = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -164,9 +166,11 @@ eekboard_context_get_property (GObject *object,
|
|||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekboardContext *context = EEKBOARD_CONTEXT(object);
|
EekboardContext *context = EEKBOARD_CONTEXT(object);
|
||||||
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_VISIBLE:
|
case PROP_VISIBLE:
|
||||||
g_value_set_boolean (value, context->priv->visible);
|
g_value_set_boolean (value, priv->visible);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -181,9 +185,6 @@ eekboard_context_class_init (EekboardContextClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class,
|
|
||||||
sizeof (EekboardContextPrivate));
|
|
||||||
|
|
||||||
klass->enabled = eekboard_context_real_enabled;
|
klass->enabled = eekboard_context_real_enabled;
|
||||||
klass->disabled = eekboard_context_real_disabled;
|
klass->disabled = eekboard_context_real_disabled;
|
||||||
klass->destroyed = eekboard_context_real_destroyed;
|
klass->destroyed = eekboard_context_real_destroyed;
|
||||||
@ -288,7 +289,7 @@ eekboard_context_class_init (EekboardContextClass *klass)
|
|||||||
static void
|
static void
|
||||||
eekboard_context_init (EekboardContext *self)
|
eekboard_context_init (EekboardContext *self)
|
||||||
{
|
{
|
||||||
self->priv = EEKBOARD_CONTEXT_GET_PRIVATE(self);
|
/* void */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -485,7 +486,9 @@ eekboard_context_set_group (EekboardContext *context,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
||||||
|
|
||||||
if (context->priv->group != group) {
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
|
if (priv->group != group) {
|
||||||
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
||||||
"SetGroup",
|
"SetGroup",
|
||||||
g_variant_new ("(i)", group),
|
g_variant_new ("(i)", group),
|
||||||
@ -509,7 +512,10 @@ eekboard_context_get_group (EekboardContext *context,
|
|||||||
GCancellable *cancellable)
|
GCancellable *cancellable)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEKBOARD_IS_CONTEXT(context), 0);
|
g_return_val_if_fail (EEKBOARD_IS_CONTEXT(context), 0);
|
||||||
return context->priv->group;
|
|
||||||
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
|
return priv->group;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -526,7 +532,9 @@ eekboard_context_show_keyboard (EekboardContext *context,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
||||||
|
|
||||||
if (context->priv->enabled) {
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
|
if (priv->enabled) {
|
||||||
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
||||||
"ShowKeyboard",
|
"ShowKeyboard",
|
||||||
NULL,
|
NULL,
|
||||||
@ -551,7 +559,9 @@ eekboard_context_hide_keyboard (EekboardContext *context,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
||||||
|
|
||||||
if (context->priv->enabled) {
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
|
if (priv->enabled) {
|
||||||
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
||||||
"HideKeyboard",
|
"HideKeyboard",
|
||||||
NULL,
|
NULL,
|
||||||
@ -578,7 +588,9 @@ eekboard_context_press_keycode (EekboardContext *context,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
||||||
|
|
||||||
if (context->priv->enabled) {
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
|
if (priv->enabled) {
|
||||||
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
||||||
"PressKeycode",
|
"PressKeycode",
|
||||||
g_variant_new ("(u)", keycode),
|
g_variant_new ("(u)", keycode),
|
||||||
@ -605,7 +617,9 @@ eekboard_context_release_keycode (EekboardContext *context,
|
|||||||
{
|
{
|
||||||
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
||||||
|
|
||||||
if (context->priv->enabled) {
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
|
if (priv->enabled) {
|
||||||
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
||||||
"ReleaseKeycode",
|
"ReleaseKeycode",
|
||||||
g_variant_new ("(u)", keycode),
|
g_variant_new ("(u)", keycode),
|
||||||
@ -627,7 +641,10 @@ gboolean
|
|||||||
eekboard_context_is_visible (EekboardContext *context)
|
eekboard_context_is_visible (EekboardContext *context)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEKBOARD_IS_CONTEXT(context), FALSE);
|
g_return_val_if_fail (EEKBOARD_IS_CONTEXT(context), FALSE);
|
||||||
return context->priv->enabled && context->priv->visible;
|
|
||||||
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
|
return priv->enabled && priv->visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -644,7 +661,10 @@ eekboard_context_set_enabled (EekboardContext *context,
|
|||||||
gboolean enabled)
|
gboolean enabled)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
||||||
context->priv->enabled = enabled;
|
|
||||||
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
|
priv->enabled = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -657,7 +677,10 @@ gboolean
|
|||||||
eekboard_context_is_enabled (EekboardContext *context)
|
eekboard_context_is_enabled (EekboardContext *context)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (EEKBOARD_IS_CONTEXT(context), FALSE);
|
g_return_val_if_fail (EEKBOARD_IS_CONTEXT(context), FALSE);
|
||||||
return context->priv->enabled;
|
|
||||||
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
|
return priv->enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -674,7 +697,10 @@ eekboard_context_set_fullscreen (EekboardContext *context,
|
|||||||
GCancellable *cancellable)
|
GCancellable *cancellable)
|
||||||
{
|
{
|
||||||
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
g_return_if_fail (EEKBOARD_IS_CONTEXT(context));
|
||||||
if (context->priv->fullscreen != fullscreen) {
|
|
||||||
|
EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
|
||||||
|
|
||||||
|
if (priv->fullscreen != fullscreen) {
|
||||||
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
g_dbus_proxy_call (G_DBUS_PROXY(context),
|
||||||
"SetFullscreen",
|
"SetFullscreen",
|
||||||
g_variant_new ("(b)", fullscreen),
|
g_variant_new ("(b)", fullscreen),
|
||||||
|
|||||||
@ -28,28 +28,7 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define EEKBOARD_TYPE_CONTEXT (eekboard_context_get_type())
|
#define EEKBOARD_TYPE_CONTEXT (eekboard_context_get_type())
|
||||||
#define EEKBOARD_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEKBOARD_TYPE_CONTEXT, EekboardContext))
|
G_DECLARE_DERIVABLE_TYPE (EekboardContext, eekboard_context, EEKBOARD, CONTEXT, GDBusProxy)
|
||||||
#define EEKBOARD_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEKBOARD_TYPE_CONTEXT, EekboardContextClass))
|
|
||||||
#define EEKBOARD_IS_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEKBOARD_TYPE_CONTEXT))
|
|
||||||
#define EEKBOARD_IS_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEKBOARD_TYPE_CONTEXT))
|
|
||||||
#define EEKBOARD_CONTEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEKBOARD_TYPE_CONTEXT, EekboardContextClass))
|
|
||||||
|
|
||||||
typedef struct _EekboardContext EekboardContext;
|
|
||||||
typedef struct _EekboardContextClass EekboardContextClass;
|
|
||||||
typedef struct _EekboardContextPrivate EekboardContextPrivate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekboardContext:
|
|
||||||
*
|
|
||||||
* The #EekboardContext structure contains only private data and
|
|
||||||
* should only be accessed using the provided API.
|
|
||||||
*/
|
|
||||||
struct _EekboardContext {
|
|
||||||
/*< private >*/
|
|
||||||
GDBusProxy parent;
|
|
||||||
|
|
||||||
EekboardContextPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EekboardContextClass:
|
* EekboardContextClass:
|
||||||
|
|||||||
@ -50,10 +50,8 @@ enum {
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0, };
|
static guint signals[LAST_SIGNAL] = { 0, };
|
||||||
|
|
||||||
#define EEKBOARD_SERVICE_GET_PRIVATE(obj) \
|
typedef struct _EekboardServicePrivate
|
||||||
(G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEKBOARD_TYPE_SERVICE, EekboardServicePrivate))
|
{
|
||||||
|
|
||||||
struct _EekboardServicePrivate {
|
|
||||||
GDBusConnection *connection;
|
GDBusConnection *connection;
|
||||||
SmPuriOSK0 *dbus_interface;
|
SmPuriOSK0 *dbus_interface;
|
||||||
GDBusNodeInfo *introspection_data;
|
GDBusNodeInfo *introspection_data;
|
||||||
@ -61,9 +59,9 @@ struct _EekboardServicePrivate {
|
|||||||
char *object_path;
|
char *object_path;
|
||||||
|
|
||||||
EekboardContextService *context; // unowned reference
|
EekboardContextService *context; // unowned reference
|
||||||
};
|
} EekboardServicePrivate;
|
||||||
|
|
||||||
G_DEFINE_TYPE (EekboardService, eekboard_service, G_TYPE_OBJECT);
|
G_DEFINE_TYPE_WITH_PRIVATE (EekboardService, eekboard_service, G_TYPE_OBJECT)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eekboard_service_set_property (GObject *object,
|
eekboard_service_set_property (GObject *object,
|
||||||
@ -72,19 +70,20 @@ eekboard_service_set_property (GObject *object,
|
|||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekboardService *service = EEKBOARD_SERVICE(object);
|
EekboardService *service = EEKBOARD_SERVICE(object);
|
||||||
|
EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
|
||||||
GDBusConnection *connection;
|
GDBusConnection *connection;
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_OBJECT_PATH:
|
case PROP_OBJECT_PATH:
|
||||||
if (service->priv->object_path)
|
if (priv->object_path)
|
||||||
g_free (service->priv->object_path);
|
g_free (priv->object_path);
|
||||||
service->priv->object_path = g_value_dup_string (value);
|
priv->object_path = g_value_dup_string (value);
|
||||||
break;
|
break;
|
||||||
case PROP_CONNECTION:
|
case PROP_CONNECTION:
|
||||||
connection = g_value_get_object (value);
|
connection = g_value_get_object (value);
|
||||||
if (service->priv->connection)
|
if (priv->connection)
|
||||||
g_object_unref (service->priv->connection);
|
g_object_unref (priv->connection);
|
||||||
service->priv->connection = g_object_ref (connection);
|
priv->connection = g_object_ref (connection);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -99,13 +98,14 @@ eekboard_service_get_property (GObject *object,
|
|||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
EekboardService *service = EEKBOARD_SERVICE(object);
|
EekboardService *service = EEKBOARD_SERVICE(object);
|
||||||
|
EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_OBJECT_PATH:
|
case PROP_OBJECT_PATH:
|
||||||
g_value_set_string (value, service->priv->object_path);
|
g_value_set_string (value, priv->object_path);
|
||||||
break;
|
break;
|
||||||
case PROP_CONNECTION:
|
case PROP_CONNECTION:
|
||||||
g_value_set_object (value, service->priv->connection);
|
g_value_set_object (value, priv->connection);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
@ -117,20 +117,22 @@ static void
|
|||||||
eekboard_service_dispose (GObject *object)
|
eekboard_service_dispose (GObject *object)
|
||||||
{
|
{
|
||||||
EekboardService *service = EEKBOARD_SERVICE(object);
|
EekboardService *service = EEKBOARD_SERVICE(object);
|
||||||
if (service->priv->connection) {
|
EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
|
||||||
if (service->priv->registration_id > 0) {
|
|
||||||
g_dbus_connection_unregister_object (service->priv->connection,
|
if (priv->connection) {
|
||||||
service->priv->registration_id);
|
if (priv->registration_id > 0) {
|
||||||
service->priv->registration_id = 0;
|
g_dbus_connection_unregister_object (priv->connection,
|
||||||
|
priv->registration_id);
|
||||||
|
priv->registration_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
g_object_unref (service->priv->connection);
|
g_object_unref (priv->connection);
|
||||||
service->priv->connection = NULL;
|
priv->connection = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (service->priv->introspection_data) {
|
if (priv->introspection_data) {
|
||||||
g_dbus_node_info_unref (service->priv->introspection_data);
|
g_dbus_node_info_unref (priv->introspection_data);
|
||||||
service->priv->introspection_data = NULL;
|
priv->introspection_data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
G_OBJECT_CLASS (eekboard_service_parent_class)->dispose (object);
|
G_OBJECT_CLASS (eekboard_service_parent_class)->dispose (object);
|
||||||
@ -140,8 +142,9 @@ static void
|
|||||||
eekboard_service_finalize (GObject *object)
|
eekboard_service_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
EekboardService *service = EEKBOARD_SERVICE(object);
|
EekboardService *service = EEKBOARD_SERVICE(object);
|
||||||
|
EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
|
||||||
|
|
||||||
g_free (service->priv->object_path);
|
g_free (priv->object_path);
|
||||||
|
|
||||||
G_OBJECT_CLASS (eekboard_service_parent_class)->finalize (object);
|
G_OBJECT_CLASS (eekboard_service_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
@ -150,11 +153,13 @@ static gboolean
|
|||||||
handle_set_visible(SmPuriOSK0 *object, GDBusMethodInvocation *invocation,
|
handle_set_visible(SmPuriOSK0 *object, GDBusMethodInvocation *invocation,
|
||||||
gboolean arg_visible, gpointer user_data) {
|
gboolean arg_visible, gpointer user_data) {
|
||||||
EekboardService *service = user_data;
|
EekboardService *service = user_data;
|
||||||
if (service->priv->context) {
|
EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
|
||||||
|
|
||||||
|
if (priv->context) {
|
||||||
if (arg_visible) {
|
if (arg_visible) {
|
||||||
eekboard_context_service_show_keyboard (service->priv->context);
|
eekboard_context_service_show_keyboard (priv->context);
|
||||||
} else {
|
} else {
|
||||||
eekboard_context_service_hide_keyboard (service->priv->context);
|
eekboard_context_service_hide_keyboard (priv->context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sm_puri_osk0_complete_set_visible(object, invocation);
|
sm_puri_osk0_complete_set_visible(object, invocation);
|
||||||
@ -165,18 +170,19 @@ static void
|
|||||||
eekboard_service_constructed (GObject *object)
|
eekboard_service_constructed (GObject *object)
|
||||||
{
|
{
|
||||||
EekboardService *service = EEKBOARD_SERVICE(object);
|
EekboardService *service = EEKBOARD_SERVICE(object);
|
||||||
|
EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
|
||||||
|
|
||||||
service->priv->dbus_interface = sm_puri_osk0_skeleton_new();
|
priv->dbus_interface = sm_puri_osk0_skeleton_new();
|
||||||
sm_puri_osk0_set_visible(service->priv->dbus_interface, FALSE); // TODO: use actual value
|
sm_puri_osk0_set_visible(priv->dbus_interface, FALSE); // TODO: use actual value
|
||||||
g_signal_connect(service->priv->dbus_interface, "handle-set-visible",
|
g_signal_connect(priv->dbus_interface, "handle-set-visible",
|
||||||
G_CALLBACK(handle_set_visible), service);
|
G_CALLBACK(handle_set_visible), service);
|
||||||
|
|
||||||
if (service->priv->connection && service->priv->object_path) {
|
if (priv->connection && priv->object_path) {
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
if (!g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(service->priv->dbus_interface),
|
if (!g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(priv->dbus_interface),
|
||||||
service->priv->connection,
|
priv->connection,
|
||||||
service->priv->object_path,
|
priv->object_path,
|
||||||
&error)) {
|
&error)) {
|
||||||
g_warning("Error registering dbus object: %s\n", error->message);
|
g_warning("Error registering dbus object: %s\n", error->message);
|
||||||
g_clear_error(&error);
|
g_clear_error(&error);
|
||||||
@ -190,9 +196,6 @@ eekboard_service_class_init (EekboardServiceClass *klass)
|
|||||||
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
||||||
GParamSpec *pspec;
|
GParamSpec *pspec;
|
||||||
|
|
||||||
g_type_class_add_private (gobject_class,
|
|
||||||
sizeof (EekboardServicePrivate));
|
|
||||||
|
|
||||||
klass->create_context = NULL;
|
klass->create_context = NULL;
|
||||||
|
|
||||||
gobject_class->constructed = eekboard_service_constructed;
|
gobject_class->constructed = eekboard_service_constructed;
|
||||||
@ -250,8 +253,9 @@ eekboard_service_class_init (EekboardServiceClass *klass)
|
|||||||
static void
|
static void
|
||||||
eekboard_service_init (EekboardService *self)
|
eekboard_service_init (EekboardService *self)
|
||||||
{
|
{
|
||||||
self->priv = EEKBOARD_SERVICE_GET_PRIVATE(self);
|
EekboardServicePrivate *priv = eekboard_service_get_instance_private (self);
|
||||||
self->priv->context = NULL;
|
|
||||||
|
priv->context = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -271,7 +275,9 @@ eekboard_service_new (GDBusConnection *connection,
|
|||||||
|
|
||||||
void
|
void
|
||||||
eekboard_service_set_context(EekboardService *service,
|
eekboard_service_set_context(EekboardService *service,
|
||||||
|
EekboardContextService *context)
|
||||||
|
{
|
||||||
|
EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
|
||||||
|
|
||||||
EekboardContextService *context) {
|
priv->context = context;
|
||||||
service->priv->context = context;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,30 +28,7 @@ G_BEGIN_DECLS
|
|||||||
#define EEKBOARD_SERVICE_INTERFACE "sm.puri.OSK0"
|
#define EEKBOARD_SERVICE_INTERFACE "sm.puri.OSK0"
|
||||||
|
|
||||||
#define EEKBOARD_TYPE_SERVICE (eekboard_service_get_type())
|
#define EEKBOARD_TYPE_SERVICE (eekboard_service_get_type())
|
||||||
#define EEKBOARD_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEKBOARD_TYPE_SERVICE, EekboardService))
|
G_DECLARE_DERIVABLE_TYPE (EekboardService, eekboard_service, EEKBOARD, SERVICE, GObject)
|
||||||
#define EEKBOARD_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EEKBOARD_TYPE_SERVICE, EekboardServiceClass))
|
|
||||||
#define EEKBOARD_IS_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EEKBOARD_TYPE_SERVICE))
|
|
||||||
#define EEKBOARD_IS_SERVICE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EEKBOARD_TYPE_SERVICE))
|
|
||||||
#define EEKBOARD_SERVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EEKBOARD_TYPE_SERVICE, EekboardServiceClass))
|
|
||||||
|
|
||||||
typedef struct _EekboardService EekboardService;
|
|
||||||
typedef struct _EekboardServiceClass EekboardServiceClass;
|
|
||||||
typedef struct _EekboardServicePrivate EekboardServicePrivate;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* EekboardService:
|
|
||||||
*
|
|
||||||
* Manages DBus interaction.
|
|
||||||
*
|
|
||||||
* The #EekboardService structure contains only private data and
|
|
||||||
* should only be accessed using the provided API.
|
|
||||||
*/
|
|
||||||
struct _EekboardService {
|
|
||||||
/*< private >*/
|
|
||||||
GObject parent;
|
|
||||||
|
|
||||||
EekboardServicePrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* EekboardServiceClass:
|
* EekboardServiceClass:
|
||||||
|
|||||||
Reference in New Issue
Block a user