Update for toplevel-info cctk changes
This commit is contained in:
parent
e283cfe456
commit
4acd62abb0
9 changed files with 90 additions and 68 deletions
|
|
@ -89,7 +89,7 @@ impl ZcosmicWorkspaceHandleV1 {
|
|||
}
|
||||
|
||||
#[derive(Eq, PartialEq, Clone, Debug, Hash)]
|
||||
pub struct ZcosmicToplevelHandleV1(MockObjectId);
|
||||
pub struct ExtForeignToplevelHandleV1(MockObjectId);
|
||||
|
||||
#[derive(Clone, Debug, Default)]
|
||||
pub struct CaptureFilter {
|
||||
|
|
@ -147,7 +147,7 @@ impl AppData {
|
|||
};
|
||||
// Add three toplevels for each workspace
|
||||
for j in 0..=3 {
|
||||
let toplevel_handle = ZcosmicToplevelHandleV1(MockObjectId::new());
|
||||
let toplevel_handle = ExtForeignToplevelHandleV1(MockObjectId::new());
|
||||
let toplevel_info = ToplevelInfo {
|
||||
title: format!("App {}", j),
|
||||
app_id: "com.example.app".to_string(),
|
||||
|
|
|
|||
|
|
@ -18,13 +18,12 @@ use std::collections::HashSet;
|
|||
mod wayland;
|
||||
#[cfg(not(feature = "mock-backend"))]
|
||||
pub use cosmic::cctk::{
|
||||
cosmic_protocols::{
|
||||
toplevel_info::v1::client::zcosmic_toplevel_handle_v1::ZcosmicToplevelHandleV1,
|
||||
workspace::v1::client::zcosmic_workspace_handle_v1::ZcosmicWorkspaceHandleV1,
|
||||
},
|
||||
toplevel_info::ToplevelInfo,
|
||||
workspace::Workspace,
|
||||
cosmic_protocols::workspace::v1::client::zcosmic_workspace_handle_v1::ZcosmicWorkspaceHandleV1,
|
||||
toplevel_info::ToplevelInfo, workspace::Workspace,
|
||||
};
|
||||
#[cfg(not(feature = "mock-backend"))]
|
||||
pub use wayland_protocols::ext::foreign_toplevel_list::v1::client::ext_foreign_toplevel_handle_v1::ExtForeignToplevelHandleV1;
|
||||
|
||||
#[cfg(not(feature = "mock-backend"))]
|
||||
pub use wayland::subscription;
|
||||
|
||||
|
|
@ -33,7 +32,7 @@ pub use wayland::subscription;
|
|||
mod mock;
|
||||
#[cfg(feature = "mock-backend")]
|
||||
pub use mock::{
|
||||
subscription, ToplevelInfo, Workspace, ZcosmicToplevelHandleV1, ZcosmicWorkspaceHandleV1,
|
||||
subscription, ExtForeignToplevelHandleV1, ToplevelInfo, Workspace, ZcosmicWorkspaceHandleV1,
|
||||
};
|
||||
|
||||
#[derive(Clone, Debug, Default)]
|
||||
|
|
@ -59,19 +58,19 @@ pub enum Event {
|
|||
CmdSender(calloop::channel::Sender<Cmd>),
|
||||
Workspaces(Vec<(HashSet<wl_output::WlOutput>, Workspace)>),
|
||||
WorkspaceCapture(ZcosmicWorkspaceHandleV1, CaptureImage),
|
||||
NewToplevel(ZcosmicToplevelHandleV1, ToplevelInfo),
|
||||
UpdateToplevel(ZcosmicToplevelHandleV1, ToplevelInfo),
|
||||
CloseToplevel(ZcosmicToplevelHandleV1),
|
||||
ToplevelCapture(ZcosmicToplevelHandleV1, CaptureImage),
|
||||
NewToplevel(ExtForeignToplevelHandleV1, ToplevelInfo),
|
||||
UpdateToplevel(ExtForeignToplevelHandleV1, ToplevelInfo),
|
||||
CloseToplevel(ExtForeignToplevelHandleV1),
|
||||
ToplevelCapture(ExtForeignToplevelHandleV1, CaptureImage),
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Cmd {
|
||||
CaptureFilter(CaptureFilter),
|
||||
ActivateToplevel(ZcosmicToplevelHandleV1),
|
||||
CloseToplevel(ZcosmicToplevelHandleV1),
|
||||
ActivateToplevel(ExtForeignToplevelHandleV1),
|
||||
CloseToplevel(ExtForeignToplevelHandleV1),
|
||||
MoveToplevelToWorkspace(
|
||||
ZcosmicToplevelHandleV1,
|
||||
ExtForeignToplevelHandleV1,
|
||||
ZcosmicWorkspaceHandleV1,
|
||||
wl_output::WlOutput,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -75,22 +75,31 @@ impl AppData {
|
|||
self.invalidate_capture_filter();
|
||||
}
|
||||
Cmd::ActivateToplevel(toplevel_handle) => {
|
||||
for seat in self.seat_state.seats() {
|
||||
self.toplevel_manager_state
|
||||
.manager
|
||||
.activate(&toplevel_handle, &seat);
|
||||
let info = self.toplevel_info_state.info(&toplevel_handle);
|
||||
if let Some(cosmic_toplevel) = info.and_then(|x| x.cosmic_toplevel.as_ref()) {
|
||||
for seat in self.seat_state.seats() {
|
||||
self.toplevel_manager_state
|
||||
.manager
|
||||
.activate(&cosmic_toplevel, &seat);
|
||||
}
|
||||
}
|
||||
}
|
||||
Cmd::CloseToplevel(toplevel_handle) => {
|
||||
self.toplevel_manager_state.manager.close(&toplevel_handle);
|
||||
let info = self.toplevel_info_state.info(&toplevel_handle);
|
||||
if let Some(cosmic_toplevel) = info.and_then(|x| x.cosmic_toplevel.as_ref()) {
|
||||
self.toplevel_manager_state.manager.close(&cosmic_toplevel);
|
||||
}
|
||||
}
|
||||
Cmd::MoveToplevelToWorkspace(toplevel_handle, workspace_handle, output) => {
|
||||
if self.toplevel_manager_state.manager.version() >= 2 {
|
||||
self.toplevel_manager_state.manager.move_to_workspace(
|
||||
&toplevel_handle,
|
||||
&workspace_handle,
|
||||
&output,
|
||||
);
|
||||
let info = self.toplevel_info_state.info(&toplevel_handle);
|
||||
if let Some(cosmic_toplevel) = info.and_then(|x| x.cosmic_toplevel.as_ref()) {
|
||||
if self.toplevel_manager_state.manager.version() >= 2 {
|
||||
self.toplevel_manager_state.manager.move_to_workspace(
|
||||
&cosmic_toplevel,
|
||||
&workspace_handle,
|
||||
&output,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Cmd::ActivateWorkspace(workspace_handle) => {
|
||||
|
|
@ -105,12 +114,19 @@ impl AppData {
|
|||
fn matches_capture_filter(&self, source: &CaptureSource) -> bool {
|
||||
match source {
|
||||
CaptureSource::CosmicToplevel(toplevel) => {
|
||||
let info = self.toplevel_info_state.info(toplevel).unwrap();
|
||||
info.workspace.iter().any(|workspace| {
|
||||
self.capture_filter
|
||||
.toplevels_on_workspaces
|
||||
.contains(workspace)
|
||||
})
|
||||
let info = self
|
||||
.toplevel_info_state
|
||||
.toplevels()
|
||||
.find(|info| info.cosmic_toplevel.as_ref() == Some(&toplevel));
|
||||
if let Some(info) = info {
|
||||
info.workspace.iter().any(|workspace| {
|
||||
self.capture_filter
|
||||
.toplevels_on_workspaces
|
||||
.contains(workspace)
|
||||
})
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
CaptureSource::CosmicWorkspace(workspace) => self
|
||||
.workspace_state
|
||||
|
|
|
|||
|
|
@ -193,7 +193,13 @@ impl ScreencopyHandler for AppData {
|
|||
};
|
||||
match &capture.source {
|
||||
CaptureSource::CosmicToplevel(toplevel) => {
|
||||
self.send_event(Event::ToplevelCapture(toplevel.clone(), image))
|
||||
let info = self
|
||||
.toplevel_info_state
|
||||
.toplevels()
|
||||
.find(|info| info.cosmic_toplevel.as_ref() == Some(&toplevel));
|
||||
if let Some(info) = info {
|
||||
self.send_event(Event::ToplevelCapture(info.foreign_toplevel.clone(), image))
|
||||
}
|
||||
}
|
||||
CaptureSource::CosmicWorkspace(workspace) => {
|
||||
self.send_event(Event::WorkspaceCapture(workspace.clone(), image));
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
use cctk::{
|
||||
cosmic_protocols::{
|
||||
toplevel_info::v1::client::zcosmic_toplevel_handle_v1,
|
||||
toplevel_management::v1::client::zcosmic_toplevel_manager_v1,
|
||||
},
|
||||
cosmic_protocols::toplevel_management::v1::client::zcosmic_toplevel_manager_v1,
|
||||
toplevel_info::{ToplevelInfoHandler, ToplevelInfoState},
|
||||
toplevel_management::{ToplevelManagerHandler, ToplevelManagerState},
|
||||
wayland_client::{Connection, QueueHandle, WEnum},
|
||||
};
|
||||
use cosmic::cctk;
|
||||
use wayland_protocols::ext::foreign_toplevel_list::v1::client::ext_foreign_toplevel_handle_v1::ExtForeignToplevelHandleV1;
|
||||
|
||||
use super::{AppData, CaptureSource, Event};
|
||||
|
||||
|
|
@ -21,19 +19,20 @@ impl ToplevelInfoHandler for AppData {
|
|||
&mut self,
|
||||
_conn: &Connection,
|
||||
_qh: &QueueHandle<Self>,
|
||||
toplevel: &zcosmic_toplevel_handle_v1::ZcosmicToplevelHandleV1,
|
||||
toplevel: &ExtForeignToplevelHandleV1,
|
||||
) {
|
||||
let info = self.toplevel_info_state.info(toplevel).unwrap();
|
||||
let cosmic_toplevel = info.cosmic_toplevel.clone().unwrap();
|
||||
self.send_event(Event::NewToplevel(toplevel.clone(), info.clone()));
|
||||
|
||||
self.add_capture_source(CaptureSource::CosmicToplevel(toplevel.clone()));
|
||||
self.add_capture_source(CaptureSource::CosmicToplevel(cosmic_toplevel));
|
||||
}
|
||||
|
||||
fn update_toplevel(
|
||||
&mut self,
|
||||
_conn: &Connection,
|
||||
_qh: &QueueHandle<Self>,
|
||||
toplevel: &zcosmic_toplevel_handle_v1::ZcosmicToplevelHandleV1,
|
||||
toplevel: &ExtForeignToplevelHandleV1,
|
||||
) {
|
||||
let info = self.toplevel_info_state.info(toplevel).unwrap();
|
||||
self.send_event(Event::UpdateToplevel(toplevel.clone(), info.clone()));
|
||||
|
|
@ -43,11 +42,13 @@ impl ToplevelInfoHandler for AppData {
|
|||
&mut self,
|
||||
_conn: &Connection,
|
||||
_qh: &QueueHandle<Self>,
|
||||
toplevel: &zcosmic_toplevel_handle_v1::ZcosmicToplevelHandleV1,
|
||||
toplevel: &ExtForeignToplevelHandleV1,
|
||||
) {
|
||||
let info = self.toplevel_info_state.info(toplevel).unwrap();
|
||||
let cosmic_toplevel = info.cosmic_toplevel.clone().unwrap();
|
||||
self.send_event(Event::CloseToplevel(toplevel.clone()));
|
||||
|
||||
self.remove_capture_source(CaptureSource::CosmicToplevel(toplevel.clone()));
|
||||
self.remove_capture_source(CaptureSource::CosmicToplevel(cosmic_toplevel));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue