summaryrefslogtreecommitdiff
path: root/src/caja-desktop-window.c
diff options
context:
space:
mode:
authorSamuel Thibault <[email protected]>2018-06-05 17:03:19 +0200
committerlukefromdc <[email protected]>2018-06-27 18:50:28 -0400
commitba087de8c7a9f1a4b93fdc74d917465dd2d89eb0 (patch)
tree9c78f9e03231217f2c444e17f2d6a758c009043b /src/caja-desktop-window.c
parent3f19451892020b595a80eaa480c639625e3ee931 (diff)
downloadcaja-ba087de8c7a9f1a4b93fdc74d917465dd2d89eb0.tar.bz2
caja-ba087de8c7a9f1a4b93fdc74d917465dd2d89eb0.tar.xz
desktop window: Add is-desktop AtkObject attribute
Screen readers need to distinguish between the desktop window and normal windows, to be able to provide nicer speech synthesis. This can be done by simply adding an "is-desktop" attribute to the underlying AtkObject. This is here done by introducing a thin caja_desktop_window_accessible_class class which is based on GtkWindowAccessible and just appends the attribute. Closes: #999
Diffstat (limited to 'src/caja-desktop-window.c')
-rw-r--r--src/caja-desktop-window.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/caja-desktop-window.c b/src/caja-desktop-window.c
index 16242dcd..b3d24ffe 100644
--- a/src/caja-desktop-window.c
+++ b/src/caja-desktop-window.c
@@ -37,6 +37,41 @@
#include <gio/gio.h>
#include <glib/gi18n.h>
+/* Tell screen readers that this is a desktop window */
+
+G_DEFINE_TYPE (CajaDesktopWindowAccessible, caja_desktop_window_accessible,
+ GTK_TYPE_WINDOW_ACCESSIBLE);
+
+static AtkAttributeSet *
+desktop_get_attributes (AtkObject *accessible)
+{
+ AtkAttributeSet *attributes;
+ AtkAttribute *is_desktop;
+
+ attributes = ATK_OBJECT_CLASS (caja_desktop_window_accessible_parent_class)->get_attributes (accessible);
+
+ is_desktop = g_malloc (sizeof (AtkAttribute));
+ is_desktop->name = g_strdup ("is-desktop");
+ is_desktop->value = g_strdup ("true");
+
+ attributes = g_slist_append (attributes, is_desktop);
+
+ return attributes;
+}
+
+static void
+caja_desktop_window_accessible_init (CajaDesktopWindowAccessible *window)
+{
+}
+
+static void
+caja_desktop_window_accessible_class_init (CajaDesktopWindowAccessibleClass *klass)
+{
+ AtkObjectClass *aclass = ATK_OBJECT_CLASS (klass);
+
+ aclass->get_attributes = desktop_get_attributes;
+}
+
struct CajaDesktopWindowDetails
{
gulong size_changed_id;
@@ -289,6 +324,8 @@ caja_desktop_window_class_init (CajaDesktopWindowClass *klass)
wclass->map = map;
wclass->draw = draw;
+ gtk_widget_class_set_accessible_type (wclass, CAJA_TYPE_DESKTOP_WINDOW_ACCESSIBLE);
+
nclass->window_type = CAJA_WINDOW_DESKTOP;
nclass->get_title = real_get_title;
nclass->get_icon = real_get_icon;