initial commit, view-tags is incomplete
This commit is contained in:
commit
1b297251bc
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/target
|
147
Cargo.lock
generated
Normal file
147
Cargo.lock
generated
Normal file
@ -0,0 +1,147 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.67"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e3c69b077ad434294d3ce9f1f6143a2a4b89a8a2d54ef813d85003a4fd1137fd"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "downcast-rs"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.94"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "18794a8ad5b29321f790b55d93dfba91e125cb1a9edbd4f8e3150acc771c1a5e"
|
||||
|
||||
[[package]]
|
||||
name = "nix"
|
||||
version = "0.20.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fa9b4819da1bc61c0ea48b63b7bc8604064dd43013e7cc325df098d49cd7c18a"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.7.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
|
||||
|
||||
[[package]]
|
||||
name = "pkg-config"
|
||||
version = "0.3.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0d8caf72986c1a598726adc988bb5984792ef84f5ee5aa50209145ee8077038"
|
||||
dependencies = [
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
|
||||
|
||||
[[package]]
|
||||
name = "status"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"wayland-client",
|
||||
"wayland-commons",
|
||||
"wayland-scanner",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
|
||||
|
||||
[[package]]
|
||||
name = "wayland-client"
|
||||
version = "0.28.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "06ca44d86554b85cf449f1557edc6cc7da935cc748c8e4bf1c507cbd43bae02c"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"downcast-rs",
|
||||
"libc",
|
||||
"nix",
|
||||
"wayland-commons",
|
||||
"wayland-scanner",
|
||||
"wayland-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wayland-commons"
|
||||
version = "0.28.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8bd75ae380325dbcff2707f0cd9869827ea1d2d6d534cff076858d3f0460fd5a"
|
||||
dependencies = [
|
||||
"nix",
|
||||
"once_cell",
|
||||
"smallvec",
|
||||
"wayland-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wayland-scanner"
|
||||
version = "0.28.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "389d680d7bd67512dc9c37f39560224327038deb0f0e8d33f870900441b68720"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"xml-rs",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wayland-sys"
|
||||
version = "0.28.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2907bd297eef464a95ba9349ea771611771aa285b932526c633dc94d5400a8e2"
|
||||
dependencies = [
|
||||
"pkg-config",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "xml-rs"
|
||||
version = "0.8.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b07db065a5cf61a7e4ba64f29e67db906fb1787316516c4e6e5ff0fea1efcd8a"
|
15
Cargo.toml
Normal file
15
Cargo.toml
Normal file
@ -0,0 +1,15 @@
|
||||
[package]
|
||||
name = "status"
|
||||
version = "0.1.0"
|
||||
authors = ["Bryan Ndjeutcha <ndjeutcha@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[build-dependencies]
|
||||
wayland-scanner = "0.28.5"
|
||||
|
||||
[dependencies]
|
||||
wayland-scanner = "0.28.5"
|
||||
wayland-commons = "0.28.5"
|
||||
wayland-client = "0.28.5"
|
23
build.rs
Normal file
23
build.rs
Normal file
@ -0,0 +1,23 @@
|
||||
extern crate wayland_scanner;
|
||||
|
||||
use std::path::Path;
|
||||
use wayland_scanner::{generate_code, Side};
|
||||
|
||||
pub fn main() {
|
||||
generate("river_status_unstable_v1");
|
||||
}
|
||||
|
||||
fn generate(protocol_name: &str) {
|
||||
let out_dir = Path::new(concat!(env!("CARGO_MANIFEST_DIR"), "/src/wayland/"));
|
||||
|
||||
let mut protocol_dir = String::from(concat!(env!("CARGO_MANIFEST_DIR"), "/protocol/"));
|
||||
protocol_dir.push_str(protocol_name);
|
||||
protocol_dir.push_str(".xml");
|
||||
protocol_dir = protocol_dir.replace("_", "-");
|
||||
|
||||
let protocol = Path::new(&protocol_dir);
|
||||
let mut protocol_file = protocol_name.to_string();
|
||||
protocol_file.push_str(".rs");
|
||||
|
||||
generate_code(protocol, out_dir.join(protocol_file), Side::Client);
|
||||
}
|
117
protocol/river-status-unstable-v1.xml
Normal file
117
protocol/river-status-unstable-v1.xml
Normal file
@ -0,0 +1,117 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<protocol name="river_status_unstable_v1">
|
||||
<copyright>
|
||||
Copyright 2020 The River Developers
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
</copyright>
|
||||
|
||||
<interface name="zriver_status_manager_v1" version="1">
|
||||
<description summary="manage river status objects">
|
||||
A global factory for objects that receive status information specific
|
||||
to river. It could be used to implement, for example, a status bar.
|
||||
</description>
|
||||
|
||||
<request name="destroy" type="destructor">
|
||||
<description summary="destroy the river_status_manager object">
|
||||
This request indicates that the client will not use the
|
||||
river_status_manager object any more. Objects that have been created
|
||||
through this instance are not affected.
|
||||
</description>
|
||||
</request>
|
||||
|
||||
<request name="get_river_output_status">
|
||||
<description summary="create an output status object">
|
||||
This creates a new river_output_status object for the given wl_output.
|
||||
</description>
|
||||
<arg name="id" type="new_id" interface="zriver_output_status_v1"/>
|
||||
<arg name="output" type="object" interface="wl_output"/>
|
||||
</request>
|
||||
|
||||
<request name="get_river_seat_status">
|
||||
<description summary="create a seat status object">
|
||||
This creates a new river_seat_status object for the given wl_seat.
|
||||
</description>
|
||||
<arg name="id" type="new_id" interface="zriver_seat_status_v1"/>
|
||||
<arg name="seat" type="object" interface="wl_seat"/>
|
||||
</request>
|
||||
</interface>
|
||||
|
||||
<interface name="zriver_output_status_v1" version="1">
|
||||
<description summary="track output tags and focus">
|
||||
This interface allows clients to receive information about the current
|
||||
windowing state of an output.
|
||||
</description>
|
||||
|
||||
<request name="destroy" type="destructor">
|
||||
<description summary="destroy the river_output_status object">
|
||||
This request indicates that the client will not use the
|
||||
river_output_status object any more.
|
||||
</description>
|
||||
</request>
|
||||
|
||||
<event name="focused_tags">
|
||||
<description summary="focused tags of the output">
|
||||
Sent once binding the interface and again whenever the tag focus of
|
||||
the output changes.
|
||||
</description>
|
||||
<arg name="tags" type="uint" summary="32-bit bitfield"/>
|
||||
</event>
|
||||
|
||||
<event name="view_tags">
|
||||
<description summary="tag state of an output's views">
|
||||
Sent once on binding the interface and again whenever the tag state
|
||||
of the output changes.
|
||||
</description>
|
||||
<arg name="tags" type="array" summary="array of 32-bit bitfields"/>
|
||||
</event>
|
||||
</interface>
|
||||
|
||||
<interface name="zriver_seat_status_v1" version="1">
|
||||
<description summary="track seat focus">
|
||||
This interface allows clients to receive information about the current
|
||||
focus of a seat. Note that (un)focused_output events will only be sent
|
||||
if the client has bound the relevant wl_output globals.
|
||||
</description>
|
||||
|
||||
<request name="destroy" type="destructor">
|
||||
<description summary="destroy the river_seat_status object">
|
||||
This request indicates that the client will not use the
|
||||
river_seat_status object any more.
|
||||
</description>
|
||||
</request>
|
||||
|
||||
<event name="focused_output">
|
||||
<description summary="the seat focused an output">
|
||||
Sent on binding the interface and again whenever an output gains focus.
|
||||
</description>
|
||||
<arg name="output" type="object" interface="wl_output"/>
|
||||
</event>
|
||||
|
||||
<event name="unfocused_output">
|
||||
<description summary="the seat unfocused an output">
|
||||
Sent whenever an output loses focus.
|
||||
</description>
|
||||
<arg name="output" type="object" interface="wl_output"/>
|
||||
</event>
|
||||
|
||||
<event name="focused_view">
|
||||
<description summary="information on the focused view">
|
||||
Sent once on binding the interface and again whenever the focused
|
||||
view or a property thereof changes. The title may be an empty string
|
||||
if no view is focused or the focused view did not set a title.
|
||||
</description>
|
||||
<arg name="title" type="string" summary="title of the focused view"/>
|
||||
</event>
|
||||
</interface>
|
||||
</protocol>
|
161
src/main.rs
Normal file
161
src/main.rs
Normal file
@ -0,0 +1,161 @@
|
||||
mod wayland;
|
||||
|
||||
use wayland_client::protocol::wl_output::WlOutput;
|
||||
use crate::wayland::{
|
||||
river_status_unstable_v1::zriver_status_manager_v1::ZriverStatusManagerV1,
|
||||
river_status_unstable_v1::zriver_output_status_v1::ZriverOutputStatusV1,
|
||||
};
|
||||
use crate::wayland::river_status_unstable_v1::zriver_output_status_v1;
|
||||
use wayland_client::{Display, GlobalManager, Main};
|
||||
|
||||
struct Globals {
|
||||
outputs: Vec<Output>,
|
||||
status_manager: Option<Main<ZriverStatusManagerV1>>
|
||||
}
|
||||
|
||||
struct Output {
|
||||
pub name: String,
|
||||
pub output: WlOutput,
|
||||
pub output_status: Option<Main<ZriverOutputStatusV1>>
|
||||
}
|
||||
|
||||
impl Output {
|
||||
pub fn new(output:WlOutput)->Output {
|
||||
{ Output {
|
||||
name: String::new(),
|
||||
output: output,
|
||||
output_status: None,
|
||||
} }
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let display = Display::connect_to_env().unwrap();
|
||||
|
||||
let mut event_queue = display.create_event_queue();
|
||||
|
||||
let mut globals = { Globals {
|
||||
outputs: Vec::new(),
|
||||
status_manager: None
|
||||
} };
|
||||
|
||||
let mut args = std::env::args();
|
||||
let mut monitor = None;
|
||||
let mut show_tags = false;
|
||||
let mut view_tags = false;
|
||||
args.next();
|
||||
loop {
|
||||
match args.next() {
|
||||
Some(flag) => match flag.as_str() {
|
||||
"--monitor" | "-m" => monitor = match args.next().unwrap_or(String::new()).parse::<usize>() {
|
||||
Ok(i) => Some(i),
|
||||
Err(_) => None,
|
||||
},
|
||||
"--tag" | "-t" => show_tags = true,
|
||||
"--view-tags" | "-vt" => view_tags = true,
|
||||
"--help" | "-h" | "--h" => {
|
||||
println!("Usage: status [option]\n");
|
||||
println!(" --tag | -t : displays the focused tag");
|
||||
println!(" --view-tags | -vt : displays the tag of all views");
|
||||
println!(" --monitor | -m : select the monitor index");
|
||||
std::process::exit(0);
|
||||
}
|
||||
_ => break,
|
||||
},
|
||||
None => break,
|
||||
}
|
||||
}
|
||||
|
||||
let attached_display = (*display).clone().attach(event_queue.token());
|
||||
|
||||
let _ = GlobalManager::new_with_cb(
|
||||
&attached_display,
|
||||
wayland_client::global_filter!(
|
||||
[
|
||||
ZriverStatusManagerV1,
|
||||
1,
|
||||
|status_manager_obj: Main<ZriverStatusManagerV1>, mut globals: DispatchData| {
|
||||
globals.get::<Globals>().unwrap().status_manager = Some(status_manager_obj);
|
||||
}
|
||||
],
|
||||
[
|
||||
WlOutput,
|
||||
3,
|
||||
|output: Main<WlOutput>, mut globals: DispatchData| {
|
||||
output.quick_assign(move |_, _, _| {});
|
||||
let output = Output::new(output.detach());
|
||||
globals.get::<Globals>().unwrap().outputs.push(output);
|
||||
}
|
||||
]
|
||||
),
|
||||
);
|
||||
|
||||
event_queue
|
||||
.sync_roundtrip(&mut globals, |_, _, _| unreachable!())
|
||||
.unwrap();
|
||||
|
||||
for (i, output) in globals.outputs.iter_mut().enumerate() {
|
||||
let assign;
|
||||
match monitor {
|
||||
Some(monitor) => if i == monitor {
|
||||
assign = true;
|
||||
} else { assign = false },
|
||||
None => assign = true
|
||||
}
|
||||
if assign {
|
||||
output.output_status = Some(globals.status_manager
|
||||
.as_ref()
|
||||
.expect("Compositor doesn't implement river_status_unstable_v1")
|
||||
.get_river_output_status(&output.output));
|
||||
output.output_status.as_mut().unwrap().quick_assign(move |_, event, _| match event {
|
||||
zriver_output_status_v1::Event::FocusedTags { tags } => {
|
||||
if show_tags {
|
||||
base10(tags);
|
||||
println!("");
|
||||
}
|
||||
}
|
||||
zriver_output_status_v1::Event::ViewTags { tags } => {
|
||||
if view_tags {
|
||||
let mut tagmask:u32 = 1;
|
||||
for (i, tag) in tags.iter().enumerate() {
|
||||
if *tag != 0 {
|
||||
tagmask *= *tag as u32;
|
||||
}
|
||||
if (i+1) % 4 == 0 {
|
||||
base10(tagmask);
|
||||
tagmask = 1;
|
||||
}
|
||||
}
|
||||
println!("");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
loop {
|
||||
event_queue
|
||||
.dispatch(&mut (), |event, object, _| {
|
||||
panic!(
|
||||
"[callop] Encountered an orphan event: {}@{}: {}",
|
||||
event.interface,
|
||||
object.as_ref().id(),
|
||||
event.name
|
||||
);
|
||||
})
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
fn base10(tagmask: u32) {
|
||||
let mut tag = 0;
|
||||
let mut current: u32;
|
||||
while {current = 1 << tag; current <= tagmask} {
|
||||
tag += 1;
|
||||
if current != tagmask && (tagmask/current) % 2 != 0 {
|
||||
base10(tagmask-current);
|
||||
break;
|
||||
} else if tag == 32 { break }
|
||||
}
|
||||
print!("{} ", tag);
|
||||
}
|
36
src/wayland/mod.rs
Normal file
36
src/wayland/mod.rs
Normal file
@ -0,0 +1,36 @@
|
||||
extern crate wayland_client;
|
||||
extern crate wayland_commons;
|
||||
|
||||
// Re-export only the actual code, and then only use this re-export
|
||||
// The `generated` module below is just some boilerplate to properly isolate stuff
|
||||
// and avoid exposing internal details.
|
||||
//
|
||||
// You can use all the types from my_protocol as if they went from `wayland_client::protocol`.
|
||||
pub use wayland::client as river_status_unstable_v1;
|
||||
|
||||
pub mod wayland {
|
||||
// The generated code tends to trigger a lot of warnings
|
||||
// so we isolate it into a very permissive module
|
||||
#![allow(dead_code, non_camel_case_types, unused_unsafe, unused_variables)]
|
||||
#![allow(non_upper_case_globals, non_snake_case, unused_imports)]
|
||||
|
||||
pub mod client {
|
||||
// These imports are used by the generated code
|
||||
pub(crate) use wayland_client::protocol::wl_output;
|
||||
pub(crate) use wayland_client::{protocol, sys};
|
||||
pub(crate) use wayland_client::{
|
||||
AnonymousObject, Attached, Display, GlobalManager, Main, Proxy, ProxyMap,
|
||||
};
|
||||
pub(crate) use wayland_commons::map::{Object, ObjectMetadata};
|
||||
pub(crate) use wayland_commons::smallvec;
|
||||
pub(crate) use wayland_commons::wire::{Argument, ArgumentType, Message, MessageDesc};
|
||||
pub(crate) use wayland_commons::{Interface, MessageGroup};
|
||||
// If you protocol interacts with objects from other protocols, you'll need to import
|
||||
// their modules, like so:
|
||||
pub(crate) use wayland_client::protocol::{wl_region, wl_seat, wl_surface};
|
||||
include!(concat!(
|
||||
env!("CARGO_MANIFEST_DIR"),
|
||||
"/src/wayland/river_status_unstable_v1.rs"
|
||||
));
|
||||
}
|
||||
}
|
873
src/wayland/river_status_unstable_v1.rs
Normal file
873
src/wayland/river_status_unstable_v1.rs
Normal file
@ -0,0 +1,873 @@
|
||||
use std::os::raw::{c_char, c_void};
|
||||
const NULLPTR: *const c_void = 0 as *const c_void;
|
||||
static mut types_null: [*const sys::common::wl_interface; 1] =
|
||||
[NULLPTR as *const sys::common::wl_interface];
|
||||
#[doc = "manage river status objects\n\nA global factory for objects that receive status information specific\nto river. It could be used to implement, for example, a status bar."]
|
||||
pub mod zriver_status_manager_v1 {
|
||||
use super::sys::client::*;
|
||||
use super::sys::common::{wl_argument, wl_array, wl_interface, wl_message};
|
||||
use super::{
|
||||
smallvec, types_null, AnonymousObject, Argument, ArgumentType, Interface, Main, Message,
|
||||
MessageDesc, MessageGroup, Object, ObjectMetadata, Proxy, NULLPTR,
|
||||
};
|
||||
use std::os::raw::c_char;
|
||||
#[derive(Debug)]
|
||||
#[non_exhaustive]
|
||||
pub enum Request {
|
||||
#[doc = "destroy the river_status_manager object\n\nThis request indicates that the client will not use the\nriver_status_manager object any more. Objects that have been created\nthrough this instance are not affected.\n\nThis is a destructor, once sent this object cannot be used any longer."]
|
||||
Destroy,
|
||||
#[doc = "create an output status object\n\nThis creates a new river_output_status object for the given wl_output."]
|
||||
GetRiverOutputStatus { output: super::wl_output::WlOutput },
|
||||
#[doc = "create a seat status object\n\nThis creates a new river_seat_status object for the given wl_seat."]
|
||||
GetRiverSeatStatus { seat: super::wl_seat::WlSeat },
|
||||
}
|
||||
impl super::MessageGroup for Request {
|
||||
const MESSAGES: &'static [super::MessageDesc] = &[
|
||||
super::MessageDesc {
|
||||
name: "destroy",
|
||||
since: 1,
|
||||
signature: &[],
|
||||
destructor: true,
|
||||
},
|
||||
super::MessageDesc {
|
||||
name: "get_river_output_status",
|
||||
since: 1,
|
||||
signature: &[super::ArgumentType::NewId, super::ArgumentType::Object],
|
||||
destructor: false,
|
||||
},
|
||||
super::MessageDesc {
|
||||
name: "get_river_seat_status",
|
||||
since: 1,
|
||||
signature: &[super::ArgumentType::NewId, super::ArgumentType::Object],
|
||||
destructor: false,
|
||||
},
|
||||
];
|
||||
type Map = super::ProxyMap;
|
||||
fn is_destructor(&self) -> bool {
|
||||
match *self {
|
||||
Request::Destroy => true,
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
fn opcode(&self) -> u16 {
|
||||
match *self {
|
||||
Request::Destroy => 0,
|
||||
Request::GetRiverOutputStatus { .. } => 1,
|
||||
Request::GetRiverSeatStatus { .. } => 2,
|
||||
}
|
||||
}
|
||||
fn since(&self) -> u32 {
|
||||
match *self {
|
||||
Request::Destroy => 1,
|
||||
Request::GetRiverOutputStatus { .. } => 1,
|
||||
Request::GetRiverSeatStatus { .. } => 1,
|
||||
}
|
||||
}
|
||||
fn child<Meta: ObjectMetadata>(
|
||||
opcode: u16,
|
||||
version: u32,
|
||||
meta: &Meta,
|
||||
) -> Option<Object<Meta>> {
|
||||
match opcode {
|
||||
1 => Some(Object::from_interface::<
|
||||
super::zriver_output_status_v1::ZriverOutputStatusV1,
|
||||
>(version, meta.child())),
|
||||
2 => Some(Object::from_interface::<
|
||||
super::zriver_seat_status_v1::ZriverSeatStatusV1,
|
||||
>(version, meta.child())),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
fn from_raw(msg: Message, map: &mut Self::Map) -> Result<Self, ()> {
|
||||
panic!("Request::from_raw can not be used Client-side.")
|
||||
}
|
||||
fn into_raw(self, sender_id: u32) -> Message {
|
||||
match self {
|
||||
Request::Destroy => Message {
|
||||
sender_id: sender_id,
|
||||
opcode: 0,
|
||||
args: smallvec![],
|
||||
},
|
||||
Request::GetRiverOutputStatus { output } => Message {
|
||||
sender_id: sender_id,
|
||||
opcode: 1,
|
||||
args: smallvec![Argument::NewId(0), Argument::Object(output.as_ref().id()),],
|
||||
},
|
||||
Request::GetRiverSeatStatus { seat } => Message {
|
||||
sender_id: sender_id,
|
||||
opcode: 2,
|
||||
args: smallvec![Argument::NewId(0), Argument::Object(seat.as_ref().id()),],
|
||||
},
|
||||
}
|
||||
}
|
||||
unsafe fn from_raw_c(
|
||||
obj: *mut ::std::os::raw::c_void,
|
||||
opcode: u32,
|
||||
args: *const wl_argument,
|
||||
) -> Result<Request, ()> {
|
||||
panic!("Request::from_raw_c can not be used Client-side.")
|
||||
}
|
||||
fn as_raw_c_in<F, T>(self, f: F) -> T
|
||||
where
|
||||
F: FnOnce(u32, &mut [wl_argument]) -> T,
|
||||
{
|
||||
match self {
|
||||
Request::Destroy => {
|
||||
let mut _args_array: [wl_argument; 0] = unsafe { ::std::mem::zeroed() };
|
||||
f(0, &mut _args_array)
|
||||
}
|
||||
Request::GetRiverOutputStatus { output } => {
|
||||
let mut _args_array: [wl_argument; 2] = unsafe { ::std::mem::zeroed() };
|
||||
_args_array[0].o = ::std::ptr::null_mut() as *mut _;
|
||||
_args_array[1].o = output.as_ref().c_ptr() as *mut _;
|
||||
f(1, &mut _args_array)
|
||||
}
|
||||
Request::GetRiverSeatStatus { seat } => {
|
||||
let mut _args_array: [wl_argument; 2] = unsafe { ::std::mem::zeroed() };
|
||||
_args_array[0].o = ::std::ptr::null_mut() as *mut _;
|
||||
_args_array[1].o = seat.as_ref().c_ptr() as *mut _;
|
||||
f(2, &mut _args_array)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#[derive(Debug)]
|
||||
#[non_exhaustive]
|
||||
pub enum Event {}
|
||||
impl super::MessageGroup for Event {
|
||||
const MESSAGES: &'static [super::MessageDesc] = &[];
|
||||
type Map = super::ProxyMap;
|
||||
fn is_destructor(&self) -> bool {
|
||||
match *self {}
|
||||
}
|
||||
fn opcode(&self) -> u16 {
|
||||
match *self {}
|
||||
}
|
||||
fn since(&self) -> u32 {
|
||||
match *self {}
|
||||
}
|
||||
fn child<Meta: ObjectMetadata>(
|
||||
opcode: u16,
|
||||
version: u32,
|
||||
meta: &Meta,
|
||||
) -> Option<Object<Meta>> {
|
||||
match opcode {
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
fn from_raw(msg: Message, map: &mut Self::Map) -> Result<Self, ()> {
|
||||
match msg.opcode {
|
||||
_ => Err(()),
|
||||
}
|
||||
}
|
||||
fn into_raw(self, sender_id: u32) -> Message {
|
||||
panic!("Event::into_raw can not be used Client-side.")
|
||||
}
|
||||
unsafe fn from_raw_c(
|
||||
obj: *mut ::std::os::raw::c_void,
|
||||
opcode: u32,
|
||||
args: *const wl_argument,
|
||||
) -> Result<Event, ()> {
|
||||
match opcode {
|
||||
_ => return Err(()),
|
||||
}
|
||||
}
|
||||
fn as_raw_c_in<F, T>(self, f: F) -> T
|
||||
where
|
||||
F: FnOnce(u32, &mut [wl_argument]) -> T,
|
||||
{
|
||||
panic!("Event::as_raw_c_in can not be used Client-side.")
|
||||
}
|
||||
}
|
||||
#[derive(Clone, Eq, PartialEq)]
|
||||
pub struct ZriverStatusManagerV1(Proxy<ZriverStatusManagerV1>);
|
||||
impl AsRef<Proxy<ZriverStatusManagerV1>> for ZriverStatusManagerV1 {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &Proxy<Self> {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
impl From<Proxy<ZriverStatusManagerV1>> for ZriverStatusManagerV1 {
|
||||
#[inline]
|
||||
fn from(value: Proxy<Self>) -> Self {
|
||||
ZriverStatusManagerV1(value)
|
||||
}
|
||||
}
|
||||
impl From<ZriverStatusManagerV1> for Proxy<ZriverStatusManagerV1> {
|
||||
#[inline]
|
||||
fn from(value: ZriverStatusManagerV1) -> Self {
|
||||
value.0
|
||||
}
|
||||
}
|
||||
impl std::fmt::Debug for ZriverStatusManagerV1 {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.write_fmt(format_args!("{:?}", self.0))
|
||||
}
|
||||
}
|
||||
impl Interface for ZriverStatusManagerV1 {
|
||||
type Request = Request;
|
||||
type Event = Event;
|
||||
const NAME: &'static str = "zriver_status_manager_v1";
|
||||
const VERSION: u32 = 1;
|
||||
fn c_interface() -> *const wl_interface {
|
||||
unsafe { &zriver_status_manager_v1_interface }
|
||||
}
|
||||
}
|
||||
impl ZriverStatusManagerV1 {
|
||||
#[doc = "destroy the river_status_manager object\n\nThis request indicates that the client will not use the\nriver_status_manager object any more. Objects that have been created\nthrough this instance are not affected.\n\nThis is a destructor, you cannot send requests to this object any longer once this method is called."]
|
||||
pub fn destroy(&self) -> () {
|
||||
let msg = Request::Destroy;
|
||||
self.0.send::<AnonymousObject>(msg, None);
|
||||
}
|
||||
#[doc = "create an output status object\n\nThis creates a new river_output_status object for the given wl_output."]
|
||||
pub fn get_river_output_status(
|
||||
&self,
|
||||
output: &super::wl_output::WlOutput,
|
||||
) -> Main<super::zriver_output_status_v1::ZriverOutputStatusV1> {
|
||||
let msg = Request::GetRiverOutputStatus {
|
||||
output: output.clone(),
|
||||
};
|
||||
self.0.send(msg, None).unwrap()
|
||||
}
|
||||
#[doc = "create a seat status object\n\nThis creates a new river_seat_status object for the given wl_seat."]
|
||||
pub fn get_river_seat_status(
|
||||
&self,
|
||||
seat: &super::wl_seat::WlSeat,
|
||||
) -> Main<super::zriver_seat_status_v1::ZriverSeatStatusV1> {
|
||||
let msg = Request::GetRiverSeatStatus { seat: seat.clone() };
|
||||
self.0.send(msg, None).unwrap()
|
||||
}
|
||||
}
|
||||
#[doc = r" The minimal object version supporting this request"]
|
||||
pub const REQ_DESTROY_SINCE: u32 = 1u32;
|
||||
#[doc = r" The minimal object version supporting this request"]
|
||||
pub const REQ_GET_RIVER_OUTPUT_STATUS_SINCE: u32 = 1u32;
|
||||
#[doc = r" The minimal object version supporting this request"]
|
||||
pub const REQ_GET_RIVER_SEAT_STATUS_SINCE: u32 = 1u32;
|
||||
static mut zriver_status_manager_v1_requests_get_river_output_status_types:
|
||||
[*const wl_interface; 2] = [
|
||||
unsafe {
|
||||
&super::zriver_output_status_v1::zriver_output_status_v1_interface
|
||||
as *const wl_interface
|
||||
},
|
||||
unsafe { &super::wl_output::wl_output_interface as *const wl_interface },
|
||||
];
|
||||
static mut zriver_status_manager_v1_requests_get_river_seat_status_types:
|
||||
[*const wl_interface; 2] = [
|
||||
unsafe {
|
||||
&super::zriver_seat_status_v1::zriver_seat_status_v1_interface as *const wl_interface
|
||||
},
|
||||
unsafe { &super::wl_seat::wl_seat_interface as *const wl_interface },
|
||||
];
|
||||
#[doc = r" C-representation of the messages of this interface, for interop"]
|
||||
pub static mut zriver_status_manager_v1_requests: [wl_message; 3] = [
|
||||
wl_message {
|
||||
name: b"destroy\0" as *const u8 as *const c_char,
|
||||
signature: b"\0" as *const u8 as *const c_char,
|
||||
types: unsafe { &types_null as *const _ },
|
||||
},
|
||||
wl_message {
|
||||
name: b"get_river_output_status\0" as *const u8 as *const c_char,
|
||||
signature: b"no\0" as *const u8 as *const c_char,
|
||||
types: unsafe {
|
||||
&zriver_status_manager_v1_requests_get_river_output_status_types as *const _
|
||||
},
|
||||
},
|
||||
wl_message {
|
||||
name: b"get_river_seat_status\0" as *const u8 as *const c_char,
|
||||
signature: b"no\0" as *const u8 as *const c_char,
|
||||
types: unsafe {
|
||||
&zriver_status_manager_v1_requests_get_river_seat_status_types as *const _
|
||||
},
|
||||
},
|
||||
];
|
||||
#[doc = r" C representation of this interface, for interop"]
|
||||
pub static mut zriver_status_manager_v1_interface: wl_interface = wl_interface {
|
||||
name: b"zriver_status_manager_v1\0" as *const u8 as *const c_char,
|
||||
version: 1,
|
||||
request_count: 3,
|
||||
requests: unsafe { &zriver_status_manager_v1_requests as *const _ },
|
||||
event_count: 0,
|
||||
events: NULLPTR as *const wl_message,
|
||||
};
|
||||
}
|
||||
#[doc = "track output tags and focus\n\nThis interface allows clients to receive information about the current\nwindowing state of an output."]
|
||||
pub mod zriver_output_status_v1 {
|
||||
use super::sys::client::*;
|
||||
use super::sys::common::{wl_argument, wl_array, wl_interface, wl_message};
|
||||
use super::{
|
||||
smallvec, types_null, AnonymousObject, Argument, ArgumentType, Interface, Main, Message,
|
||||
MessageDesc, MessageGroup, Object, ObjectMetadata, Proxy, NULLPTR,
|
||||
};
|
||||
use std::os::raw::c_char;
|
||||
#[derive(Debug)]
|
||||
#[non_exhaustive]
|
||||
pub enum Request {
|
||||
#[doc = "destroy the river_output_status object\n\nThis request indicates that the client will not use the\nriver_output_status object any more.\n\nThis is a destructor, once sent this object cannot be used any longer."]
|
||||
Destroy,
|
||||
}
|
||||
impl super::MessageGroup for Request {
|
||||
const MESSAGES: &'static [super::MessageDesc] = &[super::MessageDesc {
|
||||
name: "destroy",
|
||||
since: 1,
|
||||
signature: &[],
|
||||
destructor: true,
|
||||
}];
|
||||
type Map = super::ProxyMap;
|
||||
fn is_destructor(&self) -> bool {
|
||||
match *self {
|
||||
Request::Destroy => true,
|
||||
}
|
||||
}
|
||||
fn opcode(&self) -> u16 {
|
||||
match *self {
|
||||
Request::Destroy => 0,
|
||||
}
|
||||
}
|
||||
fn since(&self) -> u32 {
|
||||
match *self {
|
||||
Request::Destroy => 1,
|
||||
}
|
||||
}
|
||||
fn child<Meta: ObjectMetadata>(
|
||||
opcode: u16,
|
||||
version: u32,
|
||||
meta: &Meta,
|
||||
) -> Option<Object<Meta>> {
|
||||
match opcode {
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
fn from_raw(msg: Message, map: &mut Self::Map) -> Result<Self, ()> {
|
||||
panic!("Request::from_raw can not be used Client-side.")
|
||||
}
|
||||
fn into_raw(self, sender_id: u32) -> Message {
|
||||
match self {
|
||||
Request::Destroy => Message {
|
||||
sender_id: sender_id,
|
||||
opcode: 0,
|
||||
args: smallvec![],
|
||||
},
|
||||
}
|
||||
}
|
||||
unsafe fn from_raw_c(
|
||||
obj: *mut ::std::os::raw::c_void,
|
||||
opcode: u32,
|
||||
args: *const wl_argument,
|
||||
) -> Result<Request, ()> {
|
||||
panic!("Request::from_raw_c can not be used Client-side.")
|
||||
}
|
||||
fn as_raw_c_in<F, T>(self, f: F) -> T
|
||||
where
|
||||
F: FnOnce(u32, &mut [wl_argument]) -> T,
|
||||
{
|
||||
match self {
|
||||
Request::Destroy => {
|
||||
let mut _args_array: [wl_argument; 0] = unsafe { ::std::mem::zeroed() };
|
||||
f(0, &mut _args_array)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#[derive(Debug)]
|
||||
#[non_exhaustive]
|
||||
pub enum Event {
|
||||
#[doc = "focused tags of the output\n\nSent once binding the interface and again whenever the tag focus of\nthe output changes."]
|
||||
FocusedTags { tags: u32 },
|
||||
#[doc = "tag state of an output's views\n\nSent once on binding the interface and again whenever the tag state\nof the output changes."]
|
||||
ViewTags { tags: Vec<u8> },
|
||||
}
|
||||
impl super::MessageGroup for Event {
|
||||
const MESSAGES: &'static [super::MessageDesc] = &[
|
||||
super::MessageDesc {
|
||||
name: "focused_tags",
|
||||
since: 1,
|
||||
signature: &[super::ArgumentType::Uint],
|
||||
destructor: false,
|
||||
},
|
||||
super::MessageDesc {
|
||||
name: "view_tags",
|
||||
since: 1,
|
||||
signature: &[super::ArgumentType::Array],
|
||||
destructor: false,
|
||||
},
|
||||
];
|
||||
type Map = super::ProxyMap;
|
||||
fn is_destructor(&self) -> bool {
|
||||
match *self {
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
fn opcode(&self) -> u16 {
|
||||
match *self {
|
||||
Event::FocusedTags { .. } => 0,
|
||||
Event::ViewTags { .. } => 1,
|
||||
}
|
||||
}
|
||||
fn since(&self) -> u32 {
|
||||
match *self {
|
||||
Event::FocusedTags { .. } => 1,
|
||||
Event::ViewTags { .. } => 1,
|
||||
}
|
||||
}
|
||||
fn child<Meta: ObjectMetadata>(
|
||||
opcode: u16,
|
||||
version: u32,
|
||||
meta: &Meta,
|
||||
) -> Option<Object<Meta>> {
|
||||
match opcode {
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
fn from_raw(msg: Message, map: &mut Self::Map) -> Result<Self, ()> {
|
||||
match msg.opcode {
|
||||
0 => {
|
||||
let mut args = msg.args.into_iter();
|
||||
Ok(Event::FocusedTags {
|
||||
tags: {
|
||||
if let Some(Argument::Uint(val)) = args.next() {
|
||||
val
|
||||
} else {
|
||||
return Err(());
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
1 => {
|
||||
let mut args = msg.args.into_iter();
|
||||
Ok(Event::ViewTags {
|
||||
tags: {
|
||||
if let Some(Argument::Array(val)) = args.next() {
|
||||
*val
|
||||
} else {
|
||||
return Err(());
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
_ => Err(()),
|
||||
}
|
||||
}
|
||||
fn into_raw(self, sender_id: u32) -> Message {
|
||||
panic!("Event::into_raw can not be used Client-side.")
|
||||
}
|
||||
unsafe fn from_raw_c(
|
||||
obj: *mut ::std::os::raw::c_void,
|
||||
opcode: u32,
|
||||
args: *const wl_argument,
|
||||
) -> Result<Event, ()> {
|
||||
match opcode {
|
||||
0 => {
|
||||
let _args = ::std::slice::from_raw_parts(args, 1);
|
||||
Ok(Event::FocusedTags { tags: _args[0].u })
|
||||
}
|
||||
1 => {
|
||||
let _args = ::std::slice::from_raw_parts(args, 1);
|
||||
Ok(Event::ViewTags {
|
||||
tags: {
|
||||
let array = &*_args[0].a;
|
||||
::std::slice::from_raw_parts(array.data as *const u8, array.size)
|
||||
.to_owned()
|
||||
},
|
||||
})
|
||||
}
|
||||
_ => return Err(()),
|
||||
}
|
||||
}
|
||||
fn as_raw_c_in<F, T>(self, f: F) -> T
|
||||
where
|
||||
F: FnOnce(u32, &mut [wl_argument]) -> T,
|
||||
{
|
||||
panic!("Event::as_raw_c_in can not be used Client-side.")
|
||||
}
|
||||
}
|
||||
#[derive(Clone, Eq, PartialEq)]
|
||||
pub struct ZriverOutputStatusV1(Proxy<ZriverOutputStatusV1>);
|
||||
impl AsRef<Proxy<ZriverOutputStatusV1>> for ZriverOutputStatusV1 {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &Proxy<Self> {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
impl From<Proxy<ZriverOutputStatusV1>> for ZriverOutputStatusV1 {
|
||||
#[inline]
|
||||
fn from(value: Proxy<Self>) -> Self {
|
||||
ZriverOutputStatusV1(value)
|
||||
}
|
||||
}
|
||||
impl From<ZriverOutputStatusV1> for Proxy<ZriverOutputStatusV1> {
|
||||
#[inline]
|
||||
fn from(value: ZriverOutputStatusV1) -> Self {
|
||||
value.0
|
||||
}
|
||||
}
|
||||
impl std::fmt::Debug for ZriverOutputStatusV1 {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.write_fmt(format_args!("{:?}", self.0))
|
||||
}
|
||||
}
|
||||
impl Interface for ZriverOutputStatusV1 {
|
||||
type Request = Request;
|
||||
type Event = Event;
|
||||
const NAME: &'static str = "zriver_output_status_v1";
|
||||
const VERSION: u32 = 1;
|
||||
fn c_interface() -> *const wl_interface {
|
||||
unsafe { &zriver_output_status_v1_interface }
|
||||
}
|
||||
}
|
||||
impl ZriverOutputStatusV1 {
|
||||
#[doc = "destroy the river_output_status object\n\nThis request indicates that the client will not use the\nriver_output_status object any more.\n\nThis is a destructor, you cannot send requests to this object any longer once this method is called."]
|
||||
pub fn destroy(&self) -> () {
|
||||
let msg = Request::Destroy;
|
||||
self.0.send::<AnonymousObject>(msg, None);
|
||||
}
|
||||
}
|
||||
#[doc = r" The minimal object version supporting this request"]
|
||||
pub const REQ_DESTROY_SINCE: u32 = 1u32;
|
||||
#[doc = r" The minimal object version supporting this event"]
|
||||
pub const EVT_FOCUSED_TAGS_SINCE: u32 = 1u32;
|
||||
#[doc = r" The minimal object version supporting this event"]
|
||||
pub const EVT_VIEW_TAGS_SINCE: u32 = 1u32;
|
||||
#[doc = r" C-representation of the messages of this interface, for interop"]
|
||||
pub static mut zriver_output_status_v1_requests: [wl_message; 1] = [wl_message {
|
||||
name: b"destroy\0" as *const u8 as *const c_char,
|
||||
signature: b"\0" as *const u8 as *const c_char,
|
||||
types: unsafe { &types_null as *const _ },
|
||||
}];
|
||||
#[doc = r" C-representation of the messages of this interface, for interop"]
|
||||
pub static mut zriver_output_status_v1_events: [wl_message; 2] = [
|
||||
wl_message {
|
||||
name: b"focused_tags\0" as *const u8 as *const c_char,
|
||||
signature: b"u\0" as *const u8 as *const c_char,
|
||||
types: unsafe { &types_null as *const _ },
|
||||
},
|
||||
wl_message {
|
||||
name: b"view_tags\0" as *const u8 as *const c_char,
|
||||
signature: b"a\0" as *const u8 as *const c_char,
|
||||
types: unsafe { &types_null as *const _ },
|
||||
},
|
||||
];
|
||||
#[doc = r" C representation of this interface, for interop"]
|
||||
pub static mut zriver_output_status_v1_interface: wl_interface = wl_interface {
|
||||
name: b"zriver_output_status_v1\0" as *const u8 as *const c_char,
|
||||
version: 1,
|
||||
request_count: 1,
|
||||
requests: unsafe { &zriver_output_status_v1_requests as *const _ },
|
||||
event_count: 2,
|
||||
events: unsafe { &zriver_output_status_v1_events as *const _ },
|
||||
};
|
||||
}
|
||||
#[doc = "track seat focus\n\nThis interface allows clients to receive information about the current\nfocus of a seat. Note that (un)focused_output events will only be sent\nif the client has bound the relevant wl_output globals."]
|
||||
pub mod zriver_seat_status_v1 {
|
||||
use super::sys::client::*;
|
||||
use super::sys::common::{wl_argument, wl_array, wl_interface, wl_message};
|
||||
use super::{
|
||||
smallvec, types_null, AnonymousObject, Argument, ArgumentType, Interface, Main, Message,
|
||||
MessageDesc, MessageGroup, Object, ObjectMetadata, Proxy, NULLPTR,
|
||||
};
|
||||
use std::os::raw::c_char;
|
||||
#[derive(Debug)]
|
||||
#[non_exhaustive]
|
||||
pub enum Request {
|
||||
#[doc = "destroy the river_seat_status object\n\nThis request indicates that the client will not use the\nriver_seat_status object any more.\n\nThis is a destructor, once sent this object cannot be used any longer."]
|
||||
Destroy,
|
||||
}
|
||||
impl super::MessageGroup for Request {
|
||||
const MESSAGES: &'static [super::MessageDesc] = &[super::MessageDesc {
|
||||
name: "destroy",
|
||||
since: 1,
|
||||
signature: &[],
|
||||
destructor: true,
|
||||
}];
|
||||
type Map = super::ProxyMap;
|
||||
fn is_destructor(&self) -> bool {
|
||||
match *self {
|
||||
Request::Destroy => true,
|
||||
}
|
||||
}
|
||||
fn opcode(&self) -> u16 {
|
||||
match *self {
|
||||
Request::Destroy => 0,
|
||||
}
|
||||
}
|
||||
fn since(&self) -> u32 {
|
||||
match *self {
|
||||
Request::Destroy => 1,
|
||||
}
|
||||
}
|
||||
fn child<Meta: ObjectMetadata>(
|
||||
opcode: u16,
|
||||
version: u32,
|
||||
meta: &Meta,
|
||||
) -> Option<Object<Meta>> {
|
||||
match opcode {
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
fn from_raw(msg: Message, map: &mut Self::Map) -> Result<Self, ()> {
|
||||
panic!("Request::from_raw can not be used Client-side.")
|
||||
}
|
||||
fn into_raw(self, sender_id: u32) -> Message {
|
||||
match self {
|
||||
Request::Destroy => Message {
|
||||
sender_id: sender_id,
|
||||
opcode: 0,
|
||||
args: smallvec![],
|
||||
},
|
||||
}
|
||||
}
|
||||
unsafe fn from_raw_c(
|
||||
obj: *mut ::std::os::raw::c_void,
|
||||
opcode: u32,
|
||||
args: *const wl_argument,
|
||||
) -> Result<Request, ()> {
|
||||
panic!("Request::from_raw_c can not be used Client-side.")
|
||||
}
|
||||
fn as_raw_c_in<F, T>(self, f: F) -> T
|
||||
where
|
||||
F: FnOnce(u32, &mut [wl_argument]) -> T,
|
||||
{
|
||||
match self {
|
||||
Request::Destroy => {
|
||||
let mut _args_array: [wl_argument; 0] = unsafe { ::std::mem::zeroed() };
|
||||
f(0, &mut _args_array)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#[derive(Debug)]
|
||||
#[non_exhaustive]
|
||||
pub enum Event {
|
||||
#[doc = "the seat focused an output\n\nSent on binding the interface and again whenever an output gains focus."]
|
||||
FocusedOutput { output: super::wl_output::WlOutput },
|
||||
#[doc = "the seat unfocused an output\n\nSent whenever an output loses focus."]
|
||||
UnfocusedOutput { output: super::wl_output::WlOutput },
|
||||
#[doc = "information on the focused view\n\nSent once on binding the interface and again whenever the focused\nview or a property thereof changes. The title may be an empty string\nif no view is focused or the focused view did not set a title."]
|
||||
FocusedView { title: String },
|
||||
}
|
||||
impl super::MessageGroup for Event {
|
||||
const MESSAGES: &'static [super::MessageDesc] = &[
|
||||
super::MessageDesc {
|
||||
name: "focused_output",
|
||||
since: 1,
|
||||
signature: &[super::ArgumentType::Object],
|
||||
destructor: false,
|
||||
},
|
||||
super::MessageDesc {
|
||||
name: "unfocused_output",
|
||||
since: 1,
|
||||
signature: &[super::ArgumentType::Object],
|
||||
destructor: false,
|
||||
},
|
||||
super::MessageDesc {
|
||||
name: "focused_view",
|
||||
since: 1,
|
||||
signature: &[super::ArgumentType::Str],
|
||||
destructor: false,
|
||||
},
|
||||
];
|
||||
type Map = super::ProxyMap;
|
||||
fn is_destructor(&self) -> bool {
|
||||
match *self {
|
||||
_ => false,
|
||||
}
|
||||
}
|
||||
fn opcode(&self) -> u16 {
|
||||
match *self {
|
||||
Event::FocusedOutput { .. } => 0,
|
||||
Event::UnfocusedOutput { .. } => 1,
|
||||
Event::FocusedView { .. } => 2,
|
||||
}
|
||||
}
|
||||
fn since(&self) -> u32 {
|
||||
match *self {
|
||||
Event::FocusedOutput { .. } => 1,
|
||||
Event::UnfocusedOutput { .. } => 1,
|
||||
Event::FocusedView { .. } => 1,
|
||||
}
|
||||
}
|
||||
fn child<Meta: ObjectMetadata>(
|
||||
opcode: u16,
|
||||
version: u32,
|
||||
meta: &Meta,
|
||||
) -> Option<Object<Meta>> {
|
||||
match opcode {
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
fn from_raw(msg: Message, map: &mut Self::Map) -> Result<Self, ()> {
|
||||
match msg.opcode {
|
||||
0 => {
|
||||
let mut args = msg.args.into_iter();
|
||||
Ok(Event::FocusedOutput {
|
||||
output: {
|
||||
if let Some(Argument::Object(val)) = args.next() {
|
||||
map.get_or_dead(val).into()
|
||||
} else {
|
||||
return Err(());
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
1 => {
|
||||
let mut args = msg.args.into_iter();
|
||||
Ok(Event::UnfocusedOutput {
|
||||
output: {
|
||||
if let Some(Argument::Object(val)) = args.next() {
|
||||
map.get_or_dead(val).into()
|
||||
} else {
|
||||
return Err(());
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
2 => {
|
||||
let mut args = msg.args.into_iter();
|
||||
Ok(Event::FocusedView {
|
||||
title: {
|
||||
if let Some(Argument::Str(val)) = args.next() {
|
||||
let s = String::from_utf8(val.into_bytes()).unwrap_or_else(|e| {
|
||||
String::from_utf8_lossy(&e.into_bytes()).into()
|
||||
});
|
||||
s
|
||||
} else {
|
||||
return Err(());
|
||||
}
|
||||
},
|
||||
})
|
||||
}
|
||||
_ => Err(()),
|
||||
}
|
||||
}
|
||||
fn into_raw(self, sender_id: u32) -> Message {
|
||||
panic!("Event::into_raw can not be used Client-side.")
|
||||
}
|
||||
unsafe fn from_raw_c(
|
||||
obj: *mut ::std::os::raw::c_void,
|
||||
opcode: u32,
|
||||
args: *const wl_argument,
|
||||
) -> Result<Event, ()> {
|
||||
match opcode {
|
||||
0 => {
|
||||
let _args = ::std::slice::from_raw_parts(args, 1);
|
||||
Ok(Event::FocusedOutput {
|
||||
output: Proxy::<super::wl_output::WlOutput>::from_c_ptr(
|
||||
_args[0].o as *mut _,
|
||||
)
|
||||
.into(),
|
||||
})
|
||||
}
|
||||
1 => {
|
||||
let _args = ::std::slice::from_raw_parts(args, 1);
|
||||
Ok(Event::UnfocusedOutput {
|
||||
output: Proxy::<super::wl_output::WlOutput>::from_c_ptr(
|
||||
_args[0].o as *mut _,
|
||||
)
|
||||
.into(),
|
||||
})
|
||||
}
|
||||
2 => {
|
||||
let _args = ::std::slice::from_raw_parts(args, 1);
|
||||
Ok(Event::FocusedView {
|
||||
title: ::std::ffi::CStr::from_ptr(_args[0].s)
|
||||
.to_string_lossy()
|
||||
.into_owned(),
|
||||
})
|
||||
}
|
||||
_ => return Err(()),
|
||||
}
|
||||
}
|
||||
fn as_raw_c_in<F, T>(self, f: F) -> T
|
||||
where
|
||||
F: FnOnce(u32, &mut [wl_argument]) -> T,
|
||||
{
|
||||
panic!("Event::as_raw_c_in can not be used Client-side.")
|
||||
}
|
||||
}
|
||||
#[derive(Clone, Eq, PartialEq)]
|
||||
pub struct ZriverSeatStatusV1(Proxy<ZriverSeatStatusV1>);
|
||||
impl AsRef<Proxy<ZriverSeatStatusV1>> for ZriverSeatStatusV1 {
|
||||
#[inline]
|
||||
fn as_ref(&self) -> &Proxy<Self> {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
impl From<Proxy<ZriverSeatStatusV1>> for ZriverSeatStatusV1 {
|
||||
#[inline]
|
||||
fn from(value: Proxy<Self>) -> Self {
|
||||
ZriverSeatStatusV1(value)
|
||||
}
|
||||
}
|
||||
impl From<ZriverSeatStatusV1> for Proxy<ZriverSeatStatusV1> {
|
||||
#[inline]
|
||||
fn from(value: ZriverSeatStatusV1) -> Self {
|
||||
value.0
|
||||
}
|
||||
}
|
||||
impl std::fmt::Debug for ZriverSeatStatusV1 {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.write_fmt(format_args!("{:?}", self.0))
|
||||
}
|
||||
}
|
||||
impl Interface for ZriverSeatStatusV1 {
|
||||
type Request = Request;
|
||||
type Event = Event;
|
||||
const NAME: &'static str = "zriver_seat_status_v1";
|
||||
const VERSION: u32 = 1;
|
||||
fn c_interface() -> *const wl_interface {
|
||||
unsafe { &zriver_seat_status_v1_interface }
|
||||
}
|
||||
}
|
||||
impl ZriverSeatStatusV1 {
|
||||
#[doc = "destroy the river_seat_status object\n\nThis request indicates that the client will not use the\nriver_seat_status object any more.\n\nThis is a destructor, you cannot send requests to this object any longer once this method is called."]
|
||||
pub fn destroy(&self) -> () {
|
||||
let msg = Request::Destroy;
|
||||
self.0.send::<AnonymousObject>(msg, None);
|
||||
}
|
||||
}
|
||||
#[doc = r" The minimal object version supporting this request"]
|
||||
pub const REQ_DESTROY_SINCE: u32 = 1u32;
|
||||
#[doc = r" The minimal object version supporting this event"]
|
||||
pub const EVT_FOCUSED_OUTPUT_SINCE: u32 = 1u32;
|
||||
#[doc = r" The minimal object version supporting this event"]
|
||||
pub const EVT_UNFOCUSED_OUTPUT_SINCE: u32 = 1u32;
|
||||
#[doc = r" The minimal object version supporting this event"]
|
||||
pub const EVT_FOCUSED_VIEW_SINCE: u32 = 1u32;
|
||||
#[doc = r" C-representation of the messages of this interface, for interop"]
|
||||
pub static mut zriver_seat_status_v1_requests: [wl_message; 1] = [wl_message {
|
||||
name: b"destroy\0" as *const u8 as *const c_char,
|
||||
signature: b"\0" as *const u8 as *const c_char,
|
||||
types: unsafe { &types_null as *const _ },
|
||||
}];
|
||||
static mut zriver_seat_status_v1_events_focused_output_types: [*const wl_interface; 1] =
|
||||
[unsafe { &super::wl_output::wl_output_interface as *const wl_interface }];
|
||||
static mut zriver_seat_status_v1_events_unfocused_output_types: [*const wl_interface; 1] =
|
||||
[unsafe { &super::wl_output::wl_output_interface as *const wl_interface }];
|
||||
#[doc = r" C-representation of the messages of this interface, for interop"]
|
||||
pub static mut zriver_seat_status_v1_events: [wl_message; 3] = [
|
||||
wl_message {
|
||||
name: b"focused_output\0" as *const u8 as *const c_char,
|
||||
signature: b"o\0" as *const u8 as *const c_char,
|
||||
types: unsafe { &zriver_seat_status_v1_events_focused_output_types as *const _ },
|
||||
},
|
||||
wl_message {
|
||||
name: b"unfocused_output\0" as *const u8 as *const c_char,
|
||||
signature: b"o\0" as *const u8 as *const c_char,
|
||||
types: unsafe { &zriver_seat_status_v1_events_unfocused_output_types as *const _ },
|
||||
},
|
||||
wl_message {
|
||||
name: b"focused_view\0" as *const u8 as *const c_char,
|
||||
signature: b"s\0" as *const u8 as *const c_char,
|
||||
types: unsafe { &types_null as *const _ },
|
||||
},
|
||||
];
|
||||
#[doc = r" C representation of this interface, for interop"]
|
||||
pub static mut zriver_seat_status_v1_interface: wl_interface = wl_interface {
|
||||
name: b"zriver_seat_status_v1\0" as *const u8 as *const c_char,
|
||||
version: 1,
|
||||
request_count: 1,
|
||||
requests: unsafe { &zriver_seat_status_v1_requests as *const _ },
|
||||
event_count: 3,
|
||||
events: unsafe { &zriver_seat_status_v1_events as *const _ },
|
||||
};
|
||||
}
|
Loading…
Reference in New Issue
Block a user