1#![allow(clippy::too_many_arguments)]
7
8#[allow(unused_imports)]
9use std::borrow::Cow;
10#[allow(unused_imports)]
11use std::convert::TryInto;
12#[allow(unused_imports)]
13use crate::utils::RawFdContainer;
14#[allow(unused_imports)]
15use crate::x11_utils::{Request, RequestHeader, Serialize, TryParse, TryParseFd};
16use std::io::IoSlice;
17use crate::connection::RequestConnection;
18#[allow(unused_imports)]
19use crate::connection::Connection as X11Connection;
20#[allow(unused_imports)]
21use crate::cookie::{Cookie, CookieWithFds, VoidCookie};
22use crate::errors::ConnectionError;
23#[allow(unused_imports)]
24use crate::errors::ReplyOrIdError;
25use std::future::Future;
26use std::pin::Pin;
27#[allow(unused_imports)]
28use super::xproto;
29
30pub use x11rb_protocol::protocol::xinerama::*;
31
32async fn major_opcode<Conn: RequestConnection + ?Sized>(conn: &Conn) -> Result<u8, ConnectionError> {
34 let info = conn.extension_information(X11_EXTENSION_NAME).await?;
35 let info = info.ok_or(ConnectionError::UnsupportedExtension)?;
36 Ok(info.major_opcode)
37}
38
39pub async fn query_version<Conn>(conn: &Conn, major: u8, minor: u8) -> Result<Cookie<'_, Conn, QueryVersionReply>, ConnectionError>
40where
41 Conn: RequestConnection + ?Sized,
42{
43 let request0 = QueryVersionRequest {
44 major,
45 minor,
46 };
47 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
48 let slices = [IoSlice::new(&bytes[0])];
49 assert_eq!(slices.len(), bytes.len());
50 conn.send_request_with_reply(&slices, fds).await
51}
52pub async fn get_state<Conn>(conn: &Conn, window: xproto::Window) -> Result<Cookie<'_, Conn, GetStateReply>, ConnectionError>
53where
54 Conn: RequestConnection + ?Sized,
55{
56 let request0 = GetStateRequest {
57 window,
58 };
59 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
60 let slices = [IoSlice::new(&bytes[0])];
61 assert_eq!(slices.len(), bytes.len());
62 conn.send_request_with_reply(&slices, fds).await
63}
64pub async fn get_screen_count<Conn>(conn: &Conn, window: xproto::Window) -> Result<Cookie<'_, Conn, GetScreenCountReply>, ConnectionError>
65where
66 Conn: RequestConnection + ?Sized,
67{
68 let request0 = GetScreenCountRequest {
69 window,
70 };
71 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
72 let slices = [IoSlice::new(&bytes[0])];
73 assert_eq!(slices.len(), bytes.len());
74 conn.send_request_with_reply(&slices, fds).await
75}
76pub async fn get_screen_size<Conn>(conn: &Conn, window: xproto::Window, screen: u32) -> Result<Cookie<'_, Conn, GetScreenSizeReply>, ConnectionError>
77where
78 Conn: RequestConnection + ?Sized,
79{
80 let request0 = GetScreenSizeRequest {
81 window,
82 screen,
83 };
84 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
85 let slices = [IoSlice::new(&bytes[0])];
86 assert_eq!(slices.len(), bytes.len());
87 conn.send_request_with_reply(&slices, fds).await
88}
89pub async fn is_active<Conn>(conn: &Conn) -> Result<Cookie<'_, Conn, IsActiveReply>, ConnectionError>
90where
91 Conn: RequestConnection + ?Sized,
92{
93 let request0 = IsActiveRequest;
94 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
95 let slices = [IoSlice::new(&bytes[0])];
96 assert_eq!(slices.len(), bytes.len());
97 conn.send_request_with_reply(&slices, fds).await
98}
99pub async fn query_screens<Conn>(conn: &Conn) -> Result<Cookie<'_, Conn, QueryScreensReply>, ConnectionError>
100where
101 Conn: RequestConnection + ?Sized,
102{
103 let request0 = QueryScreensRequest;
104 let (bytes, fds) = request0.serialize(major_opcode(conn).await?);
105 let slices = [IoSlice::new(&bytes[0])];
106 assert_eq!(slices.len(), bytes.len());
107 conn.send_request_with_reply(&slices, fds).await
108}
109pub trait ConnectionExt: RequestConnection {
111 fn xinerama_query_version(&self, major: u8, minor: u8) -> Pin<Box<dyn Future<Output = Result<Cookie<'_, Self, QueryVersionReply>, ConnectionError>> + Send + '_>>
112 {
113 Box::pin(query_version(self, major, minor))
114 }
115 fn xinerama_get_state(&self, window: xproto::Window) -> Pin<Box<dyn Future<Output = Result<Cookie<'_, Self, GetStateReply>, ConnectionError>> + Send + '_>>
116 {
117 Box::pin(get_state(self, window))
118 }
119 fn xinerama_get_screen_count(&self, window: xproto::Window) -> Pin<Box<dyn Future<Output = Result<Cookie<'_, Self, GetScreenCountReply>, ConnectionError>> + Send + '_>>
120 {
121 Box::pin(get_screen_count(self, window))
122 }
123 fn xinerama_get_screen_size(&self, window: xproto::Window, screen: u32) -> Pin<Box<dyn Future<Output = Result<Cookie<'_, Self, GetScreenSizeReply>, ConnectionError>> + Send + '_>>
124 {
125 Box::pin(get_screen_size(self, window, screen))
126 }
127 fn xinerama_is_active(&self) -> Pin<Box<dyn Future<Output = Result<Cookie<'_, Self, IsActiveReply>, ConnectionError>> + Send + '_>>
128 {
129 Box::pin(is_active(self))
130 }
131 fn xinerama_query_screens(&self) -> Pin<Box<dyn Future<Output = Result<Cookie<'_, Self, QueryScreensReply>, ConnectionError>> + Send + '_>>
132 {
133 Box::pin(query_screens(self))
134 }
135}
136
137impl<C: RequestConnection + ?Sized> ConnectionExt for C {}