Bug#840568: caja: Impossible to have speech feedback when items are set in icons
You also want the commit after that, which fixes a GTK critical warning when opening the properties/emblems dialog. Here is a patch with both fixes combined. diff --git a/eel/eel-accessibility.c b/eel/eel-accessibility.c index 707756d..da586dd 100644 --- a/eel/eel-accessibility.c +++ b/eel/eel-accessibility.c @@ -63,6 +63,7 @@ eel_accessibility_set_up_label_widget_relation (GtkWidget *label, GtkWidget *wid * * Return value: the registered type, or 0 on failure. **/ +#if !GTK_CHECK_VERSION(3, 0, 0) GType eel_accessibility_create_derived_type (const char *type_name, GType existing_gobject_with_proxy, @@ -113,7 +114,7 @@ eel_accessibility_create_derived_type (const char *type_name, return type; } - +#endif static GQuark get_quark_accessible (void) @@ -207,6 +208,7 @@ eel_accessibility_destroy (gpointer data, * * Return value: @atk_object. **/ +#if !GTK_CHECK_VERSION(3, 0, 0) AtkObject * eel_accessibility_set_atk_object_return (gpointer object, AtkObject *atk_object) @@ -224,6 +226,7 @@ eel_accessibility_set_atk_object_return (gpointer object, return atk_object; } +#endif static GailTextUtil * get_simple_text (gpointer object) diff --git a/eel/eel-accessibility.h b/eel/eel-accessibility.h index 45514c9..a1f68d5 100644 --- a/eel/eel-accessibility.h +++ b/eel/eel-accessibility.h @@ -38,11 +38,13 @@ typedef void (*EelAccessibilityClassInitFn)(AtkObjectClass *klass); AtkObject*eel_accessibility_get_atk_object(gpointer object); AtkObject*eel_accessibility_for_object(gpointer object); gpointer eel_accessibility_get_gobject (AtkObject*object); +#if !GTK_CHECK_VERSION(3, 0, 0) AtkObject*eel_accessibility_set_atk_object_return (gpointer object, AtkObject*atk_object); GType eel_accessibility_create_derived_type (const char *type_name, GType existing_gobject_with_proxy, EelAccessibilityClassInitFn class_init); +#endif void eel_accessibility_set_name (gpointer object, const char *name); void eel_accessibility_set_description (gpointer object, diff --git a/eel/eel-canvas.c b/eel/eel-canvas.c index ae4faaa..7413214 100644 --- a/eel/eel-canvas.c +++ b/eel/eel-canvas.c @@ -68,6 +68,9 @@ #include #include #include +#if GTK_CHECK_VERSION(3,2,0) +#include +#endif #include #if GTK_CHECK_VERSION(3,0,0) # include @@ -2158,6 +2161,25 @@ eel_canvas_accessible_ref_child (AtkObject *obj, return atk_object; } +#if GTK_CHECK_VERSION(3, 0, 0) +G_DEFINE_TYPE (EelCanvasAccessible, eel_canvas_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE) + +static void +eel_canvas_accessible_class_init (EelCanvasAccessibleClass *klass) +{ +AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); +accessible_parent_class = g_type_class_peek_parent (atk_class); + +atk_class->initialize = eel_canvas_accessible_initialize; +atk_class->get_n_children = eel_canvas_accessible_get_n_children; +atk_class->ref_child = eel_canvas_accessible_ref_child; +} + +static void +eel_canvas_accessible_init (EelCanvasAccessible *accessible) +{ +} +#else static void eel_canvas_accessible_class_init (AtkObjectClass *klass) { @@ -2275,7 +2297,7 @@ eel_canvas_accessible_factory_get_type (void) return type; } - +#endif /* Class initialization function for EelCanvasClass */ static void @@ -2336,9 +2358,13 @@ eel_canvas_class_init (EelCanvasClass *klass) G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT); #endif +#if GTK_CHECK_VERSION(3, 0, 0) +gtk_widget_class_set_accessible_type (widget_class, eel_canvas_accessible_get_type ()); +#else atk_registry_set_factory_type (atk_get_default_registry (), EEL_TYPE_CANVAS, eel_canvas_accessible_factory_get_type ()); +#endif } /* Callback used when the root item of a canvas is destroyed. The user should @@ -3424,7 +3450,7 @@ idle_handler (gpointer data) { EelCanvas *canvas; -#if !GTK_CHECK_VERSION (3, 0, 0) +#if !GTK_CHECK_VERSION(3, 0, 0) GDK_THREADS_ENTER (); #endif @@ -4270,6 +4296,43 @@ eel_canvas_item_accessible_ref_state_set (AtkObject *accessible) return state_set; } +#if GTK_CHECK_VERSION(3, 0, 0) +static GType eel_canvas_item_accessible_get_type (void); + +typedef struct _EelCanvasItemAccessible EelCanvasItemAccessible; +typedef struct _EelCanvasItemAccessibleClass EelCanvasItemAccessibleClass; + +struct _EelCanvasItemAccessible +{ +GtkAccessible parent; +}; + +struct _EelCanvasItemAccessibleClass +{ +GtkAccessibleClass parent_class; +}; + +G_DEFINE_TYPE_WITH_CODE (EelCanvasItemAccessible, + eel_canvas_item_accessible, + ATK_TYPE_GOBJECT_ACCESSIBLE
Bug#840568: caja: Impossible to have speech feedback when items are set in icons
You also want the commit after that, which slightly changes the way things work in eel/eel-labeled-image.c to fix a GTK critical warning when opening the properties/emblems dialog. Attached ia a diff with both patches combined. diff --git a/eel/eel-accessibility.c b/eel/eel-accessibility.c index 707756d..da586dd 100644 --- a/eel/eel-accessibility.c +++ b/eel/eel-accessibility.c @@ -63,6 +63,7 @@ eel_accessibility_set_up_label_widget_relation (GtkWidget *label, GtkWidget *wid * * Return value: the registered type, or 0 on failure. **/ +#if !GTK_CHECK_VERSION(3, 0, 0) GType eel_accessibility_create_derived_type (const char *type_name, GType existing_gobject_with_proxy, @@ -113,7 +114,7 @@ eel_accessibility_create_derived_type (const char *type_name, return type; } - +#endif static GQuark get_quark_accessible (void) @@ -207,6 +208,7 @@ eel_accessibility_destroy (gpointer data, * * Return value: @atk_object. **/ +#if !GTK_CHECK_VERSION(3, 0, 0) AtkObject * eel_accessibility_set_atk_object_return (gpointer object, AtkObject *atk_object) @@ -224,6 +226,7 @@ eel_accessibility_set_atk_object_return (gpointer object, return atk_object; } +#endif static GailTextUtil * get_simple_text (gpointer object) diff --git a/eel/eel-accessibility.h b/eel/eel-accessibility.h index 45514c9..a1f68d5 100644 --- a/eel/eel-accessibility.h +++ b/eel/eel-accessibility.h @@ -38,11 +38,13 @@ typedef void (*EelAccessibilityClassInitFn)(AtkObjectClass *klass); AtkObject*eel_accessibility_get_atk_object(gpointer object); AtkObject*eel_accessibility_for_object(gpointer object); gpointer eel_accessibility_get_gobject (AtkObject*object); +#if !GTK_CHECK_VERSION(3, 0, 0) AtkObject*eel_accessibility_set_atk_object_return (gpointer object, AtkObject*atk_object); GType eel_accessibility_create_derived_type (const char *type_name, GType existing_gobject_with_proxy, EelAccessibilityClassInitFn class_init); +#endif void eel_accessibility_set_name (gpointer object, const char *name); void eel_accessibility_set_description (gpointer object, diff --git a/eel/eel-canvas.c b/eel/eel-canvas.c index ae4faaa..7413214 100644 --- a/eel/eel-canvas.c +++ b/eel/eel-canvas.c @@ -68,6 +68,9 @@ #include #include #include +#if GTK_CHECK_VERSION(3,2,0) +#include +#endif #include #if GTK_CHECK_VERSION(3,0,0) # include @@ -2158,6 +2161,25 @@ eel_canvas_accessible_ref_child (AtkObject *obj, return atk_object; } +#if GTK_CHECK_VERSION(3, 0, 0) +G_DEFINE_TYPE (EelCanvasAccessible, eel_canvas_accessible, GTK_TYPE_CONTAINER_ACCESSIBLE) + +static void +eel_canvas_accessible_class_init (EelCanvasAccessibleClass *klass) +{ +AtkObjectClass *atk_class = ATK_OBJECT_CLASS (klass); +accessible_parent_class = g_type_class_peek_parent (atk_class); + +atk_class->initialize = eel_canvas_accessible_initialize; +atk_class->get_n_children = eel_canvas_accessible_get_n_children; +atk_class->ref_child = eel_canvas_accessible_ref_child; +} + +static void +eel_canvas_accessible_init (EelCanvasAccessible *accessible) +{ +} +#else static void eel_canvas_accessible_class_init (AtkObjectClass *klass) { @@ -2275,7 +2297,7 @@ eel_canvas_accessible_factory_get_type (void) return type; } - +#endif /* Class initialization function for EelCanvasClass */ static void @@ -2336,9 +2358,13 @@ eel_canvas_class_init (EelCanvasClass *klass) G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT); #endif +#if GTK_CHECK_VERSION(3, 0, 0) +gtk_widget_class_set_accessible_type (widget_class, eel_canvas_accessible_get_type ()); +#else atk_registry_set_factory_type (atk_get_default_registry (), EEL_TYPE_CANVAS, eel_canvas_accessible_factory_get_type ()); +#endif } /* Callback used when the root item of a canvas is destroyed. The user should @@ -3424,7 +3450,7 @@ idle_handler (gpointer data) { EelCanvas *canvas; -#if !GTK_CHECK_VERSION (3, 0, 0) +#if !GTK_CHECK_VERSION(3, 0, 0) GDK_THREADS_ENTER (); #endif @@ -4270,6 +4296,43 @@ eel_canvas_item_accessible_ref_state_set (AtkObject *accessible) return state_set; } +#if GTK_CHECK_VERSION(3, 0, 0) +static GType eel_canvas_item_accessible_get_type (void); + +typedef struct _EelCanvasItemAccessible EelCanvasItemAccessible; +typedef struct _EelCanvasItemAccessibleClass EelCanvasItemAccessibleClass; + +struct _EelCanvasItemAccessible +{ +GtkAccessible parent; +}; + +struct _EelCanvasItemAccessibleClass +{ +GtkAccessibleClass parent_class; +}; + +G_DEFINE_TYPE_WITH_CODE (EelCanvasItemAccessible, + eel_canvas
Bug#840568: caja: Impossible to have speech feedback when items are set in icons
Package: caja Version: 1.16.0-1 Severity: normal Dear Maintainer, *** Reporter, please consider answering these questions, where appropriate *** * What led up to the situation? Switch from 1.12 to 1.14. Just fixed in 1.16. I use Orca 3.20, 3.22 as well. * What exactly did you do (or not do) that was effective (or ineffective)? 1. Enable accessibility in Preferences. 2. Enable Orca in Universal Access 3. `est if it works: alt-f1, arrow keys should speak "Accessories" and other items. 4. alt-ctrl-d 5. Press arrow keys. The focus moves, but no feedback. 6. Open Home folder. 7. Try browsing files with icon view. No feedback. 8. Try browsing with list or compact view, Orca speaks. * What was the outcome of this action? No sound on desktop or in file manager if icon view is active. * What outcome did you expect instead? Should speak. Otherwise, MATE desktop is not accessible for disabled users with assistive techno. *** End of the template - remove these template lines *** Here's a patch, accepted upstream, but I fixed a typo (inherritance) in Debian's patch. See bug 590 upstream for detailed explanation by Luke about how he fixed the issue. Thanks -- System Information: Debian Release: stretch/sid APT prefers testing APT policy: (500, 'testing') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.7.0-1-amd64 (SMP w/4 CPU cores) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: systemd (via /run/systemd/system) Versions of packages caja depends on: ii caja-common 1.16.0-1 ii desktop-file-utils0.23-1 ii gvfs 1.30.0-1 ii libatk1.0-0 2.22.0-1 ii libc6 2.24-3 ii libcairo-gobject2 1.14.6-1+b1 ii libcairo2 1.14.6-1+b1 ii libcaja-extension11.16.0-1 ii libexempi32.3.0-2 ii libexif12 0.6.21-2 ii libgail-3-0 3.22.1-1 ii libgdk-pixbuf2.0-02.36.0-1 ii libglib2.0-0 2.50.0-2 ii libglib2.0-data 2.50.0-2 ii libgtk-3-03.22.1-1 ii libice6 2:1.0.9-1+b1 ii libmate-desktop-2-17 1.16.0-1 ii libpango-1.0-01.40.3-2 ii libpangocairo-1.0-0 1.40.3-2 ii libselinux1 2.5-3 ii libsm62:1.2.2-1+b1 ii libstartup-notification0 0.12-4 ii libunique-3.0-0 3.0.2-2 ii libx11-6 2:1.6.3-1 ii libxext6 2:1.3.3-1 ii libxml2 2.9.4+dfsg1-2 ii libxrender1 1:0.9.9-2 ii mate-desktop 1.16.0-1 ii shared-mime-info 1.7-1 Versions of packages caja recommends: ii gvfs-backends 1.30.0-1 Versions of packages caja suggests: ii engrampa1.16.0-1 pn gstreamer1.0-tools pn meld -- no debconf information >From 076b8582e4c834db60070fe441d7977716637721 Mon Sep 17 00:00:00 2001 From: Luke Yelavich Date: Sat, 8 Oct 2016 12:22:45 +1100 Subject: [PATCH] Fix accessible object inheritance when used with GTK >= 3.2 Also disable eel accessibility code that is not needed. Fixes https://github.com/mate-desktop/caja/issues/590 --- eel/eel-accessibility.c | 5 ++- eel/eel-accessibility.h | 2 + eel/eel-canvas.c | 84 +-- eel/eel-canvas.h | 20 + eel/eel-editable-label.c | 55 ++- eel/eel-labeled-image.c | 77 libcaja-private/caja-icon-container.c | 57 src/caja-zoom-control.c | 48 8 files changed, 343 insertions(+), 5 deletions(-) diff --git a/eel/eel-accessibility.c b/eel/eel-accessibility.c index 707756d..a344bd8 100644 --- a/eel/eel-accessibility.c +++ b/eel/eel-accessibility.c @@ -63,6 +63,7 @@ eel_accessibility_set_up_label_widget_relation (GtkWidget *label, GtkWidget *wid * * Return value: the registered type, or 0 on failure. **/ +#if !GTK_CHECK_VERSION(3, 2, 0) GType eel_accessibility_create_derived_type (const char *type_name, GType existing_gobject_with_proxy, @@ -113,7 +114,7 @@ eel_accessibility_create_derived_type (const char *type_name, return type; } - +#endif static GQuark get_quark_accessible (void) @@ -207,6 +208,7 @@ eel_accessibility_destroy (gpointer data, * * Return value: @atk_object. **/ +#if !GTK_CHECK_VERSION(3, 2, 0) AtkObject * eel_accessibility_set_atk_object_return (gpointer object, AtkObject *atk_object) @@ -224,6 +226,7 @@ eel_accessibility_set_atk_object_return (gpointer object, return atk_object; } +#endif static GailTextUtil * get_simple_text (gpointer object) diff --git a/eel/eel-accessibility.h b/eel/eel-accessibility.h index 45514c9..b4ca8cb 100644 --- a/eel/eel