From de2fead49d6af3a221db153642e4d7c2235aafc4 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Wed, 31 Jul 2024 14:53:52 -0700 Subject: [PATCH] example/toplevel-monitor: Bind outputs This allows us to get events about the outputs associated with the toplevel. --- client-toolkit/examples/toplevel-monitor.rs | 43 +++++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/client-toolkit/examples/toplevel-monitor.rs b/client-toolkit/examples/toplevel-monitor.rs index d4f1d92423..c93e3b0aa8 100644 --- a/client-toolkit/examples/toplevel-monitor.rs +++ b/client-toolkit/examples/toplevel-monitor.rs @@ -1,9 +1,13 @@ use cosmic_client_toolkit::toplevel_info::{ToplevelInfoHandler, ToplevelInfoState}; use cosmic_protocols::toplevel_info::v1::client::zcosmic_toplevel_handle_v1; -use sctk::registry::{ProvidesRegistryState, RegistryState}; -use wayland_client::{globals::registry_queue_init, Connection, QueueHandle}; +use sctk::{ + output::{OutputHandler, OutputState}, + registry::{ProvidesRegistryState, RegistryState}, +}; +use wayland_client::{globals::registry_queue_init, protocol::wl_output, Connection, QueueHandle}; struct AppData { + output_state: OutputState, registry_state: RegistryState, toplevel_info_state: ToplevelInfoState, } @@ -13,7 +17,38 @@ impl ProvidesRegistryState for AppData { &mut self.registry_state } - sctk::registry_handlers!(); + sctk::registry_handlers!(OutputState); +} + +// Need to bind output globals just so toplevel can get output events +impl OutputHandler for AppData { + fn output_state(&mut self) -> &mut OutputState { + &mut self.output_state + } + + fn new_output( + &mut self, + _conn: &Connection, + _qh: &QueueHandle, + output: wl_output::WlOutput, + ) { + } + + fn update_output( + &mut self, + _conn: &Connection, + _qh: &QueueHandle, + _output: wl_output::WlOutput, + ) { + } + + fn output_destroyed( + &mut self, + _conn: &Connection, + _qh: &QueueHandle, + output: wl_output::WlOutput, + ) { + } } impl ToplevelInfoHandler for AppData { @@ -65,6 +100,7 @@ fn main() { let registry_state = RegistryState::new(&globals); let mut app_data = AppData { + output_state: OutputState::new(&globals, &qh), toplevel_info_state: ToplevelInfoState::new(®istry_state, &qh), registry_state, }; @@ -74,5 +110,6 @@ fn main() { } } +sctk::delegate_output!(AppData); sctk::delegate_registry!(AppData); cosmic_client_toolkit::delegate_toplevel_info!(AppData);