1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files)
// DO NOT EDIT
#![allow(deprecated)]
use crate::WaylandSurface;
use glib::translate::*;
use std::{boxed::Box as Box_, fmt};
glib::wrapper! {
/// The Wayland implementation of [`gdk::Toplevel`][crate::gdk::Toplevel].
///
/// Beyond the [`gdk::Toplevel`][crate::gdk::Toplevel] API, the Wayland implementation
/// has API to set up cross-process parent-child relationships between
/// surfaces with [`export_handle()`][Self::export_handle()] and
/// [`set_transient_for_exported()`][Self::set_transient_for_exported()].
///
/// # Implements
///
/// [`WaylandSurfaceExt`][trait@crate::prelude::WaylandSurfaceExt], [`trait@gdk::prelude::SurfaceExt`], [`trait@gdk::prelude::ToplevelExt`], [`WaylandSurfaceExtManual`][trait@crate::prelude::WaylandSurfaceExtManual]
#[doc(alias = "GdkWaylandToplevel")]
pub struct WaylandToplevel(Object<ffi::GdkWaylandToplevel>) @extends WaylandSurface, gdk::Surface, @implements gdk::Toplevel;
match fn {
type_ => || ffi::gdk_wayland_toplevel_get_type(),
}
}
impl WaylandToplevel {
/// Destroy a handle that was obtained with gdk_wayland_toplevel_export_handle().
///
/// Note that this API depends on an unstable Wayland protocol,
/// and thus may require changes in the future.
/// ## `handle`
/// the handle to drop
#[cfg(feature = "v4_12")]
#[cfg_attr(docsrs, doc(cfg(feature = "v4_12")))]
#[doc(alias = "gdk_wayland_toplevel_drop_exported_handle")]
pub fn drop_exported_handle(&self, handle: &str) {
unsafe {
ffi::gdk_wayland_toplevel_drop_exported_handle(
self.to_glib_none().0,
handle.to_glib_none().0,
);
}
}
/// Asynchronously obtains a handle for a surface that can be passed
/// to other processes.
///
/// When the handle has been obtained, @callback will be called.
///
/// It is an error to call this function on a surface that is already
/// exported.
///
/// When the handle is no longer needed, [`unexport_handle()`][Self::unexport_handle()]
/// should be called to clean up resources.
///
/// The main purpose for obtaining a handle is to mark a surface
/// from another surface as transient for this one, see
/// [`set_transient_for_exported()`][Self::set_transient_for_exported()].
///
/// Before 4.12, this API could not safely be used multiple times,
/// since there was no reference counting for handles. Starting with
/// 4.12, every call to this function obtains a new handle, and every
/// call to [`drop_exported_handle()`][Self::drop_exported_handle()] drops
/// just the handle that it is given.
///
/// Note that this API depends on an unstable Wayland protocol,
/// and thus may require changes in the future.
/// ## `callback`
/// callback to call with the handle
///
/// # Returns
///
/// [`true`] if the handle has been requested, [`false`] if
/// an error occurred.
#[doc(alias = "gdk_wayland_toplevel_export_handle")]
pub fn export_handle<P: Fn(&WaylandToplevel, &str) + 'static>(&self, callback: P) -> bool {
let callback_data: Box_<P> = Box_::new(callback);
unsafe extern "C" fn callback_func<P: Fn(&WaylandToplevel, &str) + 'static>(
toplevel: *mut ffi::GdkWaylandToplevel,
handle: *const libc::c_char,
user_data: glib::ffi::gpointer,
) {
let toplevel = from_glib_borrow(toplevel);
let handle: Borrowed<glib::GString> = from_glib_borrow(handle);
let callback: &P = &*(user_data as *mut _);
(*callback)(&toplevel, handle.as_str())
}
let callback = Some(callback_func::<P> as _);
unsafe extern "C" fn destroy_func_func<P: Fn(&WaylandToplevel, &str) + 'static>(
data: glib::ffi::gpointer,
) {
let _callback: Box_<P> = Box_::from_raw(data as *mut _);
}
let destroy_call3 = Some(destroy_func_func::<P> as _);
let super_callback0: Box_<P> = callback_data;
unsafe {
from_glib(ffi::gdk_wayland_toplevel_export_handle(
self.to_glib_none().0,
callback,
Box_::into_raw(super_callback0) as *mut _,
destroy_call3,
))
}
}
/// Sets the application id on a [`gdk::Toplevel`][crate::gdk::Toplevel].
/// ## `application_id`
/// the application id for the @self
#[doc(alias = "gdk_wayland_toplevel_set_application_id")]
pub fn set_application_id(&self, application_id: &str) {
unsafe {
ffi::gdk_wayland_toplevel_set_application_id(
self.to_glib_none().0,
application_id.to_glib_none().0,
);
}
}
/// Marks @self as transient for the surface to which the given
/// @parent_handle_str refers.
///
/// Typically, the handle will originate from a
/// [`export_handle()`][Self::export_handle()] call in another process.
///
/// Note that this API depends on an unstable Wayland protocol,
/// and thus may require changes in the future.
/// ## `parent_handle_str`
/// an exported handle for a surface
///
/// # Returns
///
/// [`true`] if the surface has been marked as transient,
/// [`false`] if an error occurred.
#[doc(alias = "gdk_wayland_toplevel_set_transient_for_exported")]
pub fn set_transient_for_exported(&self, parent_handle_str: &str) -> bool {
unsafe {
from_glib(ffi::gdk_wayland_toplevel_set_transient_for_exported(
self.to_glib_none().0,
parent_handle_str.to_glib_none().0,
))
}
}
/// Destroys the handle that was obtained with
/// gdk_wayland_toplevel_export_handle().
///
/// It is an error to call this function on a surface that
/// does not have a handle.
///
/// Since 4.12, this function does nothing. Use
/// [`drop_exported_handle()`][Self::drop_exported_handle()] instead to drop a
/// handle that was obtained with [`export_handle()`][Self::export_handle()].
///
/// Note that this API depends on an unstable Wayland protocol,
/// and thus may require changes in the future.
///
/// # Deprecated since 4.12
///
/// Use [`drop_exported_handle()`][Self::drop_exported_handle()]
/// instead, this function does nothing
#[cfg_attr(feature = "v4_12", deprecated = "Since 4.12")]
#[allow(deprecated)]
#[doc(alias = "gdk_wayland_toplevel_unexport_handle")]
pub fn unexport_handle(&self) {
unsafe {
ffi::gdk_wayland_toplevel_unexport_handle(self.to_glib_none().0);
}
}
}
impl fmt::Display for WaylandToplevel {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("WaylandToplevel")
}
}