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
// This file was generated by gir (https://github.com/gtk-rs/gir)
// from gir-files (https://github.com/gtk-rs/gir-files.git)
// DO NOT EDIT
use glib::object::ObjectType as ObjectType_;
use glib::signal::connect_raw;
use glib::signal::SignalHandlerId;
use glib::translate::*;
use std::boxed::Box as Box_;
use std::fmt;
use std::mem::transmute;
use x11::xlib;
glib::wrapper! {
///
#[doc(alias = "GdkX11Screen")]
pub struct X11Screen(Object<ffi::GdkX11Screen, ffi::GdkX11ScreenClass>);
match fn {
type_ => || ffi::gdk_x11_screen_get_type(),
}
}
impl X11Screen {
/// Returns the current workspace for `self` when running under a
/// window manager that supports multiple workspaces, as described
/// in the
/// [Extended Window Manager Hints](http://www.freedesktop.org/Standards/wm-spec) specification.
///
/// # Returns
///
/// the current workspace, or 0 if workspaces are not supported
#[doc(alias = "gdk_x11_screen_get_current_desktop")]
#[doc(alias = "get_current_desktop")]
pub fn current_desktop(&self) -> u32 {
unsafe { ffi::gdk_x11_screen_get_current_desktop(self.to_glib_none().0) }
}
/// Gets the XID of the specified output/monitor.
/// If the X server does not support version 1.2 of the RANDR
/// extension, 0 is returned.
/// ## `monitor_num`
/// number of the monitor, between 0 and gdk_screen_get_n_monitors (screen)
///
/// # Returns
///
/// the XID of the monitor
#[doc(alias = "gdk_x11_screen_get_monitor_output")]
#[doc(alias = "get_monitor_output")]
pub fn monitor_output(&self, monitor_num: i32) -> xlib::XID {
unsafe { ffi::gdk_x11_screen_get_monitor_output(self.to_glib_none().0, monitor_num) }
}
/// Returns the number of workspaces for `self` when running under a
/// window manager that supports multiple workspaces, as described
/// in the
/// [Extended Window Manager Hints](http://www.freedesktop.org/Standards/wm-spec) specification.
///
/// # Returns
///
/// the number of workspaces, or 0 if workspaces are not supported
#[doc(alias = "gdk_x11_screen_get_number_of_desktops")]
#[doc(alias = "get_number_of_desktops")]
pub fn number_of_desktops(&self) -> u32 {
unsafe { ffi::gdk_x11_screen_get_number_of_desktops(self.to_glib_none().0) }
}
/// Returns the index of a [`X11Screen`][crate::X11Screen].
///
/// # Returns
///
/// the position of `self` among the screens
/// of its display
#[doc(alias = "gdk_x11_screen_get_screen_number")]
#[doc(alias = "get_screen_number")]
pub fn screen_number(&self) -> i32 {
unsafe { ffi::gdk_x11_screen_get_screen_number(self.to_glib_none().0) }
}
/// Returns the name of the window manager for `self`.
///
/// # Returns
///
/// the name of the window manager screen `self`, or
/// "unknown" if the window manager is unknown. The string is owned by GDK
/// and should not be freed.
#[doc(alias = "gdk_x11_screen_get_window_manager_name")]
#[doc(alias = "get_window_manager_name")]
pub fn window_manager_name(&self) -> Option<glib::GString> {
unsafe {
from_glib_none(ffi::gdk_x11_screen_get_window_manager_name(
self.to_glib_none().0,
))
}
}
/// This function is specific to the X11 backend of GDK, and indicates
/// whether the window manager supports a certain hint from the
/// [Extended Window Manager Hints](http://www.freedesktop.org/Standards/wm-spec) specification.
///
/// When using this function, keep in mind that the window manager
/// can change over time; so you shouldn’t use this function in
/// a way that impacts persistent application state. A common bug
/// is that your application can start up before the window manager
/// does when the user logs in, and before the window manager starts
/// [`supports_net_wm_hint()`][Self::supports_net_wm_hint()] will return [`false`] for every property.
/// You can monitor the window_manager_changed signal on [`X11Screen`][crate::X11Screen] to detect
/// a window manager change.
/// ## `property_name`
/// name of the WM property
///
/// # Returns
///
/// [`true`] if the window manager supports `property`
#[doc(alias = "gdk_x11_screen_supports_net_wm_hint")]
pub fn supports_net_wm_hint(&self, property_name: &str) -> bool {
unsafe {
from_glib(ffi::gdk_x11_screen_supports_net_wm_hint(
self.to_glib_none().0,
property_name.to_glib_none().0,
))
}
}
#[doc(alias = "window-manager-changed")]
pub fn connect_window_manager_changed<F: Fn(&Self) + 'static>(&self, f: F) -> SignalHandlerId {
unsafe extern "C" fn window_manager_changed_trampoline<F: Fn(&X11Screen) + 'static>(
this: *mut ffi::GdkX11Screen,
f: glib::ffi::gpointer,
) {
let f: &F = &*(f as *const F);
f(&from_glib_borrow(this))
}
unsafe {
let f: Box_<F> = Box_::new(f);
connect_raw(
self.as_ptr() as *mut _,
b"window-manager-changed\0".as_ptr() as *const _,
Some(transmute::<_, unsafe extern "C" fn()>(
window_manager_changed_trampoline::<F> as *const (),
)),
Box_::into_raw(f),
)
}
}
}
impl fmt::Display for X11Screen {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
f.write_str("X11Screen")
}
}