Skip to content

Commit df6643a

Browse files
sthibaullukefromdc
authored andcommitted
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
1 parent 3720401 commit df6643a

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

src/caja-desktop-window.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,41 @@
3737
#include <gio/gio.h>
3838
#include <glib/gi18n.h>
3939

40+
/* Tell screen readers that this is a desktop window */
41+
42+
G_DEFINE_TYPE (CajaDesktopWindowAccessible, caja_desktop_window_accessible,
43+
GTK_TYPE_WINDOW_ACCESSIBLE);
44+
45+
static AtkAttributeSet *
46+
desktop_get_attributes (AtkObject *accessible)
47+
{
48+
AtkAttributeSet *attributes;
49+
AtkAttribute *is_desktop;
50+
51+
attributes = ATK_OBJECT_CLASS (caja_desktop_window_accessible_parent_class)->get_attributes (accessible);
52+
53+
is_desktop = g_malloc (sizeof (AtkAttribute));
54+
is_desktop->name = g_strdup ("is-desktop");
55+
is_desktop->value = g_strdup ("true");
56+
57+
attributes = g_slist_append (attributes, is_desktop);
58+
59+
return attributes;
60+
}
61+
62+
static void
63+
caja_desktop_window_accessible_init (CajaDesktopWindowAccessible *window)
64+
{
65+
}
66+
67+
static void
68+
caja_desktop_window_accessible_class_init (CajaDesktopWindowAccessibleClass *klass)
69+
{
70+
AtkObjectClass *aclass = ATK_OBJECT_CLASS (klass);
71+
72+
aclass->get_attributes = desktop_get_attributes;
73+
}
74+
4075
struct CajaDesktopWindowDetails
4176
{
4277
gulong size_changed_id;
@@ -299,6 +334,8 @@ caja_desktop_window_class_init (CajaDesktopWindowClass *klass)
299334
wclass->map = map;
300335
wclass->draw = draw;
301336

337+
gtk_widget_class_set_accessible_type (wclass, CAJA_TYPE_DESKTOP_WINDOW_ACCESSIBLE);
338+
302339
nclass->window_type = CAJA_WINDOW_DESKTOP;
303340
nclass->get_title = real_get_title;
304341
nclass->get_icon = real_get_icon;

src/caja-desktop-window.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
#include "caja-application.h"
3333
#include "caja-spatial-window.h"
3434

35+
#include <gtk/gtk-a11y.h>
36+
3537
#define CAJA_TYPE_DESKTOP_WINDOW caja_desktop_window_get_type()
3638
#define CAJA_DESKTOP_WINDOW(obj) \
3739
(G_TYPE_CHECK_INSTANCE_CAST ((obj), CAJA_TYPE_DESKTOP_WINDOW, CajaDesktopWindow))
@@ -64,4 +66,16 @@ CajaDesktopWindow *caja_desktop_window_new (CajaApplication *app
6466
void caja_desktop_window_update_directory (CajaDesktopWindow *window);
6567
gboolean caja_desktop_window_loaded (CajaDesktopWindow *window);
6668

69+
#define CAJA_TYPE_DESKTOP_WINDOW_ACCESSIBLE caja_desktop_window_accessible_get_type()
70+
71+
typedef struct
72+
{
73+
GtkWindowAccessible parent_spot;
74+
} CajaDesktopWindowAccessible;
75+
76+
typedef struct
77+
{
78+
GtkWindowAccessibleClass parent_spot;
79+
} CajaDesktopWindowAccessibleClass;
80+
6781
#endif /* CAJA_DESKTOP_WINDOW_H */

0 commit comments

Comments
 (0)