1#[cfg(feature = "v4_14")]
6#[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
7use crate::AccessibleAnnouncementPriority;
8#[cfg(feature = "v4_10")]
9#[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
10use crate::{ATContext, AccessiblePlatformState};
11use crate::{AccessibleProperty, AccessibleRelation, AccessibleRole, AccessibleState, ffi};
12use glib::{
13 prelude::*,
14 signal::{SignalHandlerId, connect_raw},
15 translate::*,
16};
17use std::boxed::Box as Box_;
18
19glib::wrapper! {
20 #[doc(alias = "GtkAccessible")]
21 pub struct Accessible(Interface<ffi::GtkAccessible, ffi::GtkAccessibleInterface>);
22
23 match fn {
24 type_ => || ffi::gtk_accessible_get_type(),
25 }
26}
27
28impl Accessible {
29 pub const NONE: Option<&'static Accessible> = None;
30}
31
32pub trait AccessibleExt: IsA<Accessible> + 'static {
33 #[cfg(feature = "v4_14")]
34 #[cfg_attr(docsrs, doc(cfg(feature = "v4_14")))]
35 #[doc(alias = "gtk_accessible_announce")]
36 fn announce(&self, message: &str, priority: AccessibleAnnouncementPriority) {
37 unsafe {
38 ffi::gtk_accessible_announce(
39 self.as_ref().to_glib_none().0,
40 message.to_glib_none().0,
41 priority.into_glib(),
42 );
43 }
44 }
45
46 #[cfg(feature = "v4_22")]
47 #[cfg_attr(docsrs, doc(cfg(feature = "v4_22")))]
48 #[doc(alias = "gtk_accessible_get_accessible_id")]
49 #[doc(alias = "get_accessible_id")]
50 fn accessible_id(&self) -> Option<glib::GString> {
51 unsafe {
52 from_glib_full(ffi::gtk_accessible_get_accessible_id(
53 self.as_ref().to_glib_none().0,
54 ))
55 }
56 }
57
58 #[cfg(feature = "v4_10")]
59 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
60 #[doc(alias = "gtk_accessible_get_accessible_parent")]
61 #[doc(alias = "get_accessible_parent")]
62 #[must_use]
63 fn accessible_parent(&self) -> Option<Accessible> {
64 unsafe {
65 from_glib_full(ffi::gtk_accessible_get_accessible_parent(
66 self.as_ref().to_glib_none().0,
67 ))
68 }
69 }
70
71 #[doc(alias = "gtk_accessible_get_accessible_role")]
72 #[doc(alias = "get_accessible_role")]
73 #[doc(alias = "accessible-role")]
74 fn accessible_role(&self) -> AccessibleRole {
75 unsafe {
76 from_glib(ffi::gtk_accessible_get_accessible_role(
77 self.as_ref().to_glib_none().0,
78 ))
79 }
80 }
81
82 #[cfg(feature = "v4_10")]
83 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
84 #[doc(alias = "gtk_accessible_get_at_context")]
85 #[doc(alias = "get_at_context")]
86 fn at_context(&self) -> ATContext {
87 unsafe {
88 from_glib_full(ffi::gtk_accessible_get_at_context(
89 self.as_ref().to_glib_none().0,
90 ))
91 }
92 }
93
94 #[cfg(feature = "v4_10")]
95 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
96 #[doc(alias = "gtk_accessible_get_bounds")]
97 #[doc(alias = "get_bounds")]
98 fn bounds(&self) -> Option<(i32, i32, i32, i32)> {
99 unsafe {
100 let mut x = std::mem::MaybeUninit::uninit();
101 let mut y = std::mem::MaybeUninit::uninit();
102 let mut width = std::mem::MaybeUninit::uninit();
103 let mut height = std::mem::MaybeUninit::uninit();
104 let ret = from_glib(ffi::gtk_accessible_get_bounds(
105 self.as_ref().to_glib_none().0,
106 x.as_mut_ptr(),
107 y.as_mut_ptr(),
108 width.as_mut_ptr(),
109 height.as_mut_ptr(),
110 ));
111 if ret {
112 Some((
113 x.assume_init(),
114 y.assume_init(),
115 width.assume_init(),
116 height.assume_init(),
117 ))
118 } else {
119 None
120 }
121 }
122 }
123
124 #[cfg(feature = "v4_10")]
125 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
126 #[doc(alias = "gtk_accessible_get_first_accessible_child")]
127 #[doc(alias = "get_first_accessible_child")]
128 #[must_use]
129 fn first_accessible_child(&self) -> Option<Accessible> {
130 unsafe {
131 from_glib_full(ffi::gtk_accessible_get_first_accessible_child(
132 self.as_ref().to_glib_none().0,
133 ))
134 }
135 }
136
137 #[cfg(feature = "v4_10")]
138 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
139 #[doc(alias = "gtk_accessible_get_next_accessible_sibling")]
140 #[doc(alias = "get_next_accessible_sibling")]
141 #[must_use]
142 fn next_accessible_sibling(&self) -> Option<Accessible> {
143 unsafe {
144 from_glib_full(ffi::gtk_accessible_get_next_accessible_sibling(
145 self.as_ref().to_glib_none().0,
146 ))
147 }
148 }
149
150 #[cfg(feature = "v4_10")]
151 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
152 #[doc(alias = "gtk_accessible_get_platform_state")]
153 #[doc(alias = "get_platform_state")]
154 fn platform_state(&self, state: AccessiblePlatformState) -> bool {
155 unsafe {
156 from_glib(ffi::gtk_accessible_get_platform_state(
157 self.as_ref().to_glib_none().0,
158 state.into_glib(),
159 ))
160 }
161 }
162
163 #[doc(alias = "gtk_accessible_reset_property")]
164 fn reset_property(&self, property: AccessibleProperty) {
165 unsafe {
166 ffi::gtk_accessible_reset_property(
167 self.as_ref().to_glib_none().0,
168 property.into_glib(),
169 );
170 }
171 }
172
173 #[doc(alias = "gtk_accessible_reset_relation")]
174 fn reset_relation(&self, relation: AccessibleRelation) {
175 unsafe {
176 ffi::gtk_accessible_reset_relation(
177 self.as_ref().to_glib_none().0,
178 relation.into_glib(),
179 );
180 }
181 }
182
183 #[doc(alias = "gtk_accessible_reset_state")]
184 fn reset_state(&self, state: AccessibleState) {
185 unsafe {
186 ffi::gtk_accessible_reset_state(self.as_ref().to_glib_none().0, state.into_glib());
187 }
188 }
189
190 #[cfg(feature = "v4_10")]
191 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
192 #[doc(alias = "gtk_accessible_set_accessible_parent")]
193 fn set_accessible_parent(
194 &self,
195 parent: Option<&impl IsA<Accessible>>,
196 next_sibling: Option<&impl IsA<Accessible>>,
197 ) {
198 unsafe {
199 ffi::gtk_accessible_set_accessible_parent(
200 self.as_ref().to_glib_none().0,
201 parent.map(|p| p.as_ref()).to_glib_none().0,
202 next_sibling.map(|p| p.as_ref()).to_glib_none().0,
203 );
204 }
205 }
206
207 #[cfg(feature = "v4_10")]
208 #[cfg_attr(docsrs, doc(cfg(feature = "v4_10")))]
209 #[doc(alias = "gtk_accessible_update_next_accessible_sibling")]
210 fn update_next_accessible_sibling(&self, new_sibling: Option<&impl IsA<Accessible>>) {
211 unsafe {
212 ffi::gtk_accessible_update_next_accessible_sibling(
213 self.as_ref().to_glib_none().0,
214 new_sibling.map(|p| p.as_ref()).to_glib_none().0,
215 );
216 }
217 }
218
219 #[cfg(feature = "v4_18")]
220 #[cfg_attr(docsrs, doc(cfg(feature = "v4_18")))]
221 #[doc(alias = "gtk_accessible_update_platform_state")]
222 fn update_platform_state(&self, state: AccessiblePlatformState) {
223 unsafe {
224 ffi::gtk_accessible_update_platform_state(
225 self.as_ref().to_glib_none().0,
226 state.into_glib(),
227 );
228 }
229 }
230
231 #[doc(alias = "accessible-role")]
232 fn set_accessible_role(&self, accessible_role: AccessibleRole) {
233 ObjectExt::set_property(self.as_ref(), "accessible-role", accessible_role)
234 }
235
236 #[doc(alias = "accessible-role")]
237 fn connect_accessible_role_notify<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
238 unsafe extern "C" fn notify_accessible_role_trampoline<
239 P: IsA<Accessible>,
240 F: Fn(&P) + 'static,
241 >(
242 this: *mut ffi::GtkAccessible,
243 _param_spec: glib::ffi::gpointer,
244 f: glib::ffi::gpointer,
245 ) {
246 unsafe {
247 let f: &F = &*(f as *const F);
248 f(Accessible::from_glib_borrow(this).unsafe_cast_ref())
249 }
250 }
251 unsafe {
252 let f: Box_<F> = Box_::new(f);
253 connect_raw(
254 self.as_ptr() as *mut _,
255 c"notify::accessible-role".as_ptr() as *const _,
256 Some(std::mem::transmute::<*const (), unsafe extern "C" fn()>(
257 notify_accessible_role_trampoline::<Self, F> as *const (),
258 )),
259 Box_::into_raw(f),
260 )
261 }
262 }
263}
264
265impl<O: IsA<Accessible>> AccessibleExt for O {}