1
0
Fork 0

clutter/stage-manager: Mark as final

It is not something that can be replaced

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3962>
This commit is contained in:
Bilal Elmoussaoui 2024-08-20 16:42:50 +02:00 committed by Marge Bot
parent 3fb1c9ab21
commit 5391ab56e8
2 changed files with 21 additions and 100 deletions

View file

@ -28,11 +28,6 @@
*
* #ClutterStageManager is a singleton object, owned by Clutter, which
* maintains the list of currently active stages
*
* Every newly-created [class@Stage] will cause the emission of the
* [signal@StageManager::stage-added] signal; once a [class@Stage] has
* been destroyed, the [signal@StageManager::stage-removed] signal will
* be emitted
*/
#include "config.h"
@ -49,35 +44,25 @@ enum
PROP_0,
};
enum
struct _ClutterStageManager
{
STAGE_ADDED,
STAGE_REMOVED,
GObject parent;
LAST_SIGNAL
GSList *stages;
};
static guint manager_signals[LAST_SIGNAL] = { 0, };
typedef struct _ClutterStageManagerPrivate
{
GSList *stages;
} ClutterStageManagerPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (ClutterStageManager,
clutter_stage_manager,
G_TYPE_OBJECT);
G_DEFINE_FINAL_TYPE (ClutterStageManager,
clutter_stage_manager,
G_TYPE_OBJECT);
static void
clutter_stage_manager_dispose (GObject *gobject)
{
ClutterStageManager *stage_manager = CLUTTER_STAGE_MANAGER (gobject);
ClutterStageManagerPrivate *priv =
clutter_stage_manager_get_instance_private (stage_manager);
g_slist_free_full (priv->stages,
g_slist_free_full (stage_manager->stages,
(GDestroyNotify) clutter_actor_destroy);
priv->stages = NULL;
stage_manager->stages = NULL;
G_OBJECT_CLASS (clutter_stage_manager_parent_class)->dispose (gobject);
}
@ -88,39 +73,6 @@ clutter_stage_manager_class_init (ClutterStageManagerClass *klass)
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
gobject_class->dispose = clutter_stage_manager_dispose;
/**
* ClutterStageManager::stage-added:
* @stage_manager: the object which received the signal
* @stage: the added stage
*
* The signal is emitted each time a new #ClutterStage
* has been added to the stage manager.
*/
manager_signals[STAGE_ADDED] =
g_signal_new ("stage-added",
G_OBJECT_CLASS_TYPE (gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ClutterStageManagerClass, stage_added),
NULL, NULL, NULL,
G_TYPE_NONE, 1,
CLUTTER_TYPE_STAGE);
/**
* ClutterStageManager::stage-removed:
* @stage_manager: the object which received the signal
* @stage: the removed stage
*
* The signal is emitted each time a #ClutterStage
* has been removed from the stage manager.
*/
manager_signals[STAGE_REMOVED] =
g_signal_new ("stage-removed",
G_OBJECT_CLASS_TYPE (gobject_class),
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (ClutterStageManagerClass, stage_removed),
NULL, NULL, NULL,
G_TYPE_NONE, 1,
CLUTTER_TYPE_STAGE);
}
static void
@ -160,10 +112,7 @@ clutter_stage_manager_get_default (void)
GSList *
clutter_stage_manager_list_stages (ClutterStageManager *stage_manager)
{
ClutterStageManagerPrivate *priv =
clutter_stage_manager_get_instance_private (stage_manager);
return g_slist_copy (priv->stages);
return g_slist_copy (stage_manager->stages);
}
/**
@ -180,24 +129,19 @@ clutter_stage_manager_list_stages (ClutterStageManager *stage_manager)
const GSList *
clutter_stage_manager_peek_stages (ClutterStageManager *stage_manager)
{
ClutterStageManagerPrivate *priv =
clutter_stage_manager_get_instance_private (stage_manager);
return priv->stages;
return stage_manager->stages;
}
void
_clutter_stage_manager_add_stage (ClutterStageManager *stage_manager,
ClutterStage *stage)
{
ClutterStageManagerPrivate *priv =
clutter_stage_manager_get_instance_private (stage_manager);
AtkObject *stage_accessible = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));
AtkObject *stage_manager_accessible =
atk_gobject_accessible_for_object (G_OBJECT (stage_manager));
int index = -1;
if (g_slist_find (priv->stages, stage))
if (g_slist_find (stage_manager->stages, stage))
{
g_warning ("Trying to add a stage to the list of managed stages, "
"but it is already in it, aborting.");
@ -206,8 +150,8 @@ _clutter_stage_manager_add_stage (ClutterStageManager *stage_manager,
g_object_ref_sink (stage);
priv->stages = g_slist_append (priv->stages, stage);
index = g_slist_index (priv->stages, stage);
stage_manager->stages = g_slist_append (stage_manager->stages, stage);
index = g_slist_index (stage_manager->stages, stage);
if (stage_accessible && stage_manager_accessible)
{
@ -216,16 +160,12 @@ _clutter_stage_manager_add_stage (ClutterStageManager *stage_manager,
index, stage_accessible, NULL);
g_signal_emit_by_name (stage_manager_accessible, "create", 0);
}
g_signal_emit (stage_manager, manager_signals[STAGE_ADDED], 0, stage);
}
void
_clutter_stage_manager_remove_stage (ClutterStageManager *stage_manager,
ClutterStage *stage)
{
ClutterStageManagerPrivate *priv =
clutter_stage_manager_get_instance_private (stage_manager);
AtkObject *stage_accessible = clutter_actor_get_accessible (CLUTTER_ACTOR (stage));
AtkObject *stage_manager_accessible =
atk_gobject_accessible_for_object (G_OBJECT (stage_manager));
@ -233,13 +173,11 @@ _clutter_stage_manager_remove_stage (ClutterStageManager *stage_manager,
/* this might be called multiple times from a ::dispose, so it
* needs to just return without warning
*/
if (!g_slist_find (priv->stages, stage))
if (!g_slist_find (stage_manager->stages, stage))
return;
index = g_slist_index (priv->stages, stage);
priv->stages = g_slist_remove (priv->stages, stage);
g_signal_emit (stage_manager, manager_signals[STAGE_REMOVED], 0, stage);
index = g_slist_index (stage_manager->stages, stage);
stage_manager->stages = g_slist_remove (stage_manager->stages, stage);
if (stage_manager_accessible && stage_accessible)
{

View file

@ -34,28 +34,11 @@ G_BEGIN_DECLS
#define CLUTTER_TYPE_STAGE_MANAGER (clutter_stage_manager_get_type ())
CLUTTER_EXPORT
G_DECLARE_DERIVABLE_TYPE (ClutterStageManager,
clutter_stage_manager,
CLUTTER,
STAGE_MANAGER,
GObject)
/**
* ClutterStageManagerClass:
*
* The #ClutterStageManagerClass structure contains only private data
* and should be accessed using the provided API
*/
struct _ClutterStageManagerClass
{
/*< private >*/
GObjectClass parent_class;
void (* stage_added) (ClutterStageManager *stage_manager,
ClutterStage *stage);
void (* stage_removed) (ClutterStageManager *stage_manager,
ClutterStage *stage);
};
G_DECLARE_FINAL_TYPE (ClutterStageManager,
clutter_stage_manager,
CLUTTER,
STAGE_MANAGER,
GObject)
CLUTTER_EXPORT
ClutterStageManager *clutter_stage_manager_get_default (void);