cally/root: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
This commit is contained in:
parent
befb21cbb2
commit
22d77c9ba4
@ -62,7 +62,7 @@ static void cally_util_stage_removed_cb (ClutterStageManager *st
|
|||||||
ClutterStage *stage,
|
ClutterStage *stage,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
|
|
||||||
struct _CallyRootPrivate
|
typedef struct _CallyRootPrivate
|
||||||
{
|
{
|
||||||
/* We save the CallyStage objects. Other option could save the stage
|
/* We save the CallyStage objects. Other option could save the stage
|
||||||
* list, and then just get the a11y object on the ref_child, etc. But
|
* list, and then just get the a11y object on the ref_child, etc. But
|
||||||
@ -75,7 +75,7 @@ struct _CallyRootPrivate
|
|||||||
/* signals id */
|
/* signals id */
|
||||||
gulong stage_added_id;
|
gulong stage_added_id;
|
||||||
gulong stage_removed_id;
|
gulong stage_removed_id;
|
||||||
};
|
} CallyRootPrivate;
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_PRIVATE (CallyRoot, cally_root, ATK_TYPE_GOBJECT_ACCESSIBLE)
|
G_DEFINE_TYPE_WITH_PRIVATE (CallyRoot, cally_root, ATK_TYPE_GOBJECT_ACCESSIBLE)
|
||||||
|
|
||||||
@ -98,11 +98,11 @@ cally_root_class_init (CallyRootClass *klass)
|
|||||||
static void
|
static void
|
||||||
cally_root_init (CallyRoot *root)
|
cally_root_init (CallyRoot *root)
|
||||||
{
|
{
|
||||||
root->priv = cally_root_get_instance_private (root);
|
CallyRootPrivate *priv = cally_root_get_instance_private (root);
|
||||||
|
|
||||||
root->priv->stage_list = NULL;
|
priv->stage_list = NULL;
|
||||||
root->priv->stage_added_id = 0;
|
priv->stage_added_id = 0;
|
||||||
root->priv->stage_removed_id = 0;
|
priv->stage_removed_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -134,20 +134,22 @@ cally_root_finalize (GObject *object)
|
|||||||
{
|
{
|
||||||
CallyRoot *root = CALLY_ROOT (object);
|
CallyRoot *root = CALLY_ROOT (object);
|
||||||
GObject *stage_manager = NULL;
|
GObject *stage_manager = NULL;
|
||||||
|
CallyRootPrivate *priv;
|
||||||
|
|
||||||
g_return_if_fail (CALLY_IS_ROOT (object));
|
g_return_if_fail (CALLY_IS_ROOT (object));
|
||||||
|
|
||||||
if (root->priv->stage_list)
|
priv = cally_root_get_instance_private (root);
|
||||||
|
if (priv->stage_list)
|
||||||
{
|
{
|
||||||
g_slist_free (root->priv->stage_list);
|
g_slist_free (priv->stage_list);
|
||||||
root->priv->stage_list = NULL;
|
priv->stage_list = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
stage_manager = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (root));
|
stage_manager = atk_gobject_accessible_get_object (ATK_GOBJECT_ACCESSIBLE (root));
|
||||||
|
|
||||||
g_clear_signal_handler (&root->priv->stage_added_id, stage_manager);
|
g_clear_signal_handler (&priv->stage_added_id, stage_manager);
|
||||||
|
|
||||||
g_clear_signal_handler (&root->priv->stage_removed_id, stage_manager);
|
g_clear_signal_handler (&priv->stage_removed_id, stage_manager);
|
||||||
|
|
||||||
G_OBJECT_CLASS (cally_root_parent_class)->finalize (object);
|
G_OBJECT_CLASS (cally_root_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
@ -162,13 +164,14 @@ cally_root_initialize (AtkObject *accessible,
|
|||||||
const GSList *stage_list = NULL;
|
const GSList *stage_list = NULL;
|
||||||
ClutterStage *clutter_stage = NULL;
|
ClutterStage *clutter_stage = NULL;
|
||||||
AtkObject *cally_stage = NULL;
|
AtkObject *cally_stage = NULL;
|
||||||
CallyRoot *root = NULL;
|
CallyRoot *root = CALLY_ROOT (accessible);
|
||||||
|
CallyRootPrivate *priv = cally_root_get_instance_private (root);
|
||||||
|
|
||||||
|
|
||||||
accessible->role = ATK_ROLE_APPLICATION;
|
accessible->role = ATK_ROLE_APPLICATION;
|
||||||
accessible->accessible_parent = NULL;
|
accessible->accessible_parent = NULL;
|
||||||
|
|
||||||
/* children initialization */
|
/* children initialization */
|
||||||
root = CALLY_ROOT (accessible);
|
|
||||||
stage_manager = CLUTTER_STAGE_MANAGER (data);
|
stage_manager = CLUTTER_STAGE_MANAGER (data);
|
||||||
stage_list = clutter_stage_manager_peek_stages (stage_manager);
|
stage_list = clutter_stage_manager_peek_stages (stage_manager);
|
||||||
|
|
||||||
@ -179,15 +182,14 @@ cally_root_initialize (AtkObject *accessible,
|
|||||||
|
|
||||||
atk_object_set_parent (cally_stage, ATK_OBJECT (root));
|
atk_object_set_parent (cally_stage, ATK_OBJECT (root));
|
||||||
|
|
||||||
root->priv->stage_list = g_slist_append (root->priv->stage_list,
|
priv->stage_list = g_slist_append (priv->stage_list, cally_stage);
|
||||||
cally_stage);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
root->priv->stage_added_id =
|
priv->stage_added_id =
|
||||||
g_signal_connect (G_OBJECT (stage_manager), "stage-added",
|
g_signal_connect (G_OBJECT (stage_manager), "stage-added",
|
||||||
G_CALLBACK (cally_util_stage_added_cb), root);
|
G_CALLBACK (cally_util_stage_added_cb), root);
|
||||||
|
|
||||||
root->priv->stage_removed_id =
|
priv->stage_removed_id =
|
||||||
g_signal_connect (G_OBJECT (stage_manager), "stage-removed",
|
g_signal_connect (G_OBJECT (stage_manager), "stage-removed",
|
||||||
G_CALLBACK (cally_util_stage_removed_cb), root);
|
G_CALLBACK (cally_util_stage_removed_cb), root);
|
||||||
|
|
||||||
@ -199,21 +201,22 @@ static gint
|
|||||||
cally_root_get_n_children (AtkObject *obj)
|
cally_root_get_n_children (AtkObject *obj)
|
||||||
{
|
{
|
||||||
CallyRoot *root = CALLY_ROOT (obj);
|
CallyRoot *root = CALLY_ROOT (obj);
|
||||||
|
CallyRootPrivate *priv = cally_root_get_instance_private (root);
|
||||||
|
|
||||||
return g_slist_length (root->priv->stage_list);
|
return g_slist_length (priv->stage_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
static AtkObject*
|
static AtkObject*
|
||||||
cally_root_ref_child (AtkObject *obj,
|
cally_root_ref_child (AtkObject *obj,
|
||||||
gint i)
|
gint i)
|
||||||
{
|
{
|
||||||
CallyRoot *cally_root = NULL;
|
CallyRoot *cally_root = CALLY_ROOT (obj);
|
||||||
|
CallyRootPrivate *priv = cally_root_get_instance_private (cally_root);
|
||||||
GSList *stage_list = NULL;
|
GSList *stage_list = NULL;
|
||||||
gint num = 0;
|
gint num = 0;
|
||||||
AtkObject *item = NULL;
|
AtkObject *item = NULL;
|
||||||
|
|
||||||
cally_root = CALLY_ROOT (obj);
|
stage_list = priv->stage_list;
|
||||||
stage_list = cally_root->priv->stage_list;
|
|
||||||
num = g_slist_length (stage_list);
|
num = g_slist_length (stage_list);
|
||||||
|
|
||||||
g_return_val_if_fail ((i < num)&&(i >= 0), NULL);
|
g_return_val_if_fail ((i < num)&&(i >= 0), NULL);
|
||||||
@ -245,21 +248,22 @@ cally_root_get_name (AtkObject *obj)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
cally_util_stage_added_cb (ClutterStageManager *stage_manager,
|
cally_util_stage_added_cb (ClutterStageManager *stage_manager,
|
||||||
ClutterStage *stage,
|
ClutterStage *stage,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
CallyRoot *root = CALLY_ROOT (data);
|
CallyRoot *root = CALLY_ROOT (data);
|
||||||
AtkObject *cally_stage = NULL;
|
AtkObject *cally_stage = NULL;
|
||||||
|
CallyRootPrivate *priv = cally_root_get_instance_private (root);
|
||||||
|
|
||||||
gint index = -1;
|
gint index = -1;
|
||||||
|
|
||||||
cally_stage = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));
|
cally_stage = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));
|
||||||
|
|
||||||
atk_object_set_parent (cally_stage, ATK_OBJECT (root));
|
atk_object_set_parent (cally_stage, ATK_OBJECT (root));
|
||||||
|
|
||||||
root->priv->stage_list = g_slist_append (root->priv->stage_list,
|
priv->stage_list = g_slist_append (priv->stage_list, cally_stage);
|
||||||
cally_stage);
|
|
||||||
|
|
||||||
index = g_slist_index (root->priv->stage_list, cally_stage);
|
index = g_slist_index (priv->stage_list, cally_stage);
|
||||||
g_signal_emit_by_name (root, "children_changed::add",
|
g_signal_emit_by_name (root, "children_changed::add",
|
||||||
index, cally_stage, NULL);
|
index, cally_stage, NULL);
|
||||||
g_signal_emit_by_name (cally_stage, "create", 0);
|
g_signal_emit_by_name (cally_stage, "create", 0);
|
||||||
@ -267,21 +271,23 @@ cally_util_stage_added_cb (ClutterStageManager *stage_manager,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
cally_util_stage_removed_cb (ClutterStageManager *stage_manager,
|
cally_util_stage_removed_cb (ClutterStageManager *stage_manager,
|
||||||
ClutterStage *stage,
|
ClutterStage *stage,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
CallyRoot *root = CALLY_ROOT (data);
|
CallyRoot *root = CALLY_ROOT (data);
|
||||||
AtkObject *cally_stage = NULL;
|
AtkObject *cally_stage = NULL;
|
||||||
|
CallyRootPrivate *priv
|
||||||
|
= cally_root_get_instance_private (root);
|
||||||
gint index = -1;
|
gint index = -1;
|
||||||
|
|
||||||
cally_stage = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));
|
cally_stage = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));
|
||||||
|
|
||||||
index = g_slist_index (root->priv->stage_list, cally_stage);
|
index = g_slist_index (priv->stage_list, cally_stage);
|
||||||
|
|
||||||
root->priv->stage_list = g_slist_remove (root->priv->stage_list,
|
priv->stage_list = g_slist_remove (priv->stage_list,
|
||||||
cally_stage);
|
cally_stage);
|
||||||
|
|
||||||
index = g_slist_index (root->priv->stage_list, cally_stage);
|
index = g_slist_index (priv->stage_list, cally_stage);
|
||||||
g_signal_emit_by_name (root, "children_changed::remove",
|
g_signal_emit_by_name (root, "children_changed::remove",
|
||||||
index, cally_stage, NULL);
|
index, cally_stage, NULL);
|
||||||
g_signal_emit_by_name (cally_stage, "destroy", 0);
|
g_signal_emit_by_name (cally_stage, "destroy", 0);
|
||||||
|
@ -31,23 +31,16 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define CALLY_TYPE_ROOT (cally_root_get_type ())
|
#define CALLY_TYPE_ROOT (cally_root_get_type ())
|
||||||
#define CALLY_ROOT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CALLY_TYPE_ROOT, CallyRoot))
|
|
||||||
#define CALLY_ROOT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CALLY_TYPE_ROOT, CallyRootClass))
|
|
||||||
#define CALLY_IS_ROOT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CALLY_TYPE_ROOT))
|
|
||||||
#define CALLY_IS_ROOT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CALLY_TYPE_ROOT))
|
|
||||||
#define CALLY_ROOT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CALLY_TYPE_ROOT, CallyRootClass))
|
|
||||||
|
|
||||||
typedef struct _CallyRoot CallyRoot;
|
CLUTTER_EXPORT
|
||||||
typedef struct _CallyRootClass CallyRootClass;
|
G_DECLARE_DERIVABLE_TYPE (CallyRoot,
|
||||||
typedef struct _CallyRootPrivate CallyRootPrivate;
|
cally_root,
|
||||||
|
CALLY,
|
||||||
|
ROOT,
|
||||||
|
AtkGObjectAccessible)
|
||||||
|
|
||||||
struct _CallyRoot
|
typedef struct _CallyRoot CallyRoot;
|
||||||
{
|
typedef struct _CallyRootClass CallyRootClass;
|
||||||
/*< private >*/
|
|
||||||
AtkGObjectAccessible parent;
|
|
||||||
|
|
||||||
CallyRootPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _CallyRootClass
|
struct _CallyRootClass
|
||||||
{
|
{
|
||||||
@ -55,8 +48,6 @@ struct _CallyRootClass
|
|||||||
AtkGObjectAccessibleClass parent_class;
|
AtkGObjectAccessibleClass parent_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
|
||||||
GType cally_root_get_type (void) G_GNUC_CONST;
|
|
||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
AtkObject *cally_root_new (void);
|
AtkObject *cally_root_new (void);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user