Use paste to simplify ewmh_get_property

This commit is contained in:
Armin Friedl 2022-05-22 15:07:07 +02:00
parent 1729b8c2b1
commit 4d18bf5994
4 changed files with 193 additions and 309 deletions

View file

@ -12,6 +12,7 @@ homepage = "https://git.friedl.net/incubator/xcb-wm"
[dependencies]
xcb = "1"
paste = "1"
[features]
icccm = []

View file

@ -8,12 +8,10 @@ use crate::ewmh::proto::util::{strings_to_x_buffer, x_buffer_to_strings};
use crate::ewmh::traits::*;
use crate::ewmh::Connection;
use paste::paste; // Needed for macros
// _NET_WM_NAME, UTF8_STRING
// {{{
pub struct GetWmName(xcb::x::Window);
pub struct GetWmNameCookie(xcb::x::GetPropertyCookie);
pub struct GetWmNameCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetWmNameReply {
pub name: String,
@ -29,13 +27,11 @@ impl From<xcb::x::GetPropertyReply> for GetWmNameReply {
ewmh_get_property! {
request=GetWmName{
window: client_window,
window: client,
property: _NET_WM_NAME,
xtype: UTF8_STRING
},
reply=GetWmNameReply,
cookie=GetWmNameCookie,
cookie_unchecked=GetWmNameCookieUnchecked
reply=GetWmNameReply
}
pub struct SetWmName {
@ -64,10 +60,6 @@ ewmh_set_property! {
// _NET_WM_VISIBLE_NAME, UTF8_STRING
// {{{
pub struct GetWmVisibleName(xcb::x::Window);
pub struct GetWmVisibleNameCookie(xcb::x::GetPropertyCookie);
pub struct GetWmVisibleNameCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetWmVisibleNameReply {
pub name: String,
@ -83,22 +75,16 @@ impl From<xcb::x::GetPropertyReply> for GetWmVisibleNameReply {
ewmh_get_property! {
request=GetWmVisibleName{
window: root_window,
window: client,
property: _NET_WM_VISIBLE_NAME,
xtype: UTF8_STRING
},
reply=GetWmVisibleNameReply,
cookie=GetWmVisibleNameCookie,
cookie_unchecked=GetWmVisibleNameCookieUnchecked
reply=GetWmVisibleNameReply
}
// }}}
// _NET_WM_ICON_NAME, UTF8_STRING
// {{{
pub struct GetWmIconName;
pub struct GetWmIconNameCookie(xcb::x::GetPropertyCookie);
pub struct GetWmIconNameCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetWmIconNameReply {
pub name: String,
@ -114,22 +100,16 @@ impl From<xcb::x::GetPropertyReply> for GetWmIconNameReply {
ewmh_get_property! {
request=GetWmIconName{
window: root_window,
window: client,
property: _NET_WM_ICON_NAME,
xtype: UTF8_STRING
},
reply=GetWmIconNameReply,
cookie=GetWmIconNameCookie,
cookie_unchecked=GetWmIconNameCookieUnchecked
reply=GetWmIconNameReply
}
// }}}
// _NET_WM_VISIBLE_ICON_NAME, UTF8_STRING
// {{{
pub struct GetWmVisibleIconName;
pub struct GetWmVisibleIconNameCookie(xcb::x::GetPropertyCookie);
pub struct GetWmVisibleIconNameCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetWmVisibleIconNameReply {
pub name: String,
@ -145,22 +125,16 @@ impl From<xcb::x::GetPropertyReply> for GetWmVisibleIconNameReply {
ewmh_get_property! {
request=GetWmVisibleIconName{
window: root_window,
window: client,
property: _NET_WM_VISIBLE_ICON_NAME,
xtype: UTF8_STRING
},
reply=GetWmVisibleIconNameReply,
cookie=GetWmVisibleIconNameCookie,
cookie_unchecked=GetWmVisibleIconNameCookieUnchecked
reply=GetWmVisibleIconNameReply
}
// }}}
// _NET_WM_DESKTOP, CARDINAL/32
// {{{
pub struct GetWmDesktop;
pub struct GetWmDesktopCookie(xcb::x::GetPropertyCookie);
pub struct GetWmDesktopCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetWmDesktopReply {
pub desktop: u32,
@ -176,13 +150,11 @@ impl From<xcb::x::GetPropertyReply> for GetWmDesktopReply {
ewmh_get_property! {
request=GetWmDesktop{
window: root_window,
window: client,
property: _NET_WM_DESKTOP,
xtype: ATOM_CARDINAL
},
reply=GetWmDesktopReply,
cookie=GetWmDesktopCookie,
cookie_unchecked=GetWmDesktopCookieUnchecked
reply=GetWmDesktopReply
}
pub struct SetWmDesktop {
@ -230,11 +202,6 @@ ewmh_client_message! {
// _NET_WM_WINDOW_TYPE, ATOM[]/32
// {{{
pub struct GetWmWindowType;
pub struct GetWmWindowTypeCookie(xcb::x::GetPropertyCookie);
pub struct GetWmWindowTypeCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetWmWindowTypeReply {
pub window_types: Vec<xcb::x::Atom>,
@ -250,13 +217,11 @@ impl From<xcb::x::GetPropertyReply> for GetWmWindowTypeReply {
ewmh_get_property! {
request=GetWmWindowType{
window: root_window,
window: client,
property: _NET_WM_WINDOW_TYPE,
xtype: ATOM_ATOM
},
reply=GetWmWindowTypeReply,
cookie=GetWmWindowTypeCookie,
cookie_unchecked=GetWmWindowTypeCookieUnchecked
reply=GetWmWindowTypeReply
}
pub struct SetWmWindowType {
@ -285,11 +250,6 @@ ewmh_set_property! {
// _NET_WM_STATE, ATOM[]/32
// {{{
pub struct GetWmState(xcb::x::Window);
pub struct GetWmStateCookie(xcb::x::GetPropertyCookie);
pub struct GetWmStateCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetWmStateReply {
pub states: Vec<xcb::x::Atom>,
@ -305,13 +265,11 @@ impl From<xcb::x::GetPropertyReply> for GetWmStateReply {
ewmh_get_property! {
request=GetWmState{
window: client_window,
window: client,
property: _NET_WM_STATE,
xtype: ATOM_ATOM
},
reply=GetWmStateReply,
cookie=GetWmStateCookie,
cookie_unchecked=GetWmStateCookieUnchecked
reply=GetWmStateReply
}
pub struct SetWmState {

View file

@ -1,117 +1,3 @@
macro_rules! _get_property_base {
($reply:ident, $cookie:ident, $cookie_unchecked:ident) => {
impl EwmhCookie for $cookie {
type XcbCookie = xcb::x::GetPropertyCookie;
}
impl EwmhPropertyCookieChecked for $cookie {
type Reply = $reply;
fn inner(self) -> xcb::x::GetPropertyCookie {
self.0
}
}
impl EwmhPropertyCookieUnchecked for $cookie_unchecked {
type Reply = $reply;
fn inner(self) -> xcb::x::GetPropertyCookieUnchecked {
self.0
}
}
};
}
macro_rules! _get_property_request {
(root_window, $property:ident, UTF8_STRING) => {
fn xcb_request(&self, con: &Connection) -> xcb::x::GetProperty {
xcb::x::GetProperty {
delete: false,
window: con.con.get_setup().roots().next().unwrap().root(),
property: con.atoms.$property,
r#type: con.atoms.UTF8_STRING,
long_offset: 0,
long_length: u32::MAX,
}
}
};
(root_window, $property:ident, $xtype:ident) => {
fn xcb_request(&self, con: &Connection) -> xcb::x::GetProperty {
xcb::x::GetProperty {
delete: false,
window: con.con.get_setup().roots().next().unwrap().root(),
property: con.atoms.$property,
r#type: xcb::x::$xtype,
long_offset: 0,
long_length: u32::MAX,
}
}
};
(client_window, $property:ident, UTF8_STRING) => {
fn xcb_request(&self, con: &Connection) -> xcb::x::GetProperty {
xcb::x::GetProperty {
delete: false,
window: self.0,
property: con.atoms.$property,
r#type: con.atoms.UTF8_STRING,
long_offset: 0,
long_length: u32::MAX,
}
}
};
(client_window, $property:ident, $xtype:ident) => {
fn xcb_request(&self, con: &Connection) -> xcb::x::GetProperty {
xcb::x::GetProperty {
delete: false,
window: self.0,
property: con.atoms.$property,
r#type: xcb::x::$xtype,
long_offset: 0,
long_length: u32::MAX,
}
}
};
}
macro_rules! ewmh_get_property {
(request=$request:ident{
window: $window:ident,
property: $property:ident,
xtype: $xtype: ident
},
reply=$reply:ident,
cookie=$cookie:ident,
cookie_unchecked=$cookie_unchecked:ident) => {
impl<'a> EwmhRequest<'a> for $request {
type XcbRequest = xcb::x::GetProperty;
type EwmhCookie = $cookie;
_get_property_request! {$window, $property, $xtype}
fn convert_cookie(&'a self, xcb_cookie: xcb::x::GetPropertyCookie) -> Self::EwmhCookie {
$cookie(xcb_cookie)
}
}
impl EwmhPropertyRequestUnchecked for $request {
type EwmhCookie = $cookie_unchecked;
#[rustfmt::skip]
fn convert_cookie(&self,xcb_cookie: xcb::x::GetPropertyCookieUnchecked,) -> Self::EwmhCookie {
$cookie_unchecked(xcb_cookie)
}
_get_property_request! {$window, $property, $xtype}
}
_get_property_base! {$reply, $cookie, $cookie_unchecked}
};
}
macro_rules! _set_property_base {
(root_window, $property:ident, UTF8_STRING) => {
fn xcb_request(&'a self, con: &Connection) -> xcb::x::ChangeProperty<'a, u8> {
@ -292,3 +178,143 @@ macro_rules! ewmh_client_message {
}
};
}
macro_rules! _get_property_cookies {
(@private $request:ident, $reply:ident) => {
paste! {
impl EwmhCookie for [<$request Cookie>] {
type XcbCookie = xcb::x::GetPropertyCookie;
}
impl EwmhPropertyCookieChecked for [<$request Cookie>] {
type Reply = $reply;
fn inner(self) -> xcb::x::GetPropertyCookie {
self.0
}
}
impl EwmhPropertyCookieUnchecked for [<$request CookieUnchecked>] {
type Reply = $reply;
fn inner(self) -> xcb::x::GetPropertyCookieUnchecked {
self.0
}
}
}
};
}
macro_rules! _get_property_request {
(@private root, $property:ident, UTF8_STRING) => {
fn xcb_request(&self, con: &Connection) -> xcb::x::GetProperty {
xcb::x::GetProperty {
delete: false,
window: con.con.get_setup().roots().next().unwrap().root(),
property: con.atoms.$property,
r#type: con.atoms.UTF8_STRING,
long_offset: 0,
long_length: u32::MAX,
}
}
};
(@private root, $property:ident, $xtype:ident) => {
fn xcb_request(&self, con: &Connection) -> xcb::x::GetProperty {
xcb::x::GetProperty {
delete: false,
window: con.con.get_setup().roots().next().unwrap().root(),
property: con.atoms.$property,
r#type: xcb::x::$xtype,
long_offset: 0,
long_length: u32::MAX,
}
}
};
(@private client, $property:ident, UTF8_STRING) => {
fn xcb_request(&self, con: &Connection) -> xcb::x::GetProperty {
xcb::x::GetProperty {
delete: false,
window: self.0,
property: con.atoms.$property,
r#type: con.atoms.UTF8_STRING,
long_offset: 0,
long_length: u32::MAX,
}
}
};
(@private client, $property:ident, $xtype:ident) => {
fn xcb_request(&self, con: &Connection) -> xcb::x::GetProperty {
xcb::x::GetProperty {
delete: false,
window: self.0,
property: con.atoms.$property,
r#type: xcb::x::$xtype,
long_offset: 0,
long_length: u32::MAX,
}
}
};
}
macro_rules! _get_property_structs {
(@private $request:ident, root) => {
paste! {
pub struct $request;
pub struct [<$request Cookie>](xcb::x::GetPropertyCookie);
pub struct [<$request CookieUnchecked>](xcb::x::GetPropertyCookieUnchecked);
}
};
(@private $request:ident, client) => {
paste! {
pub struct $request(xcb::x::Window);
pub struct [<$request Cookie>](xcb::x::GetPropertyCookie);
pub struct [<$request CookieUnchecked>](xcb::x::GetPropertyCookieUnchecked);
impl $request {
fn new(window: xcb::x::Window) -> $request {
$request(window)
}
}
}
};
}
macro_rules! ewmh_get_property {
(request=$request:ident{
window: $window:ident,
property: $property:ident,
xtype: $xtype: ident
},
reply=$reply:ident) => {
paste!{
_get_property_structs! {@private $request, $window}
impl<'a> EwmhRequest<'a> for $request {
type XcbRequest = xcb::x::GetProperty;
type EwmhCookie = [<$request Cookie>];
_get_property_request! {@private $window, $property, $xtype}
fn convert_cookie(&'a self, xcb_cookie: xcb::x::GetPropertyCookie) -> Self::EwmhCookie {
[<$request Cookie>](xcb_cookie)
}
}
impl EwmhPropertyRequestUnchecked for $request {
paste!{type EwmhCookie = [<$request CookieUnchecked>];}
#[rustfmt::skip]
fn convert_cookie(&self, xcb_cookie: xcb::x::GetPropertyCookieUnchecked) -> Self::EwmhCookie {
[<$request CookieUnchecked>](xcb_cookie)
}
_get_property_request! {@private $window, $property, $xtype}
}
_get_property_cookies! {@private $request, $reply}
}
};
}

View file

@ -8,14 +8,10 @@ use crate::ewmh::proto::util::{strings_to_x_buffer, x_buffer_to_strings};
use crate::ewmh::traits::*;
use crate::ewmh::Connection;
use paste::paste; // Needed for macros
// _NET_SUPPORTED, ATOM[]/32
// {{{
pub struct GetSupported;
pub struct GetSupportedCookie(xcb::x::GetPropertyCookie);
pub struct GetSupportedCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetSupportedReply {
pub atoms: Vec<xcb::x::Atom>,
@ -31,24 +27,16 @@ impl From<xcb::x::GetPropertyReply> for GetSupportedReply {
ewmh_get_property! {
request=GetSupported{
window: root_window,
window: root,
property: _NET_SUPPORTED,
xtype: ATOM_ATOM
},
reply=GetSupportedReply,
cookie=GetSupportedCookie,
cookie_unchecked=GetSupportedCookieUnchecked
reply=GetSupportedReply
}
// }}}
// _NET_CLIENT_LIST, WINDOW[]/32
// {{{
pub struct GetClientList;
pub struct GetClientListCookie(xcb::x::GetPropertyCookie);
pub struct GetClientListCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetClientListReply {
pub clients: Vec<xcb::x::Window>,
@ -64,24 +52,16 @@ impl From<xcb::x::GetPropertyReply> for GetClientListReply {
ewmh_get_property! {
request=GetClientList{
window: root_window,
window: root,
property: _NET_CLIENT_LIST,
xtype: ATOM_WINDOW
},
reply=GetClientListReply,
cookie=GetClientListCookie,
cookie_unchecked=GetClientListCookieUnchecked
reply=GetClientListReply
}
// }}}
// _NET_CLIENT_LIST_STACKING, WINDOW[]/32
// {{{
pub struct GetClientListStacking;
pub struct GetClientListStackingCookie(xcb::x::GetPropertyCookie);
pub struct GetClientListStackingCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetClientListStackingReply {
pub clients: Vec<xcb::x::Window>,
@ -97,24 +77,16 @@ impl From<xcb::x::GetPropertyReply> for GetClientListStackingReply {
ewmh_get_property! {
request=GetClientListStacking{
window: root_window,
window: root,
property: _NET_CLIENT_LIST_STACKING,
xtype: ATOM_WINDOW
},
reply=GetClientListStackingReply,
cookie=GetClientListStackingCookie,
cookie_unchecked=GetClientListStackingCookieUnchecked
}
// }}}
// _NET_NUMBER_OF_DESKTOPS, CARDINAL/32
// {{{
pub struct GetNumberOfDesktops;
pub struct GetNumberOfDesktopsCookie(xcb::x::GetPropertyCookie);
pub struct GetNumberOfDesktopsCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetNumberOfDesktopsReply {
pub desktops: u32,
@ -130,13 +102,11 @@ impl From<xcb::x::GetPropertyReply> for GetNumberOfDesktopsReply {
ewmh_get_property! {
request=GetNumberOfDesktops{
window: root_window,
window: root,
property: _NET_NUMBER_OF_DESKTOPS,
xtype: ATOM_CARDINAL
},
reply=GetNumberOfDesktopsReply,
cookie=GetNumberOfDesktopsCookie,
cookie_unchecked=GetNumberOfDesktopsCookieUnchecked
reply=GetNumberOfDesktopsReply
}
pub struct SetNumberOfDesktops {
@ -162,12 +132,6 @@ ewmh_client_message! {
// _NET_DESKTOP_GEOMETRY width, height, CARDINAL[2]/32
// {{{
pub struct GetDesktopGeometry;
pub struct GetDesktopGeometryCookie(xcb::x::GetPropertyCookie);
pub struct GetDesktopGeometryCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetDesktopGeometryReply {
pub width: u32,
@ -185,13 +149,11 @@ impl From<xcb::x::GetPropertyReply> for GetDesktopGeometryReply {
ewmh_get_property! {
request=GetDesktopGeometry{
window: root_window,
window: root,
property: _NET_DESKTOP_GEOMETRY,
xtype: ATOM_CARDINAL
},
reply=GetDesktopGeometryReply,
cookie=GetDesktopGeometryCookie,
cookie_unchecked=GetDesktopGeometryCookieUnchecked
reply=GetDesktopGeometryReply
}
pub struct SetDesktopGeometry {
@ -218,12 +180,6 @@ ewmh_client_message! {
// _NET_DESTKOP_VIEWPORT x, y, CARDINAL[][2]/32
// {{{
pub struct GetDesktopViewport;
pub struct GetDesktopViewportCookie(xcb::x::GetPropertyCookie);
pub struct GetDesktopViewportCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetDesktopViewportReply {
pub x: u32,
@ -241,13 +197,11 @@ impl From<xcb::x::GetPropertyReply> for GetDesktopViewportReply {
ewmh_get_property! {
request=GetDesktopViewport{
window: root_window,
window: root,
property: _NET_DESKTOP_VIEWPORT,
xtype: ATOM_CARDINAL
},
reply=GetDesktopViewportReply,
cookie=GetDesktopViewportCookie,
cookie_unchecked=GetDesktopViewportCookieUnchecked
reply=GetDesktopViewportReply
}
pub struct SetDesktopViewport {
@ -273,12 +227,6 @@ ewmh_client_message! {
// _NET_CURRENT_DESKTOP desktop, CARDINAL/32
// {{{
pub struct GetCurrentDesktop;
pub struct GetCurrentDesktopCookie(xcb::x::GetPropertyCookie);
pub struct GetCurrentDesktopCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetCurrentDesktopReply {
pub desktop: u32,
@ -294,13 +242,11 @@ impl From<xcb::x::GetPropertyReply> for GetCurrentDesktopReply {
ewmh_get_property! {
request=GetCurrentDesktop{
window: root_window,
window: root,
property: _NET_CURRENT_DESKTOP,
xtype: ATOM_CARDINAL
},
reply=GetCurrentDesktopReply,
cookie=GetCurrentDesktopCookie,
cookie_unchecked=GetCurrentDesktopCookieUnchecked
reply=GetCurrentDesktopReply
}
pub struct SetCurrentDesktop {
@ -326,12 +272,6 @@ ewmh_client_message! {
// _NET_DESKTOP_NAMES desktop, UTF8_STRING[]
// {{{
pub struct GetDesktopNames;
pub struct GetDesktopNamesCookie(xcb::x::GetPropertyCookie);
pub struct GetDesktopNamesCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetDesktopNamesReply {
pub names: Vec<String>,
@ -347,13 +287,11 @@ impl From<xcb::x::GetPropertyReply> for GetDesktopNamesReply {
ewmh_get_property! {
request=GetDesktopNames{
window: root_window,
window: root,
property: _NET_DESKTOP_NAMES,
xtype: UTF8_STRING
},
reply=GetDesktopNamesReply,
cookie=GetDesktopNamesCookie,
cookie_unchecked=GetDesktopNamesCookieUnchecked
reply=GetDesktopNamesReply
}
pub struct SetDesktopNames {
@ -379,12 +317,6 @@ ewmh_set_property! {
// _NET_ACTIVE_WINDOW, WINDOW/32
// {{{
pub struct GetActiveWindow;
pub struct GetActiveWindowCookie(xcb::x::GetPropertyCookie);
pub struct GetActiveWindowCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetActiveWindowReply {
pub window: xcb::x::Window,
@ -400,13 +332,11 @@ impl From<xcb::x::GetPropertyReply> for GetActiveWindowReply {
ewmh_get_property! {
request=GetActiveWindow{
window: root_window,
window: root,
property: _NET_ACTIVE_WINDOW,
xtype: ATOM_WINDOW
},
reply=GetActiveWindowReply,
cookie=GetActiveWindowCookie,
cookie_unchecked=GetActiveWindowCookieUnchecked
reply=GetActiveWindowReply
}
pub struct SetActiveWindow {
@ -444,13 +374,6 @@ ewmh_client_message! {
// // _NET_WORKAREA, x, y, width, height, CARDINAL[][4]/32
// {{{
pub struct GetWorkarea;
pub struct GetWorkareaCookie(xcb::x::GetPropertyCookie);
pub struct GetWorkareaCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetWorkareaReply {
pub x: u32,
@ -472,25 +395,16 @@ impl From<xcb::x::GetPropertyReply> for GetWorkareaReply {
ewmh_get_property! {
request=GetWorkarea{
window: root_window,
window: root,
property: _NET_WORKAREA,
xtype: ATOM_CARDINAL
},
reply=GetWorkareaReply,
cookie=GetWorkareaCookie,
cookie_unchecked=GetWorkareaCookieUnchecked
reply=GetWorkareaReply
}
// }}}
// // _NET_SUPPORTING_WM_CHECK, WINDOW/32
// {{{
pub struct GetSupportingWmCheck;
pub struct GetSupportingWmCheckCookie(xcb::x::GetPropertyCookie);
pub struct GetSupportingWmCheckCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetSupportingWmCheckReply {
pub window: xcb::x::Window,
@ -503,16 +417,19 @@ impl From<xcb::x::GetPropertyReply> for GetSupportingWmCheckReply {
}
}
}
ewmh_get_property! {
request=GetSupportingWmCheck{
window: root,
property: _NET_SUPPORTING_WM_CHECK,
xtype: ATOM_WINDOW
},
reply=GetSupportingWmCheckReply
}
// }}}
// _NET_VIRTUAL_ROOTS, WINDOW/32
// {{{
pub struct GetVirtualRoots;
pub struct GetVirtualRootsCookie(xcb::x::GetPropertyCookie);
pub struct GetVirtualRootsCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetVirtualRootsReply {
pub window: xcb::x::Window,
@ -528,24 +445,16 @@ impl From<xcb::x::GetPropertyReply> for GetVirtualRootsReply {
ewmh_get_property! {
request=GetVirtualRoots{
window: root_window,
window: root,
property: _NET_VIRTUAL_ROOTS,
xtype: ATOM_WINDOW
},
reply=GetVirtualRootsReply,
cookie=GetVirtualRootsCookie,
cookie_unchecked=GetVirtualRootsCookieUnchecked
reply=GetVirtualRootsReply
}
// }}}
// _NET_DESKTOP_LAYOUT, orientation, columns, rows, starting_corner, CARDINAL[4]/32
// {{{
pub struct DesktopLayout;
pub struct DesktopLayoutCookie(xcb::x::GetPropertyCookie);
pub struct DesktopLayoutCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct DesktopLayoutReply {
pub orientation: u32,
@ -567,24 +476,16 @@ impl From<xcb::x::GetPropertyReply> for DesktopLayoutReply {
ewmh_get_property! {
request=DesktopLayout{
window: root_window,
window: root,
property: _NET_DESKTOP_LAYOUT,
xtype: ATOM_CARDINAL
},
reply=DesktopLayoutReply,
cookie=DesktopLayoutCookie,
cookie_unchecked=DesktopLayoutCookieUnchecked
reply=DesktopLayoutReply
}
// }}}
// _NET_SHOWING_DESKTOP desktop, CARDINAL/32
// {{{
pub struct GetShowingDesktop;
pub struct GetShowingDesktopCookie(xcb::x::GetPropertyCookie);
pub struct GetShowingDesktopCookieUnchecked(xcb::x::GetPropertyCookieUnchecked);
#[derive(Debug)]
pub struct GetShowingDesktopReply {
pub is_showing_desktop: bool,
@ -604,13 +505,11 @@ impl From<xcb::x::GetPropertyReply> for GetShowingDesktopReply {
ewmh_get_property! {
request=GetShowingDesktop{
window: root_window,
window: root,
property: _NET_SHOWING_DESKTOP,
xtype: ATOM_CARDINAL
},
reply=GetShowingDesktopReply,
cookie=GetShowingDesktopCookie,
cookie_unchecked=GetShowingDesktopCookieUnchecked
reply=GetShowingDesktopReply
}
pub struct SetShowingDesktop {