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