1#[cfg(target_os = "linux")]
6#[cfg_attr(docsrs, doc(cfg(target_os = "linux")))]
7use crate::Printer;
8use crate::{
9 ffi, Accessible, AccessibleProperty, AccessibleRelation, AccessibleRole, AccessibleState,
10 DebugFlags, PageSetup, PrintSettings, StyleContext, TextDirection, TreeModel, TreePath, Widget,
11 Window,
12};
13use glib::{prelude::*, translate::*};
14use std::boxed::Box as Box_;
15
16#[doc(alias = "gtk_accelerator_get_default_mod_mask")]
17pub fn accelerator_get_default_mod_mask() -> gdk::ModifierType {
18 assert_initialized_main_thread!();
19 unsafe { from_glib(ffi::gtk_accelerator_get_default_mod_mask()) }
20}
21
22#[doc(alias = "gtk_check_version")]
23pub fn check_version(
24 required_major: u32,
25 required_minor: u32,
26 required_micro: u32,
27) -> Option<glib::GString> {
28 skip_assert_initialized!();
29 unsafe {
30 from_glib_none(ffi::gtk_check_version(
31 required_major,
32 required_minor,
33 required_micro,
34 ))
35 }
36}
37
38#[cfg(feature = "v4_18")]
39#[cfg_attr(docsrs, doc(cfg(feature = "v4_18")))]
40#[doc(alias = "gtk_disable_portals")]
41pub fn disable_portals() {
42 assert_not_initialized!();
43 unsafe {
44 ffi::gtk_disable_portals();
45 }
46}
47
48#[doc(alias = "gtk_disable_setlocale")]
49pub fn disable_setlocale() {
50 assert_not_initialized!();
51 unsafe {
52 ffi::gtk_disable_setlocale();
53 }
54}
55
56#[cfg(target_os = "linux")]
62#[cfg_attr(docsrs, doc(cfg(target_os = "linux")))]
63#[doc(alias = "gtk_enumerate_printers")]
64pub fn enumerate_printers<P: Fn(&Printer) -> bool + Send + Sync + 'static>(func: P, wait: bool) {
65 assert_initialized_main_thread!();
66 let func_data: Box_<P> = Box_::new(func);
67 unsafe extern "C" fn func_func<P: Fn(&Printer) -> bool + Send + Sync + 'static>(
68 printer: *mut ffi::GtkPrinter,
69 data: glib::ffi::gpointer,
70 ) -> glib::ffi::gboolean {
71 let printer = from_glib_borrow(printer);
72 let callback = &*(data as *mut P);
73 (*callback)(&printer).into_glib()
74 }
75 let func = Some(func_func::<P> as _);
76 unsafe extern "C" fn destroy_func<P: Fn(&Printer) -> bool + Send + Sync + 'static>(
77 data: glib::ffi::gpointer,
78 ) {
79 let _callback = Box_::from_raw(data as *mut P);
80 }
81 let destroy_call2 = Some(destroy_func::<P> as _);
82 let super_callback0: Box_<P> = func_data;
83 unsafe {
84 ffi::gtk_enumerate_printers(
85 func,
86 Box_::into_raw(super_callback0) as *mut _,
87 destroy_call2,
88 wait.into_glib(),
89 );
90 }
91}
92
93#[doc(alias = "gtk_get_binary_age")]
94#[doc(alias = "get_binary_age")]
95pub fn binary_age() -> u32 {
96 skip_assert_initialized!();
97 unsafe { ffi::gtk_get_binary_age() }
98}
99
100#[doc(alias = "gtk_get_debug_flags")]
101#[doc(alias = "get_debug_flags")]
102pub fn debug_flags() -> DebugFlags {
103 assert_initialized_main_thread!();
104 unsafe { from_glib(ffi::gtk_get_debug_flags()) }
105}
106
107#[doc(alias = "gtk_get_default_language")]
108#[doc(alias = "get_default_language")]
109pub fn default_language() -> pango::Language {
110 assert_initialized_main_thread!();
111 unsafe { from_glib_none(ffi::gtk_get_default_language()) }
112}
113
114#[doc(alias = "gtk_get_interface_age")]
115#[doc(alias = "get_interface_age")]
116pub fn interface_age() -> u32 {
117 skip_assert_initialized!();
118 unsafe { ffi::gtk_get_interface_age() }
119}
120
121#[doc(alias = "gtk_get_locale_direction")]
122#[doc(alias = "get_locale_direction")]
123pub fn locale_direction() -> TextDirection {
124 assert_initialized_main_thread!();
125 unsafe { from_glib(ffi::gtk_get_locale_direction()) }
126}
127
128#[doc(alias = "gtk_get_major_version")]
129#[doc(alias = "get_major_version")]
130pub fn major_version() -> u32 {
131 skip_assert_initialized!();
132 unsafe { ffi::gtk_get_major_version() }
133}
134
135#[doc(alias = "gtk_get_micro_version")]
136#[doc(alias = "get_micro_version")]
137pub fn micro_version() -> u32 {
138 skip_assert_initialized!();
139 unsafe { ffi::gtk_get_micro_version() }
140}
141
142#[doc(alias = "gtk_get_minor_version")]
143#[doc(alias = "get_minor_version")]
144pub fn minor_version() -> u32 {
145 skip_assert_initialized!();
146 unsafe { ffi::gtk_get_minor_version() }
147}
148
149#[doc(alias = "gtk_hsv_to_rgb")]
150pub fn hsv_to_rgb(h: f32, s: f32, v: f32) -> (f32, f32, f32) {
151 assert_initialized_main_thread!();
152 unsafe {
153 let mut r = std::mem::MaybeUninit::uninit();
154 let mut g = std::mem::MaybeUninit::uninit();
155 let mut b = std::mem::MaybeUninit::uninit();
156 ffi::gtk_hsv_to_rgb(h, s, v, r.as_mut_ptr(), g.as_mut_ptr(), b.as_mut_ptr());
157 (r.assume_init(), g.assume_init(), b.assume_init())
158 }
159}
160
161#[doc(alias = "gtk_print_run_page_setup_dialog")]
162pub fn print_run_page_setup_dialog(
163 parent: Option<&impl IsA<Window>>,
164 page_setup: Option<&PageSetup>,
165 settings: &PrintSettings,
166) -> PageSetup {
167 skip_assert_initialized!();
168 unsafe {
169 from_glib_full(ffi::gtk_print_run_page_setup_dialog(
170 parent.map(|p| p.as_ref()).to_glib_none().0,
171 page_setup.to_glib_none().0,
172 settings.to_glib_none().0,
173 ))
174 }
175}
176
177#[doc(alias = "gtk_print_run_page_setup_dialog_async")]
178pub fn print_run_page_setup_dialog_async<P: FnOnce(&PageSetup) + Send + Sync + 'static>(
179 parent: Option<&impl IsA<Window>>,
180 page_setup: Option<&PageSetup>,
181 settings: &PrintSettings,
182 done_cb: P,
183) {
184 skip_assert_initialized!();
185 let done_cb_data: Box_<P> = Box_::new(done_cb);
186 unsafe extern "C" fn done_cb_func<P: FnOnce(&PageSetup) + Send + Sync + 'static>(
187 page_setup: *mut ffi::GtkPageSetup,
188 data: glib::ffi::gpointer,
189 ) {
190 let page_setup = from_glib_borrow(page_setup);
191 let callback = Box_::from_raw(data as *mut P);
192 (*callback)(&page_setup)
193 }
194 let done_cb = Some(done_cb_func::<P> as _);
195 let super_callback0: Box_<P> = done_cb_data;
196 unsafe {
197 ffi::gtk_print_run_page_setup_dialog_async(
198 parent.map(|p| p.as_ref()).to_glib_none().0,
199 page_setup.to_glib_none().0,
200 settings.to_glib_none().0,
201 done_cb,
202 Box_::into_raw(super_callback0) as *mut _,
203 );
204 }
205}
206
207#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
208#[allow(deprecated)]
209#[doc(alias = "gtk_render_activity")]
210pub fn render_activity(
211 context: &impl IsA<StyleContext>,
212 cr: &cairo::Context,
213 x: f64,
214 y: f64,
215 width: f64,
216 height: f64,
217) {
218 skip_assert_initialized!();
219 unsafe {
220 ffi::gtk_render_activity(
221 context.as_ref().to_glib_none().0,
222 mut_override(cr.to_glib_none().0),
223 x,
224 y,
225 width,
226 height,
227 );
228 }
229}
230
231#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
232#[allow(deprecated)]
233#[doc(alias = "gtk_render_arrow")]
234pub fn render_arrow(
235 context: &impl IsA<StyleContext>,
236 cr: &cairo::Context,
237 angle: f64,
238 x: f64,
239 y: f64,
240 size: f64,
241) {
242 skip_assert_initialized!();
243 unsafe {
244 ffi::gtk_render_arrow(
245 context.as_ref().to_glib_none().0,
246 mut_override(cr.to_glib_none().0),
247 angle,
248 x,
249 y,
250 size,
251 );
252 }
253}
254
255#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
256#[allow(deprecated)]
257#[doc(alias = "gtk_render_background")]
258pub fn render_background(
259 context: &impl IsA<StyleContext>,
260 cr: &cairo::Context,
261 x: f64,
262 y: f64,
263 width: f64,
264 height: f64,
265) {
266 skip_assert_initialized!();
267 unsafe {
268 ffi::gtk_render_background(
269 context.as_ref().to_glib_none().0,
270 mut_override(cr.to_glib_none().0),
271 x,
272 y,
273 width,
274 height,
275 );
276 }
277}
278
279#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
280#[allow(deprecated)]
281#[doc(alias = "gtk_render_check")]
282pub fn render_check(
283 context: &impl IsA<StyleContext>,
284 cr: &cairo::Context,
285 x: f64,
286 y: f64,
287 width: f64,
288 height: f64,
289) {
290 skip_assert_initialized!();
291 unsafe {
292 ffi::gtk_render_check(
293 context.as_ref().to_glib_none().0,
294 mut_override(cr.to_glib_none().0),
295 x,
296 y,
297 width,
298 height,
299 );
300 }
301}
302
303#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
304#[allow(deprecated)]
305#[doc(alias = "gtk_render_expander")]
306pub fn render_expander(
307 context: &impl IsA<StyleContext>,
308 cr: &cairo::Context,
309 x: f64,
310 y: f64,
311 width: f64,
312 height: f64,
313) {
314 skip_assert_initialized!();
315 unsafe {
316 ffi::gtk_render_expander(
317 context.as_ref().to_glib_none().0,
318 mut_override(cr.to_glib_none().0),
319 x,
320 y,
321 width,
322 height,
323 );
324 }
325}
326
327#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
328#[allow(deprecated)]
329#[doc(alias = "gtk_render_focus")]
330pub fn render_focus(
331 context: &impl IsA<StyleContext>,
332 cr: &cairo::Context,
333 x: f64,
334 y: f64,
335 width: f64,
336 height: f64,
337) {
338 skip_assert_initialized!();
339 unsafe {
340 ffi::gtk_render_focus(
341 context.as_ref().to_glib_none().0,
342 mut_override(cr.to_glib_none().0),
343 x,
344 y,
345 width,
346 height,
347 );
348 }
349}
350
351#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
352#[allow(deprecated)]
353#[doc(alias = "gtk_render_frame")]
354pub fn render_frame(
355 context: &impl IsA<StyleContext>,
356 cr: &cairo::Context,
357 x: f64,
358 y: f64,
359 width: f64,
360 height: f64,
361) {
362 skip_assert_initialized!();
363 unsafe {
364 ffi::gtk_render_frame(
365 context.as_ref().to_glib_none().0,
366 mut_override(cr.to_glib_none().0),
367 x,
368 y,
369 width,
370 height,
371 );
372 }
373}
374
375#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
376#[allow(deprecated)]
377#[doc(alias = "gtk_render_handle")]
378pub fn render_handle(
379 context: &impl IsA<StyleContext>,
380 cr: &cairo::Context,
381 x: f64,
382 y: f64,
383 width: f64,
384 height: f64,
385) {
386 skip_assert_initialized!();
387 unsafe {
388 ffi::gtk_render_handle(
389 context.as_ref().to_glib_none().0,
390 mut_override(cr.to_glib_none().0),
391 x,
392 y,
393 width,
394 height,
395 );
396 }
397}
398
399#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
400#[allow(deprecated)]
401#[doc(alias = "gtk_render_icon")]
402pub fn render_icon(
403 context: &impl IsA<StyleContext>,
404 cr: &cairo::Context,
405 texture: &impl IsA<gdk::Texture>,
406 x: f64,
407 y: f64,
408) {
409 skip_assert_initialized!();
410 unsafe {
411 ffi::gtk_render_icon(
412 context.as_ref().to_glib_none().0,
413 mut_override(cr.to_glib_none().0),
414 texture.as_ref().to_glib_none().0,
415 x,
416 y,
417 );
418 }
419}
420
421#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
422#[allow(deprecated)]
423#[doc(alias = "gtk_render_layout")]
424pub fn render_layout(
425 context: &impl IsA<StyleContext>,
426 cr: &cairo::Context,
427 x: f64,
428 y: f64,
429 layout: &pango::Layout,
430) {
431 skip_assert_initialized!();
432 unsafe {
433 ffi::gtk_render_layout(
434 context.as_ref().to_glib_none().0,
435 mut_override(cr.to_glib_none().0),
436 x,
437 y,
438 layout.to_glib_none().0,
439 );
440 }
441}
442
443#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
444#[allow(deprecated)]
445#[doc(alias = "gtk_render_line")]
446pub fn render_line(
447 context: &impl IsA<StyleContext>,
448 cr: &cairo::Context,
449 x0: f64,
450 y0: f64,
451 x1: f64,
452 y1: f64,
453) {
454 skip_assert_initialized!();
455 unsafe {
456 ffi::gtk_render_line(
457 context.as_ref().to_glib_none().0,
458 mut_override(cr.to_glib_none().0),
459 x0,
460 y0,
461 x1,
462 y1,
463 );
464 }
465}
466
467#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
468#[allow(deprecated)]
469#[doc(alias = "gtk_render_option")]
470pub fn render_option(
471 context: &impl IsA<StyleContext>,
472 cr: &cairo::Context,
473 x: f64,
474 y: f64,
475 width: f64,
476 height: f64,
477) {
478 skip_assert_initialized!();
479 unsafe {
480 ffi::gtk_render_option(
481 context.as_ref().to_glib_none().0,
482 mut_override(cr.to_glib_none().0),
483 x,
484 y,
485 width,
486 height,
487 );
488 }
489}
490
491#[doc(alias = "gtk_rgb_to_hsv")]
492pub fn rgb_to_hsv(r: f32, g: f32, b: f32) -> (f32, f32, f32) {
493 assert_initialized_main_thread!();
494 unsafe {
495 let mut h = std::mem::MaybeUninit::uninit();
496 let mut s = std::mem::MaybeUninit::uninit();
497 let mut v = std::mem::MaybeUninit::uninit();
498 ffi::gtk_rgb_to_hsv(r, g, b, h.as_mut_ptr(), s.as_mut_ptr(), v.as_mut_ptr());
499 (h.assume_init(), s.assume_init(), v.assume_init())
500 }
501}
502
503#[doc(alias = "gtk_set_debug_flags")]
504pub fn set_debug_flags(flags: DebugFlags) {
505 assert_initialized_main_thread!();
506 unsafe {
507 ffi::gtk_set_debug_flags(flags.into_glib());
508 }
509}
510
511#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
512#[allow(deprecated)]
513#[doc(alias = "gtk_show_uri")]
514pub fn show_uri(parent: Option<&impl IsA<Window>>, uri: &str, timestamp: u32) {
515 assert_initialized_main_thread!();
516 unsafe {
517 ffi::gtk_show_uri(
518 parent.map(|p| p.as_ref()).to_glib_none().0,
519 uri.to_glib_none().0,
520 timestamp,
521 );
522 }
523}
524
525#[doc(alias = "gtk_test_accessible_assertion_message_role")]
526pub fn test_accessible_assertion_message_role(
527 domain: &str,
528 file: &str,
529 line: i32,
530 func: &str,
531 expr: &str,
532 accessible: &impl IsA<Accessible>,
533 expected_role: AccessibleRole,
534 actual_role: AccessibleRole,
535) {
536 skip_assert_initialized!();
537 unsafe {
538 ffi::gtk_test_accessible_assertion_message_role(
539 domain.to_glib_none().0,
540 file.to_glib_none().0,
541 line,
542 func.to_glib_none().0,
543 expr.to_glib_none().0,
544 accessible.as_ref().to_glib_none().0,
545 expected_role.into_glib(),
546 actual_role.into_glib(),
547 );
548 }
549}
550
551#[doc(alias = "gtk_test_accessible_has_property")]
552pub fn test_accessible_has_property(
553 accessible: &impl IsA<Accessible>,
554 property: AccessibleProperty,
555) -> bool {
556 skip_assert_initialized!();
557 unsafe {
558 from_glib(ffi::gtk_test_accessible_has_property(
559 accessible.as_ref().to_glib_none().0,
560 property.into_glib(),
561 ))
562 }
563}
564
565#[doc(alias = "gtk_test_accessible_has_relation")]
566pub fn test_accessible_has_relation(
567 accessible: &impl IsA<Accessible>,
568 relation: AccessibleRelation,
569) -> bool {
570 skip_assert_initialized!();
571 unsafe {
572 from_glib(ffi::gtk_test_accessible_has_relation(
573 accessible.as_ref().to_glib_none().0,
574 relation.into_glib(),
575 ))
576 }
577}
578
579#[doc(alias = "gtk_test_accessible_has_role")]
580pub fn test_accessible_has_role(accessible: &impl IsA<Accessible>, role: AccessibleRole) -> bool {
581 skip_assert_initialized!();
582 unsafe {
583 from_glib(ffi::gtk_test_accessible_has_role(
584 accessible.as_ref().to_glib_none().0,
585 role.into_glib(),
586 ))
587 }
588}
589
590#[doc(alias = "gtk_test_accessible_has_state")]
591pub fn test_accessible_has_state(
592 accessible: &impl IsA<Accessible>,
593 state: AccessibleState,
594) -> bool {
595 skip_assert_initialized!();
596 unsafe {
597 from_glib(ffi::gtk_test_accessible_has_state(
598 accessible.as_ref().to_glib_none().0,
599 state.into_glib(),
600 ))
601 }
602}
603
604#[doc(alias = "gtk_test_register_all_types")]
610pub fn test_register_all_types() {
611 assert_initialized_main_thread!();
612 unsafe {
613 ffi::gtk_test_register_all_types();
614 }
615}
616
617#[doc(alias = "gtk_test_widget_wait_for_draw")]
618pub fn test_widget_wait_for_draw(widget: &impl IsA<Widget>) {
619 skip_assert_initialized!();
620 unsafe {
621 ffi::gtk_test_widget_wait_for_draw(widget.as_ref().to_glib_none().0);
622 }
623}
624
625#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
626#[allow(deprecated)]
627#[doc(alias = "gtk_tree_create_row_drag_content")]
628pub fn tree_create_row_drag_content(
629 tree_model: &impl IsA<TreeModel>,
630 path: &TreePath,
631) -> gdk::ContentProvider {
632 skip_assert_initialized!();
633 unsafe {
634 from_glib_full(ffi::gtk_tree_create_row_drag_content(
635 tree_model.as_ref().to_glib_none().0,
636 mut_override(path.to_glib_none().0),
637 ))
638 }
639}
640
641#[cfg_attr(feature = "v4_10", deprecated = "Since 4.10")]
642#[allow(deprecated)]
643#[doc(alias = "gtk_tree_get_row_drag_data")]
644pub fn tree_get_row_drag_data(
645 value: &glib::Value,
646) -> Option<(Option<TreeModel>, Option<TreePath>)> {
647 assert_initialized_main_thread!();
648 unsafe {
649 let mut tree_model = std::ptr::null_mut();
650 let mut path = std::ptr::null_mut();
651 let ret = from_glib(ffi::gtk_tree_get_row_drag_data(
652 value.to_glib_none().0,
653 &mut tree_model,
654 &mut path,
655 ));
656 if ret {
657 Some((from_glib_none(tree_model), from_glib_full(path)))
658 } else {
659 None
660 }
661 }
662}