1use crate::{Atom, Display, Event, EventType, ModifierType, Screen, Window, WindowState};
6use glib::translate::*;
7use std::{mem, ptr};
8
9#[doc(alias = "gdk_beep")]
10pub fn beep() {
11 assert_initialized_main_thread!();
12 unsafe {
13 ffi::gdk_beep();
14 }
15}
16
17#[doc(alias = "gdk_error_trap_pop")]
18pub fn error_trap_pop() -> i32 {
19 assert_initialized_main_thread!();
20 unsafe { ffi::gdk_error_trap_pop() }
21}
22
23#[doc(alias = "gdk_error_trap_pop_ignored")]
24pub fn error_trap_pop_ignored() {
25 assert_initialized_main_thread!();
26 unsafe {
27 ffi::gdk_error_trap_pop_ignored();
28 }
29}
30
31#[doc(alias = "gdk_error_trap_push")]
32pub fn error_trap_push() {
33 assert_initialized_main_thread!();
34 unsafe {
35 ffi::gdk_error_trap_push();
36 }
37}
38
39#[doc(alias = "gdk_events_get_angle")]
40pub fn events_get_angle(event1: &mut Event, event2: &mut Event) -> Option<f64> {
41 assert_initialized_main_thread!();
42 unsafe {
43 let mut angle = mem::MaybeUninit::uninit();
44 let ret = from_glib(ffi::gdk_events_get_angle(
45 event1.to_glib_none_mut().0,
46 event2.to_glib_none_mut().0,
47 angle.as_mut_ptr(),
48 ));
49 if ret {
50 Some(angle.assume_init())
51 } else {
52 None
53 }
54 }
55}
56
57#[doc(alias = "gdk_events_get_center")]
58pub fn events_get_center(event1: &mut Event, event2: &mut Event) -> Option<(f64, f64)> {
59 assert_initialized_main_thread!();
60 unsafe {
61 let mut x = mem::MaybeUninit::uninit();
62 let mut y = mem::MaybeUninit::uninit();
63 let ret = from_glib(ffi::gdk_events_get_center(
64 event1.to_glib_none_mut().0,
65 event2.to_glib_none_mut().0,
66 x.as_mut_ptr(),
67 y.as_mut_ptr(),
68 ));
69 if ret {
70 Some((x.assume_init(), y.assume_init()))
71 } else {
72 None
73 }
74 }
75}
76
77#[doc(alias = "gdk_events_get_distance")]
78pub fn events_get_distance(event1: &mut Event, event2: &mut Event) -> Option<f64> {
79 assert_initialized_main_thread!();
80 unsafe {
81 let mut distance = mem::MaybeUninit::uninit();
82 let ret = from_glib(ffi::gdk_events_get_distance(
83 event1.to_glib_none_mut().0,
84 event2.to_glib_none_mut().0,
85 distance.as_mut_ptr(),
86 ));
87 if ret {
88 Some(distance.assume_init())
89 } else {
90 None
91 }
92 }
93}
94
95#[doc(alias = "gdk_events_pending")]
96pub fn events_pending() -> bool {
97 assert_initialized_main_thread!();
98 unsafe { from_glib(ffi::gdk_events_pending()) }
99}
100
101#[doc(alias = "gdk_flush")]
102pub fn flush() {
103 assert_initialized_main_thread!();
104 unsafe {
105 ffi::gdk_flush();
106 }
107}
108
109#[doc(alias = "gdk_get_display_arg_name")]
110#[doc(alias = "get_display_arg_name")]
111pub fn display_arg_name() -> Option<glib::GString> {
112 assert_initialized_main_thread!();
113 unsafe { from_glib_none(ffi::gdk_get_display_arg_name()) }
114}
115
116#[doc(alias = "gdk_get_program_class")]
117#[doc(alias = "get_program_class")]
118pub fn program_class() -> Option<glib::GString> {
119 assert_initialized_main_thread!();
120 unsafe { from_glib_none(ffi::gdk_get_program_class()) }
121}
122
123#[doc(alias = "gdk_get_show_events")]
124#[doc(alias = "get_show_events")]
125pub fn shows_events() -> bool {
126 assert_initialized_main_thread!();
127 unsafe { from_glib(ffi::gdk_get_show_events()) }
128}
129
130#[doc(alias = "gdk_notify_startup_complete")]
131pub fn notify_startup_complete() {
132 assert_initialized_main_thread!();
133 unsafe {
134 ffi::gdk_notify_startup_complete();
135 }
136}
137
138#[doc(alias = "gdk_notify_startup_complete_with_id")]
139pub fn notify_startup_complete_with_id(startup_id: &str) {
140 assert_initialized_main_thread!();
141 unsafe {
142 ffi::gdk_notify_startup_complete_with_id(startup_id.to_glib_none().0);
143 }
144}
145
146#[doc(alias = "gdk_pango_context_get")]
147pub fn pango_context_get() -> Option<pango::Context> {
148 assert_initialized_main_thread!();
149 unsafe { from_glib_full(ffi::gdk_pango_context_get()) }
150}
151
152#[doc(alias = "gdk_pango_context_get_for_display")]
153pub fn pango_context_get_for_display(display: &Display) -> Option<pango::Context> {
154 skip_assert_initialized!();
155 unsafe {
156 from_glib_full(ffi::gdk_pango_context_get_for_display(
157 display.to_glib_none().0,
158 ))
159 }
160}
161
162#[doc(alias = "gdk_pango_context_get_for_screen")]
163pub fn pango_context_get_for_screen(screen: &Screen) -> Option<pango::Context> {
164 skip_assert_initialized!();
165 unsafe {
166 from_glib_full(ffi::gdk_pango_context_get_for_screen(
167 screen.to_glib_none().0,
168 ))
169 }
170}
171
172#[doc(alias = "gdk_pixbuf_get_from_surface")]
178pub fn pixbuf_get_from_surface(
179 surface: &cairo::Surface,
180 src_x: i32,
181 src_y: i32,
182 width: i32,
183 height: i32,
184) -> Option<gdk_pixbuf::Pixbuf> {
185 assert_initialized_main_thread!();
186 unsafe {
187 from_glib_full(ffi::gdk_pixbuf_get_from_surface(
188 mut_override(surface.to_glib_none().0),
189 src_x,
190 src_y,
191 width,
192 height,
193 ))
194 }
195}
196
197#[doc(alias = "gdk_property_delete")]
198pub fn property_delete(window: &Window, property: &Atom) {
199 skip_assert_initialized!();
200 unsafe {
201 ffi::gdk_property_delete(window.to_glib_none().0, property.to_glib_none().0);
202 }
203}
204
205#[doc(alias = "gdk_property_get")]
206pub fn property_get(
207 window: &Window,
208 property: &Atom,
209 type_: &Atom,
210 offset: libc::c_ulong,
211 length: libc::c_ulong,
212 pdelete: i32,
213) -> Option<(Atom, i32, Vec<u8>)> {
214 skip_assert_initialized!();
215 unsafe {
216 let mut actual_property_type = Atom::uninitialized();
217 let mut actual_format = mem::MaybeUninit::uninit();
218 let mut actual_length = mem::MaybeUninit::uninit();
219 let mut data = ptr::null_mut();
220 let ret = from_glib(ffi::gdk_property_get(
221 window.to_glib_none().0,
222 property.to_glib_none().0,
223 type_.to_glib_none().0,
224 offset,
225 length,
226 pdelete,
227 actual_property_type.to_glib_none_mut().0,
228 actual_format.as_mut_ptr(),
229 actual_length.as_mut_ptr(),
230 &mut data,
231 ));
232 if ret {
233 Some((
234 actual_property_type,
235 actual_format.assume_init(),
236 FromGlibContainer::from_glib_full_num(data, actual_length.assume_init() as _),
237 ))
238 } else {
239 None
240 }
241 }
242}
243
244#[doc(alias = "gdk_selection_convert")]
245pub fn selection_convert(requestor: &Window, selection: &Atom, target: &Atom, time_: u32) {
246 skip_assert_initialized!();
247 unsafe {
248 ffi::gdk_selection_convert(
249 requestor.to_glib_none().0,
250 selection.to_glib_none().0,
251 target.to_glib_none().0,
252 time_,
253 );
254 }
255}
256
257#[doc(alias = "gdk_selection_owner_get")]
258pub fn selection_owner_get(selection: &Atom) -> Option<Window> {
259 assert_initialized_main_thread!();
260 unsafe { from_glib_none(ffi::gdk_selection_owner_get(selection.to_glib_none().0)) }
261}
262
263#[doc(alias = "gdk_selection_owner_get_for_display")]
264pub fn selection_owner_get_for_display(display: &Display, selection: &Atom) -> Option<Window> {
265 skip_assert_initialized!();
266 unsafe {
267 from_glib_none(ffi::gdk_selection_owner_get_for_display(
268 display.to_glib_none().0,
269 selection.to_glib_none().0,
270 ))
271 }
272}
273
274#[doc(alias = "gdk_selection_owner_set")]
275pub fn selection_owner_set(
276 owner: Option<&Window>,
277 selection: &Atom,
278 time_: u32,
279 send_event: bool,
280) -> bool {
281 assert_initialized_main_thread!();
282 unsafe {
283 from_glib(ffi::gdk_selection_owner_set(
284 owner.to_glib_none().0,
285 selection.to_glib_none().0,
286 time_,
287 send_event.into_glib(),
288 ))
289 }
290}
291
292#[doc(alias = "gdk_selection_owner_set_for_display")]
293pub fn selection_owner_set_for_display(
294 display: &Display,
295 owner: Option<&Window>,
296 selection: &Atom,
297 time_: u32,
298 send_event: bool,
299) -> bool {
300 skip_assert_initialized!();
301 unsafe {
302 from_glib(ffi::gdk_selection_owner_set_for_display(
303 display.to_glib_none().0,
304 owner.to_glib_none().0,
305 selection.to_glib_none().0,
306 time_,
307 send_event.into_glib(),
308 ))
309 }
310}
311
312#[doc(alias = "gdk_selection_send_notify")]
313pub fn selection_send_notify(
314 requestor: &Window,
315 selection: &Atom,
316 target: &Atom,
317 property: &Atom,
318 time_: u32,
319) {
320 skip_assert_initialized!();
321 unsafe {
322 ffi::gdk_selection_send_notify(
323 requestor.to_glib_none().0,
324 selection.to_glib_none().0,
325 target.to_glib_none().0,
326 property.to_glib_none().0,
327 time_,
328 );
329 }
330}
331
332#[doc(alias = "gdk_selection_send_notify_for_display")]
333pub fn selection_send_notify_for_display(
334 display: &Display,
335 requestor: &Window,
336 selection: &Atom,
337 target: &Atom,
338 property: &Atom,
339 time_: u32,
340) {
341 skip_assert_initialized!();
342 unsafe {
343 ffi::gdk_selection_send_notify_for_display(
344 display.to_glib_none().0,
345 requestor.to_glib_none().0,
346 selection.to_glib_none().0,
347 target.to_glib_none().0,
348 property.to_glib_none().0,
349 time_,
350 );
351 }
352}
353
354#[doc(alias = "gdk_set_allowed_backends")]
355pub fn set_allowed_backends(backends: &str) {
356 skip_assert_initialized!();
357 unsafe {
358 ffi::gdk_set_allowed_backends(backends.to_glib_none().0);
359 }
360}
361
362#[doc(alias = "gdk_set_double_click_time")]
363pub fn set_double_click_time(msec: u32) {
364 assert_initialized_main_thread!();
365 unsafe {
366 ffi::gdk_set_double_click_time(msec);
367 }
368}
369
370#[doc(alias = "gdk_set_program_class")]
371pub fn set_program_class(program_class: &str) {
372 assert_initialized_main_thread!();
373 unsafe {
374 ffi::gdk_set_program_class(program_class.to_glib_none().0);
375 }
376}
377
378#[doc(alias = "gdk_set_show_events")]
379pub fn set_show_events(show_events: bool) {
380 assert_initialized_main_thread!();
381 unsafe {
382 ffi::gdk_set_show_events(show_events.into_glib());
383 }
384}
385
386#[doc(alias = "gdk_synthesize_window_state")]
387pub fn synthesize_window_state(window: &Window, unset_flags: WindowState, set_flags: WindowState) {
388 skip_assert_initialized!();
389 unsafe {
390 ffi::gdk_synthesize_window_state(
391 window.to_glib_none().0,
392 unset_flags.into_glib(),
393 set_flags.into_glib(),
394 );
395 }
396}
397
398#[doc(alias = "gdk_test_render_sync")]
399pub fn test_render_sync(window: &Window) {
400 skip_assert_initialized!();
401 unsafe {
402 ffi::gdk_test_render_sync(window.to_glib_none().0);
403 }
404}
405
406#[doc(alias = "gdk_test_simulate_button")]
407pub fn test_simulate_button(
408 window: &Window,
409 x: i32,
410 y: i32,
411 button: u32,
412 modifiers: ModifierType,
413 button_pressrelease: EventType,
414) -> bool {
415 skip_assert_initialized!();
416 unsafe {
417 from_glib(ffi::gdk_test_simulate_button(
418 window.to_glib_none().0,
419 x,
420 y,
421 button,
422 modifiers.into_glib(),
423 button_pressrelease.into_glib(),
424 ))
425 }
426}
427
428#[doc(alias = "gdk_test_simulate_key")]
429pub fn test_simulate_key(
430 window: &Window,
431 x: i32,
432 y: i32,
433 keyval: u32,
434 modifiers: ModifierType,
435 key_pressrelease: EventType,
436) -> bool {
437 skip_assert_initialized!();
438 unsafe {
439 from_glib(ffi::gdk_test_simulate_key(
440 window.to_glib_none().0,
441 x,
442 y,
443 keyval,
444 modifiers.into_glib(),
445 key_pressrelease.into_glib(),
446 ))
447 }
448}
449
450#[doc(alias = "gdk_text_property_to_utf8_list_for_display")]
451pub fn text_property_to_utf8_list_for_display(
452 display: &Display,
453 encoding: &Atom,
454 format: i32,
455 text: &[u8],
456) -> (i32, Vec<glib::GString>) {
457 skip_assert_initialized!();
458 let length = text.len() as _;
459 unsafe {
460 let mut list = ptr::null_mut();
461 let ret = ffi::gdk_text_property_to_utf8_list_for_display(
462 display.to_glib_none().0,
463 encoding.to_glib_none().0,
464 format,
465 text.to_glib_none().0,
466 length,
467 &mut list,
468 );
469 (ret, FromGlibPtrContainer::from_glib_full(list))
470 }
471}
472
473#[doc(alias = "gdk_utf8_to_string_target")]
474pub fn utf8_to_string_target(str: &str) -> Option<glib::GString> {
475 assert_initialized_main_thread!();
476 unsafe { from_glib_full(ffi::gdk_utf8_to_string_target(str.to_glib_none().0)) }
477}