diff --git a/src/main.rs b/src/main.rs index eb26fe8..206fab3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -41,7 +41,9 @@ enum Msg { Close, Closed(SurfaceIdWrapper), ActivateWorkspace(zcosmic_workspace_handle_v1::ZcosmicWorkspaceHandleV1), + CloseWorkspace(zcosmic_workspace_handle_v1::ZcosmicWorkspaceHandleV1), ActivateToplevel(zcosmic_toplevel_handle_v1::ZcosmicToplevelHandleV1), + CloseToplevel(zcosmic_toplevel_handle_v1::ZcosmicToplevelHandleV1), } #[derive(Debug)] @@ -245,6 +247,13 @@ impl Application for App { } } } + Msg::CloseWorkspace(workspace_handle) => {} + Msg::CloseToplevel(toplevel_handle) => { + // TODO confirmation? + if let Some(toplevel_manager) = self.toplevel_manager.as_ref() { + toplevel_manager.close(&toplevel_handle); + } + } } Command::none() @@ -305,9 +314,10 @@ fn layer_surface<'a>(app: &'a App, surface: &'a LayerSurface) -> cosmic::Element .into() } -fn close_button() -> cosmic::Element<'static, Msg> { +fn close_button(on_press: Msg) -> cosmic::Element<'static, Msg> { iced::widget::button(cosmic::widget::icon("window-close-symbolic", 16)) .style(cosmic::theme::Button::Destructive) + .on_press(on_press) .into() } @@ -319,7 +329,7 @@ fn workspace_sidebar_entry(workspace: &Workspace) -> cosmic::Element { cosmic::theme::Button::Secondary }; widget::column![ - close_button(), // TODO close button + close_button(Msg::CloseWorkspace(workspace.handle.clone())), widget::button(widget::Image::new(workspace.img.clone().unwrap_or_else( || widget::image::Handle::from_pixels(0, 0, vec![0, 0, 0, 255]) ))) @@ -346,7 +356,7 @@ fn toplevel_preview<'a>(toplevel: &'a Toplevel) -> cosmic::Element<'a, Msg> { // - selectable // name of window widget::column![ - close_button(), // TODO close button + close_button(Msg::CloseToplevel(toplevel.handle.clone())), widget::button(widget::Image::new(toplevel.img.clone().unwrap_or_else( || widget::image::Handle::from_pixels(0, 0, vec![0, 0, 0, 255]), )))