diff --git a/eek/eek-container.c b/eek/eek-container.c index 9637e3eb..042005bd 100644 --- a/eek/eek-container.c +++ b/eek/eek-container.c @@ -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 */ } /** diff --git a/eek/eek-container.h b/eek/eek-container.h index 76602881..b246d9e2 100644 --- a/eek/eek-container.h +++ b/eek/eek-container.h @@ -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 diff --git a/eek/eek-element.c b/eek/eek-element.c index d08af0c7..8e42a015 100644 --- a/eek/eek-element.c +++ b/eek/eek-element.c @@ -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; } diff --git a/eek/eek-element.h b/eek/eek-element.h index fd1efc03..084d7b5f 100644 --- a/eek/eek-element.h +++ b/eek/eek-element.h @@ -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 { diff --git a/eek/eek-gtk-keyboard.c b/eek/eek-gtk-keyboard.c index 51b6a373..af2900ef 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -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)) { @@ -242,20 +243,23 @@ 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); +handle_touch_event (GtkWidget *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,7 +519,8 @@ 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; @@ -531,7 +537,8 @@ 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; @@ -559,7 +566,7 @@ 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 +587,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 +610,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 +625,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 +649,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); } diff --git a/eek/eek-gtk-keyboard.h b/eek/eek-gtk-keyboard.h index 14210701..ad602b66 100644 --- a/eek/eek-gtk-keyboard.h +++ b/eek/eek-gtk-keyboard.h @@ -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 { diff --git a/eek/eek-key.c b/eek/eek-key.c index a3cada98..4a57bb84 100644 --- a/eek/eek-key.c +++ b/eek/eek-key.c @@ -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; } diff --git a/eek/eek-key.h b/eek/eek-key.h index d6c78ce7..31d8b65b 100644 --- a/eek/eek-key.h +++ b/eek/eek-key.h @@ -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: diff --git a/eek/eek-keysym.c b/eek/eek-keysym.c index 12b8e0d7..bde422d4 100644 --- a/eek/eek-keysym.c +++ b/eek/eek-keysym.c @@ -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_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)) +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)) 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; } diff --git a/eek/eek-keysym.h b/eek/eek-keysym.h index a30092e4..73430b07 100644 --- a/eek/eek-keysym.h +++ b/eek/eek-keysym.h @@ -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 >*/ diff --git a/eek/eek-layout.c b/eek/eek-layout.c index d2e2780b..23bb2600 100644 --- a/eek/eek-layout.c +++ b/eek/eek-layout.c @@ -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) diff --git a/eek/eek-layout.h b/eek/eek-layout.h index 1cf44cf7..308e0aae 100644 --- a/eek/eek-layout.h +++ b/eek/eek-layout.h @@ -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: diff --git a/eek/eek-renderer.c b/eek/eek-renderer.c index 4494d933..1d92f087 100644 --- a/eek/eek-renderer.c +++ b/eek/eek-renderer.c @@ -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); } diff --git a/eek/eek-renderer.h b/eek/eek-renderer.h index 86d10042..0b97b38c 100644 --- a/eek/eek-renderer.h +++ b/eek/eek-renderer.h @@ -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 { diff --git a/eek/eek-section.c b/eek/eek-section.c index 79251f48..4da47b7f 100644 --- a/eek/eek-section.c +++ b/eek/eek-section.c @@ -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; } /** diff --git a/eek/eek-section.h b/eek/eek-section.h index 77694a49..f4335ade 100644 --- a/eek/eek-section.h +++ b/eek/eek-section.h @@ -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: diff --git a/eek/eek-symbol.c b/eek/eek-symbol.c index c23fbab5..846f9fd1 100644 --- a/eek/eek-symbol.c +++ b/eek/eek-symbol.c @@ -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_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)) +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)) 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; diff --git a/eek/eek-symbol.h b/eek/eek-symbol.h index 4906483a..88ac8f0f 100644 --- a/eek/eek-symbol.h +++ b/eek/eek-symbol.h @@ -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: diff --git a/eek/eek-text.c b/eek/eek-text.c index ad11265c..258e9e97 100644 --- a/eek/eek-text.c +++ b/eek/eek-text.c @@ -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_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)) +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)) 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); @@ -107,11 +111,13 @@ eek_text_set_property (GObject *object, static void eek_text_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) + guint prop_id, + 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; } diff --git a/eek/eek-text.h b/eek/eek-text.h index 6fb21fd2..68183548 100644 --- a/eek/eek-text.h +++ b/eek/eek-text.h @@ -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 >*/ diff --git a/eek/eek-xkb-layout.c b/eek/eek-xkb-layout.c index f4da4cf1..dd30aaf1 100644 --- a/eek/eek-xkb-layout.c +++ b/eek/eek-xkb-layout.c @@ -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); diff --git a/eek/eek-xkb-layout.h b/eek/eek-xkb-layout.h index f715fb72..2361575c 100644 --- a/eek/eek-xkb-layout.h +++ b/eek/eek-xkb-layout.h @@ -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 { diff --git a/eek/eek-xkl-layout.c b/eek/eek-xkl-layout.c index a38873e5..b3d26145 100644 --- a/eek/eek-xkl-layout.c +++ b/eek/eek-xkl-layout.c @@ -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; } diff --git a/eek/eek-xkl-layout.h b/eek/eek-xkl-layout.h index 966b2918..be91fea8 100644 --- a/eek/eek-xkl-layout.h +++ b/eek/eek-xkl-layout.h @@ -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 { diff --git a/eek/eek-xml-layout.c b/eek/eek-xml-layout.c index b165f166..0d99965d 100644 --- a/eek/eek-xml-layout.c +++ b/eek/eek-xml-layout.c @@ -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); diff --git a/eek/eek-xml-layout.h b/eek/eek-xml-layout.h index 7220d72a..1210ff17 100644 --- a/eek/eek-xml-layout.h +++ b/eek/eek-xml-layout.h @@ -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: diff --git a/eekboard/eekboard-client.c b/eekboard/eekboard-client.c index b853ae9d..2d703646 100644 --- a/eekboard/eekboard-client.c +++ b/eekboard/eekboard-client.c @@ -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); } diff --git a/eekboard/eekboard-client.h b/eekboard/eekboard-client.h index b09db298..acbb59e4 100644 --- a/eekboard/eekboard-client.h +++ b/eekboard/eekboard-client.h @@ -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 >*/ diff --git a/eekboard/eekboard-context.c b/eekboard/eekboard-context.c index f3d6cd8e..f63f649a 100644 --- a/eekboard/eekboard-context.c +++ b/eekboard/eekboard-context.c @@ -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), diff --git a/eekboard/eekboard-context.h b/eekboard/eekboard-context.h index 70f2158a..8eda6c30 100644 --- a/eekboard/eekboard-context.h +++ b/eekboard/eekboard-context.h @@ -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: diff --git a/eekboard/eekboard-service.c b/eekboard/eekboard-service.c index 89a12b54..07406df2 100644 --- a/eekboard/eekboard-service.c +++ b/eekboard/eekboard-service.c @@ -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; } diff --git a/eekboard/eekboard-service.h b/eekboard/eekboard-service.h index 05f63ae1..58984bfb 100644 --- a/eekboard/eekboard-service.h +++ b/eekboard/eekboard-service.h @@ -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: