cally/stage: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
This commit is contained in:
parent
22d77c9ba4
commit
cdcf32620a
@ -50,13 +50,13 @@ static void cally_stage_activate_cb (ClutterStage *stage,
|
|||||||
static void cally_stage_deactivate_cb (ClutterStage *stage,
|
static void cally_stage_deactivate_cb (ClutterStage *stage,
|
||||||
gpointer data);
|
gpointer data);
|
||||||
|
|
||||||
struct _CallyStagePrivate
|
typedef struct _CallyStagePrivate
|
||||||
{
|
{
|
||||||
/* NULL means that the stage will receive the focus */
|
/* NULL means that the stage will receive the focus */
|
||||||
ClutterActor *key_focus;
|
ClutterActor *key_focus;
|
||||||
|
|
||||||
gboolean active;
|
gboolean active;
|
||||||
};
|
} CallyStagePrivate;
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (CallyStage,
|
G_DEFINE_TYPE_WITH_CODE (CallyStage,
|
||||||
cally_stage,
|
cally_stage,
|
||||||
@ -80,8 +80,6 @@ cally_stage_init (CallyStage *cally_stage)
|
|||||||
{
|
{
|
||||||
CallyStagePrivate *priv = cally_stage_get_instance_private (cally_stage);
|
CallyStagePrivate *priv = cally_stage_get_instance_private (cally_stage);
|
||||||
|
|
||||||
cally_stage->priv = priv;
|
|
||||||
|
|
||||||
priv->active = FALSE;
|
priv->active = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -117,24 +115,25 @@ cally_stage_notify_key_focus_cb (ClutterStage *stage,
|
|||||||
{
|
{
|
||||||
ClutterActor *key_focus = NULL;
|
ClutterActor *key_focus = NULL;
|
||||||
AtkObject *new = NULL;
|
AtkObject *new = NULL;
|
||||||
|
CallyStagePrivate *priv = cally_stage_get_instance_private (self);
|
||||||
|
|
||||||
if (self->priv->active == FALSE)
|
if (priv->active == FALSE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
key_focus = clutter_stage_get_key_focus (stage);
|
key_focus = clutter_stage_get_key_focus (stage);
|
||||||
|
|
||||||
if (key_focus != self->priv->key_focus)
|
if (key_focus != priv->key_focus)
|
||||||
{
|
{
|
||||||
AtkObject *old = NULL;
|
AtkObject *old = NULL;
|
||||||
|
|
||||||
if (self->priv->key_focus != NULL)
|
if (priv->key_focus != NULL)
|
||||||
{
|
{
|
||||||
if (self->priv->key_focus != CLUTTER_ACTOR (stage))
|
if (priv->key_focus != CLUTTER_ACTOR (stage))
|
||||||
{
|
{
|
||||||
g_object_remove_weak_pointer (G_OBJECT (self->priv->key_focus),
|
g_object_remove_weak_pointer (G_OBJECT (priv->key_focus),
|
||||||
(gpointer *) &self->priv->key_focus);
|
(gpointer *) &priv->key_focus);
|
||||||
}
|
}
|
||||||
old = clutter_actor_get_accessible (self->priv->key_focus);
|
old = clutter_actor_get_accessible (priv->key_focus);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
old = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));
|
old = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));
|
||||||
@ -147,7 +146,7 @@ cally_stage_notify_key_focus_cb (ClutterStage *stage,
|
|||||||
/* we keep notifying the focus gain without checking previous
|
/* we keep notifying the focus gain without checking previous
|
||||||
* key-focus to avoid some missing events due timing
|
* key-focus to avoid some missing events due timing
|
||||||
*/
|
*/
|
||||||
self->priv->key_focus = key_focus;
|
priv->key_focus = key_focus;
|
||||||
|
|
||||||
if (key_focus != NULL)
|
if (key_focus != NULL)
|
||||||
{
|
{
|
||||||
@ -160,8 +159,8 @@ cally_stage_notify_key_focus_cb (ClutterStage *stage,
|
|||||||
*/
|
*/
|
||||||
if (key_focus != CLUTTER_ACTOR (stage))
|
if (key_focus != CLUTTER_ACTOR (stage))
|
||||||
{
|
{
|
||||||
g_object_add_weak_pointer (G_OBJECT (self->priv->key_focus),
|
g_object_add_weak_pointer (G_OBJECT (priv->key_focus),
|
||||||
(gpointer *) &self->priv->key_focus);
|
(gpointer *) &priv->key_focus);
|
||||||
}
|
}
|
||||||
|
|
||||||
new = clutter_actor_get_accessible (key_focus);
|
new = clutter_actor_get_accessible (key_focus);
|
||||||
@ -200,9 +199,11 @@ cally_stage_ref_state_set (AtkObject *obj)
|
|||||||
CallyStage *cally_stage = NULL;
|
CallyStage *cally_stage = NULL;
|
||||||
AtkStateSet *state_set = NULL;
|
AtkStateSet *state_set = NULL;
|
||||||
ClutterStage *stage = NULL;
|
ClutterStage *stage = NULL;
|
||||||
|
CallyStagePrivate *priv;
|
||||||
|
|
||||||
g_return_val_if_fail (CALLY_IS_STAGE (obj), NULL);
|
g_return_val_if_fail (CALLY_IS_STAGE (obj), NULL);
|
||||||
cally_stage = CALLY_STAGE (obj);
|
cally_stage = CALLY_STAGE (obj);
|
||||||
|
priv = cally_stage_get_instance_private (cally_stage);
|
||||||
|
|
||||||
state_set = ATK_OBJECT_CLASS (cally_stage_parent_class)->ref_state_set (obj);
|
state_set = ATK_OBJECT_CLASS (cally_stage_parent_class)->ref_state_set (obj);
|
||||||
stage = CLUTTER_STAGE (CALLY_GET_CLUTTER_ACTOR (cally_stage));
|
stage = CLUTTER_STAGE (CALLY_GET_CLUTTER_ACTOR (cally_stage));
|
||||||
@ -210,7 +211,7 @@ cally_stage_ref_state_set (AtkObject *obj)
|
|||||||
if (stage == NULL)
|
if (stage == NULL)
|
||||||
return state_set;
|
return state_set;
|
||||||
|
|
||||||
if (cally_stage->priv->active)
|
if (priv->active)
|
||||||
atk_state_set_add_state (state_set, ATK_STATE_ACTIVE);
|
atk_state_set_add_state (state_set, ATK_STATE_ACTIVE);
|
||||||
|
|
||||||
return state_set;
|
return state_set;
|
||||||
@ -229,12 +230,14 @@ cally_stage_activate_cb (ClutterStage *stage,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
CallyStage *cally_stage = NULL;
|
CallyStage *cally_stage = NULL;
|
||||||
|
CallyStagePrivate *priv;
|
||||||
|
|
||||||
g_return_if_fail (CALLY_IS_STAGE (data));
|
g_return_if_fail (CALLY_IS_STAGE (data));
|
||||||
|
|
||||||
cally_stage = CALLY_STAGE (data);
|
cally_stage = CALLY_STAGE (data);
|
||||||
|
priv = cally_stage_get_instance_private (cally_stage);
|
||||||
|
|
||||||
cally_stage->priv->active = TRUE;
|
priv->active = TRUE;
|
||||||
|
|
||||||
atk_object_notify_state_change (ATK_OBJECT (cally_stage),
|
atk_object_notify_state_change (ATK_OBJECT (cally_stage),
|
||||||
ATK_STATE_ACTIVE, TRUE);
|
ATK_STATE_ACTIVE, TRUE);
|
||||||
@ -247,12 +250,14 @@ cally_stage_deactivate_cb (ClutterStage *stage,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
CallyStage *cally_stage = NULL;
|
CallyStage *cally_stage = NULL;
|
||||||
|
CallyStagePrivate *priv;
|
||||||
|
|
||||||
g_return_if_fail (CALLY_IS_STAGE (data));
|
g_return_if_fail (CALLY_IS_STAGE (data));
|
||||||
|
|
||||||
cally_stage = CALLY_STAGE (data);
|
cally_stage = CALLY_STAGE (data);
|
||||||
|
priv = cally_stage_get_instance_private (cally_stage);
|
||||||
|
|
||||||
cally_stage->priv->active = FALSE;
|
priv->active = FALSE;
|
||||||
|
|
||||||
atk_object_notify_state_change (ATK_OBJECT (cally_stage),
|
atk_object_notify_state_change (ATK_OBJECT (cally_stage),
|
||||||
ATK_STATE_ACTIVE, FALSE);
|
ATK_STATE_ACTIVE, FALSE);
|
||||||
|
@ -30,23 +30,16 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define CALLY_TYPE_STAGE (cally_stage_get_type ())
|
#define CALLY_TYPE_STAGE (cally_stage_get_type ())
|
||||||
#define CALLY_STAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CALLY_TYPE_STAGE, CallyStage))
|
|
||||||
#define CALLY_STAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CALLY_TYPE_STAGE, CallyStageClass))
|
CLUTTER_EXPORT
|
||||||
#define CALLY_IS_STAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CALLY_TYPE_STAGE))
|
G_DECLARE_DERIVABLE_TYPE (CallyStage,
|
||||||
#define CALLY_IS_STAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CALLY_TYPE_STAGE))
|
cally_stage,
|
||||||
#define CALLY_STAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CALLY_TYPE_STAGE, CallyStageClass))
|
CALLY,
|
||||||
|
STAGE,
|
||||||
|
CallyActor)
|
||||||
|
|
||||||
typedef struct _CallyStage CallyStage;
|
typedef struct _CallyStage CallyStage;
|
||||||
typedef struct _CallyStageClass CallyStageClass;
|
typedef struct _CallyStageClass CallyStageClass;
|
||||||
typedef struct _CallyStagePrivate CallyStagePrivate;
|
|
||||||
|
|
||||||
struct _CallyStage
|
|
||||||
{
|
|
||||||
/*< private >*/
|
|
||||||
CallyActor parent;
|
|
||||||
|
|
||||||
CallyStagePrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _CallyStageClass
|
struct _CallyStageClass
|
||||||
{
|
{
|
||||||
@ -54,8 +47,6 @@ struct _CallyStageClass
|
|||||||
CallyActorClass parent_class;
|
CallyActorClass parent_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
|
||||||
GType cally_stage_get_type (void) G_GNUC_CONST;
|
|
||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
AtkObject *cally_stage_new (ClutterActor *actor);
|
AtkObject *cally_stage_new (ClutterActor *actor);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user