Bug#840568: caja: Impossible to have speech feedback when items are set in icons

2016-10-12 Thread Luke Yelavich
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,
+ 

Bug#840568: caja: Impossible to have speech feedback when items are set in icons

2016-10-12 Thread Luke Yelavich
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,
+ 

Bug#840568: caja: Impossible to have speech feedback when items are set in icons

2016-10-12 Thread Jean-Philippe MENGUAL
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