st: Use macros to generate type boilerplate

Also mark certain types as final when they are not meant to be used
externally

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3506>
This commit is contained in:
Bilal Elmoussaoui 2024-10-16 12:32:04 +02:00
parent 31119228a8
commit ad0e2c940b
7 changed files with 52 additions and 153 deletions

View File

@ -89,7 +89,10 @@ static guint button_signals[LAST_SIGNAL] = { 0, };
G_DEFINE_TYPE_WITH_PRIVATE (StButton, st_button, ST_TYPE_BIN);
static GType st_button_accessible_get_type (void) G_GNUC_CONST;
G_DECLARE_FINAL_TYPE (StButtonAccessible,
st_button_accessible,
ST, BUTTON_ACCESSIBLE,
StWidgetAccessible)
static void
st_button_update_label_style (StButton *button)
@ -909,44 +912,17 @@ st_button_fake_release (StButton *button)
#define ST_TYPE_BUTTON_ACCESSIBLE st_button_accessible_get_type ()
#define ST_BUTTON_ACCESSIBLE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
ST_TYPE_BUTTON_ACCESSIBLE, StButtonAccessible))
#define ST_IS_BUTTON_ACCESSIBLE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
ST_TYPE_BUTTON_ACCESSIBLE))
#define ST_BUTTON_ACCESSIBLE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
ST_TYPE_BUTTON_ACCESSIBLE, StButtonAccessibleClass))
#define ST_IS_BUTTON_ACCESSIBLE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
ST_TYPE_BUTTON_ACCESSIBLE))
#define ST_BUTTON_ACCESSIBLE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
ST_TYPE_BUTTON_ACCESSIBLE, StButtonAccessibleClass))
typedef struct _StButtonAccessible StButtonAccessible;
typedef struct _StButtonAccessibleClass StButtonAccessibleClass;
struct _StButtonAccessible
typedef struct _StButtonAccessible
{
StWidgetAccessible parent;
};
} StButtonAccessible;
struct _StButtonAccessibleClass
{
StWidgetAccessibleClass parent_class;
};
/* AtkObject */
static void st_button_accessible_initialize (AtkObject *obj,
gpointer data);
G_DEFINE_TYPE (StButtonAccessible, st_button_accessible, ST_TYPE_WIDGET_ACCESSIBLE)
G_DEFINE_FINAL_TYPE (StButtonAccessible, st_button_accessible, ST_TYPE_WIDGET_ACCESSIBLE)
static const gchar *
st_button_accessible_get_name (AtkObject *obj)

View File

@ -114,7 +114,10 @@ static guint entry_signals[LAST_SIGNAL] = { 0, };
G_DEFINE_TYPE_WITH_PRIVATE (StEntry, st_entry, ST_TYPE_WIDGET);
static GType st_entry_accessible_get_type (void) G_GNUC_CONST;
G_DECLARE_FINAL_TYPE (StEntryAccessible,
st_entry_accessible,
ST, ENTRY_ACCESSIBLE,
StWidgetAccessible)
static void
st_entry_set_property (GObject *gobject,
@ -1508,26 +1511,14 @@ st_entry_get_hint_actor (StEntry *entry)
/******************************************************************************/
#define ST_TYPE_ENTRY_ACCESSIBLE (st_entry_accessible_get_type ())
#define ST_ENTRY_ACCESSIBLE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), ST_TYPE_ENTRY_ACCESSIBLE, StEntryAccessible))
#define ST_IS_ENTRY_ACCESSIBLE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), ST_TYPE_ENTRY_ACCESSIBLE))
#define ST_ENTRY_ACCESSIBLE_CLASS(c) (G_TYPE_CHECK_CLASS_CAST ((c), ST_TYPE_ENTRY_ACCESSIBLE, StEntryAccessibleClass))
#define ST_IS_ENTRY_ACCESSIBLE_CLASS(c) (G_TYPE_CHECK_CLASS_TYPE ((c), ST_TYPE_ENTRY_ACCESSIBLE))
#define ST_ENTRY_ACCESSIBLE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), ST_TYPE_ENTRY_ACCESSIBLE, StEntryAccessibleClass))
typedef struct _StEntryAccessible StEntryAccessible;
typedef struct _StEntryAccessibleClass StEntryAccessibleClass;
struct _StEntryAccessible
typedef struct _StEntryAccessible
{
StWidgetAccessible parent;
};
} StEntryAccessible;
struct _StEntryAccessibleClass
{
StWidgetAccessibleClass parent_class;
};
G_DEFINE_TYPE (StEntryAccessible, st_entry_accessible, ST_TYPE_WIDGET_ACCESSIBLE)
G_DEFINE_FINAL_TYPE (StEntryAccessible, st_entry_accessible, ST_TYPE_WIDGET_ACCESSIBLE)
static void
st_entry_accessible_init (StEntryAccessible *self)

View File

@ -36,11 +36,16 @@
static void atk_value_iface_init (AtkValueIface *iface);
G_DEFINE_TYPE_WITH_CODE(StGenericAccessible,
st_generic_accessible,
ST_TYPE_WIDGET_ACCESSIBLE,
G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE,
atk_value_iface_init));
typedef struct _StGenericAccessible
{
StWidgetAccessible parent_class;
} StGenericAccessible;
G_DEFINE_FINAL_TYPE_WITH_CODE (StGenericAccessible,
st_generic_accessible,
ST_TYPE_WIDGET_ACCESSIBLE,
G_IMPLEMENT_INTERFACE (ATK_TYPE_VALUE,
atk_value_iface_init));
/* Signals */
enum
{

View File

@ -29,30 +29,11 @@
G_BEGIN_DECLS
#define ST_TYPE_GENERIC_ACCESSIBLE (st_generic_accessible_get_type ())
#define ST_GENERIC_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ST_TYPE_GENERIC_ACCESSIBLE, StGenericAccessible))
#define ST_GENERIC_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), ST_TYPE_GENERIC_ACCESSIBLE, StGenericAccessibleClass))
#define ST_IS_GENERIC_ACCESSIBLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), ST_TYPE_GENERIC_ACCESSIBLE))
#define ST_IS_GENERIC_ACCESSIBLE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), ST_TYPE_GENERIC_ACCESSIBLE))
#define ST_GENERIC_ACCESSIBLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), ST_TYPE_GENERIC_ACCESSIBLE, StGenericAccessibleClass))
typedef struct _StGenericAccessible StGenericAccessible;
typedef struct _StGenericAccessibleClass StGenericAccessibleClass;
typedef struct _StGenericAccessiblePrivate StGenericAccessiblePrivate;
struct _StGenericAccessible
{
StWidgetAccessible parent;
StGenericAccessiblePrivate *priv;
};
struct _StGenericAccessibleClass
{
StWidgetAccessibleClass parent_class;
};
GType st_generic_accessible_get_type (void) G_GNUC_CONST;
G_DECLARE_FINAL_TYPE (StGenericAccessible,
st_generic_accessible,
ST, GENERIC_ACCESSIBLE,
StWidgetAccessible)
AtkObject* st_generic_accessible_new_for_actor (ClutterActor *actor);

View File

@ -69,7 +69,10 @@ struct _StLabelPrivate
G_DEFINE_TYPE_WITH_PRIVATE (StLabel, st_label, ST_TYPE_WIDGET);
static GType st_label_accessible_get_type (void) G_GNUC_CONST;
G_DECLARE_FINAL_TYPE (StLabelAccessible,
st_label_accessible,
ST, LABEL_ACCESSIBLE,
StWidgetAccessible)
static void
st_label_set_property (GObject *gobject,
@ -439,45 +442,16 @@ st_label_get_clutter_text (StLabel *label)
#define ST_TYPE_LABEL_ACCESSIBLE st_label_accessible_get_type ()
#define ST_LABEL_ACCESSIBLE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
ST_TYPE_LABEL_ACCESSIBLE, StLabelAccessible))
#define ST_IS_LABEL_ACCESSIBLE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
ST_TYPE_LABEL_ACCESSIBLE))
#define ST_LABEL_ACCESSIBLE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
ST_TYPE_LABEL_ACCESSIBLE, StLabelAccessibleClass))
#define ST_IS_LABEL_ACCESSIBLE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
ST_TYPE_LABEL_ACCESSIBLE))
#define ST_LABEL_ACCESSIBLE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
ST_TYPE_LABEL_ACCESSIBLE, StLabelAccessibleClass))
typedef struct _StLabelAccessible StLabelAccessible;
typedef struct _StLabelAccessibleClass StLabelAccessibleClass;
struct _StLabelAccessible
{
StWidgetAccessible parent;
};
struct _StLabelAccessibleClass
{
StWidgetAccessibleClass parent_class;
};
/* AtkObject */
static void st_label_accessible_initialize (AtkObject *obj,
gpointer data);
static const gchar * st_label_accessible_get_name (AtkObject *obj);
G_DEFINE_TYPE (StLabelAccessible, st_label_accessible, ST_TYPE_WIDGET_ACCESSIBLE)
typedef struct _StLabelAccessible {
StWidgetAccessible parent_class;
} StLabelAccessible;
G_DEFINE_FINAL_TYPE (StLabelAccessible, st_label_accessible, ST_TYPE_WIDGET_ACCESSIBLE)
static void
st_label_accessible_class_init (StLabelAccessibleClass *klass)

View File

@ -31,43 +31,18 @@ G_BEGIN_DECLS
#define ST_TYPE_WIDGET_ACCESSIBLE st_widget_accessible_get_type ()
#define ST_WIDGET_ACCESSIBLE(obj) \
(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
ST_TYPE_WIDGET_ACCESSIBLE, StWidgetAccessible))
G_DECLARE_DERIVABLE_TYPE (StWidgetAccessible,
st_widget_accessible,
ST, WIDGET_ACCESSIBLE,
ClutterActorAccessible)
#define ST_IS_WIDGET_ACCESSIBLE(obj) \
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
ST_TYPE_WIDGET_ACCESSIBLE))
#define ST_WIDGET_ACCESSIBLE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_CAST ((klass), \
ST_TYPE_WIDGET_ACCESSIBLE, StWidgetAccessibleClass))
#define ST_IS_WIDGET_ACCESSIBLE_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), \
ST_TYPE_WIDGET_ACCESSIBLE))
#define ST_WIDGET_ACCESSIBLE_GET_CLASS(obj) \
(G_TYPE_INSTANCE_GET_CLASS ((obj), \
ST_TYPE_WIDGET_ACCESSIBLE, StWidgetAccessibleClass))
typedef struct _StWidgetAccessible StWidgetAccessible;
typedef struct _StWidgetAccessibleClass StWidgetAccessibleClass;
typedef struct _StWidgetAccessiblePrivate StWidgetAccessiblePrivate;
struct _StWidgetAccessible
{
ClutterActorAccessible parent;
/*< private >*/
StWidgetAccessiblePrivate *priv;
};
struct _StWidgetAccessibleClass
{
ClutterActorAccessibleClass parent_class;
};
GType st_widget_accessible_get_type (void) G_GNUC_CONST;
G_END_DECLS

View File

@ -2453,7 +2453,7 @@ static AtkStateSet *st_widget_accessible_ref_state_set (AtkObject *obj);
static void st_widget_accessible_initialize (AtkObject *obj,
gpointer data);
struct _StWidgetAccessiblePrivate
typedef struct _StWidgetAccessiblePrivate
{
/* Cached values (used to avoid extra notifications) */
gboolean selected;
@ -2463,7 +2463,7 @@ struct _StWidgetAccessiblePrivate
* relationships between this object and the label
*/
AtkObject *current_label;
};
} StWidgetAccessiblePrivate;
G_DEFINE_TYPE_WITH_PRIVATE (StWidgetAccessible, st_widget_accessible, CLUTTER_TYPE_ACTOR_ACCESSIBLE)
@ -2482,21 +2482,16 @@ st_widget_accessible_class_init (StWidgetAccessibleClass *klass)
static void
st_widget_accessible_init (StWidgetAccessible *self)
{
StWidgetAccessiblePrivate *priv = st_widget_accessible_get_instance_private (self);
self->priv = priv;
}
static void
st_widget_accessible_dispose (GObject *gobject)
{
StWidgetAccessible *self = ST_WIDGET_ACCESSIBLE (gobject);
StWidgetAccessiblePrivate *priv =
st_widget_accessible_get_instance_private (self);
if (self->priv->current_label)
{
g_object_unref (self->priv->current_label);
self->priv->current_label = NULL;
}
g_clear_object (&priv->current_label);
G_OBJECT_CLASS (st_widget_accessible_parent_class)->dispose (gobject);
}
@ -2524,6 +2519,7 @@ st_widget_accessible_ref_state_set (AtkObject *obj)
StWidget *widget = NULL;
StWidgetPrivate *widget_priv;
StWidgetAccessible *self = NULL;
StWidgetAccessiblePrivate *priv;
result = ATK_OBJECT_CLASS (st_widget_accessible_parent_class)->ref_state_set (obj);
@ -2534,15 +2530,16 @@ st_widget_accessible_ref_state_set (AtkObject *obj)
widget = ST_WIDGET (actor);
self = ST_WIDGET_ACCESSIBLE (obj);
priv = st_widget_accessible_get_instance_private (self);
widget_priv = st_widget_get_instance_private (widget);
/* priv->selected should be properly updated on the
* ATK_STATE_SELECTED notification callbacks
*/
if (self->priv->selected)
if (priv->selected)
atk_state_set_add_state (result, ATK_STATE_SELECTED);
if (self->priv->checked)
if (priv->checked)
atk_state_set_add_state (result, ATK_STATE_CHECKED);
/* On clutter there isn't any tip to know if a actor is focusable or
@ -2596,7 +2593,7 @@ check_pseudo_class (StWidget *widget)
if (!accessible)
return;
priv = ST_WIDGET_ACCESSIBLE (accessible)->priv;
priv = st_widget_accessible_get_instance_private (ST_WIDGET_ACCESSIBLE (accessible));
found = st_widget_has_style_pseudo_class (widget,
"selected");
@ -2631,7 +2628,7 @@ check_labels (StWidget *widget)
if (!accessible)
return;
priv = ST_WIDGET_ACCESSIBLE (accessible)->priv;
priv = st_widget_accessible_get_instance_private (ST_WIDGET_ACCESSIBLE (accessible));
/* We only call this method at startup, and when the label changes,
* so it is fine to remove the previous relationships if we have the