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