From 77ff4e62e9a11cb810eb8886d0b17bf6b96fc4f7 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Mon, 21 Apr 2025 14:02:36 -0700 Subject: [PATCH] Pass `toplevel_capabilities` from backend to frontend --- src/backend/mock.rs | 6 ++++++ src/backend/mod.rs | 8 +++++++- src/backend/wayland/toplevel.rs | 10 +++++++++- src/main.rs | 6 ++++++ 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/backend/mock.rs b/src/backend/mock.rs index dbed4dc..049fa3e 100644 --- a/src/backend/mock.rs +++ b/src/backend/mock.rs @@ -5,6 +5,7 @@ use cosmic::{ cctk::{ cosmic_protocols::{ toplevel_info::v1::client::zcosmic_toplevel_handle_v1, + toplevel_management::v1::client::zcosmic_toplevel_manager_v1, workspace::v2::client::zcosmic_workspace_handle_v2, }, wayland_client::{ @@ -219,6 +220,11 @@ fn start(_conn: Connection) -> mpsc::Receiver { outputs: Vec::new(), workspaces: Vec::new(), }; + app_data.send_event(Event::ToplevelCapabilities(vec![ + zcosmic_toplevel_manager_v1::ZcosmicToplelevelManagementCapabilitiesV1::Close, + zcosmic_toplevel_manager_v1::ZcosmicToplelevelManagementCapabilitiesV1::Activate, + zcosmic_toplevel_manager_v1::ZcosmicToplelevelManagementCapabilitiesV1::MoveToWorkspace, + ])); app_data.send_event(Event::CmdSender(cmd_sender)); loop { event_loop.dispatch(None, &mut app_data).unwrap(); diff --git a/src/backend/mod.rs b/src/backend/mod.rs index 8dfd012..c0e4a2d 100644 --- a/src/backend/mod.rs +++ b/src/backend/mod.rs @@ -8,7 +8,10 @@ //! backend for testing without any special protocols. use cosmic::{ - cctk::wayland_client::protocol::wl_output, + cctk::{ + cosmic_protocols::toplevel_management::v1::client::zcosmic_toplevel_manager_v1, + wayland_client::protocol::wl_output, + }, iced_winit::platform_specific::wayland::subsurface_widget::SubsurfaceBuffer, }; use std::collections::HashSet; @@ -62,6 +65,9 @@ pub enum Event { UpdateToplevel(ExtForeignToplevelHandleV1, ToplevelInfo), CloseToplevel(ExtForeignToplevelHandleV1), ToplevelCapture(ExtForeignToplevelHandleV1, CaptureImage), + ToplevelCapabilities( + Vec, + ), } #[derive(Debug)] diff --git a/src/backend/wayland/toplevel.rs b/src/backend/wayland/toplevel.rs index 800a76c..8bffb5b 100644 --- a/src/backend/wayland/toplevel.rs +++ b/src/backend/wayland/toplevel.rs @@ -58,10 +58,18 @@ impl ToplevelManagerHandler for AppData { &mut self, _conn: &Connection, _qh: &QueueHandle, - _capabilities: Vec< + capabilities: Vec< WEnum, >, ) { + let capabilities = capabilities + .into_iter() + .filter_map(|i| match i { + WEnum::Value(value) => Some(value), + WEnum::Unknown(_) => None, + }) + .collect(); + self.send_event(Event::ToplevelCapabilities(capabilities)); } } diff --git a/src/main.rs b/src/main.rs index 3df77a6..5b445af 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ #![allow(clippy::single_match)] use cctk::{ + cosmic_protocols::toplevel_management::v1::client::zcosmic_toplevel_manager_v1, sctk::shell::wlr_layer::{Anchor, KeyboardInteractivity, Layer}, wayland_client::{protocol::wl_output, Connection, Proxy}, wayland_protocols::ext::workspace::v1::client::ext_workspace_handle_v1, @@ -169,6 +170,8 @@ struct App { outputs: Vec, workspaces: Vec, toplevels: Vec, + toplevel_capabilities: + Vec, conn: Option, visible: bool, wayland_cmd_sender: Option>, @@ -463,6 +466,9 @@ impl Application for App { toplevel.img = Some(image); } } + backend::Event::ToplevelCapabilities(capabilities) => { + self.toplevel_capabilities = capabilities; + } } } Msg::Close => {