cosmic-workspaces/src/backend/wayland/toplevel.rs

73 lines
2.3 KiB
Rust
Raw Normal View History

2023-02-09 16:04:36 -08:00
use cctk::{
2025-02-10 14:33:51 -08:00
cosmic_protocols::toplevel_management::v1::client::zcosmic_toplevel_manager_v1,
2023-02-09 16:04:36 -08:00
toplevel_info::{ToplevelInfoHandler, ToplevelInfoState},
toplevel_management::{ToplevelManagerHandler, ToplevelManagerState},
wayland_client::{Connection, QueueHandle, WEnum},
2023-02-09 16:04:36 -08:00
};
2023-11-21 16:15:02 -05:00
use cosmic::cctk;
2025-02-10 14:33:51 -08:00
use wayland_protocols::ext::foreign_toplevel_list::v1::client::ext_foreign_toplevel_handle_v1::ExtForeignToplevelHandleV1;
2023-02-09 16:04:36 -08:00
use super::{AppData, CaptureSource, Event};
// TODO any indication when we have all toplevels?
impl ToplevelInfoHandler for AppData {
fn toplevel_info_state(&mut self) -> &mut ToplevelInfoState {
&mut self.toplevel_info_state
}
fn new_toplevel(
&mut self,
_conn: &Connection,
_qh: &QueueHandle<Self>,
2025-02-10 14:33:51 -08:00
toplevel: &ExtForeignToplevelHandleV1,
2023-02-09 16:04:36 -08:00
) {
let info = self.toplevel_info_state.info(toplevel).unwrap();
2025-02-10 14:33:51 -08:00
let cosmic_toplevel = info.cosmic_toplevel.clone().unwrap();
self.send_event(Event::NewToplevel(toplevel.clone(), info.clone()));
2023-02-09 16:04:36 -08:00
2025-02-10 14:33:51 -08:00
self.add_capture_source(CaptureSource::CosmicToplevel(cosmic_toplevel));
2023-02-09 16:04:36 -08:00
}
fn update_toplevel(
&mut self,
_conn: &Connection,
_qh: &QueueHandle<Self>,
2025-02-10 14:33:51 -08:00
toplevel: &ExtForeignToplevelHandleV1,
2023-02-09 16:04:36 -08:00
) {
2023-02-10 13:41:08 -08:00
let info = self.toplevel_info_state.info(toplevel).unwrap();
self.send_event(Event::UpdateToplevel(toplevel.clone(), info.clone()));
2023-02-09 16:04:36 -08:00
}
fn toplevel_closed(
&mut self,
_conn: &Connection,
_qh: &QueueHandle<Self>,
2025-02-10 14:33:51 -08:00
toplevel: &ExtForeignToplevelHandleV1,
2023-02-09 16:04:36 -08:00
) {
2025-02-10 14:33:51 -08:00
let info = self.toplevel_info_state.info(toplevel).unwrap();
let cosmic_toplevel = info.cosmic_toplevel.clone().unwrap();
2023-02-09 16:04:36 -08:00
self.send_event(Event::CloseToplevel(toplevel.clone()));
2025-02-10 14:33:51 -08:00
self.remove_capture_source(CaptureSource::CosmicToplevel(cosmic_toplevel));
2023-02-09 16:04:36 -08:00
}
}
impl ToplevelManagerHandler for AppData {
fn toplevel_manager_state(&mut self) -> &mut ToplevelManagerState {
&mut self.toplevel_manager_state
}
fn capabilities(
&mut self,
_conn: &Connection,
_qh: &QueueHandle<Self>,
_capabilities: Vec<
WEnum<zcosmic_toplevel_manager_v1::ZcosmicToplelevelManagementCapabilitiesV1>,
>,
) {
}
}
cctk::delegate_toplevel_info!(AppData);
cctk::delegate_toplevel_manager!(AppData);