Compare commits
	
		
			4 Commits
		
	
	
		
			x11kb
			...
			fix-deprec
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 33662d42ae | |||
| bf8e765c89 | |||
| 36ee547506 | |||
| 8e014aaaf8 | 
@ -40,23 +40,19 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0, };
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE (EekContainer, eek_container, EEK_TYPE_ELEMENT);
 | 
			
		||||
 | 
			
		||||
#define EEK_CONTAINER_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_CONTAINER, EekContainerPrivate))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct _EekContainerPrivate
 | 
			
		||||
typedef struct _EekContainerPrivate
 | 
			
		||||
{
 | 
			
		||||
    GList *head;
 | 
			
		||||
    GList *last;
 | 
			
		||||
};
 | 
			
		||||
} EekContainerPrivate;
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (EekContainer, eek_container, EEK_TYPE_ELEMENT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_container_real_add_child (EekContainer *self,
 | 
			
		||||
                              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_object_ref (child);
 | 
			
		||||
@ -75,7 +71,7 @@ static void
 | 
			
		||||
eek_container_real_remove_child (EekContainer *self,
 | 
			
		||||
                                 EekElement   *child)
 | 
			
		||||
{
 | 
			
		||||
    EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
 | 
			
		||||
    EekContainerPrivate *priv = eek_container_get_instance_private (self);
 | 
			
		||||
    GList *head;
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(child));
 | 
			
		||||
@ -94,7 +90,7 @@ eek_container_real_foreach_child (EekContainer *self,
 | 
			
		||||
                                  EekCallback   callback,
 | 
			
		||||
                                  gpointer      user_data)
 | 
			
		||||
{
 | 
			
		||||
    EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
 | 
			
		||||
    EekContainerPrivate *priv = eek_container_get_instance_private (self);
 | 
			
		||||
    GList *head;
 | 
			
		||||
 | 
			
		||||
    for (head = priv->head; head; head = g_list_next (head))
 | 
			
		||||
@ -106,7 +102,7 @@ eek_container_real_find (EekContainer *self,
 | 
			
		||||
                         EekCompareFunc func,
 | 
			
		||||
                         gpointer user_data)
 | 
			
		||||
{
 | 
			
		||||
    EekContainerPrivate *priv = EEK_CONTAINER_GET_PRIVATE(self);
 | 
			
		||||
    EekContainerPrivate *priv = eek_container_get_instance_private (self);
 | 
			
		||||
    GList *head;
 | 
			
		||||
 | 
			
		||||
    head = g_list_find_custom (priv->head, user_data, (GCompareFunc)func);
 | 
			
		||||
@ -118,7 +114,8 @@ eek_container_real_find (EekContainer *self,
 | 
			
		||||
static void
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekContainerPrivate));
 | 
			
		||||
 | 
			
		||||
    klass->add_child = eek_container_real_add_child;
 | 
			
		||||
    klass->remove_child = eek_container_real_remove_child;
 | 
			
		||||
    klass->foreach_child = eek_container_real_foreach_child;
 | 
			
		||||
@ -189,7 +183,7 @@ eek_container_class_init (EekContainerClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eek_container_init (EekContainer *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEK_CONTAINER_GET_PRIVATE(self);
 | 
			
		||||
    /* void */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 | 
			
		||||
@ -30,14 +30,7 @@
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define EEK_TYPE_CONTAINER (eek_container_get_type())
 | 
			
		||||
#define EEK_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_CONTAINER, EekContainer))
 | 
			
		||||
#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;
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekContainer, eek_container, EEK, CONTAINER, EekElement)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekCallback:
 | 
			
		||||
@ -50,14 +43,6 @@ typedef struct _EekContainerPrivate EekContainerPrivate;
 | 
			
		||||
typedef void (*EekCallback) (EekElement *element, gpointer user_data);
 | 
			
		||||
typedef gint (*EekCompareFunc) (EekElement *element, gpointer user_data);
 | 
			
		||||
 | 
			
		||||
struct _EekContainer
 | 
			
		||||
{
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
    EekElement parent;
 | 
			
		||||
 | 
			
		||||
    EekContainerPrivate *priv;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekContainerClass:
 | 
			
		||||
 * @foreach_child: virtual function for iterating over the container's children
 | 
			
		||||
 | 
			
		||||
@ -52,20 +52,16 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0, };
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE (EekElement, eek_element, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
#define EEK_ELEMENT_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_ELEMENT, EekElementPrivate))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct _EekElementPrivate
 | 
			
		||||
typedef struct _EekElementPrivate
 | 
			
		||||
{
 | 
			
		||||
    gchar *name;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    EekElement *parent;
 | 
			
		||||
    gint group;
 | 
			
		||||
    gint level;
 | 
			
		||||
};
 | 
			
		||||
} EekElementPrivate;
 | 
			
		||||
 | 
			
		||||
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (EekElement, eek_element, G_TYPE_OBJECT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_element_real_symbol_index_changed (EekElement *self,
 | 
			
		||||
@ -78,7 +74,8 @@ eek_element_real_symbol_index_changed (EekElement *self,
 | 
			
		||||
static void
 | 
			
		||||
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_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);
 | 
			
		||||
    GParamSpec        *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekElementPrivate));
 | 
			
		||||
 | 
			
		||||
    /* signals */
 | 
			
		||||
    klass->symbol_index_changed = eek_element_real_symbol_index_changed;
 | 
			
		||||
 | 
			
		||||
@ -238,9 +232,8 @@ eek_element_class_init (EekElementClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
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->level = -1;
 | 
			
		||||
}
 | 
			
		||||
@ -259,10 +252,12 @@ eek_element_set_parent (EekElement *element,
 | 
			
		||||
    g_return_if_fail (EEK_IS_ELEMENT(element));
 | 
			
		||||
    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;
 | 
			
		||||
 | 
			
		||||
    if (element->priv->parent != NULL) {
 | 
			
		||||
    if (priv->parent != NULL) {
 | 
			
		||||
        /* release self-reference acquired when setting parent */
 | 
			
		||||
        g_object_unref (element);
 | 
			
		||||
    }
 | 
			
		||||
@ -271,7 +266,7 @@ eek_element_set_parent (EekElement *element,
 | 
			
		||||
        g_object_ref (element);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    element->priv->parent = parent;
 | 
			
		||||
    priv->parent = parent;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -285,7 +280,10 @@ EekElement *
 | 
			
		||||
eek_element_get_parent (EekElement *element)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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 (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)
 | 
			
		||||
{
 | 
			
		||||
    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_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)
 | 
			
		||||
{
 | 
			
		||||
    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_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)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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
 | 
			
		||||
#define EEK_TYPE_ELEMENT (eek_element_get_type())
 | 
			
		||||
#define EEK_ELEMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_ELEMENT, EekElement))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekElement, eek_element, EEK, ELEMENT, GObject)
 | 
			
		||||
 | 
			
		||||
struct _EekElementClass
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -46,18 +46,13 @@ enum {
 | 
			
		||||
    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
 | 
			
		||||
   GdkWindow as the argument */
 | 
			
		||||
#ifndef GDK_DRAWABLE
 | 
			
		||||
#define GDK_DRAWABLE(x) (x)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct _EekGtkKeyboardPrivate
 | 
			
		||||
typedef struct _EekGtkKeyboardPrivate
 | 
			
		||||
{
 | 
			
		||||
    EekRenderer *renderer;
 | 
			
		||||
    EekKeyboard *keyboard;
 | 
			
		||||
@ -65,7 +60,11 @@ struct _EekGtkKeyboardPrivate
 | 
			
		||||
    gulong key_unlocked_handler;
 | 
			
		||||
    gulong symbol_index_changed_handler;
 | 
			
		||||
    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,
 | 
			
		||||
                                           EekGtkKeyboard *self);
 | 
			
		||||
@ -106,7 +105,8 @@ static gboolean
 | 
			
		||||
eek_gtk_keyboard_real_draw (GtkWidget *self,
 | 
			
		||||
                            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;
 | 
			
		||||
    GList *list, *head;
 | 
			
		||||
 | 
			
		||||
@ -148,7 +148,8 @@ static void
 | 
			
		||||
eek_gtk_keyboard_real_size_allocate (GtkWidget     *self,
 | 
			
		||||
                                     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)
 | 
			
		||||
        eek_renderer_set_allocation_size (priv->renderer,
 | 
			
		||||
@ -161,7 +162,7 @@ eek_gtk_keyboard_real_size_allocate (GtkWidget     *self,
 | 
			
		||||
 | 
			
		||||
static void depress(EekGtkKeyboard *self,
 | 
			
		||||
                    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);
 | 
			
		||||
    if (key) {
 | 
			
		||||
        eek_keyboard_press_key(priv->keyboard, key, time);
 | 
			
		||||
@ -171,7 +172,7 @@ static void depress(EekGtkKeyboard *self,
 | 
			
		||||
 | 
			
		||||
static void drag(EekGtkKeyboard *self,
 | 
			
		||||
                 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);
 | 
			
		||||
 | 
			
		||||
    if (key) {
 | 
			
		||||
@ -197,7 +198,7 @@ static void drag(EekGtkKeyboard *self,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
    for (GList *head = list; head; head = g_list_next (head)) {
 | 
			
		||||
@ -243,19 +244,22 @@ eek_gtk_keyboard_real_motion_notify_event (GtkWidget      *self,
 | 
			
		||||
// Only one touch stream at a time allowed. Others will be completely ignored.
 | 
			
		||||
static gboolean
 | 
			
		||||
handle_touch_event (GtkWidget     *widget,
 | 
			
		||||
                    GdkEventTouch *event) {
 | 
			
		||||
    EekGtkKeyboard *self = EEK_GTK_KEYBOARD(widget);
 | 
			
		||||
                    GdkEventTouch *event)
 | 
			
		||||
{
 | 
			
		||||
    EekGtkKeyboard        *self = EEK_GTK_KEYBOARD (widget);
 | 
			
		||||
    EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
    if (event->type == GDK_TOUCH_BEGIN) {
 | 
			
		||||
        if (self->sequence) {
 | 
			
		||||
        if (priv->sequence) {
 | 
			
		||||
            // Ignore second and following touch points
 | 
			
		||||
            return FALSE;
 | 
			
		||||
        }
 | 
			
		||||
        self->sequence = event->sequence;
 | 
			
		||||
        priv->sequence = event->sequence;
 | 
			
		||||
        depress(self, event->x, event->y, event->time);
 | 
			
		||||
        return TRUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (self->sequence != event->sequence) {
 | 
			
		||||
    if (priv->sequence != event->sequence) {
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -265,16 +269,16 @@ handle_touch_event (GtkWidget      *widget,
 | 
			
		||||
    if (event->type == GDK_TOUCH_END || event->type == GDK_TOUCH_CANCEL) {
 | 
			
		||||
        // TODO: can the event have different coords than the previous update event?
 | 
			
		||||
        release(self, event->time);
 | 
			
		||||
        self->sequence = NULL;
 | 
			
		||||
        priv->sequence = NULL;
 | 
			
		||||
    }
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
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) {
 | 
			
		||||
        GList *list, *head;
 | 
			
		||||
@ -301,7 +305,9 @@ eek_gtk_keyboard_real_query_tooltip (GtkWidget  *widget,
 | 
			
		||||
                                     gboolean    keyboard_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;
 | 
			
		||||
 | 
			
		||||
    key = eek_renderer_find_key_by_position (priv->renderer,
 | 
			
		||||
@ -322,7 +328,7 @@ static void
 | 
			
		||||
eek_gtk_keyboard_set_keyboard (EekGtkKeyboard *self,
 | 
			
		||||
                               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->key_locked_handler =
 | 
			
		||||
@ -358,7 +364,8 @@ eek_gtk_keyboard_set_property (GObject      *object,
 | 
			
		||||
static void
 | 
			
		||||
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) {
 | 
			
		||||
        g_object_unref (priv->renderer);
 | 
			
		||||
@ -407,9 +414,6 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
 | 
			
		||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
    GParamSpec *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekGtkKeyboardPrivate));
 | 
			
		||||
 | 
			
		||||
    widget_class->realize = eek_gtk_keyboard_real_realize;
 | 
			
		||||
    widget_class->unmap = eek_gtk_keyboard_real_unmap;
 | 
			
		||||
    widget_class->draw = eek_gtk_keyboard_real_draw;
 | 
			
		||||
@ -440,7 +444,7 @@ eek_gtk_keyboard_class_init (EekGtkKeyboardClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eek_gtk_keyboard_init (EekGtkKeyboard *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self);
 | 
			
		||||
    /* void */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -483,7 +487,8 @@ static void
 | 
			
		||||
render_pressed_key (GtkWidget *widget,
 | 
			
		||||
                    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;
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE);
 | 
			
		||||
@ -514,31 +519,41 @@ static void
 | 
			
		||||
render_locked_key (GtkWidget *widget,
 | 
			
		||||
                   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;
 | 
			
		||||
    cairo_t *cr;
 | 
			
		||||
 | 
			
		||||
    cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget)));
 | 
			
		||||
    GdkWindow         *window  = gtk_widget_get_window (widget);
 | 
			
		||||
    cairo_region_t    *region  = gdk_window_get_clip_region (window);
 | 
			
		||||
    GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region);
 | 
			
		||||
    cairo_t           *cr      = gdk_drawing_context_get_cairo_context (context);
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE);
 | 
			
		||||
 | 
			
		||||
    cairo_translate (cr, bounds.x, bounds.y);
 | 
			
		||||
    eek_renderer_render_key (priv->renderer, cr, key, 1.0, TRUE);
 | 
			
		||||
 | 
			
		||||
    cairo_destroy (cr);
 | 
			
		||||
    gdk_window_end_draw_frame (window, context);
 | 
			
		||||
 | 
			
		||||
    cairo_region_destroy(region);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
render_released_key (GtkWidget *widget,
 | 
			
		||||
                     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;
 | 
			
		||||
    cairo_t *cr;
 | 
			
		||||
 | 
			
		||||
    cr = gdk_cairo_create (GDK_DRAWABLE (gtk_widget_get_window (widget)));
 | 
			
		||||
    GdkWindow         *window  = gtk_widget_get_window (widget);
 | 
			
		||||
    cairo_region_t    *region  = gdk_window_get_clip_region (window);
 | 
			
		||||
    GdkDrawingContext *context = gdk_window_begin_draw_frame (window, region);
 | 
			
		||||
    cairo_t           *cr      = gdk_drawing_context_get_cairo_context (context);
 | 
			
		||||
 | 
			
		||||
    eek_renderer_get_key_bounds (priv->renderer, key, &bounds, TRUE);
 | 
			
		||||
    magnify_bounds (widget, &bounds, &large_bounds, 2.0);
 | 
			
		||||
 | 
			
		||||
    cairo_rectangle (cr,
 | 
			
		||||
                     large_bounds.x,
 | 
			
		||||
                     large_bounds.y,
 | 
			
		||||
@ -552,14 +567,17 @@ render_released_key (GtkWidget *widget,
 | 
			
		||||
    cairo_clip (cr);
 | 
			
		||||
 | 
			
		||||
    eek_renderer_render_keyboard (priv->renderer, cr);
 | 
			
		||||
    cairo_destroy (cr);
 | 
			
		||||
 | 
			
		||||
    gdk_window_end_draw_frame (window, context);
 | 
			
		||||
 | 
			
		||||
    cairo_region_destroy(region);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
on_key_pressed (EekKey      *key,
 | 
			
		||||
                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 */
 | 
			
		||||
    if (!priv->renderer)
 | 
			
		||||
@ -580,7 +598,7 @@ static void
 | 
			
		||||
on_key_released (EekKey      *key,
 | 
			
		||||
                 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 */
 | 
			
		||||
    if (!priv->renderer)
 | 
			
		||||
@ -603,7 +621,7 @@ on_key_locked (EekKeyboard *keyboard,
 | 
			
		||||
               gpointer     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 */
 | 
			
		||||
    if (!priv->renderer)
 | 
			
		||||
@ -618,7 +636,7 @@ on_key_unlocked (EekKeyboard *keyboard,
 | 
			
		||||
                 gpointer     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 */
 | 
			
		||||
    if (!priv->renderer)
 | 
			
		||||
@ -642,11 +660,9 @@ void
 | 
			
		||||
eek_gtk_keyboard_set_theme (EekGtkKeyboard *keyboard,
 | 
			
		||||
                            EekTheme       *theme)
 | 
			
		||||
{
 | 
			
		||||
    EekGtkKeyboardPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (EEK_IS_GTK_KEYBOARD(keyboard));
 | 
			
		||||
    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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -32,25 +32,7 @@
 | 
			
		||||
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
#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))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekGtkKeyboard, eek_gtk_keyboard, EEK, GTK_KEYBOARD, GtkDrawingArea)
 | 
			
		||||
 | 
			
		||||
struct _EekGtkKeyboardClass
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -54,13 +54,7 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0, };
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (EekKey, eek_key, EEK_TYPE_ELEMENT);
 | 
			
		||||
 | 
			
		||||
#define EEK_KEY_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_KEY, EekKeyPrivate))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
struct _EekKeyPrivate
 | 
			
		||||
typedef struct _EekKeyPrivate
 | 
			
		||||
{
 | 
			
		||||
    guint keycode;
 | 
			
		||||
    EekSymbolMatrix *symbol_matrix;
 | 
			
		||||
@ -69,12 +63,14 @@ struct _EekKeyPrivate
 | 
			
		||||
    gulong oref; // UI outline reference
 | 
			
		||||
    gboolean is_pressed;
 | 
			
		||||
    gboolean is_locked;
 | 
			
		||||
};
 | 
			
		||||
} EekKeyPrivate;
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (EekKey, eek_key, EEK_TYPE_ELEMENT)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
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;
 | 
			
		||||
#if DEBUG
 | 
			
		||||
@ -85,7 +81,7 @@ eek_key_real_locked (EekKey *self)
 | 
			
		||||
static void
 | 
			
		||||
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;
 | 
			
		||||
#if DEBUG
 | 
			
		||||
@ -96,8 +92,11 @@ eek_key_real_unlocked (EekKey *self)
 | 
			
		||||
static void
 | 
			
		||||
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);
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
    GParamSpec        *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekKeyPrivate));
 | 
			
		||||
 | 
			
		||||
    gobject_class->set_property = eek_key_set_property;
 | 
			
		||||
    gobject_class->get_property = eek_key_get_property;
 | 
			
		||||
    gobject_class->finalize     = eek_key_finalize;
 | 
			
		||||
@ -285,9 +281,7 @@ eek_key_class_init (EekKeyClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eek_key_init (EekKey *self)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    priv = self->priv = EEK_KEY_GET_PRIVATE(self);
 | 
			
		||||
    EekKeyPrivate *priv = eek_key_get_instance_private (self);
 | 
			
		||||
    priv->symbol_matrix = eek_symbol_matrix_new (0, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -307,7 +301,10 @@ eek_key_set_keycode (EekKey *key,
 | 
			
		||||
                     guint   keycode)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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));
 | 
			
		||||
 | 
			
		||||
    eek_symbol_matrix_free (key->priv->symbol_matrix);
 | 
			
		||||
    key->priv->symbol_matrix = eek_symbol_matrix_copy (matrix);
 | 
			
		||||
    EekKeyPrivate *priv = eek_key_get_instance_private (key);
 | 
			
		||||
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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_level)
 | 
			
		||||
{
 | 
			
		||||
    EekKeyPrivate *priv = EEK_KEY_GET_PRIVATE(key);
 | 
			
		||||
    EekKeyPrivate *priv = eek_key_get_instance_private (key);
 | 
			
		||||
    gint num_symbols;
 | 
			
		||||
 | 
			
		||||
    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 <= row);
 | 
			
		||||
 | 
			
		||||
    if (key->priv->column != column) {
 | 
			
		||||
        key->priv->column = column;
 | 
			
		||||
    EekKeyPrivate *priv = eek_key_get_instance_private (key);
 | 
			
		||||
 | 
			
		||||
    if (priv->column != column) {
 | 
			
		||||
        priv->column = column;
 | 
			
		||||
        g_object_notify (G_OBJECT(key), "column");
 | 
			
		||||
    }
 | 
			
		||||
    if (key->priv->row != row) {
 | 
			
		||||
        key->priv->row = row;
 | 
			
		||||
    if (priv->row != row) {
 | 
			
		||||
        priv->row = 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 (column != NULL || row != NULL);
 | 
			
		||||
 | 
			
		||||
    EekKeyPrivate *priv = eek_key_get_instance_private (key);
 | 
			
		||||
 | 
			
		||||
    if (column != NULL)
 | 
			
		||||
        *column = key->priv->column;
 | 
			
		||||
        *column = priv->column;
 | 
			
		||||
    if (row != NULL)
 | 
			
		||||
        *row = key->priv->row;
 | 
			
		||||
        *row = priv->row;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -536,8 +545,11 @@ eek_key_set_oref (EekKey *key,
 | 
			
		||||
                  guint   oref)
 | 
			
		||||
{
 | 
			
		||||
    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");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -553,7 +565,10 @@ guint
 | 
			
		||||
eek_key_get_oref (EekKey *key)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
#define EEK_TYPE_KEY (eek_key_get_type())
 | 
			
		||||
#define EEK_KEY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_KEY, EekKey))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE(EekKey, eek_key, EEK, KEY, EekElement)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekKeyClass:
 | 
			
		||||
 | 
			
		||||
@ -50,9 +50,10 @@
 | 
			
		||||
#define EEK_KEYSYM_Hyper_L 0xffed
 | 
			
		||||
#define EEK_KEYSYM_Hyper_R 0xffee
 | 
			
		||||
 | 
			
		||||
struct _EekKeysymPrivate {
 | 
			
		||||
typedef struct _EekKeysymPrivate
 | 
			
		||||
{
 | 
			
		||||
    guint xkeysym;
 | 
			
		||||
};
 | 
			
		||||
} EekKeysymPrivate;
 | 
			
		||||
 | 
			
		||||
struct _EekKeysymEntry {
 | 
			
		||||
    guint xkeysym;
 | 
			
		||||
@ -68,12 +69,11 @@ typedef struct _EekKeysymEntry EekKeysymEntry;
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
                                                eek_serializable_iface_init));
 | 
			
		||||
 | 
			
		||||
#define EEK_KEYSYM_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_KEYSYM, EekKeysymPrivate))
 | 
			
		||||
                                               eek_serializable_iface_init))
 | 
			
		||||
 | 
			
		||||
static EekSerializableIface *eek_keysym_parent_serializable_iface;
 | 
			
		||||
 | 
			
		||||
@ -81,7 +81,8 @@ static void
 | 
			
		||||
eek_keysym_real_serialize (EekSerializable *self,
 | 
			
		||||
                           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);
 | 
			
		||||
 | 
			
		||||
@ -93,7 +94,8 @@ eek_keysym_real_deserialize (EekSerializable *self,
 | 
			
		||||
                             GVariant        *variant,
 | 
			
		||||
                             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,
 | 
			
		||||
                                                               variant,
 | 
			
		||||
@ -200,15 +202,13 @@ get_modifier_mask (guint xkeysym)
 | 
			
		||||
static void
 | 
			
		||||
eek_keysym_class_init (EekKeysymClass *klass)
 | 
			
		||||
{
 | 
			
		||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class, sizeof (EekKeysymPrivate));
 | 
			
		||||
    /* void */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    priv = EEK_KEYSYM_GET_PRIVATE(keysym);
 | 
			
		||||
    priv = eek_keysym_get_instance_private (keysym);
 | 
			
		||||
    priv->xkeysym = xkeysym;
 | 
			
		||||
 | 
			
		||||
    return keysym;
 | 
			
		||||
@ -345,6 +345,6 @@ eek_keysym_get_xkeysym (EekKeysym *keysym)
 | 
			
		||||
    EekKeysymPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    g_assert (EEK_IS_KEYSYM(keysym));
 | 
			
		||||
    priv = EEK_KEYSYM_GET_PRIVATE(keysym);
 | 
			
		||||
    priv = eek_keysym_get_instance_private (keysym);
 | 
			
		||||
    return priv->xkeysym;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -38,27 +38,7 @@ G_BEGIN_DECLS
 | 
			
		||||
#define EEK_INVALID_KEYSYM (0)
 | 
			
		||||
 | 
			
		||||
#define EEK_TYPE_KEYSYM (eek_keysym_get_type())
 | 
			
		||||
#define EEK_KEYSYM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_KEYSYM, EekKeysym))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekKeysym, eek_keysym, EEK, KEYSYM, EekSymbol)
 | 
			
		||||
 | 
			
		||||
struct _EekKeysymClass {
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
 | 
			
		||||
@ -34,7 +34,7 @@
 | 
			
		||||
#include "eek-keyboard.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
 | 
			
		||||
eek_layout_class_init (EekLayoutClass *klass)
 | 
			
		||||
 | 
			
		||||
@ -31,20 +31,7 @@
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define EEK_TYPE_LAYOUT (eek_layout_get_type())
 | 
			
		||||
#define EEK_LAYOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_LAYOUT, EekLayout))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekLayout, eek_layout, EEK, LAYOUT, GObject)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekLayoutClass:
 | 
			
		||||
 | 
			
		||||
@ -36,12 +36,7 @@ enum {
 | 
			
		||||
    PROP_LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (EekRenderer, eek_renderer, G_TYPE_OBJECT);
 | 
			
		||||
 | 
			
		||||
#define EEK_RENDERER_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_RENDERER, EekRendererPrivate))
 | 
			
		||||
 | 
			
		||||
struct _EekRendererPrivate
 | 
			
		||||
typedef struct _EekRendererPrivate
 | 
			
		||||
{
 | 
			
		||||
    EekKeyboard *keyboard;
 | 
			
		||||
    PangoContext *pcontext;
 | 
			
		||||
@ -62,7 +57,9 @@ struct _EekRendererPrivate
 | 
			
		||||
    gulong symbol_index_changed_handler;
 | 
			
		||||
 | 
			
		||||
    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_BACKGROUND_COLOR = {1.0, 1.0, 1.0, 1.0};
 | 
			
		||||
@ -106,7 +103,7 @@ create_keyboard_surface_key_callback (EekElement *element,
 | 
			
		||||
                                      gpointer    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;
 | 
			
		||||
 | 
			
		||||
    cairo_save (data->cr);
 | 
			
		||||
@ -129,7 +126,7 @@ create_keyboard_surface_section_callback (EekElement *element,
 | 
			
		||||
                                          gpointer    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;
 | 
			
		||||
    gint angle;
 | 
			
		||||
 | 
			
		||||
@ -151,7 +148,7 @@ create_keyboard_surface_section_callback (EekElement *element,
 | 
			
		||||
static cairo_surface_t *
 | 
			
		||||
create_keyboard_surface (EekRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    cairo_surface_t *keyboard_surface;
 | 
			
		||||
    CreateKeyboardSurfaceCallbackData data;
 | 
			
		||||
@ -202,7 +199,7 @@ render_key_outline (EekRenderer *renderer,
 | 
			
		||||
                    EekKey      *key,
 | 
			
		||||
                    gboolean     active)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
    EekOutline *outline;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    guint oref;
 | 
			
		||||
@ -351,7 +348,7 @@ static void
 | 
			
		||||
calculate_font_size_key_callback (EekElement *element, gpointer 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;
 | 
			
		||||
    PangoFontDescription *font;
 | 
			
		||||
    PangoRectangle extents = { 0, };
 | 
			
		||||
@ -411,7 +408,7 @@ calculate_font_size (EekRenderer                *renderer,
 | 
			
		||||
                     const PangoFontDescription *base_font,
 | 
			
		||||
                     gboolean                    ascii)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(renderer);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
    CalculateFontSizeCallbackData data;
 | 
			
		||||
 | 
			
		||||
    data.size = G_MAXDOUBLE;
 | 
			
		||||
@ -430,7 +427,7 @@ render_key (EekRenderer *self,
 | 
			
		||||
            EekKey      *key,
 | 
			
		||||
            gboolean     active)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
 | 
			
		||||
    EekOutline *outline;
 | 
			
		||||
    cairo_surface_t *outline_surface;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
@ -603,7 +600,7 @@ eek_renderer_real_render_key_label (EekRenderer *self,
 | 
			
		||||
                                    PangoLayout *layout,
 | 
			
		||||
                                    EekKey      *key)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
 | 
			
		||||
    EekSymbol *symbol;
 | 
			
		||||
    EekSymbolCategory category;
 | 
			
		||||
    const gchar *label;
 | 
			
		||||
@ -696,7 +693,7 @@ static void
 | 
			
		||||
eek_renderer_real_render_keyboard (EekRenderer *self,
 | 
			
		||||
                                   cairo_t     *cr)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(self);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (self);
 | 
			
		||||
    cairo_pattern_t *source;
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (priv->keyboard);
 | 
			
		||||
@ -718,7 +715,8 @@ eek_renderer_set_property (GObject      *object,
 | 
			
		||||
                           const GValue *value,
 | 
			
		||||
                           GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (
 | 
			
		||||
		    EEK_RENDERER(object));
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_KEYBOARD:
 | 
			
		||||
@ -746,7 +744,8 @@ eek_renderer_get_property (GObject    *object,
 | 
			
		||||
                           GValue     *value,
 | 
			
		||||
                           GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekRendererPrivate *priv = EEK_RENDERER_GET_PRIVATE(object);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (
 | 
			
		||||
		    EEK_RENDERER(object));
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_KEYBOARD:
 | 
			
		||||
@ -761,7 +760,8 @@ eek_renderer_get_property (GObject    *object,
 | 
			
		||||
static void
 | 
			
		||||
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 (g_signal_handler_is_connected (priv->keyboard,
 | 
			
		||||
@ -785,7 +785,9 @@ eek_renderer_dispose (GObject *object)
 | 
			
		||||
static void
 | 
			
		||||
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->active_outline_surface_cache);
 | 
			
		||||
    pango_font_description_free (priv->ascii_font);
 | 
			
		||||
@ -799,9 +801,6 @@ eek_renderer_class_init (EekRendererClass *klass)
 | 
			
		||||
    GObjectClass      *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
    GParamSpec        *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekRendererPrivate));
 | 
			
		||||
 | 
			
		||||
    klass->render_key_label = eek_renderer_real_render_key_label;
 | 
			
		||||
    klass->render_key_outline = eek_renderer_real_render_key_outline;
 | 
			
		||||
    klass->render_key = eek_renderer_real_render_key;
 | 
			
		||||
@ -834,9 +833,8 @@ eek_renderer_class_init (EekRendererClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
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->pcontext = NULL;
 | 
			
		||||
    priv->default_foreground_color = DEFAULT_FOREGROUND_COLOR;
 | 
			
		||||
@ -863,15 +861,17 @@ eek_renderer_init (EekRenderer *self)
 | 
			
		||||
static void
 | 
			
		||||
invalidate (EekRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
    if (renderer->priv->outline_surface_cache)
 | 
			
		||||
        g_hash_table_remove_all (renderer->priv->outline_surface_cache);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
    if (renderer->priv->active_outline_surface_cache)
 | 
			
		||||
        g_hash_table_remove_all (renderer->priv->active_outline_surface_cache);
 | 
			
		||||
    if (priv->outline_surface_cache)
 | 
			
		||||
        g_hash_table_remove_all (priv->outline_surface_cache);
 | 
			
		||||
 | 
			
		||||
    if (renderer->priv->keyboard_surface) {
 | 
			
		||||
        cairo_surface_destroy (renderer->priv->keyboard_surface);
 | 
			
		||||
        renderer->priv->keyboard_surface = NULL;
 | 
			
		||||
    if (priv->active_outline_surface_cache)
 | 
			
		||||
        g_hash_table_remove_all (priv->active_outline_surface_cache);
 | 
			
		||||
 | 
			
		||||
    if (priv->keyboard_surface) {
 | 
			
		||||
        cairo_surface_destroy (priv->keyboard_surface);
 | 
			
		||||
        priv->keyboard_surface = NULL;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -906,10 +906,12 @@ eek_renderer_set_allocation_size (EekRenderer *renderer,
 | 
			
		||||
    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
			
		||||
    g_return_if_fail (width > 0.0 && height > 0.0);
 | 
			
		||||
 | 
			
		||||
    renderer->priv->allocation_width = width;
 | 
			
		||||
    renderer->priv->allocation_height = height;
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
    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)
 | 
			
		||||
        scale = width / bounds.width;
 | 
			
		||||
@ -922,8 +924,8 @@ eek_renderer_set_allocation_size (EekRenderer *renderer,
 | 
			
		||||
            scale = bounds.height / height;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (scale != renderer->priv->scale) {
 | 
			
		||||
        renderer->priv->scale = scale;
 | 
			
		||||
    if (scale != priv->scale) {
 | 
			
		||||
        priv->scale = scale;
 | 
			
		||||
        invalidate (renderer);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -937,11 +939,13 @@ eek_renderer_get_size (EekRenderer *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)
 | 
			
		||||
        *width = bounds.width * renderer->priv->scale;
 | 
			
		||||
        *width = bounds.width * priv->scale;
 | 
			
		||||
    if (height)
 | 
			
		||||
        *height = bounds.height * renderer->priv->scale;
 | 
			
		||||
        *height = bounds.height * priv->scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
@ -960,20 +964,22 @@ eek_renderer_get_key_bounds (EekRenderer *renderer,
 | 
			
		||||
    g_return_if_fail (EEK_IS_KEY(key));
 | 
			
		||||
    g_return_if_fail (bounds != NULL);
 | 
			
		||||
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
    section = eek_element_get_parent (EEK_ELEMENT(key));
 | 
			
		||||
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(key), 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);
 | 
			
		||||
 | 
			
		||||
    if (!rotate) {
 | 
			
		||||
        bounds->x += keyboard_bounds.x + section_bounds.x;
 | 
			
		||||
        bounds->y += keyboard_bounds.y + section_bounds.y;
 | 
			
		||||
        bounds->x *= renderer->priv->scale;
 | 
			
		||||
        bounds->y *= renderer->priv->scale;
 | 
			
		||||
        bounds->width *= renderer->priv->scale;
 | 
			
		||||
        bounds->height *= renderer->priv->scale;
 | 
			
		||||
        bounds->x *= priv->scale;
 | 
			
		||||
        bounds->y *= priv->scale;
 | 
			
		||||
        bounds->width *= priv->scale;
 | 
			
		||||
        bounds->height *= priv->scale;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    points[0].x = bounds->x;
 | 
			
		||||
@ -1005,24 +1011,30 @@ eek_renderer_get_key_bounds (EekRenderer *renderer,
 | 
			
		||||
    bounds->y = keyboard_bounds.y + section_bounds.y + min.y;
 | 
			
		||||
    bounds->width = (max.x - min.x);
 | 
			
		||||
    bounds->height = (max.y - min.y);
 | 
			
		||||
    bounds->x *= renderer->priv->scale;
 | 
			
		||||
    bounds->y *= renderer->priv->scale;
 | 
			
		||||
    bounds->width *= renderer->priv->scale;
 | 
			
		||||
    bounds->height *= renderer->priv->scale;
 | 
			
		||||
    bounds->x *= priv->scale;
 | 
			
		||||
    bounds->y *= priv->scale;
 | 
			
		||||
    bounds->width *= priv->scale;
 | 
			
		||||
    bounds->height *= priv->scale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gdouble
 | 
			
		||||
eek_renderer_get_scale (EekRenderer *renderer)
 | 
			
		||||
{
 | 
			
		||||
    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 *
 | 
			
		||||
eek_renderer_create_pango_layout (EekRenderer  *renderer)
 | 
			
		||||
{
 | 
			
		||||
    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
 | 
			
		||||
@ -1100,7 +1112,9 @@ eek_renderer_set_default_foreground_color (EekRenderer    *renderer,
 | 
			
		||||
    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
			
		||||
    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
 | 
			
		||||
@ -1110,7 +1124,9 @@ eek_renderer_set_default_background_color (EekRenderer    *renderer,
 | 
			
		||||
    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
			
		||||
    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
 | 
			
		||||
@ -1123,11 +1139,13 @@ eek_renderer_get_foreground_color (EekRenderer *renderer,
 | 
			
		||||
    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
			
		||||
    g_return_if_fail (color);
 | 
			
		||||
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
    theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
 | 
			
		||||
    if (theme_node)
 | 
			
		||||
        eek_theme_node_get_foreground_color (theme_node, color);
 | 
			
		||||
    else
 | 
			
		||||
        memcpy (color, &renderer->priv->default_foreground_color,
 | 
			
		||||
        memcpy (color, &priv->default_foreground_color,
 | 
			
		||||
                sizeof(EekColor));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1141,11 +1159,13 @@ eek_renderer_get_background_color (EekRenderer *renderer,
 | 
			
		||||
    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
			
		||||
    g_return_if_fail (color);
 | 
			
		||||
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
    theme_node = g_object_get_data (G_OBJECT(element), "theme-node");
 | 
			
		||||
    if (theme_node)
 | 
			
		||||
        eek_theme_node_get_background_color (theme_node, color);
 | 
			
		||||
    else
 | 
			
		||||
        memcpy (color, &renderer->priv->default_background_color,
 | 
			
		||||
        memcpy (color, &priv->default_background_color,
 | 
			
		||||
                sizeof(EekColor));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1208,12 +1228,14 @@ find_key_by_position_key_callback (EekElement *element,
 | 
			
		||||
    points[3].x = points[0].x;
 | 
			
		||||
    points[3].y = points[2].y;
 | 
			
		||||
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
 | 
			
		||||
 | 
			
		||||
    for (i = 0; i < G_N_ELEMENTS(points); i++) {
 | 
			
		||||
        eek_point_rotate (&points[i], data->angle);
 | 
			
		||||
        points[i].x += data->origin.x;
 | 
			
		||||
        points[i].y += data->origin.y;
 | 
			
		||||
        points[i].x *= data->renderer->priv->scale;
 | 
			
		||||
        points[i].y *= data->renderer->priv->scale;
 | 
			
		||||
        points[i].x *= priv->scale;
 | 
			
		||||
        points[i].y *= priv->scale;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    b1 = sign (&data->point, &points[0], &points[1]) < 0.0;
 | 
			
		||||
@ -1268,12 +1290,14 @@ eek_renderer_find_key_by_position (EekRenderer *renderer,
 | 
			
		||||
 | 
			
		||||
    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 ||
 | 
			
		||||
        y < bounds.y * renderer->priv->scale ||
 | 
			
		||||
        x > bounds.width * renderer->priv->scale ||
 | 
			
		||||
        y > bounds.height * renderer->priv->scale)
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(priv->keyboard), &bounds);
 | 
			
		||||
 | 
			
		||||
    if (x < bounds.x * priv->scale ||
 | 
			
		||||
        y < bounds.y * priv->scale ||
 | 
			
		||||
        x > bounds.width * priv->scale ||
 | 
			
		||||
        y > bounds.height * priv->scale)
 | 
			
		||||
        return NULL;
 | 
			
		||||
 | 
			
		||||
    data.point.x = x;
 | 
			
		||||
@ -1283,7 +1307,7 @@ eek_renderer_find_key_by_position (EekRenderer *renderer,
 | 
			
		||||
    data.key = NULL;
 | 
			
		||||
    data.renderer = renderer;
 | 
			
		||||
 | 
			
		||||
    eek_container_find (EEK_CONTAINER(renderer->priv->keyboard),
 | 
			
		||||
    eek_container_find (EEK_CONTAINER(priv->keyboard),
 | 
			
		||||
                        find_key_by_position_section_callback,
 | 
			
		||||
                        &data);
 | 
			
		||||
    return data.key;
 | 
			
		||||
@ -1303,9 +1327,11 @@ create_theme_node_key_callback (EekElement *element,
 | 
			
		||||
    CreateThemeNodeData *data = user_data;
 | 
			
		||||
    EekThemeNode *theme_node;
 | 
			
		||||
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
 | 
			
		||||
 | 
			
		||||
    theme_node = eek_theme_node_new (data->context,
 | 
			
		||||
                                     data->parent,
 | 
			
		||||
                                     data->renderer->priv->theme,
 | 
			
		||||
                                     priv->theme,
 | 
			
		||||
                                     EEK_TYPE_KEY,
 | 
			
		||||
                                     eek_element_get_name (element),
 | 
			
		||||
                                     "key",
 | 
			
		||||
@ -1318,7 +1344,7 @@ create_theme_node_key_callback (EekElement *element,
 | 
			
		||||
 | 
			
		||||
    theme_node = eek_theme_node_new (data->context,
 | 
			
		||||
                                     data->parent,
 | 
			
		||||
                                     data->renderer->priv->theme,
 | 
			
		||||
                                     priv->theme,
 | 
			
		||||
                                     EEK_TYPE_KEY,
 | 
			
		||||
                                     eek_element_get_name (element),
 | 
			
		||||
                                     "key",
 | 
			
		||||
@ -1337,9 +1363,11 @@ create_theme_node_section_callback (EekElement *element,
 | 
			
		||||
    CreateThemeNodeData *data = user_data;
 | 
			
		||||
    EekThemeNode *theme_node, *parent;
 | 
			
		||||
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (data->renderer);
 | 
			
		||||
 | 
			
		||||
    theme_node = eek_theme_node_new (data->context,
 | 
			
		||||
                                     data->parent,
 | 
			
		||||
                                     data->renderer->priv->theme,
 | 
			
		||||
                                     priv->theme,
 | 
			
		||||
                                     EEK_TYPE_SECTION,
 | 
			
		||||
                                     eek_element_get_name (element),
 | 
			
		||||
                                     "section",
 | 
			
		||||
@ -1368,22 +1396,25 @@ eek_renderer_set_theme (EekRenderer *renderer,
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (EEK_IS_RENDERER(renderer));
 | 
			
		||||
    g_return_if_fail (EEK_IS_THEME(theme));
 | 
			
		||||
    g_return_if_fail (renderer->priv->keyboard);
 | 
			
		||||
 | 
			
		||||
    if (renderer->priv->theme)
 | 
			
		||||
        g_object_unref (renderer->priv->theme);
 | 
			
		||||
    renderer->priv->theme = g_object_ref (theme);
 | 
			
		||||
    EekRendererPrivate *priv = eek_renderer_get_instance_private (renderer);
 | 
			
		||||
 | 
			
		||||
    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_node = eek_theme_node_new (theme_context,
 | 
			
		||||
                                     NULL,
 | 
			
		||||
                                     renderer->priv->theme,
 | 
			
		||||
                                     priv->theme,
 | 
			
		||||
                                     EEK_TYPE_KEYBOARD,
 | 
			
		||||
                                     "keyboard",
 | 
			
		||||
                                     "keyboard",
 | 
			
		||||
                                     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,
 | 
			
		||||
                            (GDestroyNotify)g_object_unref);
 | 
			
		||||
@ -1391,7 +1422,7 @@ eek_renderer_set_theme (EekRenderer *renderer,
 | 
			
		||||
    data.context = theme_context;
 | 
			
		||||
    data.parent = theme_node;
 | 
			
		||||
    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,
 | 
			
		||||
                                 &data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -31,21 +31,7 @@
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define EEK_TYPE_RENDERER (eek_renderer_get_type())
 | 
			
		||||
#define EEK_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_RENDERER, EekRenderer))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekRenderer, eek_renderer, EEK, RENDERER, GObject)
 | 
			
		||||
 | 
			
		||||
struct _EekRendererClass
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -52,11 +52,6 @@ enum {
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
{
 | 
			
		||||
    gint num_columns;
 | 
			
		||||
@ -65,17 +60,19 @@ struct _EekRow
 | 
			
		||||
 | 
			
		||||
typedef struct _EekRow EekRow;
 | 
			
		||||
 | 
			
		||||
struct _EekSectionPrivate
 | 
			
		||||
typedef struct _EekSectionPrivate
 | 
			
		||||
{
 | 
			
		||||
    gint angle;
 | 
			
		||||
    GSList *rows;
 | 
			
		||||
    EekModifierType modifiers;
 | 
			
		||||
};
 | 
			
		||||
} EekSectionPrivate;
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (EekSection, eek_section, EEK_TYPE_CONTAINER)
 | 
			
		||||
 | 
			
		||||
static gint
 | 
			
		||||
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);
 | 
			
		||||
}
 | 
			
		||||
@ -85,7 +82,7 @@ eek_section_real_add_row (EekSection    *self,
 | 
			
		||||
                          gint           num_columns,
 | 
			
		||||
                          EekOrientation orientation)
 | 
			
		||||
{
 | 
			
		||||
    EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
 | 
			
		||||
    EekSectionPrivate *priv = eek_section_get_instance_private (self);
 | 
			
		||||
    EekRow *row;
 | 
			
		||||
 | 
			
		||||
    row = g_slice_new (EekRow);
 | 
			
		||||
@ -100,7 +97,7 @@ eek_section_real_get_row (EekSection     *self,
 | 
			
		||||
                          gint           *num_columns,
 | 
			
		||||
                          EekOrientation *orientation)
 | 
			
		||||
{
 | 
			
		||||
    EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
 | 
			
		||||
    EekSectionPrivate *priv = eek_section_get_instance_private (self);
 | 
			
		||||
    EekRow *row;
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
    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)
 | 
			
		||||
        row->num_columns = column_index + 1;
 | 
			
		||||
 | 
			
		||||
@ -158,7 +157,7 @@ eek_section_real_create_key (EekSection *self,
 | 
			
		||||
static void
 | 
			
		||||
set_level_from_modifiers (EekSection *self)
 | 
			
		||||
{
 | 
			
		||||
    EekSectionPrivate *priv = EEK_SECTION_GET_PRIVATE(self);
 | 
			
		||||
    EekSectionPrivate *priv = eek_section_get_instance_private (self);
 | 
			
		||||
    EekKeyboard *keyboard;
 | 
			
		||||
    EekModifierType num_lock_mask;
 | 
			
		||||
    gint level = -1;
 | 
			
		||||
@ -173,7 +172,7 @@ set_level_from_modifiers (EekSection *self)
 | 
			
		||||
static void
 | 
			
		||||
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;
 | 
			
		||||
    EekKeyboard *keyboard;
 | 
			
		||||
    EekModifierBehavior behavior;
 | 
			
		||||
@ -195,7 +194,7 @@ eek_section_real_key_pressed (EekSection *self, EekKey *key)
 | 
			
		||||
static void
 | 
			
		||||
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;
 | 
			
		||||
    EekKeyboard *keyboard;
 | 
			
		||||
    EekModifierBehavior behavior;
 | 
			
		||||
@ -225,7 +224,8 @@ eek_section_real_key_released (EekSection *self, EekKey *key)
 | 
			
		||||
static void
 | 
			
		||||
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;
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
    GParamSpec        *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class, sizeof (EekSectionPrivate));
 | 
			
		||||
 | 
			
		||||
    klass->get_n_rows = eek_section_real_get_n_rows;
 | 
			
		||||
    klass->add_row = eek_section_real_add_row;
 | 
			
		||||
    klass->get_row = eek_section_real_get_row;
 | 
			
		||||
@ -367,7 +365,7 @@ eek_section_class_init (EekSectionClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
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)
 | 
			
		||||
{
 | 
			
		||||
    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");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -398,7 +399,10 @@ gint
 | 
			
		||||
eek_section_get_angle (EekSection *section)
 | 
			
		||||
{
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
#define EEK_TYPE_SECTION (eek_section_get_type())
 | 
			
		||||
#define EEK_SECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_SECTION, EekSection))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE(EekSection, eek_section, EEK, SECTION, EekContainer)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekSectionClass:
 | 
			
		||||
 | 
			
		||||
@ -44,29 +44,31 @@ enum {
 | 
			
		||||
    PROP_LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _EekSymbolPrivate {
 | 
			
		||||
typedef struct _EekSymbolPrivate
 | 
			
		||||
{
 | 
			
		||||
    gchar *name;
 | 
			
		||||
    gchar *label;
 | 
			
		||||
    EekSymbolCategory category;
 | 
			
		||||
    EekModifierType modifier_mask;
 | 
			
		||||
    gchar *icon_name;
 | 
			
		||||
    gchar *tooltip;
 | 
			
		||||
};
 | 
			
		||||
} EekSymbolPrivate;
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
                                                eek_serializable_iface_init));
 | 
			
		||||
 | 
			
		||||
#define EEK_SYMBOL_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_SYMBOL, EekSymbolPrivate))
 | 
			
		||||
                                               eek_serializable_iface_init))
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eek_symbol_real_serialize (EekSerializable *self,
 | 
			
		||||
                           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) : "")
 | 
			
		||||
    g_variant_builder_add (builder, "s", NOTNULL(priv->name));
 | 
			
		||||
    g_variant_builder_add (builder, "s", NOTNULL(priv->label));
 | 
			
		||||
@ -82,7 +84,7 @@ eek_symbol_real_deserialize (EekSerializable *self,
 | 
			
		||||
                             GVariant        *variant,
 | 
			
		||||
                             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->label);
 | 
			
		||||
@ -172,7 +174,8 @@ eek_symbol_get_property (GObject    *object,
 | 
			
		||||
static void
 | 
			
		||||
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->label);
 | 
			
		||||
@ -187,8 +190,6 @@ eek_symbol_class_init (EekSymbolClass *klass)
 | 
			
		||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
    GParamSpec *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class, sizeof (EekSymbolPrivate));
 | 
			
		||||
 | 
			
		||||
    gobject_class->set_property = eek_symbol_set_property;
 | 
			
		||||
    gobject_class->get_property = eek_symbol_get_property;
 | 
			
		||||
    gobject_class->finalize = eek_symbol_finalize;
 | 
			
		||||
@ -241,9 +242,8 @@ eek_symbol_class_init (EekSymbolClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -270,11 +270,10 @@ void
 | 
			
		||||
eek_symbol_set_name (EekSymbol   *symbol,
 | 
			
		||||
                     const gchar *name)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
    priv->name = g_strdup (name);
 | 
			
		||||
}
 | 
			
		||||
@ -288,11 +287,10 @@ eek_symbol_set_name (EekSymbol   *symbol,
 | 
			
		||||
const gchar *
 | 
			
		||||
eek_symbol_get_name (EekSymbol *symbol)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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')
 | 
			
		||||
        return NULL;
 | 
			
		||||
    return priv->name;
 | 
			
		||||
@ -309,11 +307,10 @@ void
 | 
			
		||||
eek_symbol_set_label (EekSymbol   *symbol,
 | 
			
		||||
                      const gchar *label)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
    priv->label = g_strdup (label);
 | 
			
		||||
}
 | 
			
		||||
@ -327,11 +324,10 @@ eek_symbol_set_label (EekSymbol   *symbol,
 | 
			
		||||
const gchar *
 | 
			
		||||
eek_symbol_get_label (EekSymbol *symbol)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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')
 | 
			
		||||
        return NULL;
 | 
			
		||||
    return priv->label;
 | 
			
		||||
@ -348,11 +344,10 @@ void
 | 
			
		||||
eek_symbol_set_category (EekSymbol        *symbol,
 | 
			
		||||
                         EekSymbolCategory category)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -365,11 +360,10 @@ eek_symbol_set_category (EekSymbol        *symbol,
 | 
			
		||||
EekSymbolCategory
 | 
			
		||||
eek_symbol_get_category (EekSymbol *symbol)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -384,11 +378,10 @@ void
 | 
			
		||||
eek_symbol_set_modifier_mask (EekSymbol      *symbol,
 | 
			
		||||
                              EekModifierType mask)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -401,11 +394,10 @@ eek_symbol_set_modifier_mask (EekSymbol      *symbol,
 | 
			
		||||
EekModifierType
 | 
			
		||||
eek_symbol_get_modifier_mask (EekSymbol *symbol)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -433,11 +425,10 @@ void
 | 
			
		||||
eek_symbol_set_icon_name (EekSymbol   *symbol,
 | 
			
		||||
                          const gchar *icon_name)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
    priv->icon_name = g_strdup (icon_name);
 | 
			
		||||
}
 | 
			
		||||
@ -451,11 +442,10 @@ eek_symbol_set_icon_name (EekSymbol   *symbol,
 | 
			
		||||
const gchar *
 | 
			
		||||
eek_symbol_get_icon_name (EekSymbol *symbol)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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')
 | 
			
		||||
        return NULL;
 | 
			
		||||
    return priv->icon_name;
 | 
			
		||||
@ -472,11 +462,10 @@ void
 | 
			
		||||
eek_symbol_set_tooltip (EekSymbol   *symbol,
 | 
			
		||||
                        const gchar *tooltip)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
    priv->tooltip = g_strdup (tooltip);
 | 
			
		||||
}
 | 
			
		||||
@ -490,11 +479,10 @@ eek_symbol_set_tooltip (EekSymbol   *symbol,
 | 
			
		||||
const gchar *
 | 
			
		||||
eek_symbol_get_tooltip (EekSymbol *symbol)
 | 
			
		||||
{
 | 
			
		||||
    EekSymbolPrivate *priv;
 | 
			
		||||
 | 
			
		||||
    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')
 | 
			
		||||
        return NULL;
 | 
			
		||||
    return priv->tooltip;
 | 
			
		||||
 | 
			
		||||
@ -59,27 +59,7 @@ typedef enum {
 | 
			
		||||
} EekSymbolCategory;
 | 
			
		||||
 | 
			
		||||
#define EEK_TYPE_SYMBOL (eek_symbol_get_type())
 | 
			
		||||
#define EEK_SYMBOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_SYMBOL, EekSymbol))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE(EekSymbol, eek_symbol, EEK, SYMBOL, GObject)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekSymbolClass:
 | 
			
		||||
 | 
			
		||||
@ -36,18 +36,20 @@ enum {
 | 
			
		||||
    PROP_LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _EekTextPrivate {
 | 
			
		||||
typedef struct _EekTextPrivate
 | 
			
		||||
{
 | 
			
		||||
    gchar *text;
 | 
			
		||||
};
 | 
			
		||||
} EekTextPrivate;
 | 
			
		||||
 | 
			
		||||
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,
 | 
			
		||||
                                                eek_serializable_iface_init));
 | 
			
		||||
 | 
			
		||||
#define EEK_TEXT_GET_PRIVATE(obj)                                  \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEK_TYPE_TEXT, EekTextPrivate))
 | 
			
		||||
                                               eek_serializable_iface_init))
 | 
			
		||||
 | 
			
		||||
static EekSerializableIface *eek_text_parent_serializable_iface;
 | 
			
		||||
 | 
			
		||||
@ -55,7 +57,7 @@ static void
 | 
			
		||||
eek_text_real_serialize (EekSerializable *self,
 | 
			
		||||
                         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);
 | 
			
		||||
 | 
			
		||||
@ -67,7 +69,7 @@ eek_text_real_deserialize (EekSerializable *self,
 | 
			
		||||
                           GVariant        *variant,
 | 
			
		||||
                           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,
 | 
			
		||||
                                                             variant,
 | 
			
		||||
@ -93,7 +95,9 @@ eek_text_set_property (GObject      *object,
 | 
			
		||||
                       const GValue *value,
 | 
			
		||||
                       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) {
 | 
			
		||||
    case PROP_TEXT:
 | 
			
		||||
        g_free (priv->text);
 | 
			
		||||
@ -111,7 +115,9 @@ eek_text_get_property (GObject    *object,
 | 
			
		||||
                       GValue     *value,
 | 
			
		||||
                       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) {
 | 
			
		||||
    case PROP_TEXT:
 | 
			
		||||
        g_value_set_string (value, priv->text);
 | 
			
		||||
@ -125,7 +131,8 @@ eek_text_get_property (GObject    *object,
 | 
			
		||||
static void
 | 
			
		||||
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_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);
 | 
			
		||||
    GParamSpec *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class, sizeof (EekTextPrivate));
 | 
			
		||||
 | 
			
		||||
    gobject_class->set_property = eek_text_set_property;
 | 
			
		||||
    gobject_class->get_property = eek_text_get_property;
 | 
			
		||||
    gobject_class->finalize = eek_text_finalize;
 | 
			
		||||
@ -154,7 +159,7 @@ eek_text_class_init (EekTextClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eek_text_init (EekText *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEK_TEXT_GET_PRIVATE(self);
 | 
			
		||||
    /* void */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EekText *
 | 
			
		||||
@ -176,7 +181,7 @@ eek_text_new (const gchar *text)
 | 
			
		||||
const gchar *
 | 
			
		||||
eek_text_get_text (EekText *text)
 | 
			
		||||
{
 | 
			
		||||
    EekTextPrivate *priv = EEK_TEXT_GET_PRIVATE(text);
 | 
			
		||||
    EekTextPrivate *priv = eek_text_get_instance_private (text);
 | 
			
		||||
 | 
			
		||||
    return priv->text;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -30,27 +30,7 @@
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define EEK_TYPE_TEXT (eek_text_get_type())
 | 
			
		||||
#define EEK_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEK_TYPE_TEXT, EekText))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE(EekText, eek_text, EEK, TEXT, EekSymbol)
 | 
			
		||||
 | 
			
		||||
struct _EekTextClass {
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
 | 
			
		||||
@ -52,20 +52,13 @@
 | 
			
		||||
 | 
			
		||||
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 {
 | 
			
		||||
    PROP_0,
 | 
			
		||||
    PROP_DISPLAY,
 | 
			
		||||
    PROP_LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _EekXkbLayoutPrivate
 | 
			
		||||
typedef struct _EekXkbLayoutPrivate
 | 
			
		||||
{
 | 
			
		||||
    /* Configuration names that should synch'ed to the symbolic names
 | 
			
		||||
       in priv->xkb->names.  Since we use GLib's memory allocator,
 | 
			
		||||
@ -82,7 +75,13 @@ struct _EekXkbLayoutPrivate
 | 
			
		||||
 | 
			
		||||
    gint scale_numerator;
 | 
			
		||||
    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,
 | 
			
		||||
                                          gchar        *key_name);
 | 
			
		||||
@ -101,7 +100,7 @@ G_INLINE_FUNC gint
 | 
			
		||||
xkb_to_pixmap_coord (EekXkbLayout *layout,
 | 
			
		||||
                     gint          n)
 | 
			
		||||
{
 | 
			
		||||
    EekXkbLayoutPrivate *priv = layout->priv;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
    return n * priv->scale_numerator / priv->scale_denominator;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -109,7 +108,7 @@ G_INLINE_FUNC gdouble
 | 
			
		||||
xkb_to_pixmap_double (EekXkbLayout *layout,
 | 
			
		||||
                     gdouble       d)
 | 
			
		||||
{
 | 
			
		||||
    EekXkbLayoutPrivate *priv = layout->priv;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
    return d * priv->scale_numerator / priv->scale_denominator;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -127,7 +126,7 @@ create_key (EekXkbLayout *layout,
 | 
			
		||||
    XkbBoundsRec *xkbbounds;
 | 
			
		||||
    XkbShapeRec *xkbshape;
 | 
			
		||||
    XkbOutlineRec *xkboutline;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = layout->priv;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
    EekKey *key;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    EekSymbolMatrix *matrix = NULL;
 | 
			
		||||
@ -237,7 +236,7 @@ create_section (EekXkbLayout  *layout,
 | 
			
		||||
                XkbSectionRec *xkbsection)
 | 
			
		||||
{
 | 
			
		||||
    XkbGeometryRec *xkbgeometry;
 | 
			
		||||
    EekXkbLayoutPrivate *priv;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
    EekSection *section;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    gchar *name;
 | 
			
		||||
@ -249,7 +248,6 @@ create_section (EekXkbLayout  *layout,
 | 
			
		||||
    bounds.width = xkb_to_pixmap_coord(layout, xkbsection->width);
 | 
			
		||||
    bounds.height = xkb_to_pixmap_coord(layout, xkbsection->height);
 | 
			
		||||
 | 
			
		||||
    priv = layout->priv;
 | 
			
		||||
    xkbgeometry = priv->xkb->geom;
 | 
			
		||||
    section = eek_keyboard_create_section (keyboard);
 | 
			
		||||
    name = XGetAtomName (priv->display, xkbsection->name);
 | 
			
		||||
@ -293,7 +291,7 @@ create_section (EekXkbLayout  *layout,
 | 
			
		||||
static void
 | 
			
		||||
create_keyboard (EekXkbLayout *layout, EekKeyboard *keyboard)
 | 
			
		||||
{
 | 
			
		||||
    EekXkbLayoutPrivate *priv = layout->priv;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
    XkbGeometryRec *xkbgeometry;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
    gint i;
 | 
			
		||||
@ -337,7 +335,8 @@ eek_xkb_layout_real_create_keyboard (EekboardContextService *manager,
 | 
			
		||||
    eek_element_set_bounds (EEK_ELEMENT(keyboard), &bounds);
 | 
			
		||||
 | 
			
		||||
    /* 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,
 | 
			
		||||
                                    XkbKeysymToModifiers (priv->display,
 | 
			
		||||
                                                          XK_Num_Lock));
 | 
			
		||||
@ -358,7 +357,8 @@ eek_xkb_layout_real_create_keyboard (EekboardContextService *manager,
 | 
			
		||||
static void
 | 
			
		||||
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.geometry);
 | 
			
		||||
@ -374,10 +374,11 @@ eek_xkb_layout_set_property (GObject      *object,
 | 
			
		||||
                             GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_DISPLAY:
 | 
			
		||||
        layout->priv->display = g_value_get_pointer (value);
 | 
			
		||||
        priv->display = g_value_get_pointer (value);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
@ -392,10 +393,11 @@ eek_xkb_layout_get_property (GObject    *object,
 | 
			
		||||
                             GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekXkbLayout *layout = EEK_XKB_LAYOUT (object);
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_DISPLAY:
 | 
			
		||||
        g_value_set_pointer (value, layout->priv->display);
 | 
			
		||||
        g_value_set_pointer (value, priv->display);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        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);
 | 
			
		||||
    GParamSpec *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class, sizeof (EekXkbLayoutPrivate));
 | 
			
		||||
 | 
			
		||||
    layout_class->create_keyboard = eek_xkb_layout_real_create_keyboard;
 | 
			
		||||
 | 
			
		||||
    gobject_class->finalize = eek_xkb_layout_finalize;
 | 
			
		||||
@ -429,14 +429,14 @@ eek_xkb_layout_class_init (EekXkbLayoutClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eek_xkb_layout_init (EekXkbLayout *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEK_XKB_LAYOUT_GET_PRIVATE (self);
 | 
			
		||||
    /* void */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static gboolean
 | 
			
		||||
get_names_from_server (EekXkbLayout *layout,
 | 
			
		||||
                       GError      **error)
 | 
			
		||||
{
 | 
			
		||||
    EekXkbLayoutPrivate *priv = layout->priv;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
    gchar *name;
 | 
			
		||||
 | 
			
		||||
    XkbGetNames (priv->display, XkbAllNamesMask, priv->xkb);
 | 
			
		||||
@ -516,19 +516,21 @@ eek_xkb_layout_set_names (EekXkbLayout         *layout,
 | 
			
		||||
                          XkbComponentNamesRec *names,
 | 
			
		||||
                          GError              **error)
 | 
			
		||||
{
 | 
			
		||||
    if (g_strcmp0 (names->keycodes, layout->priv->names.keycodes)) {
 | 
			
		||||
        g_free (layout->priv->names.keycodes);
 | 
			
		||||
        layout->priv->names.keycodes = g_strdup (names->keycodes);
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
 | 
			
		||||
    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)) {
 | 
			
		||||
        g_free (layout->priv->names.geometry);
 | 
			
		||||
        layout->priv->names.geometry = g_strdup (names->geometry);
 | 
			
		||||
    if (g_strcmp0 (names->geometry, priv->names.geometry)) {
 | 
			
		||||
        g_free (priv->names.geometry);
 | 
			
		||||
        priv->names.geometry = g_strdup (names->geometry);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (g_strcmp0 (names->symbols, layout->priv->names.symbols)) {
 | 
			
		||||
        g_free (layout->priv->names.symbols);
 | 
			
		||||
        layout->priv->names.symbols = g_strdup (names->symbols);
 | 
			
		||||
    if (g_strcmp0 (names->symbols, priv->names.symbols)) {
 | 
			
		||||
        g_free (priv->names.symbols);
 | 
			
		||||
        priv->names.symbols = g_strdup (names->symbols);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return get_keyboard_from_server (layout, error);
 | 
			
		||||
@ -538,7 +540,7 @@ static gboolean
 | 
			
		||||
get_keyboard_from_server (EekXkbLayout *layout,
 | 
			
		||||
                          GError      **error)
 | 
			
		||||
{
 | 
			
		||||
    EekXkbLayoutPrivate *priv = layout->priv;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
 | 
			
		||||
    if (priv->xkb) {
 | 
			
		||||
        XkbFreeKeyboard (priv->xkb, 0, True);
 | 
			
		||||
@ -589,7 +591,7 @@ find_keycode (EekXkbLayout *layout, gchar *key_name)
 | 
			
		||||
    XkbKeyAliasPtr palias;
 | 
			
		||||
    guint is_name_matched;
 | 
			
		||||
    gchar *src, *dst;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = layout->priv;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
 | 
			
		||||
    if (!priv->xkb)
 | 
			
		||||
        return EEK_INVALID_KEYCODE;
 | 
			
		||||
@ -642,7 +644,7 @@ setup_scaling (EekXkbLayout *layout,
 | 
			
		||||
               gdouble       width,
 | 
			
		||||
               gdouble       height)
 | 
			
		||||
{
 | 
			
		||||
    EekXkbLayoutPrivate *priv = layout->priv;
 | 
			
		||||
    EekXkbLayoutPrivate *priv = eek_xkb_layout_get_instance_private (layout);
 | 
			
		||||
 | 
			
		||||
    g_return_if_fail (priv->xkb);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -31,23 +31,7 @@
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#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))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekXkbLayout, eek_xkb_layout, EEK, XKB_LAYOUT, EekLayout)
 | 
			
		||||
 | 
			
		||||
struct _EekXkbLayoutClass
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -42,13 +42,6 @@ static GInitableIface *parent_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 {
 | 
			
		||||
    PROP_0,
 | 
			
		||||
    PROP_MODEL,
 | 
			
		||||
@ -58,11 +51,17 @@ enum {
 | 
			
		||||
    PROP_LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct _EekXklLayoutPrivate
 | 
			
		||||
typedef struct _EekXklLayoutPrivate
 | 
			
		||||
{
 | 
			
		||||
    XklEngine *engine;
 | 
			
		||||
    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:
 | 
			
		||||
 *  BAD STYLE: Taken from xklavier_private_xkb.h
 | 
			
		||||
@ -83,7 +82,8 @@ static gboolean set_xkb_component_names (EekXklLayout *layout,
 | 
			
		||||
static void
 | 
			
		||||
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) {
 | 
			
		||||
        g_object_unref (priv->config);
 | 
			
		||||
@ -157,8 +157,6 @@ eek_xkl_layout_class_init (EekXklLayoutClass *klass)
 | 
			
		||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
    GParamSpec *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class, sizeof (EekXklLayoutPrivate));
 | 
			
		||||
 | 
			
		||||
    gobject_class->dispose = eek_xkl_layout_dispose;
 | 
			
		||||
    gobject_class->set_property = eek_xkl_layout_set_property;
 | 
			
		||||
    gobject_class->get_property = eek_xkl_layout_get_property;
 | 
			
		||||
@ -215,7 +213,7 @@ eek_xkl_layout_class_init (EekXklLayoutClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
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,
 | 
			
		||||
                           XklConfigRec *config)
 | 
			
		||||
{
 | 
			
		||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
			
		||||
    EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
 | 
			
		||||
    XklConfigRec *c;
 | 
			
		||||
    gboolean retval;
 | 
			
		||||
 | 
			
		||||
@ -329,7 +327,7 @@ gboolean
 | 
			
		||||
eek_xkl_layout_set_model (EekXklLayout *layout,
 | 
			
		||||
                          const gchar  *model)
 | 
			
		||||
{
 | 
			
		||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
			
		||||
    EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
 | 
			
		||||
    XklConfigRec *config;
 | 
			
		||||
    gboolean retval;
 | 
			
		||||
    
 | 
			
		||||
@ -357,7 +355,7 @@ gboolean
 | 
			
		||||
eek_xkl_layout_set_layouts (EekXklLayout *layout,
 | 
			
		||||
                            gchar       **layouts)
 | 
			
		||||
{
 | 
			
		||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
			
		||||
    EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
 | 
			
		||||
    XklConfigRec *config;
 | 
			
		||||
    gboolean retval;
 | 
			
		||||
 | 
			
		||||
@ -385,7 +383,7 @@ gboolean
 | 
			
		||||
eek_xkl_layout_set_variants (EekXklLayout *layout,
 | 
			
		||||
                             gchar       **variants)
 | 
			
		||||
{
 | 
			
		||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
			
		||||
    EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
 | 
			
		||||
    XklConfigRec *config;
 | 
			
		||||
    gboolean retval;
 | 
			
		||||
 | 
			
		||||
@ -413,7 +411,7 @@ gboolean
 | 
			
		||||
eek_xkl_layout_set_options (EekXklLayout *layout,
 | 
			
		||||
                            gchar       **options)
 | 
			
		||||
{
 | 
			
		||||
    EekXklLayoutPrivate *priv = EEK_XKL_LAYOUT_GET_PRIVATE (layout);
 | 
			
		||||
    EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
 | 
			
		||||
    XklConfigRec *config;
 | 
			
		||||
    gboolean retval;
 | 
			
		||||
 | 
			
		||||
@ -497,7 +495,7 @@ eek_xkl_layout_disable_option (EekXklLayout *layout,
 | 
			
		||||
gchar *
 | 
			
		||||
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);
 | 
			
		||||
    return g_strdup (priv->config->model);
 | 
			
		||||
@ -513,7 +511,7 @@ eek_xkl_layout_get_model (EekXklLayout *layout)
 | 
			
		||||
gchar **
 | 
			
		||||
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);
 | 
			
		||||
    return g_strdupv (priv->config->layouts);
 | 
			
		||||
@ -529,7 +527,7 @@ eek_xkl_layout_get_layouts (EekXklLayout *layout)
 | 
			
		||||
gchar **
 | 
			
		||||
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);
 | 
			
		||||
    return g_strdupv (priv->config->variants);
 | 
			
		||||
@ -545,7 +543,7 @@ eek_xkl_layout_get_variants (EekXklLayout *layout)
 | 
			
		||||
gchar **
 | 
			
		||||
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);
 | 
			
		||||
    return g_strdupv (priv->config->options);
 | 
			
		||||
@ -554,7 +552,7 @@ eek_xkl_layout_get_options (EekXklLayout *layout)
 | 
			
		||||
static gboolean
 | 
			
		||||
set_xkb_component_names (EekXklLayout *layout, XklConfigRec *config)
 | 
			
		||||
{
 | 
			
		||||
    EekXklLayoutPrivate *priv = layout->priv;
 | 
			
		||||
    EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
 | 
			
		||||
    XkbComponentNamesRec names;
 | 
			
		||||
    gboolean retval = FALSE;
 | 
			
		||||
 | 
			
		||||
@ -628,21 +626,22 @@ initable_init (GInitable    *initable,
 | 
			
		||||
               GError      **error)
 | 
			
		||||
{
 | 
			
		||||
    EekXklLayout *layout = EEK_XKL_LAYOUT (initable);
 | 
			
		||||
    EekXklLayoutPrivate *priv = eek_xkl_layout_get_instance_private (layout);
 | 
			
		||||
    Display *display;
 | 
			
		||||
 | 
			
		||||
    if (!parent_initable_iface->init (initable, cancellable, error))
 | 
			
		||||
        return FALSE;
 | 
			
		||||
 | 
			
		||||
    layout->priv->config = xkl_config_rec_new ();
 | 
			
		||||
    priv->config = xkl_config_rec_new ();
 | 
			
		||||
 | 
			
		||||
    g_object_get (G_OBJECT (initable),
 | 
			
		||||
                  "display", &display,
 | 
			
		||||
                  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,
 | 
			
		||||
                                         layout->priv->engine)) {
 | 
			
		||||
    if (!xkl_config_rec_get_from_server (priv->config,
 | 
			
		||||
                                         priv->engine)) {
 | 
			
		||||
        g_set_error (error,
 | 
			
		||||
                     EEK_ERROR,
 | 
			
		||||
                     EEK_ERROR_LAYOUT_ERROR,
 | 
			
		||||
@ -650,7 +649,7 @@ initable_init (GInitable    *initable,
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    set_xkb_component_names (layout, layout->priv->config);
 | 
			
		||||
    set_xkb_component_names (layout, priv->config);
 | 
			
		||||
    return TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -31,23 +31,7 @@
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#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))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekXklLayout, eek_xkl_layout, EEK, XKL_LAYOUT, EekLayout)
 | 
			
		||||
 | 
			
		||||
struct _EekXklLayoutClass
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
@ -43,19 +43,18 @@ enum {
 | 
			
		||||
 | 
			
		||||
static void initable_iface_init (GInitableIface *initable_iface);
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_CODE (EekXmlLayout, eek_xml_layout, EEK_TYPE_LAYOUT,
 | 
			
		||||
                         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
 | 
			
		||||
typedef struct _EekXmlLayoutPrivate
 | 
			
		||||
{
 | 
			
		||||
    gchar *id;
 | 
			
		||||
    gchar *keyboards_dir;
 | 
			
		||||
    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);
 | 
			
		||||
 | 
			
		||||
@ -903,6 +902,7 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager,
 | 
			
		||||
                                     gdouble    initial_height)
 | 
			
		||||
{
 | 
			
		||||
    EekXmlLayout *layout = EEK_XML_LAYOUT (self);
 | 
			
		||||
    EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout);
 | 
			
		||||
    gboolean retval;
 | 
			
		||||
 | 
			
		||||
    /* Create an empty keyboard to which geometry and symbols
 | 
			
		||||
@ -911,8 +911,8 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager,
 | 
			
		||||
    keyboard->manager = manager;
 | 
			
		||||
 | 
			
		||||
    /* Read geometry information. */
 | 
			
		||||
    gchar *filename = g_strdup_printf ("%s.xml", layout->priv->desc->geometry);
 | 
			
		||||
    gchar *path = g_build_filename (layout->priv->keyboards_dir, "geometry", filename, NULL);
 | 
			
		||||
    gchar *filename = g_strdup_printf ("%s.xml", priv->desc->geometry);
 | 
			
		||||
    gchar *path = g_build_filename (priv->keyboards_dir, "geometry", filename, NULL);
 | 
			
		||||
    g_free (filename);
 | 
			
		||||
 | 
			
		||||
    GError *error = NULL;
 | 
			
		||||
@ -921,7 +921,7 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager,
 | 
			
		||||
    if (!retval) {
 | 
			
		||||
        g_object_unref (keyboard);
 | 
			
		||||
        g_warning ("can't parse geometry file %s: %s",
 | 
			
		||||
                   layout->priv->desc->geometry,
 | 
			
		||||
                   priv->desc->geometry,
 | 
			
		||||
                   error->message);
 | 
			
		||||
        g_error_free (error);
 | 
			
		||||
        return NULL;
 | 
			
		||||
@ -929,8 +929,8 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager,
 | 
			
		||||
 | 
			
		||||
    /* Read symbols information. */
 | 
			
		||||
    GList *loaded = NULL;
 | 
			
		||||
    retval = parse_symbols_with_prerequisites (layout->priv->keyboards_dir,
 | 
			
		||||
                                               layout->priv->desc->symbols,
 | 
			
		||||
    retval = parse_symbols_with_prerequisites (priv->keyboards_dir,
 | 
			
		||||
                                               priv->desc->symbols,
 | 
			
		||||
                                               keyboard,
 | 
			
		||||
                                               &loaded,
 | 
			
		||||
                                               &error);
 | 
			
		||||
@ -938,7 +938,7 @@ eek_xml_layout_real_create_keyboard (EekboardContextService *manager,
 | 
			
		||||
    if (!retval) {
 | 
			
		||||
        g_object_unref (keyboard);
 | 
			
		||||
        g_warning ("can't parse symbols file %s: %s",
 | 
			
		||||
                   layout->priv->desc->symbols,
 | 
			
		||||
                   priv->desc->symbols,
 | 
			
		||||
                   error->message);
 | 
			
		||||
        g_error_free (error);
 | 
			
		||||
        return NULL;
 | 
			
		||||
@ -961,10 +961,12 @@ eek_xml_layout_set_property (GObject      *object,
 | 
			
		||||
                             GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekXmlLayout *layout = EEK_XML_LAYOUT (object);
 | 
			
		||||
    EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout);
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_ID:
 | 
			
		||||
        g_free (layout->priv->id);
 | 
			
		||||
        layout->priv->id = g_value_dup_string (value);
 | 
			
		||||
        g_free (priv->id);
 | 
			
		||||
        priv->id = g_value_dup_string (value);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
@ -979,9 +981,11 @@ eek_xml_layout_get_property (GObject    *object,
 | 
			
		||||
                             GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekXmlLayout *layout = EEK_XML_LAYOUT (object);
 | 
			
		||||
    EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout);
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_ID:
 | 
			
		||||
        g_value_set_string (value, layout->priv->id);
 | 
			
		||||
        g_value_set_string (value, priv->id);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
@ -992,7 +996,8 @@ eek_xml_layout_get_property (GObject    *object,
 | 
			
		||||
static void
 | 
			
		||||
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);
 | 
			
		||||
 | 
			
		||||
@ -1011,8 +1016,6 @@ eek_xml_layout_class_init (EekXmlLayoutClass *klass)
 | 
			
		||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
    GParamSpec *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class, sizeof (EekXmlLayoutPrivate));
 | 
			
		||||
 | 
			
		||||
    layout_class->create_keyboard = eek_xml_layout_real_create_keyboard;
 | 
			
		||||
 | 
			
		||||
    gobject_class->set_property = eek_xml_layout_set_property;
 | 
			
		||||
@ -1031,7 +1034,7 @@ eek_xml_layout_class_init (EekXmlLayoutClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eek_xml_layout_init (EekXmlLayout *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEK_XML_LAYOUT_GET_PRIVATE (self);
 | 
			
		||||
    /* void */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
EekLayout *
 | 
			
		||||
@ -1050,16 +1053,17 @@ initable_init (GInitable    *initable,
 | 
			
		||||
               GError      **error)
 | 
			
		||||
{
 | 
			
		||||
    EekXmlLayout *layout = EEK_XML_LAYOUT (initable);
 | 
			
		||||
    EekXmlLayoutPrivate *priv = eek_xml_layout_get_instance_private (layout);
 | 
			
		||||
    GList *keyboards, *p;
 | 
			
		||||
    gchar *path;
 | 
			
		||||
    EekXmlKeyboardDesc *desc;
 | 
			
		||||
 | 
			
		||||
    layout->priv->keyboards_dir = (gchar *) g_getenv ("EEKBOARD_KEYBOARDSDIR");
 | 
			
		||||
    if (layout->priv->keyboards_dir == NULL)
 | 
			
		||||
        layout->priv->keyboards_dir = KEYBOARDSDIR;
 | 
			
		||||
    layout->priv->keyboards_dir = g_strdup (layout->priv->keyboards_dir);
 | 
			
		||||
    priv->keyboards_dir = (gchar *) g_getenv ("EEKBOARD_KEYBOARDSDIR");
 | 
			
		||||
    if (priv->keyboards_dir == NULL)
 | 
			
		||||
        priv->keyboards_dir = KEYBOARDSDIR;
 | 
			
		||||
    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);
 | 
			
		||||
    g_free (path);
 | 
			
		||||
    if (error && *error)
 | 
			
		||||
@ -1067,7 +1071,7 @@ initable_init (GInitable    *initable,
 | 
			
		||||
 | 
			
		||||
    for (p = keyboards; p; p = p->next) {
 | 
			
		||||
        desc = p->data;
 | 
			
		||||
        if (g_strcmp0 (desc->id, layout->priv->id) == 0)
 | 
			
		||||
        if (g_strcmp0 (desc->id, priv->id) == 0)
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    if (p == NULL) {
 | 
			
		||||
@ -1075,12 +1079,12 @@ initable_init (GInitable    *initable,
 | 
			
		||||
                     EEK_ERROR,
 | 
			
		||||
                     EEK_ERROR_LAYOUT_ERROR,
 | 
			
		||||
                     "no such keyboard %s",
 | 
			
		||||
                     layout->priv->id);
 | 
			
		||||
                     priv->id);
 | 
			
		||||
        return FALSE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    keyboards = g_list_remove_link (keyboards, p);
 | 
			
		||||
    layout->priv->desc = p->data;
 | 
			
		||||
    priv->desc = p->data;
 | 
			
		||||
    g_list_free_1 (p);
 | 
			
		||||
    g_list_free_full (keyboards, (GDestroyNotify) keyboard_desc_free);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -29,29 +29,7 @@
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#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))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekXmlLayout, eek_xml_layout, EEK, XML_LAYOUT, EekLayout)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekXmlLayoutClass:
 | 
			
		||||
 | 
			
		||||
@ -38,9 +38,5 @@
 | 
			
		||||
void
 | 
			
		||||
eek_init (void)
 | 
			
		||||
{
 | 
			
		||||
    g_type_init ();
 | 
			
		||||
 | 
			
		||||
    g_type_class_ref (EEK_TYPE_SYMBOL);
 | 
			
		||||
    g_type_class_ref (EEK_TYPE_KEYSYM);
 | 
			
		||||
    g_type_class_ref (EEK_TYPE_TEXT);
 | 
			
		||||
    /* void */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -36,15 +36,12 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0, };
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (EekboardClient, eekboard_client, G_TYPE_DBUS_PROXY);
 | 
			
		||||
 | 
			
		||||
#define EEKBOARD_CLIENT_GET_PRIVATE(obj)                                \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEKBOARD_TYPE_CLIENT, EekboardClientPrivate))
 | 
			
		||||
 | 
			
		||||
struct _EekboardClientPrivate
 | 
			
		||||
typedef struct _EekboardClientPrivate
 | 
			
		||||
{
 | 
			
		||||
    GHashTable *context_hash;
 | 
			
		||||
};
 | 
			
		||||
} EekboardClientPrivate;
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (EekboardClient, eekboard_client, G_TYPE_DBUS_PROXY)
 | 
			
		||||
 | 
			
		||||
static void send_destroy_context (EekboardClient  *client,
 | 
			
		||||
                                  EekboardContext *context,
 | 
			
		||||
@ -53,7 +50,7 @@ static void send_destroy_context (EekboardClient  *client,
 | 
			
		||||
static void
 | 
			
		||||
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_hash_table_remove_all (priv->context_hash);
 | 
			
		||||
@ -63,7 +60,7 @@ static void
 | 
			
		||||
eekboard_client_dispose (GObject *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) {
 | 
			
		||||
        GHashTableIter iter;
 | 
			
		||||
@ -86,9 +83,6 @@ eekboard_client_class_init (EekboardClientClass *klass)
 | 
			
		||||
{
 | 
			
		||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekboardClientPrivate));
 | 
			
		||||
 | 
			
		||||
    klass->destroyed = eekboard_client_real_destroyed;
 | 
			
		||||
 | 
			
		||||
    gobject_class->dispose = eekboard_client_dispose;
 | 
			
		||||
@ -115,8 +109,9 @@ eekboard_client_class_init (EekboardClientClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eekboard_client_init (EekboardClient *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEKBOARD_CLIENT_GET_PRIVATE(self);
 | 
			
		||||
    self->priv->context_hash =
 | 
			
		||||
    EekboardClientPrivate *priv = eekboard_client_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
    priv->context_hash =
 | 
			
		||||
        g_hash_table_new_full (g_str_hash,
 | 
			
		||||
                               g_str_equal,
 | 
			
		||||
                               (GDestroyNotify)g_free,
 | 
			
		||||
@ -189,7 +184,9 @@ on_context_destroyed (EekboardContext *context,
 | 
			
		||||
                      gpointer         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)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -239,7 +236,9 @@ eekboard_client_create_context (EekboardClient *client,
 | 
			
		||||
        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_object_ref (context));
 | 
			
		||||
    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_CONTEXT(context));
 | 
			
		||||
 | 
			
		||||
    EekboardClientPrivate *priv = eekboard_client_get_instance_private (client);
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
    if (!context)
 | 
			
		||||
        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_CONTEXT(context));
 | 
			
		||||
 | 
			
		||||
    EekboardClientPrivate *priv = eekboard_client_get_instance_private (client);
 | 
			
		||||
 | 
			
		||||
    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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -26,22 +26,7 @@
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define EEKBOARD_TYPE_CLIENT (eekboard_client_get_type())
 | 
			
		||||
#define EEKBOARD_CLIENT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEKBOARD_TYPE_CLIENT, EekboardClient))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekboardClient, eekboard_client, EEKBOARD, CLIENT, GDBusProxy)
 | 
			
		||||
 | 
			
		||||
struct _EekboardClientClass {
 | 
			
		||||
    /*< private >*/
 | 
			
		||||
 | 
			
		||||
@ -49,18 +49,15 @@ enum {
 | 
			
		||||
    PROP_LAST
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE (EekboardContext, eekboard_context, G_TYPE_DBUS_PROXY);
 | 
			
		||||
 | 
			
		||||
#define EEKBOARD_CONTEXT_GET_PRIVATE(obj)                               \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEKBOARD_TYPE_CONTEXT, EekboardContextPrivate))
 | 
			
		||||
 | 
			
		||||
struct _EekboardContextPrivate
 | 
			
		||||
typedef struct _EekboardContextPrivate
 | 
			
		||||
{
 | 
			
		||||
    gboolean visible;
 | 
			
		||||
    gboolean enabled;
 | 
			
		||||
    gboolean fullscreen;
 | 
			
		||||
    gint group;
 | 
			
		||||
};
 | 
			
		||||
} EekboardContextPrivate;
 | 
			
		||||
 | 
			
		||||
G_DEFINE_TYPE_WITH_PRIVATE (EekboardContext, eekboard_context, G_TYPE_DBUS_PROXY)
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eekboard_context_real_g_signal (GDBusProxy  *self,
 | 
			
		||||
@ -69,6 +66,7 @@ eekboard_context_real_g_signal (GDBusProxy  *self,
 | 
			
		||||
                                GVariant    *parameters)
 | 
			
		||||
{
 | 
			
		||||
    EekboardContext *context = EEKBOARD_CONTEXT (self);
 | 
			
		||||
    EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
 | 
			
		||||
 | 
			
		||||
    if (g_strcmp0 (signal_name, "Enabled") == 0) {
 | 
			
		||||
        g_signal_emit (context, signals[ENABLED], 0);
 | 
			
		||||
@ -111,8 +109,8 @@ eekboard_context_real_g_signal (GDBusProxy  *self,
 | 
			
		||||
        gboolean visible = FALSE;
 | 
			
		||||
 | 
			
		||||
        g_variant_get (parameters, "(b)", &visible);
 | 
			
		||||
        if (visible != context->priv->visible) {
 | 
			
		||||
            context->priv->visible = visible;
 | 
			
		||||
        if (visible != priv->visible) {
 | 
			
		||||
            priv->visible = visible;
 | 
			
		||||
            g_object_notify (G_OBJECT(context), "visible");
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
@ -122,8 +120,8 @@ eekboard_context_real_g_signal (GDBusProxy  *self,
 | 
			
		||||
        gint group = 0;
 | 
			
		||||
 | 
			
		||||
        g_variant_get (parameters, "(i)", &group);
 | 
			
		||||
        if (group != context->priv->group) {
 | 
			
		||||
            context->priv->group = group;
 | 
			
		||||
        if (group != priv->group) {
 | 
			
		||||
            priv->group = group;
 | 
			
		||||
            /* g_object_notify (G_OBJECT(context), "group"); */
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
@ -135,13 +133,17 @@ eekboard_context_real_g_signal (GDBusProxy  *self,
 | 
			
		||||
static void
 | 
			
		||||
eekboard_context_real_enabled (EekboardContext *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv->enabled = TRUE;
 | 
			
		||||
    EekboardContextPrivate *priv = eekboard_context_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
    priv->enabled = TRUE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
eekboard_context_real_disabled (EekboardContext *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv->enabled = FALSE;
 | 
			
		||||
    EekboardContextPrivate *priv = eekboard_context_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
    priv->enabled = FALSE;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -164,9 +166,11 @@ eekboard_context_get_property (GObject    *object,
 | 
			
		||||
                               GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekboardContext *context = EEKBOARD_CONTEXT(object);
 | 
			
		||||
    EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_VISIBLE:
 | 
			
		||||
        g_value_set_boolean (value, context->priv->visible);
 | 
			
		||||
        g_value_set_boolean (value, priv->visible);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        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);
 | 
			
		||||
    GParamSpec        *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekboardContextPrivate));
 | 
			
		||||
 | 
			
		||||
    klass->enabled = eekboard_context_real_enabled;
 | 
			
		||||
    klass->disabled = eekboard_context_real_disabled;
 | 
			
		||||
    klass->destroyed = eekboard_context_real_destroyed;
 | 
			
		||||
@ -288,7 +289,7 @@ eekboard_context_class_init (EekboardContextClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eekboard_context_init (EekboardContext *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEKBOARD_CONTEXT_GET_PRIVATE(self);
 | 
			
		||||
    /* void */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
@ -485,7 +486,9 @@ eekboard_context_set_group (EekboardContext *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),
 | 
			
		||||
                           "SetGroup",
 | 
			
		||||
                           g_variant_new ("(i)", group),
 | 
			
		||||
@ -509,7 +512,10 @@ eekboard_context_get_group (EekboardContext *context,
 | 
			
		||||
                            GCancellable    *cancellable)
 | 
			
		||||
{
 | 
			
		||||
    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));
 | 
			
		||||
 | 
			
		||||
    if (context->priv->enabled) {
 | 
			
		||||
    EekboardContextPrivate *priv = eekboard_context_get_instance_private (context);
 | 
			
		||||
 | 
			
		||||
    if (priv->enabled) {
 | 
			
		||||
        g_dbus_proxy_call (G_DBUS_PROXY(context),
 | 
			
		||||
                           "ShowKeyboard",
 | 
			
		||||
                           NULL,
 | 
			
		||||
@ -551,7 +559,9 @@ eekboard_context_hide_keyboard (EekboardContext *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),
 | 
			
		||||
                           "HideKeyboard",
 | 
			
		||||
                           NULL,
 | 
			
		||||
@ -578,7 +588,9 @@ eekboard_context_press_keycode (EekboardContext *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),
 | 
			
		||||
                           "PressKeycode",
 | 
			
		||||
                           g_variant_new ("(u)", keycode),
 | 
			
		||||
@ -605,7 +617,9 @@ eekboard_context_release_keycode (EekboardContext *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),
 | 
			
		||||
                           "ReleaseKeycode",
 | 
			
		||||
                           g_variant_new ("(u)", keycode),
 | 
			
		||||
@ -627,7 +641,10 @@ gboolean
 | 
			
		||||
eekboard_context_is_visible (EekboardContext *context)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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)
 | 
			
		||||
{
 | 
			
		||||
    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),
 | 
			
		||||
                           "SetFullscreen",
 | 
			
		||||
                           g_variant_new ("(b)", fullscreen),
 | 
			
		||||
 | 
			
		||||
@ -28,28 +28,7 @@
 | 
			
		||||
G_BEGIN_DECLS
 | 
			
		||||
 | 
			
		||||
#define EEKBOARD_TYPE_CONTEXT (eekboard_context_get_type())
 | 
			
		||||
#define EEKBOARD_CONTEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEKBOARD_TYPE_CONTEXT, EekboardContext))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekboardContext, eekboard_context, EEKBOARD, CONTEXT, GDBusProxy)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekboardContextClass:
 | 
			
		||||
 | 
			
		||||
@ -50,10 +50,8 @@ enum {
 | 
			
		||||
 | 
			
		||||
static guint signals[LAST_SIGNAL] = { 0, };
 | 
			
		||||
 | 
			
		||||
#define EEKBOARD_SERVICE_GET_PRIVATE(obj)                               \
 | 
			
		||||
    (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EEKBOARD_TYPE_SERVICE, EekboardServicePrivate))
 | 
			
		||||
 | 
			
		||||
struct _EekboardServicePrivate {
 | 
			
		||||
typedef struct _EekboardServicePrivate
 | 
			
		||||
{
 | 
			
		||||
    GDBusConnection *connection;
 | 
			
		||||
    SmPuriOSK0 *dbus_interface;
 | 
			
		||||
    GDBusNodeInfo *introspection_data;
 | 
			
		||||
@ -61,9 +59,9 @@ struct _EekboardServicePrivate {
 | 
			
		||||
    char *object_path;
 | 
			
		||||
 | 
			
		||||
    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
 | 
			
		||||
eekboard_service_set_property (GObject      *object,
 | 
			
		||||
@ -72,19 +70,20 @@ eekboard_service_set_property (GObject      *object,
 | 
			
		||||
                               GParamSpec   *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekboardService *service = EEKBOARD_SERVICE(object);
 | 
			
		||||
    EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
 | 
			
		||||
    GDBusConnection *connection;
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_OBJECT_PATH:
 | 
			
		||||
        if (service->priv->object_path)
 | 
			
		||||
            g_free (service->priv->object_path);
 | 
			
		||||
        service->priv->object_path = g_value_dup_string (value);
 | 
			
		||||
        if (priv->object_path)
 | 
			
		||||
            g_free (priv->object_path);
 | 
			
		||||
        priv->object_path = g_value_dup_string (value);
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_CONNECTION:
 | 
			
		||||
        connection = g_value_get_object (value);
 | 
			
		||||
        if (service->priv->connection)
 | 
			
		||||
            g_object_unref (service->priv->connection);
 | 
			
		||||
        service->priv->connection = g_object_ref (connection);
 | 
			
		||||
        if (priv->connection)
 | 
			
		||||
            g_object_unref (priv->connection);
 | 
			
		||||
        priv->connection = g_object_ref (connection);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
@ -99,13 +98,14 @@ eekboard_service_get_property (GObject    *object,
 | 
			
		||||
                               GParamSpec *pspec)
 | 
			
		||||
{
 | 
			
		||||
    EekboardService *service = EEKBOARD_SERVICE(object);
 | 
			
		||||
    EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
 | 
			
		||||
 | 
			
		||||
    switch (prop_id) {
 | 
			
		||||
    case PROP_OBJECT_PATH:
 | 
			
		||||
        g_value_set_string (value, service->priv->object_path);
 | 
			
		||||
        g_value_set_string (value, priv->object_path);
 | 
			
		||||
        break;
 | 
			
		||||
    case PROP_CONNECTION:
 | 
			
		||||
        g_value_set_object (value, service->priv->connection);
 | 
			
		||||
        g_value_set_object (value, priv->connection);
 | 
			
		||||
        break;
 | 
			
		||||
    default:
 | 
			
		||||
        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
 | 
			
		||||
@ -117,20 +117,22 @@ static void
 | 
			
		||||
eekboard_service_dispose (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
    EekboardService *service = EEKBOARD_SERVICE(object);
 | 
			
		||||
    if (service->priv->connection) {
 | 
			
		||||
        if (service->priv->registration_id > 0) {
 | 
			
		||||
            g_dbus_connection_unregister_object (service->priv->connection,
 | 
			
		||||
                                                 service->priv->registration_id);
 | 
			
		||||
            service->priv->registration_id = 0;
 | 
			
		||||
    EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
 | 
			
		||||
 | 
			
		||||
    if (priv->connection) {
 | 
			
		||||
        if (priv->registration_id > 0) {
 | 
			
		||||
            g_dbus_connection_unregister_object (priv->connection,
 | 
			
		||||
                                                 priv->registration_id);
 | 
			
		||||
            priv->registration_id = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        g_object_unref (service->priv->connection);
 | 
			
		||||
        service->priv->connection = NULL;
 | 
			
		||||
        g_object_unref (priv->connection);
 | 
			
		||||
        priv->connection = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (service->priv->introspection_data) {
 | 
			
		||||
        g_dbus_node_info_unref (service->priv->introspection_data);
 | 
			
		||||
        service->priv->introspection_data = NULL;
 | 
			
		||||
    if (priv->introspection_data) {
 | 
			
		||||
        g_dbus_node_info_unref (priv->introspection_data);
 | 
			
		||||
        priv->introspection_data = NULL;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    G_OBJECT_CLASS (eekboard_service_parent_class)->dispose (object);
 | 
			
		||||
@ -140,8 +142,9 @@ static void
 | 
			
		||||
eekboard_service_finalize (GObject *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);
 | 
			
		||||
}
 | 
			
		||||
@ -150,11 +153,13 @@ static gboolean
 | 
			
		||||
handle_set_visible(SmPuriOSK0 *object, GDBusMethodInvocation *invocation,
 | 
			
		||||
                   gboolean arg_visible, gpointer user_data) {
 | 
			
		||||
    EekboardService *service = user_data;
 | 
			
		||||
    if (service->priv->context) {
 | 
			
		||||
    EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
 | 
			
		||||
 | 
			
		||||
    if (priv->context) {
 | 
			
		||||
        if (arg_visible) {
 | 
			
		||||
            eekboard_context_service_show_keyboard (service->priv->context);
 | 
			
		||||
            eekboard_context_service_show_keyboard (priv->context);
 | 
			
		||||
        } else {
 | 
			
		||||
            eekboard_context_service_hide_keyboard (service->priv->context);
 | 
			
		||||
            eekboard_context_service_hide_keyboard (priv->context);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    sm_puri_osk0_complete_set_visible(object, invocation);
 | 
			
		||||
@ -165,18 +170,19 @@ static void
 | 
			
		||||
eekboard_service_constructed (GObject *object)
 | 
			
		||||
{
 | 
			
		||||
    EekboardService *service = EEKBOARD_SERVICE(object);
 | 
			
		||||
    EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
 | 
			
		||||
 | 
			
		||||
    service->priv->dbus_interface = sm_puri_osk0_skeleton_new();
 | 
			
		||||
    sm_puri_osk0_set_visible(service->priv->dbus_interface, FALSE); // TODO: use actual value
 | 
			
		||||
    g_signal_connect(service->priv->dbus_interface, "handle-set-visible",
 | 
			
		||||
    priv->dbus_interface = sm_puri_osk0_skeleton_new();
 | 
			
		||||
    sm_puri_osk0_set_visible(priv->dbus_interface, FALSE); // TODO: use actual value
 | 
			
		||||
    g_signal_connect(priv->dbus_interface, "handle-set-visible",
 | 
			
		||||
                     G_CALLBACK(handle_set_visible), service);
 | 
			
		||||
 | 
			
		||||
    if (service->priv->connection && service->priv->object_path) {
 | 
			
		||||
    if (priv->connection && priv->object_path) {
 | 
			
		||||
        GError *error = NULL;
 | 
			
		||||
 | 
			
		||||
        if (!g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(service->priv->dbus_interface),
 | 
			
		||||
                                              service->priv->connection,
 | 
			
		||||
                                              service->priv->object_path,
 | 
			
		||||
        if (!g_dbus_interface_skeleton_export(G_DBUS_INTERFACE_SKELETON(priv->dbus_interface),
 | 
			
		||||
                                              priv->connection,
 | 
			
		||||
                                              priv->object_path,
 | 
			
		||||
                                              &error)) {
 | 
			
		||||
            g_warning("Error registering dbus object: %s\n", error->message);
 | 
			
		||||
            g_clear_error(&error);
 | 
			
		||||
@ -190,9 +196,6 @@ eekboard_service_class_init (EekboardServiceClass *klass)
 | 
			
		||||
    GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 | 
			
		||||
    GParamSpec *pspec;
 | 
			
		||||
 | 
			
		||||
    g_type_class_add_private (gobject_class,
 | 
			
		||||
                              sizeof (EekboardServicePrivate));
 | 
			
		||||
 | 
			
		||||
    klass->create_context = NULL;
 | 
			
		||||
 | 
			
		||||
    gobject_class->constructed = eekboard_service_constructed;
 | 
			
		||||
@ -250,8 +253,9 @@ eekboard_service_class_init (EekboardServiceClass *klass)
 | 
			
		||||
static void
 | 
			
		||||
eekboard_service_init (EekboardService *self)
 | 
			
		||||
{
 | 
			
		||||
    self->priv = EEKBOARD_SERVICE_GET_PRIVATE(self);
 | 
			
		||||
    self->priv->context = NULL;
 | 
			
		||||
    EekboardServicePrivate *priv = eekboard_service_get_instance_private (self);
 | 
			
		||||
 | 
			
		||||
    priv->context = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@ -271,7 +275,9 @@ eekboard_service_new (GDBusConnection *connection,
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
eekboard_service_set_context(EekboardService *service,
 | 
			
		||||
                             EekboardContextService *context)
 | 
			
		||||
{
 | 
			
		||||
    EekboardServicePrivate *priv = eekboard_service_get_instance_private (service);
 | 
			
		||||
 | 
			
		||||
                             EekboardContextService *context) {
 | 
			
		||||
    service->priv->context = context;
 | 
			
		||||
    priv->context = context;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -28,30 +28,7 @@ G_BEGIN_DECLS
 | 
			
		||||
#define EEKBOARD_SERVICE_INTERFACE "sm.puri.OSK0"
 | 
			
		||||
 | 
			
		||||
#define EEKBOARD_TYPE_SERVICE (eekboard_service_get_type())
 | 
			
		||||
#define EEKBOARD_SERVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EEKBOARD_TYPE_SERVICE, EekboardService))
 | 
			
		||||
#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;
 | 
			
		||||
};
 | 
			
		||||
G_DECLARE_DERIVABLE_TYPE (EekboardService, eekboard_service, EEKBOARD, SERVICE, GObject)
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * EekboardServiceClass:
 | 
			
		||||
 | 
			
		||||
@ -217,16 +217,18 @@ static void
 | 
			
		||||
set_geometry (ServerContextService *context)
 | 
			
		||||
{
 | 
			
		||||
    GdkScreen *screen;
 | 
			
		||||
    GdkDisplay *display;
 | 
			
		||||
    GdkWindow *root;
 | 
			
		||||
    gint monitor;
 | 
			
		||||
    GdkMonitor *monitor;
 | 
			
		||||
    GdkRectangle rect;
 | 
			
		||||
    const EekKeyboard *keyboard;
 | 
			
		||||
    EekBounds bounds;
 | 
			
		||||
 | 
			
		||||
    screen = gdk_screen_get_default ();
 | 
			
		||||
    root = gtk_widget_get_root_window (context->window);
 | 
			
		||||
    monitor = gdk_screen_get_monitor_at_window (screen, root);
 | 
			
		||||
    gdk_screen_get_monitor_geometry (screen, monitor, &rect);
 | 
			
		||||
    root = gdk_screen_get_root_window (screen);
 | 
			
		||||
    display = gdk_display_get_default();
 | 
			
		||||
    monitor = gdk_display_get_monitor_at_window (display, root);
 | 
			
		||||
    gdk_monitor_get_geometry (monitor, &rect);
 | 
			
		||||
    keyboard = eekboard_context_service_get_keyboard (EEKBOARD_CONTEXT_SERVICE(context));
 | 
			
		||||
    eek_element_get_bounds (EEK_ELEMENT(keyboard), &bounds);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user