Fix last commit
This commit is contained in:
parent
18aa509c73
commit
17735ba956
62
src/main.rs
62
src/main.rs
@ -11,7 +11,7 @@ use wayland_client::protocol::wl_registry::WlRegistry;
|
|||||||
use std::collections::{BTreeMap, HashMap};
|
use std::collections::{BTreeMap, HashMap};
|
||||||
use wayland_client::protocol::{wl_output, wl_output::WlOutput, wl_seat,
|
use wayland_client::protocol::{wl_output, wl_output::WlOutput, wl_seat,
|
||||||
wl_seat::WlSeat};
|
wl_seat::WlSeat};
|
||||||
use wayland_client::{Attached, DispatchData, Display, GlobalEvent, GlobalManager, Main};
|
use wayland_client::{Attached, DispatchData, Display, GlobalEvent, GlobalImplementor, GlobalManager, Main};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
struct Flags {
|
struct Flags {
|
||||||
@ -47,6 +47,8 @@ struct Tags(u32);
|
|||||||
|
|
||||||
struct Env {
|
struct Env {
|
||||||
flags: Flags,
|
flags: Flags,
|
||||||
|
// I don't know very much about wayland, and it shows
|
||||||
|
output_id_map: HashMap<u32, u32>,
|
||||||
output_names: BTreeMap<u32, String>,
|
output_names: BTreeMap<u32, String>,
|
||||||
focused: Option<u32>,
|
focused: Option<u32>,
|
||||||
layout: Option<String>,
|
layout: Option<String>,
|
||||||
@ -134,10 +136,8 @@ impl Serialize for Env {
|
|||||||
let mut name_id_map = HashMap::<&str, u32>::new();
|
let mut name_id_map = HashMap::<&str, u32>::new();
|
||||||
name_id_map.reserve(self.output_names.len());
|
name_id_map.reserve(self.output_names.len());
|
||||||
let mut id = 0;
|
let mut id = 0;
|
||||||
for (_, value) in &self.output_names {
|
for (key, value) in &self.output_names {
|
||||||
if !name_id_map.contains_key(value.as_str()) {
|
|
||||||
name_id_map.insert(value, id);
|
name_id_map.insert(value, id);
|
||||||
}
|
|
||||||
id += 1;
|
id += 1;
|
||||||
}
|
}
|
||||||
state.serialize_field("gtk_ids", &name_id_map)?;
|
state.serialize_field("gtk_ids", &name_id_map)?;
|
||||||
@ -161,6 +161,7 @@ impl Env {
|
|||||||
viewtags: flags.viewtags.then(Default::default),
|
viewtags: flags.viewtags.then(Default::default),
|
||||||
status_manager: None,
|
status_manager: None,
|
||||||
flags,
|
flags,
|
||||||
|
output_id_map: Default::default(),
|
||||||
output_names: Default::default(),
|
output_names: Default::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -180,14 +181,6 @@ impl Env {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_zriver_status_manager_v1(
|
|
||||||
status_manager: Main<ZriverStatusManagerV1>, mut env: DispatchData
|
|
||||||
) {
|
|
||||||
if let Some(env) = env.get::<Env>() {
|
|
||||||
env.status_manager = Some(status_manager);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn handle_river_seat_status(
|
fn handle_river_seat_status(
|
||||||
_status: Main<ZriverSeatStatusV1>, event: zriver_seat_status_v1::Event,
|
_status: Main<ZriverSeatStatusV1>, event: zriver_seat_status_v1::Event,
|
||||||
mut env: DispatchData
|
mut env: DispatchData
|
||||||
@ -328,34 +321,45 @@ fn handle_output_event(
|
|||||||
fn global_manager_callback(
|
fn global_manager_callback(
|
||||||
event: GlobalEvent, registry: Attached<WlRegistry>, mut env: DispatchData
|
event: GlobalEvent, registry: Attached<WlRegistry>, mut env: DispatchData
|
||||||
) {
|
) {
|
||||||
let mut global_filter = wayland_client::global_filter!(
|
|
||||||
[ZriverStatusManagerV1, 1, handle_zriver_status_manager_v1],
|
|
||||||
[WlSeat, 7, |seat: Main<WlSeat>, _env: DispatchData| {
|
|
||||||
seat.quick_assign(handle_seat_event);
|
|
||||||
}],
|
|
||||||
[WlOutput, 3, |output: Main<WlOutput>, _env: DispatchData| {
|
|
||||||
output.quick_assign(handle_output_event);
|
|
||||||
}]
|
|
||||||
);
|
|
||||||
|
|
||||||
match event {
|
match event {
|
||||||
GlobalEvent::New { id: _, interface: _, version: _ } => {
|
GlobalEvent::New { id, interface, version } => {
|
||||||
global_filter(event, registry, env);
|
match interface.as_str() {
|
||||||
|
"wl_output" if version >= 3 => {
|
||||||
|
let output: Main<WlOutput> = registry.bind(version, id);
|
||||||
|
if let Some(env) = env.get::<Env>() {
|
||||||
|
env.output_id_map.insert(id, output.as_ref().id());
|
||||||
|
output.quick_assign(handle_output_event);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wl_seat" if version >= 7 => {
|
||||||
|
let seat: Main<WlSeat> = registry.bind(version, id);
|
||||||
|
seat.quick_assign(handle_seat_event);
|
||||||
|
},
|
||||||
|
"zriver_status_manager_v1" => {
|
||||||
|
let status_manager = registry.bind(version, id);
|
||||||
|
if let Some(env) = env.get::<Env>() {
|
||||||
|
env.status_manager = Some(status_manager);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
GlobalEvent::Removed { id, interface: _ } => {
|
GlobalEvent::Removed { id, interface: _ } => {
|
||||||
if let Some(env) = env.get::<Env>() {
|
if let Some(env) = env.get::<Env>() {
|
||||||
env.output_names.remove(&id);
|
if let Some(oid) = env.output_id_map.remove(&id) {
|
||||||
|
env.output_names.remove(&oid);
|
||||||
if let Some(titles) = &mut env.titles {
|
if let Some(titles) = &mut env.titles {
|
||||||
titles.remove(&id);
|
titles.remove(&oid);
|
||||||
}
|
}
|
||||||
if let Some(tags) = &mut env.tags {
|
if let Some(tags) = &mut env.tags {
|
||||||
tags.remove(&id);
|
tags.remove(&oid);
|
||||||
}
|
}
|
||||||
if let Some(urgency) = &mut env.urgency {
|
if let Some(urgency) = &mut env.urgency {
|
||||||
urgency.remove(&id);
|
urgency.remove(&oid);
|
||||||
}
|
}
|
||||||
if let Some(viewtags) = &mut env.viewtags {
|
if let Some(viewtags) = &mut env.viewtags {
|
||||||
viewtags.remove(&id);
|
viewtags.remove(&oid);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user