From 094aa872ceb6406b1fcd598089d40a80284f8e16 Mon Sep 17 00:00:00 2001 From: Hysterical Raisins Date: Thu, 4 Jul 2019 19:44:12 +0200 Subject: [PATCH] Cleanups: fix deprecated g_type_class_add_private() - use G_DECLARE_ and G_DEFINE_ macros - move all data into ClassNamePrivate - use _get_instance_private() This should not introduce any functional changes or breakage. Skipped two classes (EekKeyboard and EekboardContextService) for now in order not to break the build. These two classes are used in some very funky WIP code that tries to circumvent encapsulation. (Funky code is in eekboard/key-emitter.c and eekboard/eekboard-context-service.c) --- eek/eek-container.c | 28 +++--- eek/eek-container.h | 17 +--- eek/eek-element.c | 84 ++++++++++------- eek/eek-element.h | 17 +--- eek/eek-gtk-keyboard.c | 81 +++++++++-------- eek/eek-gtk-keyboard.h | 20 +--- eek/eek-key.c | 94 ++++++++++++------- eek/eek-key.h | 26 +----- eek/eek-keysym.c | 32 +++---- eek/eek-keysym.h | 22 +---- eek/eek-layout.c | 2 +- eek/eek-layout.h | 15 +-- eek/eek-renderer.c | 177 +++++++++++++++++++++--------------- eek/eek-renderer.h | 16 +--- eek/eek-section.c | 46 +++++----- eek/eek-section.h | 23 +---- eek/eek-symbol.c | 90 ++++++++---------- eek/eek-symbol.h | 22 +---- eek/eek-text.c | 45 +++++---- eek/eek-text.h | 22 +---- eek/eek-xkb-layout.c | 72 ++++++++------- eek/eek-xkb-layout.h | 18 +--- eek/eek-xkl-layout.c | 55 ++++++----- eek/eek-xkl-layout.h | 18 +--- eek/eek-xml-layout.c | 64 +++++++------ eek/eek-xml-layout.h | 24 +---- eekboard/eekboard-client.c | 39 ++++---- eekboard/eekboard-client.h | 17 +--- eekboard/eekboard-context.c | 82 +++++++++++------ eekboard/eekboard-context.h | 23 +---- eekboard/eekboard-service.c | 90 +++++++++--------- eekboard/eekboard-service.h | 25 +---- 32 files changed, 613 insertions(+), 793 deletions(-) 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 47f255fb..c3907cce 100644 --- a/eek/eek-gtk-keyboard.c +++ b/eek/eek-gtk-keyboard.c @@ -47,18 +47,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; @@ -66,7 +61,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); @@ -107,7 +106,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; @@ -149,7 +149,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, @@ -162,7 +163,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); @@ -172,7 +173,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) { @@ -198,7 +199,7 @@ static void drag(EekGtkKeyboard *self, } static void release(EekGtkKeyboard *self, guint32 time) { - EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(self); + EekGtkKeyboardPrivate *priv = eek_gtk_keyboard_get_instance_private (self); GList *list = eek_keyboard_get_pressed_keys (priv->keyboard); for (GList *head = list; head; head = g_list_next (head)) { @@ -243,20 +244,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; } @@ -266,16 +270,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; @@ -302,7 +306,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, @@ -323,7 +329,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 = @@ -359,7 +365,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); @@ -408,9 +415,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; @@ -441,7 +445,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 */ } /** @@ -523,7 +527,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; GdkWindow *window = gtk_widget_get_window (widget); @@ -562,7 +567,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; GdkWindow *window = gtk_widget_get_window (widget); @@ -593,7 +599,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; GdkWindow *window = gtk_widget_get_window (widget); @@ -624,7 +631,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) @@ -645,7 +652,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) @@ -668,7 +675,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) @@ -683,7 +690,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) @@ -707,11 +714,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 dc200c38..073b8eee 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; @@ -353,7 +350,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, }; @@ -413,7 +410,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; @@ -432,7 +429,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; @@ -605,7 +602,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; @@ -698,7 +695,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); @@ -720,7 +717,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: @@ -748,7 +746,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: @@ -763,7 +762,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, @@ -787,7 +787,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); @@ -801,9 +803,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; @@ -836,9 +835,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; @@ -865,15 +863,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; } } @@ -908,10 +908,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; @@ -924,8 +926,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); } } @@ -939,11 +941,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 @@ -962,20 +966,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; @@ -1007,24 +1013,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 @@ -1102,7 +1114,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 @@ -1112,7 +1126,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 @@ -1125,11 +1141,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)); } @@ -1143,11 +1161,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)); } @@ -1210,12 +1230,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; @@ -1270,12 +1292,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; @@ -1285,7 +1309,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; @@ -1305,9 +1329,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", @@ -1320,7 +1346,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", @@ -1339,9 +1365,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", @@ -1370,22 +1398,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); @@ -1393,7 +1424,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: