diff --git a/examples/cosmic-applet-graphics/Cargo.toml b/examples/cosmic-applet-graphics/Cargo.toml
deleted file mode 100644
index d712985f..00000000
--- a/examples/cosmic-applet-graphics/Cargo.toml
+++ /dev/null
@@ -1,13 +0,0 @@
-[package]
-name = "cosmic-applet-graphics"
-version = "0.1.0"
-edition = "2021"
-
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
-[dependencies]
-zbus = "3.4"
-libcosmic = { path = "../..", default-features = false, features = ["debug", "wayland", "applet"] }
-cosmic-panel-config = {git = "https://github.com/pop-os/cosmic-panel", default-features = false }
-iced_sctk = { git = "https://github.com/pop-os/iced-sctk" }
-sctk = { package = "smithay-client-toolkit", git = "https://github.com/Smithay/client-toolkit" }
diff --git a/examples/cosmic-applet-graphics/data/com.system76.CosmicAppletGraphics.desktop b/examples/cosmic-applet-graphics/data/com.system76.CosmicAppletGraphics.desktop
deleted file mode 100644
index b0ac1b88..00000000
--- a/examples/cosmic-applet-graphics/data/com.system76.CosmicAppletGraphics.desktop
+++ /dev/null
@@ -1,12 +0,0 @@
-[Desktop Entry]
-Name=Cosmic Applet Graphics
-Comment=Write a GTK + Rust application
-Type=Application
-Exec=cosmic-applet-graphics
-Terminal=false
-Categories=GNOME;GTK;
-Keywords=Gnome;GTK;
-# Translators: Do NOT translate or transliterate this text (this is an icon file name)!
-Icon=com.system76.CosmicAppletGraphics.svg
-StartupNotify=true
-NoDisplay=true
diff --git a/examples/cosmic-applet-graphics/data/icons/com.system76.CosmicAppletGraphics.svg b/examples/cosmic-applet-graphics/data/icons/com.system76.CosmicAppletGraphics.svg
deleted file mode 100644
index c2bd5b1b..00000000
--- a/examples/cosmic-applet-graphics/data/icons/com.system76.CosmicAppletGraphics.svg
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
diff --git a/examples/cosmic-applet-graphics/data/resources/resources.gresource.xml b/examples/cosmic-applet-graphics/data/resources/resources.gresource.xml
deleted file mode 100644
index 2cf0970f..00000000
--- a/examples/cosmic-applet-graphics/data/resources/resources.gresource.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/examples/cosmic-applet-graphics/src/dbus.rs b/examples/cosmic-applet-graphics/src/dbus.rs
deleted file mode 100644
index 2ec4aa7d..00000000
--- a/examples/cosmic-applet-graphics/src/dbus.rs
+++ /dev/null
@@ -1,93 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-//! # DBus interface proxy for: `com.system76.PowerDaemon`
-//!
-//! This code was generated by `zbus-xmlgen` `3.0.0` from DBus introspection data.
-//! Source: `Interface '/com/system76/PowerDaemon' from service 'com.system76.PowerDaemon' on system bus`.
-//!
-//! You may prefer to adapt it, instead of using it verbatim.
-//!
-//! More information can be found in the
-//! [Writing a client proxy](https://dbus.pages.freedesktop.org/zbus/client.html)
-//! section of the zbus documentation.
-//!
-//! This DBus object implements
-//! [standard DBus interfaces](https://dbus.freedesktop.org/doc/dbus-specification.html),
-//! (`org.freedesktop.DBus.*`) for which the following zbus proxies can be used:
-//!
-//! * [`zbus::fdo::IntrospectableProxy`]
-//!
-//! …consequently `zbus-xmlgen` did not generate code for the above interfaces.
-
-use zbus::{dbus_proxy, Connection};
-
-#[dbus_proxy(
- interface = "com.system76.PowerDaemon",
- default_path = "/com/system76/PowerDaemon"
-)]
-trait PowerDaemon {
- /// Balanced method
- fn balanced(&self) -> zbus::Result<()>;
-
- /// Battery method
- fn battery(&self) -> zbus::Result<()>;
-
- /// GetChargeProfiles method
- fn get_charge_profiles(
- &self,
- ) -> zbus::Result>>;
-
- /// GetChargeThresholds method
- fn get_charge_thresholds(&self) -> zbus::Result<(u8, u8)>;
-
- /// GetDefaultGraphics method
- fn get_default_graphics(&self) -> zbus::Result;
-
- /// GetExternalDisplaysRequireDGPU method
- fn get_external_displays_require_dgpu(&self) -> zbus::Result;
-
- /// GetGraphics method
- fn get_graphics(&self) -> zbus::Result;
-
- /// GetGraphicsPower method
- fn get_graphics_power(&self) -> zbus::Result;
-
- /// GetProfile method
- fn get_profile(&self) -> zbus::Result;
-
- /// GetSwitchable method
- fn get_switchable(&self) -> zbus::Result;
-
- /// Performance method
- fn performance(&self) -> zbus::Result<()>;
-
- /// SetChargeThresholds method
- fn set_charge_thresholds(&self, thresholds: &(u8, u8)) -> zbus::Result<()>;
-
- /// SetGraphics method
- fn set_graphics(&self, vendor: &str) -> zbus::Result<()>;
-
- /// SetGraphicsPower method
- fn set_graphics_power(&self, power: bool) -> zbus::Result<()>;
-
- /// HotPlugDetect signal
- #[dbus_proxy(signal)]
- fn hot_plug_detect(&self, port: u64) -> zbus::Result<()>;
-
- /// PowerProfileSwitch signal
- #[dbus_proxy(signal)]
- fn power_profile_switch(&self, profile: &str) -> zbus::Result<()>;
-}
-
-pub async fn init() -> Option<(Connection, PowerDaemonProxy<'static>)> {
- let conn = match Connection::system().await {
- Ok(conn) => conn,
- _ => return None,
- };
-
- let proxy = match PowerDaemonProxy::new(&conn).await {
- Ok(p) => p,
- _ => return None,
- };
-
- Some((conn, proxy))
-}
diff --git a/examples/cosmic-applet-graphics/src/graphics.rs b/examples/cosmic-applet-graphics/src/graphics.rs
deleted file mode 100644
index 8f409330..00000000
--- a/examples/cosmic-applet-graphics/src/graphics.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-use crate::dbus::PowerDaemonProxy;
-use zbus::Result;
-
-#[derive(PartialEq, Eq, Copy, Clone, Debug)]
-pub enum Graphics {
- Integrated,
- Hybrid,
- Nvidia,
- Compute,
-}
-
-pub async fn get_current_graphics(daemon: PowerDaemonProxy<'_>) -> Result {
- let graphics = daemon.get_graphics().await?;
- match graphics.as_str() {
- "integrated" => Ok(Graphics::Integrated),
- "hybrid" => Ok(Graphics::Hybrid),
- "nvidia" => Ok(Graphics::Nvidia),
- "compute" => Ok(Graphics::Compute),
- _ => panic!("Unknown graphics profile: {}", graphics),
- }
-}
-
-pub async fn set_graphics(daemon: PowerDaemonProxy<'_>, graphics: Graphics) -> Result<()> {
- let graphics_str = match graphics {
- Graphics::Integrated => "integrated",
- Graphics::Hybrid => "hybrid",
- Graphics::Nvidia => "nvidia",
- Graphics::Compute => "compute",
- };
- daemon.set_graphics(graphics_str).await
-}
diff --git a/examples/cosmic-applet-graphics/src/main.rs b/examples/cosmic-applet-graphics/src/main.rs
deleted file mode 100644
index 192a5017..00000000
--- a/examples/cosmic-applet-graphics/src/main.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-mod dbus;
-mod graphics;
-mod window;
-
-use cosmic::{
- iced::{sctk_settings::InitialSurface, Application},
- iced_native::command::platform_specific::wayland::window::SctkWindowSettings,
- iced_native::window::Settings,
- settings,
-};
-use cosmic_panel_config::PanelSize;
-use window::*;
-
-pub fn main() -> cosmic::iced::Result {
- let mut settings = settings();
- let pixels = std::env::var("COSMIC_PANEL_SIZE")
- .ok()
- .and_then(|size| match size.parse::() {
- Ok(PanelSize::XL) => Some(64),
- Ok(PanelSize::L) => Some(48),
- Ok(PanelSize::M) => Some(36),
- Ok(PanelSize::S) => Some(24),
- Ok(PanelSize::XS) => Some(18),
- Err(_) => Some(36),
- })
- .unwrap_or(36);
- settings.initial_surface = InitialSurface::XdgWindow(SctkWindowSettings {
- iced_settings: Settings {
- size: (pixels + 32, pixels + 16),
- min_size: Some((pixels + 32, pixels + 16)),
- max_size: Some((pixels + 32, pixels + 16)),
- ..Default::default()
- },
- ..Default::default()
- });
- Window::run(settings)
-}
diff --git a/examples/cosmic-applet-graphics/src/window.rs b/examples/cosmic-applet-graphics/src/window.rs
deleted file mode 100644
index 7ba05654..00000000
--- a/examples/cosmic-applet-graphics/src/window.rs
+++ /dev/null
@@ -1,270 +0,0 @@
-use crate::dbus::{self, PowerDaemonProxy};
-use crate::graphics::{get_current_graphics, set_graphics, Graphics};
-use cosmic::applet::{get_popup_settings, icon_button, popup_container};
-use cosmic::iced_style::application::{self, Appearance};
-use cosmic::separator;
-use cosmic::theme::Container;
-use cosmic::widget::widget::container;
-use cosmic::{
- iced::widget::{column, radio, text},
- iced::{self, Application, Command, Length},
- iced_native::window,
- theme::{self, Theme},
- Element,
-};
-use cosmic_panel_config::{PanelAnchor, PanelSize};
-use iced_sctk::alignment::{Horizontal, Vertical};
-use iced_sctk::commands::popup::{destroy_popup, get_popup};
-use iced_sctk::Color;
-use zbus::Connection;
-
-#[derive(Clone, Copy)]
-enum State {
- SelectGraphicsMode(bool),
- SettingGraphicsMode(Graphics),
-}
-
-impl Default for State {
- fn default() -> Self {
- Self::SelectGraphicsMode(false)
- }
-}
-
-#[derive(Default)]
-pub struct Window {
- popup: Option,
- graphics_mode: Option,
- id_ctr: u32,
- icon_size: u16,
- anchor: PanelAnchor,
- theme: Theme,
- dbus: Option<(Connection, PowerDaemonProxy<'static>)>,
- state: State,
-}
-
-#[allow(dead_code)]
-#[derive(Clone, Debug)]
-pub enum Message {
- CurrentGraphics(Option),
- AppliedGraphicsMode(Option),
- DBusInit(Option<(Connection, PowerDaemonProxy<'static>)>),
- SelectGraphicsMode(Graphics),
- TogglePopup,
-}
-
-impl Application for Window {
- type Executor = iced::executor::Default;
- type Flags = ();
- type Message = Message;
- type Theme = Theme;
-
- fn new(_flags: ()) -> (Self, Command) {
- let mut window = Window::default();
- let pixels = std::env::var("COSMIC_PANEL_SIZE")
- .ok()
- .and_then(|size| match size.parse::() {
- Ok(PanelSize::XL) => Some(64),
- Ok(PanelSize::L) => Some(36),
- Ok(PanelSize::M) => Some(24),
- Ok(PanelSize::S) => Some(16),
- Ok(PanelSize::XS) => Some(12),
- Err(_) => Some(12),
- })
- .unwrap_or(16);
- window.icon_size = pixels;
- window.anchor = std::env::var("COSMIC_PANEL_ANCHOR")
- .ok()
- .map(|size| match size.parse::() {
- Ok(p) => p,
- Err(_) => PanelAnchor::Top,
- })
- .unwrap_or(PanelAnchor::Top);
- (
- window,
- Command::perform(dbus::init(), |dbus_init| Message::DBusInit(dbus_init)),
- )
- }
-
- fn title(&self) -> String {
- String::from("Cosmic Graphics Applet")
- }
-
- fn update(&mut self, message: Message) -> iced::Command {
- match message {
- Message::SelectGraphicsMode(new_graphics_mode) => {
- if let Some((_, proxy)) = self.dbus.as_ref() {
- self.state = State::SettingGraphicsMode(new_graphics_mode);
- return Command::perform(
- set_graphics(proxy.clone(), new_graphics_mode),
- move |success| {
- Message::AppliedGraphicsMode(success.ok().map(|_| new_graphics_mode))
- },
- );
- }
- }
- Message::AppliedGraphicsMode(g) => {
- if let Some(g) = g {
- self.graphics_mode.replace(g);
- self.state = State::SelectGraphicsMode(true);
- }
- }
- Message::TogglePopup => {
- if let Some(p) = self.popup.take() {
- return destroy_popup(p);
- } else {
- self.id_ctr += 1;
- let new_id = window::Id::new(self.id_ctr);
- self.popup.replace(new_id);
- let mut commands = Vec::new();
- if let Some((_, proxy)) = self.dbus.as_ref() {
- commands.push(Command::perform(
- get_current_graphics(proxy.clone()),
- |cur_graphics| Message::CurrentGraphics(cur_graphics.ok()),
- ));
- }
- let mut popup_settings =
- get_popup_settings(window::Id::new(0), new_id, None, None);
- popup_settings.positioner.size = (200, 240);
- commands.push(get_popup(popup_settings));
- return Command::batch(commands);
- }
- }
- Message::DBusInit(dbus) => {
- self.dbus = dbus;
- return Command::perform(
- get_current_graphics(self.dbus.as_ref().unwrap().1.clone()),
- |cur_graphics| {
- Message::CurrentGraphics(match cur_graphics {
- Ok(g) => Some(g),
- Err(err) => {
- dbg!(err);
- None
- }
- })
- },
- );
- }
- Message::CurrentGraphics(g) => {
- if let Some(g) = g {
- self.graphics_mode.replace(g);
- }
- }
- }
- Command::none()
- }
-
- fn view_popup(&self, _: window::Id) -> Element {
- let content = match self.state {
- State::SelectGraphicsMode(pending_restart) => {
- let mut content_list = vec![
- radio(
- "Integrated Graphics",
- Graphics::Integrated,
- self.graphics_mode,
- |g| Message::SelectGraphicsMode(g),
- )
- .into(),
- radio(
- "Nvidia Graphics",
- Graphics::Nvidia,
- self.graphics_mode,
- |g| Message::SelectGraphicsMode(g),
- )
- .into(),
- radio(
- "Hybrid Graphics",
- Graphics::Hybrid,
- self.graphics_mode,
- |g| Message::SelectGraphicsMode(g),
- )
- .into(),
- radio(
- "Compute Graphics",
- Graphics::Compute,
- self.graphics_mode,
- |g| Message::SelectGraphicsMode(g),
- )
- .into(),
- ];
- if pending_restart {
- content_list.insert(
- 0,
- text("Restart to apply changes")
- .width(Length::Fill)
- .horizontal_alignment(Horizontal::Center)
- .size(16)
- .into(),
- )
- }
- column(content_list).padding([8, 0]).spacing(8).into()
- }
- State::SettingGraphicsMode(graphics) => {
- let graphics_str = match graphics {
- Graphics::Integrated => "integrated",
- Graphics::Hybrid => "hybrid",
- Graphics::Nvidia => "nvidia",
- Graphics::Compute => "compute",
- };
- column(vec![text(format!(
- "Setting graphics mode to {graphics_str}..."
- ))
- .width(Length::Fill)
- .horizontal_alignment(Horizontal::Center)
- .into()])
- .into()
- }
- };
- popup_container(
- column(vec![
- text("Graphics Mode")
- .width(Length::Fill)
- .horizontal_alignment(Horizontal::Center)
- .size(24)
- .into(),
- separator!(1).into(),
- content,
- ])
- .padding(4)
- .spacing(4),
- )
- .into()
- }
-
- fn view_layer_surface(
- &self,
- _: cosmic::iced_native::window::Id,
- ) -> iced::Element<'_, Self::Message, iced::Renderer> {
- unimplemented!()
- }
- fn close_window_requested(&self, _: cosmic::iced_native::window::Id) -> Self::Message {
- unimplemented!()
- }
- fn popup_done(&self, _: cosmic::iced_native::window::Id) -> Self::Message {
- unimplemented!()
- }
- fn layer_surface_done(&self, _: cosmic::iced_native::window::Id) -> Self::Message {
- unimplemented!()
- }
-
- fn style(&self) -> ::Style {
- ::Style::Custom(|theme| Appearance {
- background_color: Color::from_rgba(0.0, 0.0, 0.0, 0.0),
- text_color: theme.cosmic().on_bg_color().into(),
- })
- }
-
- fn view_window(&self, _: window::Id) -> Element {
- // TODO use panel config crate after resolving version mismatch
-
- let btn = icon_button().on_press(Message::TogglePopup);
- btn.into()
- }
-
- fn should_exit(&self) -> bool {
- false
- }
-
- fn theme(&self) -> Theme {
- self.theme
- }
-}
diff --git a/examples/cosmic-sctk/Cargo.toml b/examples/cosmic-sctk/Cargo.toml
index a599be57..ec6669e7 100644
--- a/examples/cosmic-sctk/Cargo.toml
+++ b/examples/cosmic-sctk/Cargo.toml
@@ -7,3 +7,4 @@ publish = false
[dependencies]
libcosmic = { path = "../..", default-features = false, features = ["debug", "wayland"] }
+iced_sctk = { git = "https://github.com/pop-os/iced-sctk" }
diff --git a/examples/cosmic-sctk/src/window.rs b/examples/cosmic-sctk/src/window.rs
index b145d8bd..17ccd8ee 100644
--- a/examples/cosmic-sctk/src/window.rs
+++ b/examples/cosmic-sctk/src/window.rs
@@ -7,12 +7,12 @@ use cosmic::{
iced::{self, Alignment, Application, Color, Command, Length},
iced_lazy::responsive,
iced_native::window,
- iced_winit::window::{drag, maximize, minimize},
list_view, list_view_item, list_view_row, list_view_section, scrollable,
theme::{self, Theme},
widget::{button, header_bar, list_box, list_row, list_view::*, toggler},
Element,
};
+use iced_sctk::application::SurfaceIdWrapper;
use std::collections::BTreeMap;
#[derive(Default)]
@@ -99,34 +99,21 @@ impl Application for Window {
Message::PickListSelected(value) => self.pick_list_selected = Some(value),
Message::Close => self.exit = true,
Message::ToggleSidebar => self.sidebar_toggled = !self.sidebar_toggled,
- Message::Drag => return drag(window::Id::new(0)),
- Message::Minimize => return minimize(window::Id::new(0), true),
- Message::Maximize => return maximize(window::Id::new(0), true),
+ // Message::Drag => return drag(window::Id::new(0)),
+ // Message::Minimize => return minimize(window::Id::new(0), true),
+ // Message::Maximize => return maximize(window::Id::new(0), true),
Message::RowSelected(row) => println!("Selected row {row}"),
+ _ => {}
}
Command::none()
}
- fn view_popup(&self, id: window::Id) -> Element {
- unimplemented!()
- }
- fn view_layer_surface(
- &self,
- window: cosmic::iced_native::window::Id,
- ) -> iced::Element<'_, Self::Message, iced::Renderer> {
- unimplemented!()
- }
- fn close_window_requested(&self, window: cosmic::iced_native::window::Id) -> Self::Message {
- unimplemented!()
- }
- fn popup_done(&self, window: cosmic::iced_native::window::Id) -> Self::Message {
- unimplemented!()
- }
- fn layer_surface_done(&self, window: cosmic::iced_native::window::Id) -> Self::Message {
+
+ fn close_requested(&self, _: SurfaceIdWrapper) -> Self::Message {
unimplemented!()
}
- fn view_window(&self, id: window::Id) -> Element {
+ fn view(&self, _: SurfaceIdWrapper) -> Element {
let mut header: Element = header_bar()
.title(self.title())
.nav_title(String::from("Settings"))