78 lines
2.3 KiB
Rust
78 lines
2.3 KiB
Rust
//! Glue code between gdk and x11, allowing some `gdk_x11_*` functions.
|
||
//!
|
||
//! This is not a complete binding, but just provides what we need in a
|
||
//! reasonable way.
|
||
|
||
|
||
use gdk;
|
||
use gdk_sys::GdkDisplay;
|
||
use glib::translate::*;
|
||
use x11::xlib::{Display, Window};
|
||
|
||
|
||
// https://developer.gnome.org/gdk3/stable/gdk3-X-Window-System-Interaction.html
|
||
mod ffi {
|
||
use gdk_sys::{GdkDisplay, GdkWindow};
|
||
use x11::xlib::{Display, Window};
|
||
|
||
extern "C" {
|
||
pub fn gdk_x11_get_default_xdisplay() -> *mut Display;
|
||
pub fn gdk_x11_get_default_root_xwindow() -> Window;
|
||
pub fn gdk_x11_window_foreign_new_for_display(display: *mut GdkDisplay,
|
||
window: Window) -> * mut GdkWindow;
|
||
}
|
||
}
|
||
|
||
|
||
/// Gets the default GTK+ display.
|
||
///
|
||
/// # Returns
|
||
///
|
||
/// the Xlib Display* for the display specified in the `--display`
|
||
/// command line option or the `DISPLAY` environment variable.
|
||
pub fn gdk_x11_get_default_xdisplay() -> *mut Display {
|
||
unsafe {
|
||
return ffi::gdk_x11_get_default_xdisplay();
|
||
}
|
||
}
|
||
|
||
|
||
/// Gets the root window of the default screen (see `gdk_x11_get_default_screen()`).
|
||
///
|
||
/// # Returns
|
||
///
|
||
/// an Xlib Window.
|
||
pub fn gdk_x11_get_default_root_xwindow() -> Window {
|
||
unsafe {
|
||
return ffi::gdk_x11_get_default_root_xwindow();
|
||
}
|
||
}
|
||
|
||
|
||
/// Wraps a native window in a GdkWindow. The function will try to look up the
|
||
/// window using `gdk_x11_window_lookup_for_display()` first. If it does not find
|
||
/// it there, it will create a new window.
|
||
///
|
||
/// This may fail if the window has been destroyed. If the window was already
|
||
/// known to GDK, a new reference to the existing GdkWindow is returned.
|
||
/// ## `display`
|
||
/// the GdkDisplay where the window handle comes from.
|
||
/// ## ` window`
|
||
/// an Xlib Window
|
||
///
|
||
/// # Returns
|
||
///
|
||
/// a GdkWindow wrapper for the native window, or `None` if the window has been
|
||
/// destroyed. The wrapper will be newly created, if one doesn’t exist already.
|
||
pub fn gdk_x11_window_foreign_new_for_display(gdk_display: &mut gdk::Display,
|
||
xwindow: Window)
|
||
-> Option<gdk::Window> {
|
||
unsafe {
|
||
let display: *mut GdkDisplay =
|
||
mut_override(gdk_display.to_glib_none().0);
|
||
|
||
return from_glib_full(
|
||
ffi::gdk_x11_window_foreign_new_for_display(display, xwindow));
|
||
}
|
||
}
|