1
0
Fork 0

clutter/context: Track if accessibility enabled

Currently, we would only disable a11y if a certain flag is passed
but the function is always called with NONE flag. Instead
drop the flag, use a new environment variable for that

That value is then used by actors to short-circuit get_accessible
implementation and return NULL if the accessibility is not enabled

Also clean the other accessibility functions

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3917>
This commit is contained in:
Bilal Elmoussaoui 2024-08-07 12:50:45 +02:00 committed by Marge Bot
parent 4eb46eb3d4
commit 9c7eafc8c3
7 changed files with 30 additions and 64 deletions

View file

@ -5462,8 +5462,12 @@ static AtkObject *
clutter_actor_real_get_accessible (ClutterActor *actor) clutter_actor_real_get_accessible (ClutterActor *actor)
{ {
ClutterActorPrivate *priv = actor->priv; ClutterActorPrivate *priv = actor->priv;
if (priv->accessible == NULL) if (priv->accessible == NULL)
{ {
if (!clutter_get_accessibility_enabled ())
return NULL;
priv->accessible = priv->accessible =
g_object_new (CLUTTER_ACTOR_GET_CLASS (actor)->get_accessible_type (), g_object_new (CLUTTER_ACTOR_GET_CLASS (actor)->get_accessible_type (),
NULL); NULL);

View file

@ -33,6 +33,7 @@
static gboolean clutter_disable_mipmap_text = FALSE; static gboolean clutter_disable_mipmap_text = FALSE;
static gboolean clutter_show_fps = FALSE; static gboolean clutter_show_fps = FALSE;
static gboolean clutter_enable_accessibility = TRUE;
#ifdef CLUTTER_ENABLE_DEBUG #ifdef CLUTTER_ENABLE_DEBUG
static const GDebugKey clutter_debug_keys[] = { static const GDebugKey clutter_debug_keys[] = {
@ -167,7 +168,6 @@ clutter_get_text_direction (void)
static gboolean static gboolean
clutter_context_init_real (ClutterContext *context, clutter_context_init_real (ClutterContext *context,
ClutterContextFlags flags,
GError **error) GError **error)
{ {
ClutterContextPrivate *priv = clutter_context_get_instance_private (context); ClutterContextPrivate *priv = clutter_context_get_instance_private (context);
@ -197,7 +197,7 @@ clutter_context_init_real (ClutterContext *context,
context->is_initialized = TRUE; context->is_initialized = TRUE;
/* Initialize a11y */ /* Initialize a11y */
if (!(flags & CLUTTER_CONTEXT_FLAG_NO_A11Y)) if (clutter_enable_accessibility)
{ {
_clutter_accessibility_override_atk_util (); _clutter_accessibility_override_atk_util ();
CLUTTER_NOTE (MISC, "Clutter Accessibility initialized"); CLUTTER_NOTE (MISC, "Clutter Accessibility initialized");
@ -250,14 +250,17 @@ init_clutter_debug (ClutterContext *context)
if (env_string) if (env_string)
clutter_show_fps = TRUE; clutter_show_fps = TRUE;
env_string = g_getenv ("CLUTTER_DISABLE_ACCESSIBILITY");
if (env_string)
clutter_enable_accessibility = FALSE;
env_string = g_getenv ("CLUTTER_DISABLE_MIPMAPPED_TEXT"); env_string = g_getenv ("CLUTTER_DISABLE_MIPMAPPED_TEXT");
if (env_string) if (env_string)
clutter_disable_mipmap_text = TRUE; clutter_disable_mipmap_text = TRUE;
} }
ClutterContext * ClutterContext *
clutter_context_new (ClutterContextFlags flags, clutter_context_new (ClutterBackendConstructor backend_constructor,
ClutterBackendConstructor backend_constructor,
gpointer user_data, gpointer user_data,
GError **error) GError **error)
{ {
@ -285,7 +288,7 @@ clutter_context_new (ClutterContextFlags flags,
NULL); NULL);
priv->pipeline_cache = g_object_new (CLUTTER_TYPE_PIPELINE_CACHE, NULL); priv->pipeline_cache = g_object_new (CLUTTER_TYPE_PIPELINE_CACHE, NULL);
if (!clutter_context_init_real (context, flags, error)) if (!clutter_context_init_real (context, error))
return NULL; return NULL;
return context; return context;
@ -357,3 +360,16 @@ clutter_context_get_color_manager (ClutterContext *context)
return priv->color_manager; return priv->color_manager;
} }
/**
* clutter_get_accessibility_enabled:
*
* Returns whether Clutter has accessibility support enabled.
*
* Return value: %TRUE if Clutter has accessibility support enabled
*/
gboolean
clutter_get_accessibility_enabled (void)
{
return clutter_enable_accessibility;
}

View file

@ -24,11 +24,6 @@
#include "clutter-settings.h" #include "clutter-settings.h"
#include "cogl-pango/cogl-pango.h" #include "cogl-pango/cogl-pango.h"
typedef enum _ClutterContextFlags
{
CLUTTER_CONTEXT_FLAG_NONE = 0,
CLUTTER_CONTEXT_FLAG_NO_A11Y = 1 << 0,
} ClutterContextFlags;
typedef ClutterBackend * (* ClutterBackendConstructor) (gpointer user_data); typedef ClutterBackend * (* ClutterBackendConstructor) (gpointer user_data);
@ -40,8 +35,7 @@ G_DECLARE_FINAL_TYPE (ClutterContext, clutter_context,
/** /**
* clutter_context_new: (skip) * clutter_context_new: (skip)
*/ */
ClutterContext * clutter_context_new (ClutterContextFlags flags, ClutterContext * clutter_context_new (ClutterBackendConstructor backend_constructor,
ClutterBackendConstructor backend_constructor,
gpointer user_data, gpointer user_data,
GError **error); GError **error);

View file

@ -58,10 +58,6 @@ G_DEFINE_QUARK (clutter_pipeline_capability, clutter_pipeline_capability)
/* main context */ /* main context */
static ClutterContext *ClutterCntx = NULL; static ClutterContext *ClutterCntx = NULL;
/* command line options */
static gboolean clutter_is_initialized = FALSE;
static gboolean clutter_enable_accessibility = TRUE;
/* debug flags */ /* debug flags */
guint clutter_debug_flags = 0; guint clutter_debug_flags = 0;
guint clutter_paint_debug_flags = 0; guint clutter_paint_debug_flags = 0;
@ -80,42 +76,6 @@ _clutter_context_get_show_fps (void)
return context->show_fps; return context->show_fps;
} }
/**
* clutter_get_accessibility_enabled:
*
* Returns whether Clutter has accessibility support enabled. As
* least, a value of TRUE means that there are a proper AtkUtil
* implementation available
*
* Return value: %TRUE if Clutter has accessibility support enabled
*/
gboolean
clutter_get_accessibility_enabled (void)
{
return !g_strcmp0 (atk_get_toolkit_name (), "clutter");
}
/**
* clutter_disable_accessibility:
*
* Disable loading the accessibility support. It has the same effect
* as setting the environment variable
* CLUTTER_DISABLE_ACCESSIBILITY. For the same reason, this method
* should be called before clutter_init().
*/
void
clutter_disable_accessibility (void)
{
if (clutter_is_initialized)
{
g_warning ("clutter_disable_accessibility() can only be called before "
"initializing Clutter.");
return;
}
clutter_enable_accessibility = FALSE;
}
static gboolean static gboolean
_clutter_threads_dispatch (gpointer data) _clutter_threads_dispatch (gpointer data)
{ {
@ -358,8 +318,7 @@ _clutter_context_get_default (void)
} }
ClutterContext * ClutterContext *
clutter_create_context (ClutterContextFlags flags, clutter_create_context (ClutterBackendConstructor backend_constructor,
ClutterBackendConstructor backend_constructor,
gpointer user_data, gpointer user_data,
GError **error) GError **error)
{ {
@ -370,13 +329,11 @@ clutter_create_context (ClutterContextFlags flags,
return NULL; return NULL;
} }
ClutterCntx = clutter_context_new (flags, ClutterCntx = clutter_context_new (backend_constructor, user_data,
backend_constructor, user_data,
error); error);
if (!ClutterCntx) if (!ClutterCntx)
return NULL; return NULL;
clutter_is_initialized = TRUE;
g_object_add_weak_pointer (G_OBJECT (ClutterCntx), (gpointer *) &ClutterCntx); g_object_add_weak_pointer (G_OBJECT (ClutterCntx), (gpointer *) &ClutterCntx);
return ClutterCntx; return ClutterCntx;
} }

View file

@ -107,9 +107,6 @@ void clutter_stage_handle_event (ClutterStage *s
CLUTTER_EXPORT CLUTTER_EXPORT
gboolean clutter_get_accessibility_enabled (void); gboolean clutter_get_accessibility_enabled (void);
CLUTTER_EXPORT
void clutter_disable_accessibility (void);
/* Threading functions */ /* Threading functions */
CLUTTER_EXPORT CLUTTER_EXPORT
guint clutter_threads_add_idle (GSourceFunc func, guint clutter_threads_add_idle (GSourceFunc func,

View file

@ -48,8 +48,7 @@
* clutter_create_context: (skip) * clutter_create_context: (skip)
*/ */
CLUTTER_EXPORT CLUTTER_EXPORT
ClutterContext * clutter_create_context (ClutterContextFlags flags, ClutterContext * clutter_create_context (ClutterBackendConstructor backend_constructor,
ClutterBackendConstructor backend_constructor,
gpointer user_data, gpointer user_data,
GError **error); GError **error);

View file

@ -1223,8 +1223,7 @@ init_clutter (MetaBackend *backend,
MetaBackendSource *backend_source; MetaBackendSource *backend_source;
GSource *source; GSource *source;
priv->clutter_context = clutter_create_context (CLUTTER_CONTEXT_FLAG_NONE, priv->clutter_context = clutter_create_context (meta_clutter_backend_constructor,
meta_clutter_backend_constructor,
backend, backend,
error); error);
if (!priv->clutter_context) if (!priv->clutter_context)