diff --git a/Cargo.toml b/Cargo.toml index 9970d1bd..e5814dce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -69,15 +69,19 @@ serde = { version = "1.0.217", features = ["derive"] } freedesktop-desktop-entry = "0.7.8" [profile.release] -lto = "fat" +# lto = "fat" +opt-level = 1 [workspace.metadata.cargo-machete] ignored = ["libcosmic"] -# [patch."https://github.com/pop-os/libcosmic"] -# cosmic-config = { git = "https://github.com/pop-os/libcosmic//" } -# libcosmic = { git = "https://github.com/pop-os/libcosmic//" } +[patch."https://github.com/pop-os/libcosmic"] +cosmic-config = { git = "https://github.com/pop-os/libcosmic//", branch = "drop-menu-tree-changes" } +libcosmic = { git = "https://github.com/pop-os/libcosmic//", branch = "drop-menu-tree-changes" } +iced_futures = { git = "https://github.com/pop-os/libcosmic//", branch = "drop-menu-tree-changes" } + # cosmic-config = { path = "../libcosmic/cosmic-config" } # libcosmic = { path = "../libcosmic" } +# iced_futures = { path = "../libcosmic/iced/futures" } # [patch."https://github.com/pop-os/winit.git"] # winit = { git = "https://github.com/rust-windowing/winit.git", rev = "241b7a80bba96c91fa3901729cd5dec66abb9be4" } diff --git a/cosmic-app-list/src/app.rs b/cosmic-app-list/src/app.rs index 9ed7ea48..1be1d6e1 100755 --- a/cosmic-app-list/src/app.rs +++ b/cosmic-app-list/src/app.rs @@ -36,6 +36,7 @@ use cosmic::{ }, iced_core::{Border, Padding, Shadow}, iced_runtime::{core::event, dnd::peek_dnd}, + surface_message::{MessageWrapper, SurfaceMessage}, theme::{self, Button, Container}, widget::{ button, divider, dnd_source, horizontal_space, @@ -371,6 +372,22 @@ enum Message { ConfigUpdated(AppListConfig), OpenFavorites, OpenActive, + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } fn index_in_list( @@ -787,7 +804,6 @@ impl cosmic::Application for CosmicAppList { return get_popup(popup_settings); } } - Message::PinApp(id) => { if let Some(i) = self.active_list.iter().position(|t| t.id == id) { let entry = self.active_list.remove(i); @@ -1354,6 +1370,7 @@ impl cosmic::Application for CosmicAppList { return self.close_popups(); } } + Message::Surface(surface_message) => {} } Task::none() diff --git a/cosmic-applet-a11y/src/app.rs b/cosmic-applet-a11y/src/app.rs index b267238b..f1ef5cfb 100644 --- a/cosmic-applet-a11y/src/app.rs +++ b/cosmic-applet-a11y/src/app.rs @@ -22,6 +22,7 @@ use cosmic::{ }, iced_runtime::core::layout::Limits, iced_widget::column, + surface_message::{MessageWrapper, SurfaceMessage}, theme, widget::{divider, text}, Element, Task, @@ -59,6 +60,22 @@ enum Message { OpenSettings, DBusUpdate(DBusUpdate), WaylandUpdate(WaylandUpdate), + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } impl cosmic::Application for CosmicA11yApplet { @@ -202,6 +219,7 @@ impl cosmic::Application for CosmicA11yApplet { self.wayland_sender = Some(tx); } }, + Message::Surface(surface_message) => {} } Task::none() } diff --git a/cosmic-applet-audio/src/lib.rs b/cosmic-applet-audio/src/lib.rs index e9e11b04..8e53506c 100644 --- a/cosmic-applet-audio/src/lib.rs +++ b/cosmic-applet-audio/src/lib.rs @@ -23,6 +23,7 @@ use cosmic::{ widget::{self, column, row, slider}, window, Alignment, Length, Limits, Subscription, }, + surface_message::{MessageWrapper, SurfaceMessage}, theme, widget::{button, divider, horizontal_space, icon, text, Column, Row}, Element, Renderer, Task, Theme, @@ -162,6 +163,22 @@ pub enum Message { Token(TokenUpdate), OpenSettings, PulseSub(sub_pulse::Event), + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } impl Audio { @@ -675,6 +692,7 @@ impl cosmic::Application for Audio { sub_pulse::Event::DefaultSource(_) => {} sub_pulse::Event::CardInfo(_) => {} }, + Message::Surface(surface_message) => {} }; Task::none() diff --git a/cosmic-applet-battery/src/app.rs b/cosmic-applet-battery/src/app.rs index 6ae8823e..1c1dae67 100644 --- a/cosmic-applet-battery/src/app.rs +++ b/cosmic-applet-battery/src/app.rs @@ -26,6 +26,7 @@ use cosmic::{ iced_core::{Alignment, Background, Border, Color, Shadow}, iced_runtime::core::layout::Limits, iced_widget::{Column, Row}, + surface_message::{MessageWrapper, SurfaceMessage}, theme, widget::{divider, horizontal_space, icon, scrollable, text, vertical_space}, Element, Task, @@ -188,6 +189,22 @@ enum Message { OpenSettings, SettingsDaemon(settings_daemon::Event), ZbusConnection(zbus::Result), + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } impl cosmic::Application for CosmicBatteryApplet { @@ -466,6 +483,7 @@ impl cosmic::Application for CosmicBatteryApplet { } } }, + Message::Surface(surface_message) => unreachable!(), } Task::none() } diff --git a/cosmic-applet-bluetooth/src/app.rs b/cosmic-applet-bluetooth/src/app.rs index 3c8a0e79..6446368b 100644 --- a/cosmic-applet-bluetooth/src/app.rs +++ b/cosmic-applet-bluetooth/src/app.rs @@ -5,6 +5,7 @@ use crate::bluetooth::{BluerDeviceStatus, BluerRequest, BluerState, DeviceProper use cosmic::{ applet::token::subscription::{activation_token_subscription, TokenRequest, TokenUpdate}, cctk::sctk::reexports::calloop, + surface_message::{MessageWrapper, SurfaceMessage}, }; use cosmic::{ @@ -75,6 +76,22 @@ enum Message { OpenSettings, Frame(Instant), ToggleBluetooth(chain::Toggler, bool), + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } impl cosmic::Application for CosmicBluetoothApplet { @@ -332,6 +349,7 @@ impl cosmic::Application for CosmicBluetoothApplet { }); } } + Message::Surface(surface_message) => unreachable!(), } self.update_icon(); Task::none() diff --git a/cosmic-applet-input-sources/src/lib.rs b/cosmic-applet-input-sources/src/lib.rs index 5af38c26..659a9bd0 100644 --- a/cosmic-applet-input-sources/src/lib.rs +++ b/cosmic-applet-input-sources/src/lib.rs @@ -4,6 +4,7 @@ mod localize; use cosmic::iced::{Alignment, Length}; +use cosmic::surface_message::{SurfaceMessage, MessageWrapper}; use cosmic::{ app::Core, applet::{self}, @@ -85,6 +86,22 @@ pub enum Message { CompConfig(Box), SetActiveLayout(usize), KeyboardSettings, + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } #[derive(Debug)] @@ -148,24 +165,20 @@ impl cosmic::Application for Window { get_popup(popup_settings) }; } - Message::PopupClosed(id) => { if self.popup.as_ref() == Some(&id) { self.popup = None; } } - Message::CompConfig(config) => { self.comp_config = *config; self.active_layouts = self.update_xkb(); } - Message::KeyboardSettings => { let mut cmd = std::process::Command::new("cosmic-settings"); cmd.arg("keyboard"); tokio::spawn(cosmic::process::spawn(cmd)); } - Message::SetActiveLayout(pos) => { if pos == 0 { return Task::none(); @@ -195,6 +208,7 @@ impl cosmic::Application for Window { } } } + Message::Surface(surface_message) => unreachable!(), } Task::none() diff --git a/cosmic-applet-minimize/src/lib.rs b/cosmic-applet-minimize/src/lib.rs index 75a695de..8a9bf882 100644 --- a/cosmic-applet-minimize/src/lib.rs +++ b/cosmic-applet-minimize/src/lib.rs @@ -23,6 +23,7 @@ use cosmic::{ window::{self}, Length, Limits, Subscription, }, + surface_message::{SurfaceMessage, MessageWrapper}, widget::{autosize::autosize, mouse_area}, Task, }; @@ -82,6 +83,22 @@ enum Message { Closed(window::Id), OpenOverflowPopup, CloseOverflowPopup, + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } impl cosmic::Application for Minimize { @@ -210,6 +227,7 @@ impl cosmic::Application for Minimize { } } Message::CloseOverflowPopup => todo!(), + Message::Surface(surface_message) => unreachable!(), }; Task::none() } diff --git a/cosmic-applet-network/src/app.rs b/cosmic-applet-network/src/app.rs index 4681a3d0..622b4d60 100644 --- a/cosmic-applet-network/src/app.rs +++ b/cosmic-applet-network/src/app.rs @@ -15,6 +15,7 @@ use cosmic::{ }, iced_runtime::core::{layout::Limits, window}, iced_widget::Row, + surface_message::{MessageWrapper, SurfaceMessage}, theme, widget::{ button, container, divider, @@ -244,7 +245,22 @@ pub(crate) enum Message { ResetFailedKnownSsid(String, HwAddress), OpenHwDevice(Option), TogglePasswordVisibility, - // Errored(String), + Surface(SurfaceMessage), // Errored(String), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } impl cosmic::Application for CosmicNetworkApplet { @@ -305,7 +321,6 @@ impl cosmic::Application for CosmicNetworkApplet { return get_popup(popup_settings); } } - // Message::Errored(_) => todo!(), Message::ToggleAirplaneMode(enabled) => { self.toggle_wifi_ctr += 1; if let Some(tx) = self.nm_sender.as_mut() { @@ -340,63 +355,63 @@ impl cosmic::Application for CosmicNetworkApplet { req, } => { if let NetworkManagerRequest::SelectAccessPoint(ssid, hw_address) = &req { - let conn_match = self + let conn_match = self + .new_connection + .as_ref() + .map(|c| c.ssid() == ssid && c.hw_address() == *hw_address) + .unwrap_or_default(); + if conn_match && success { + if let Some(s) = + state.active_conns.iter_mut().find(|ap| &ap.name() == ssid && ap.hw_address() == *hw_address) + { + match s { + ActiveConnectionInfo::WiFi { state, .. } => { + *state = ActiveConnectionState::Activated; + } + _ => {} + }; + } + self.failed_known_ssids.remove(ssid); + self.new_connection = None; + self.show_visible_networks = false; + } else if !matches!( + &self.new_connection, + Some(NewConnectionState::EnterPassword { .. }) + ) + { + self.failed_known_ssids.insert(ssid.clone()); + } + } else if let NetworkManagerRequest::Password(ssid, _, hw_address) = &req { + if let Some(NewConnectionState::Waiting(access_point)) = + self.new_connection.clone() + { + if !success && ssid == &access_point.ssid && *hw_address == access_point.hw_address { + self.new_connection = + Some(NewConnectionState::Failure(access_point.clone())); + } else { + self.new_connection = None; + self.show_visible_networks = false; + } + } else if let Some(NewConnectionState::EnterPassword { + access_point, .. + }) = self.new_connection.clone() + { + if success && ssid == &access_point.ssid && *hw_address == access_point.hw_address { + self.new_connection = None; + self.show_visible_networks = false; + } + } + } else if self .new_connection .as_ref() - .map(|c| c.ssid() == ssid && c.hw_address() == *hw_address) - .unwrap_or_default(); - if conn_match && success { - if let Some(s) = - state.active_conns.iter_mut().find(|ap| &ap.name() == ssid && ap.hw_address() == *hw_address) - { - match s { - ActiveConnectionInfo::WiFi { state, .. } => { - *state = ActiveConnectionState::Activated; - } - _ => {} - }; - } - self.failed_known_ssids.remove(ssid); - self.new_connection = None; - self.show_visible_networks = false; - } else if !matches!( - &self.new_connection, - Some(NewConnectionState::EnterPassword { .. }) - ) - { - self.failed_known_ssids.insert(ssid.clone()); - } - } else if let NetworkManagerRequest::Password(ssid, _, hw_address) = &req { - if let Some(NewConnectionState::Waiting(access_point)) = - self.new_connection.clone() - { - if !success && ssid == &access_point.ssid && *hw_address == access_point.hw_address { - self.new_connection = - Some(NewConnectionState::Failure(access_point.clone())); - } else { + .map(|c| c.ssid()).is_some_and(|ssid| { + state.active_conns.iter().any(|c| + matches!(c, ActiveConnectionInfo::WiFi { name, state: ActiveConnectionState::Activated, .. } if ssid == name) + ) + }) { self.new_connection = None; self.show_visible_networks = false; } - } else if let Some(NewConnectionState::EnterPassword { - access_point, .. - }) = self.new_connection.clone() - { - if success && ssid == &access_point.ssid && *hw_address == access_point.hw_address { - self.new_connection = None; - self.show_visible_networks = false; - } - } - } else if self - .new_connection - .as_ref() - .map(|c| c.ssid()).is_some_and(|ssid| { - state.active_conns.iter().any(|c| - matches!(c, ActiveConnectionInfo::WiFi { name, state: ActiveConnectionState::Activated, .. } if ssid == name) - ) - }) { - self.new_connection = None; - self.show_visible_networks = false; - } if !matches!(req, NetworkManagerRequest::Reload) && matches!(state.connectivity, NmConnectivityState::Portal) @@ -573,6 +588,7 @@ impl cosmic::Application for CosmicNetworkApplet { return self.update(Message::SelectWirelessAccessPoint(ap)); } } + Message::Surface(surface_message) => unreachable!(), } Task::none() } @@ -991,7 +1007,7 @@ impl cosmic::Application for CosmicNetworkApplet { ) .on_input(Message::Password) .on_paste(Message::Password) - .on_submit(Message::SubmitPassword) + .on_submit(|_| Message::SubmitPassword) .password(), ] .push_maybe( diff --git a/cosmic-applet-notifications/src/lib.rs b/cosmic-applet-notifications/src/lib.rs index 6b71abb6..6724fd13 100644 --- a/cosmic-applet-notifications/src/lib.rs +++ b/cosmic-applet-notifications/src/lib.rs @@ -17,6 +17,7 @@ use cosmic::{ window, Alignment, Length, Limits, Subscription, }, iced_widget::{scrollable, Column}, + surface_message::{SurfaceMessage, MessageWrapper}, theme, widget::{button, container, divider, icon, text}, Element, Task, @@ -94,6 +95,22 @@ enum Message { CardsToggled(String, bool), Token(TokenUpdate), OpenSettings, + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } impl cosmic::Application for Notifications { @@ -399,6 +416,7 @@ impl cosmic::Application for Notifications { }); } } + Message::Surface(surface_message) => unreachable!(), }; self.update_icon(); Task::none() diff --git a/cosmic-applet-power/src/lib.rs b/cosmic-applet-power/src/lib.rs index 82114c6f..f0faf66c 100644 --- a/cosmic-applet-power/src/lib.rs +++ b/cosmic-applet-power/src/lib.rs @@ -1,21 +1,29 @@ // Copyright 2023 System76 // SPDX-License-Identifier: GPL-3.0-only +use std::cell::LazyCell; + use cosmic::{ app, applet::{menu_button, padded_control}, + cctk::wayland_protocols::xdg::shell::client::xdg_positioner::Gravity, cosmic_theme::Spacing, iced::{ self, - platform_specific::shell::commands::popup::{destroy_popup, get_popup}, + platform_specific::{ + runtime::wayland::subsurface, + shell::commands::popup::{destroy_popup, get_popup}, + }, widget::{self, column, row}, window, Alignment, Length, }, iced_runtime::core::layout::Limits, + surface_message::{MessageWrapper, SurfaceMessage}, theme, - widget::{button, divider, icon, text, Space}, + widget::{autosize, button, divider, icon, layer_container::layer_container, text, Space}, Element, Task, }; +use once_cell::sync::Lazy; use logind_zbus::{ manager::ManagerProxy, @@ -32,17 +40,20 @@ pub mod session_manager; use crate::{cosmic_session::CosmicSessionProxy, session_manager::SessionManagerProxy}; +static SUBSURFACE_ID: Lazy = + Lazy::new(|| cosmic::widget::Id::new("subsurface")); + pub fn run() -> cosmic::iced::Result { localize::localize(); cosmic::applet::run::(()) } -#[derive(Default)] struct Power { core: cosmic::app::Core, icon_name: String, popup: Option, + subsurface_id: window::Id, } #[derive(Debug, Clone, Copy)] @@ -66,6 +77,20 @@ impl PowerAction { } } } +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } +} #[derive(Debug, Clone)] enum Message { @@ -74,6 +99,7 @@ enum Message { Settings, Zbus(Result<(), zbus::Error>), Closed(window::Id), + Surface(SurfaceMessage), } impl cosmic::Application for Power { @@ -95,7 +121,8 @@ impl cosmic::Application for Power { Self { core, icon_name: "system-shutdown-symbolic".to_string(), - ..Default::default() + subsurface_id: window::Id::unique(), + popup: Default::default(), }, Task::none(), ) @@ -173,14 +200,20 @@ impl cosmic::Application for Power { } Task::none() } + Message::Surface(surface_message) => unimplemented!(), } } fn view(&self) -> Element { self.core .applet - .icon_button(&self.icon_name) - .on_press_down(Message::TogglePopup) + .applet_tooltip( + self.core + .applet + .icon_button(&self.icon_name) + .on_press_down(Message::TogglePopup), + "power", + ) .into() } diff --git a/cosmic-applet-status-area/src/components/app.rs b/cosmic-applet-status-area/src/components/app.rs index 615b456a..76a58cca 100644 --- a/cosmic-applet-status-area/src/components/app.rs +++ b/cosmic-applet-status-area/src/components/app.rs @@ -9,6 +9,7 @@ use cosmic::{ platform_specific::shell::commands::popup::{destroy_popup, get_popup}, window, Limits, Subscription, }, + surface_message::{MessageWrapper, SurfaceMessage}, widget::mouse_area, Element, Task, }; @@ -24,6 +25,22 @@ pub enum Msg { StatusNotifier(status_notifier_watcher::Event), TogglePopup(usize), Hovered(usize), + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Msg) -> Self { + match value { + Msg::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Msg { + fn from(value: SurfaceMessage) -> Self { + Msg::Surface(value) + } } #[derive(Default)] @@ -226,6 +243,7 @@ impl cosmic::Application for App { cmds.push(get_popup(popup_settings)); app::Task::batch(cmds) } + Msg::Surface(surface_message) => unreachable!(), } } diff --git a/cosmic-applet-tiling/src/window.rs b/cosmic-applet-tiling/src/window.rs index c433d766..21778e52 100644 --- a/cosmic-applet-tiling/src/window.rs +++ b/cosmic-applet-tiling/src/window.rs @@ -16,6 +16,7 @@ use cosmic::{ Length, Limits, Subscription, Task, }, iced_widget::{column, row}, + surface_message::{SurfaceMessage, MessageWrapper}, theme, widget::{ container, divider, @@ -60,6 +61,22 @@ pub enum Message { WorkspaceUpdate(WorkspacesUpdate), NewWorkspace(Entity), OpenSettings, + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } impl cosmic::Application for Window { @@ -270,6 +287,7 @@ impl cosmic::Application for Window { cmd.arg("window-management"); tokio::spawn(cosmic::process::spawn(cmd)); } + Message::Surface(surface_message) => unreachable!(), } Task::none() } diff --git a/cosmic-applet-time/src/window.rs b/cosmic-applet-time/src/window.rs index 61753a01..8ef9e7be 100644 --- a/cosmic-applet-time/src/window.rs +++ b/cosmic-applet-time/src/window.rs @@ -5,6 +5,7 @@ use std::str::FromStr; use chrono::{Datelike, Timelike}; use cosmic::iced_futures::stream; +use cosmic::surface_message::{SurfaceMessage, MessageWrapper}; use cosmic::widget::Id; use cosmic::{ app, @@ -79,6 +80,22 @@ pub enum Message { Token(TokenUpdate), ConfigChanged(TimeAppletConfig), TimezoneUpdate(String), + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } impl Window { @@ -442,6 +459,7 @@ impl cosmic::Application for Window { self.update(Message::Tick) } + Message::Surface(surface_message) => unreachable!(), } } diff --git a/cosmic-applet-workspaces/src/components/app.rs b/cosmic-applet-workspaces/src/components/app.rs index 4ee917c6..2b362fff 100644 --- a/cosmic-applet-workspaces/src/components/app.rs +++ b/cosmic-applet-workspaces/src/components/app.rs @@ -21,6 +21,7 @@ use cosmic::{ Length, Limits, Subscription, }, iced_core::{Background, Border}, + surface_message::{SurfaceMessage, MessageWrapper}, widget::{autosize, container, horizontal_space, vertical_space, Id}, Element, Task, Theme, }; @@ -93,6 +94,22 @@ enum Message { WorkspacePressed(ExtWorkspaceHandleV1), WheelScrolled(ScrollDelta), WorkspaceOverview, + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Message) -> Self { + match value { + Message::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Message { + fn from(value: SurfaceMessage) -> Self { + Message::Surface(value) + } } impl cosmic::Application for IcedWorkspacesApplet { @@ -215,6 +232,7 @@ impl cosmic::Application for IcedWorkspacesApplet { Message::WorkspaceOverview => { let _ = ShellCommand::new("cosmic-workspaces").spawn(); } + Message::Surface(surface_message) => unreachable!(), } Task::none() } diff --git a/cosmic-panel-button/src/lib.rs b/cosmic-panel-button/src/lib.rs index 8aec6b99..ba58ec18 100644 --- a/cosmic-panel-button/src/lib.rs +++ b/cosmic-panel-button/src/lib.rs @@ -10,6 +10,7 @@ use cosmic::{ }, iced::{self, Length}, iced_widget::row, + surface_message::{MessageWrapper, SurfaceMessage}, widget::{autosize, vertical_space, Id}, Task, }; @@ -39,6 +40,22 @@ struct Button { enum Msg { Press, ConfigUpdated(CosmicPanelButtonConfig), + Surface(SurfaceMessage), +} + +impl From for MessageWrapper { + fn from(value: Msg) -> Self { + match value { + Msg::Surface(s) => MessageWrapper::Surface(s), + m => MessageWrapper::Message(m), + } + } +} + +impl From for Msg { + fn from(value: SurfaceMessage) -> Self { + Msg::Surface(value) + } } impl cosmic::Application for Button { @@ -94,6 +111,7 @@ impl cosmic::Application for Button { .cloned() .unwrap_or_default(); } + Msg::Surface(_) => unreachable!(), } Task::none() }