1/* gtkatcontextprivate.h: Private header for GtkATContext
2 *
3 * Copyright 2020 GNOME Foundation
4 *
5 * SPDX-License-Identifier: LGPL-2.1-or-later
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
19 */
20
21#pragma once
22
23#include "gtkatcontext.h"
24
25#include "gtkaccessibleattributesetprivate.h"
26
27G_BEGIN_DECLS
28
29typedef enum {
30 GTK_ACCESSIBLE_PROPERTY_CHANGE_AUTOCOMPLETE = 1 << GTK_ACCESSIBLE_PROPERTY_AUTOCOMPLETE,
31 GTK_ACCESSIBLE_PROPERTY_CHANGE_DESCRIPTION = 1 << GTK_ACCESSIBLE_PROPERTY_DESCRIPTION,
32 GTK_ACCESSIBLE_PROPERTY_CHANGE_HAS_POPUP = 1 << GTK_ACCESSIBLE_PROPERTY_HAS_POPUP,
33 GTK_ACCESSIBLE_PROPERTY_CHANGE_KEY_SHORTCUTS = 1 << GTK_ACCESSIBLE_PROPERTY_KEY_SHORTCUTS,
34 GTK_ACCESSIBLE_PROPERTY_CHANGE_LABEL = 1 << GTK_ACCESSIBLE_PROPERTY_LABEL,
35 GTK_ACCESSIBLE_PROPERTY_CHANGE_LEVEL = 1 << GTK_ACCESSIBLE_PROPERTY_LEVEL,
36 GTK_ACCESSIBLE_PROPERTY_CHANGE_MODAL = 1 << GTK_ACCESSIBLE_PROPERTY_MODAL,
37 GTK_ACCESSIBLE_PROPERTY_CHANGE_MULTI_LINE = 1 << GTK_ACCESSIBLE_PROPERTY_MULTI_LINE,
38 GTK_ACCESSIBLE_PROPERTY_CHANGE_MULTI_SELECTABLE = 1 << GTK_ACCESSIBLE_PROPERTY_MULTI_SELECTABLE,
39 GTK_ACCESSIBLE_PROPERTY_CHANGE_ORIENTATION = 1 << GTK_ACCESSIBLE_PROPERTY_ORIENTATION,
40 GTK_ACCESSIBLE_PROPERTY_CHANGE_PLACEHOLDER = 1 << GTK_ACCESSIBLE_PROPERTY_PLACEHOLDER,
41 GTK_ACCESSIBLE_PROPERTY_CHANGE_READ_ONLY = 1 << GTK_ACCESSIBLE_PROPERTY_READ_ONLY,
42 GTK_ACCESSIBLE_PROPERTY_CHANGE_REQUIRED = 1 << GTK_ACCESSIBLE_PROPERTY_REQUIRED,
43 GTK_ACCESSIBLE_PROPERTY_CHANGE_ROLE_DESCRIPTION = 1 << GTK_ACCESSIBLE_PROPERTY_ROLE_DESCRIPTION,
44 GTK_ACCESSIBLE_PROPERTY_CHANGE_SORT = 1 << GTK_ACCESSIBLE_PROPERTY_SORT,
45 GTK_ACCESSIBLE_PROPERTY_CHANGE_VALUE_MAX = 1 << GTK_ACCESSIBLE_PROPERTY_VALUE_MAX,
46 GTK_ACCESSIBLE_PROPERTY_CHANGE_VALUE_MIN = 1 << GTK_ACCESSIBLE_PROPERTY_VALUE_MIN,
47 GTK_ACCESSIBLE_PROPERTY_CHANGE_VALUE_NOW = 1 << GTK_ACCESSIBLE_PROPERTY_VALUE_NOW,
48 GTK_ACCESSIBLE_PROPERTY_CHANGE_VALUE_TEXT = 1 << GTK_ACCESSIBLE_PROPERTY_VALUE_TEXT
49} GtkAccessiblePropertyChange;
50
51typedef enum {
52 GTK_ACCESSIBLE_RELATION_CHANGE_ACTIVE_DESCENDANT = 1 << GTK_ACCESSIBLE_RELATION_ACTIVE_DESCENDANT,
53 GTK_ACCESSIBLE_RELATION_CHANGE_COL_COUNT = 1 << GTK_ACCESSIBLE_RELATION_COL_COUNT,
54 GTK_ACCESSIBLE_RELATION_CHANGE_COL_INDEX = 1 << GTK_ACCESSIBLE_RELATION_COL_INDEX,
55 GTK_ACCESSIBLE_RELATION_CHANGE_COL_INDEX_TEXT = 1 << GTK_ACCESSIBLE_RELATION_COL_INDEX_TEXT,
56 GTK_ACCESSIBLE_RELATION_CHANGE_COL_SPAN = 1 << GTK_ACCESSIBLE_RELATION_COL_SPAN,
57 GTK_ACCESSIBLE_RELATION_CHANGE_CONTROLS = 1 << GTK_ACCESSIBLE_RELATION_CONTROLS,
58 GTK_ACCESSIBLE_RELATION_CHANGE_DESCRIBED_BY = 1 << GTK_ACCESSIBLE_RELATION_DESCRIBED_BY,
59 GTK_ACCESSIBLE_RELATION_CHANGE_DETAILS = 1 << GTK_ACCESSIBLE_RELATION_DETAILS,
60 GTK_ACCESSIBLE_RELATION_CHANGE_ERROR_MESSAGE = 1 << GTK_ACCESSIBLE_RELATION_ERROR_MESSAGE,
61 GTK_ACCESSIBLE_RELATION_CHANGE_FLOW_TO = 1 << GTK_ACCESSIBLE_RELATION_FLOW_TO,
62 GTK_ACCESSIBLE_RELATION_CHANGE_LABELLED_BY = 1 << GTK_ACCESSIBLE_RELATION_LABELLED_BY,
63 GTK_ACCESSIBLE_RELATION_CHANGE_OWNS = 1 << GTK_ACCESSIBLE_RELATION_OWNS,
64 GTK_ACCESSIBLE_RELATION_CHANGE_POS_IN_SET = 1 << GTK_ACCESSIBLE_RELATION_POS_IN_SET,
65 GTK_ACCESSIBLE_RELATION_CHANGE_ROW_COUNT = 1 << GTK_ACCESSIBLE_RELATION_ROW_COUNT,
66 GTK_ACCESSIBLE_RELATION_CHANGE_ROW_INDEX = 1 << GTK_ACCESSIBLE_RELATION_ROW_INDEX,
67 GTK_ACCESSIBLE_RELATION_CHANGE_ROW_INDEX_TEXT = 1 << GTK_ACCESSIBLE_RELATION_ROW_INDEX_TEXT,
68 GTK_ACCESSIBLE_RELATION_CHANGE_ROW_SPAN = 1 << GTK_ACCESSIBLE_RELATION_ROW_SPAN,
69 GTK_ACCESSIBLE_RELATION_CHANGE_SET_SIZE = 1 << GTK_ACCESSIBLE_RELATION_SET_SIZE
70} GtkAccessibleRelationChange;
71
72typedef enum {
73 GTK_ACCESSIBLE_STATE_CHANGE_BUSY = 1 << GTK_ACCESSIBLE_STATE_BUSY,
74 GTK_ACCESSIBLE_STATE_CHANGE_CHECKED = 1 << GTK_ACCESSIBLE_STATE_CHECKED,
75 GTK_ACCESSIBLE_STATE_CHANGE_DISABLED = 1 << GTK_ACCESSIBLE_STATE_DISABLED,
76 GTK_ACCESSIBLE_STATE_CHANGE_EXPANDED = 1 << GTK_ACCESSIBLE_STATE_EXPANDED,
77 GTK_ACCESSIBLE_STATE_CHANGE_HIDDEN = 1 << GTK_ACCESSIBLE_STATE_HIDDEN,
78 GTK_ACCESSIBLE_STATE_CHANGE_INVALID = 1 << GTK_ACCESSIBLE_STATE_INVALID,
79 GTK_ACCESSIBLE_STATE_CHANGE_PRESSED = 1 << GTK_ACCESSIBLE_STATE_PRESSED,
80 GTK_ACCESSIBLE_STATE_CHANGE_SELECTED = 1 << GTK_ACCESSIBLE_STATE_SELECTED
81} GtkAccessibleStateChange;
82
83typedef enum {
84 GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSABLE,
85 GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED,
86 GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE
87} GtkAccessiblePlatformState;
88
89typedef enum {
90 GTK_ACCESSIBLE_PLATFORM_CHANGE_FOCUSABLE = 1 << GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSABLE,
91 GTK_ACCESSIBLE_PLATFORM_CHANGE_FOCUSED = 1 << GTK_ACCESSIBLE_PLATFORM_STATE_FOCUSED,
92 GTK_ACCESSIBLE_PLATFORM_CHANGE_ACTIVE = 1 << GTK_ACCESSIBLE_PLATFORM_STATE_ACTIVE,
93} GtkAccessiblePlatformChange;
94
95typedef enum {
96 GTK_ACCESSIBLE_CHILD_STATE_ADDED,
97 GTK_ACCESSIBLE_CHILD_STATE_REMOVED
98} GtkAccessibleChildState;
99
100typedef enum {
101 GTK_ACCESSIBLE_CHILD_CHANGE_ADDED = 1 << GTK_ACCESSIBLE_CHILD_STATE_ADDED,
102 GTK_ACCESSIBLE_CHILD_CHANGE_REMOVED = 1 << GTK_ACCESSIBLE_CHILD_STATE_REMOVED
103} GtkAccessibleChildChange;
104
105struct _GtkATContext
106{
107 GObject parent_instance;
108
109 GtkAccessibleRole accessible_role;
110 GtkAccessible *accessible;
111 GdkDisplay *display;
112
113 GtkAccessibleAttributeSet *states;
114 GtkAccessibleAttributeSet *properties;
115 GtkAccessibleAttributeSet *relations;
116
117 GtkAccessibleStateChange updated_states;
118 GtkAccessiblePropertyChange updated_properties;
119 GtkAccessibleRelationChange updated_relations;
120 GtkAccessiblePlatformChange updated_platform;
121
122 guint realized : 1;
123};
124
125struct _GtkATContextClass
126{
127 GObjectClass parent_class;
128
129 void (* state_change) (GtkATContext *self,
130 GtkAccessibleStateChange changed_states,
131 GtkAccessiblePropertyChange changed_properties,
132 GtkAccessibleRelationChange changed_relations,
133 GtkAccessibleAttributeSet *states,
134 GtkAccessibleAttributeSet *properties,
135 GtkAccessibleAttributeSet *relations);
136
137 void (* platform_change) (GtkATContext *self,
138 GtkAccessiblePlatformChange changed_platform);
139
140 void (* bounds_change) (GtkATContext *self);
141
142 void (* child_change) (GtkATContext *self,
143 GtkAccessibleChildChange changed_child,
144 GtkAccessible *child);
145
146 void (* realize) (GtkATContext *self);
147 void (* unrealize) (GtkATContext *self);
148};
149
150GtkATContext * gtk_at_context_clone (GtkATContext *self,
151 GtkAccessibleRole role,
152 GtkAccessible *accessible,
153 GdkDisplay *display);
154
155void gtk_at_context_set_display (GtkATContext *self,
156 GdkDisplay *display);
157GdkDisplay * gtk_at_context_get_display (GtkATContext *self);
158void gtk_at_context_set_accessible_role (GtkATContext *self,
159 GtkAccessibleRole role);
160
161void gtk_at_context_realize (GtkATContext *self);
162void gtk_at_context_unrealize (GtkATContext *self);
163gboolean gtk_at_context_is_realized (GtkATContext *self);
164
165void gtk_at_context_update (GtkATContext *self);
166
167void gtk_at_context_set_accessible_state (GtkATContext *self,
168 GtkAccessibleState state,
169 GtkAccessibleValue *value);
170gboolean gtk_at_context_has_accessible_state (GtkATContext *self,
171 GtkAccessibleState state);
172GtkAccessibleValue * gtk_at_context_get_accessible_state (GtkATContext *self,
173 GtkAccessibleState state);
174void gtk_at_context_set_accessible_property (GtkATContext *self,
175 GtkAccessibleProperty property,
176 GtkAccessibleValue *value);
177gboolean gtk_at_context_has_accessible_property (GtkATContext *self,
178 GtkAccessibleProperty property);
179GtkAccessibleValue * gtk_at_context_get_accessible_property (GtkATContext *self,
180 GtkAccessibleProperty property);
181void gtk_at_context_set_accessible_relation (GtkATContext *self,
182 GtkAccessibleRelation property,
183 GtkAccessibleValue *value);
184gboolean gtk_at_context_has_accessible_relation (GtkATContext *self,
185 GtkAccessibleRelation relation);
186GtkAccessibleValue * gtk_at_context_get_accessible_relation (GtkATContext *self,
187 GtkAccessibleRelation relation);
188
189char * gtk_at_context_get_name (GtkATContext *self);
190char * gtk_at_context_get_description (GtkATContext *self);
191
192void gtk_at_context_platform_changed (GtkATContext *self,
193 GtkAccessiblePlatformChange change);
194void gtk_at_context_bounds_changed (GtkATContext *self);
195void gtk_at_context_child_changed (GtkATContext *self,
196 GtkAccessibleChildChange change,
197 GtkAccessible *child);
198
199const char * gtk_accessible_property_get_attribute_name (GtkAccessibleProperty property);
200const char * gtk_accessible_relation_get_attribute_name (GtkAccessibleRelation relation);
201const char * gtk_accessible_state_get_attribute_name (GtkAccessibleState state);
202
203G_END_DECLS
204

source code of gtk/gtk/gtkatcontextprivate.h