diff --git a/applets/cosmic-applet-graphics/Cargo.lock b/applets/cosmic-applet-graphics/Cargo.lock index 49b51f2a..1bfdb634 100644 --- a/applets/cosmic-applet-graphics/Cargo.lock +++ b/applets/cosmic-applet-graphics/Cargo.lock @@ -1271,7 +1271,7 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] name = "iced" version = "0.5.1" -source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#21f8ec347081b262e22ddc7ec8377cc97df005a2" +source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#e5d0240fab766a308916af0899a01e95daf2edf2" dependencies = [ "iced_core", "iced_futures", @@ -1287,7 +1287,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.6.0" -source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#21f8ec347081b262e22ddc7ec8377cc97df005a2" +source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#e5d0240fab766a308916af0899a01e95daf2edf2" dependencies = [ "bitflags", "palette", @@ -1297,7 +1297,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.5.0" -source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#21f8ec347081b262e22ddc7ec8377cc97df005a2" +source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#e5d0240fab766a308916af0899a01e95daf2edf2" dependencies = [ "futures", "log", @@ -1308,7 +1308,7 @@ dependencies = [ [[package]] name = "iced_glow" version = "0.4.0" -source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#21f8ec347081b262e22ddc7ec8377cc97df005a2" +source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#e5d0240fab766a308916af0899a01e95daf2edf2" dependencies = [ "bytemuck", "euclid", @@ -1323,7 +1323,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.4.0" -source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#21f8ec347081b262e22ddc7ec8377cc97df005a2" +source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#e5d0240fab766a308916af0899a01e95daf2edf2" dependencies = [ "bitflags", "bytemuck", @@ -1343,7 +1343,7 @@ dependencies = [ [[package]] name = "iced_lazy" version = "0.2.0" -source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#21f8ec347081b262e22ddc7ec8377cc97df005a2" +source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#e5d0240fab766a308916af0899a01e95daf2edf2" dependencies = [ "iced_native", "ouroboros", @@ -1352,7 +1352,7 @@ dependencies = [ [[package]] name = "iced_native" version = "0.6.0" -source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#21f8ec347081b262e22ddc7ec8377cc97df005a2" +source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#e5d0240fab766a308916af0899a01e95daf2edf2" dependencies = [ "iced_core", "iced_futures", @@ -1366,7 +1366,7 @@ dependencies = [ [[package]] name = "iced_sctk" version = "0.1.0" -source = "git+https://github.com/pop-os/iced-sctk#b3c070635c6023602f6c66d4a99802b7f610e5cb" +source = "git+https://github.com/pop-os/iced-sctk#f3d278aef51e237e3da02fafb309d7afd73d3548" dependencies = [ "enum-repr", "futures", @@ -1385,7 +1385,7 @@ dependencies = [ [[package]] name = "iced_style" version = "0.5.0" -source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#21f8ec347081b262e22ddc7ec8377cc97df005a2" +source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#e5d0240fab766a308916af0899a01e95daf2edf2" dependencies = [ "iced_core", "once_cell", @@ -1395,7 +1395,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.6.0" -source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#21f8ec347081b262e22ddc7ec8377cc97df005a2" +source = "git+https://github.com/pop-os/iced?branch=sctk-cosmic#e5d0240fab766a308916af0899a01e95daf2edf2" dependencies = [ "bitflags", "bytemuck", @@ -1546,7 +1546,7 @@ checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" [[package]] name = "libcosmic" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic/?branch=sctk-cosmic-design-system#9174e4209964f3d924fb280c89301e8fba4967fb" +source = "git+https://github.com/pop-os/libcosmic/?branch=sctk-cosmic-design-system#c48fca40fe2c9068b5fec95605ad1f11bf3415bf" dependencies = [ "apply", "cosmic-panel-config", @@ -3401,9 +3401,9 @@ dependencies = [ [[package]] name = "zvariant" -version = "3.7.1" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794fb7f59af4105697b0449ba31731ee5dbb3e773a17dbdf3d36206ea1b1644" +checksum = "5c817f416f05fcbc833902f1e6064b72b1778573978cfeac54731451ccc9e207" dependencies = [ "byteorder", "enumflags2", @@ -3415,9 +3415,9 @@ dependencies = [ [[package]] name = "zvariant_derive" -version = "3.7.1" +version = "3.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd58d4b6c8e26d3dd2149c8c40c6613ef6451b9885ff1296d1ac86c388351a54" +checksum = "fdd24fffd02794a76eb10109de463444064c88f5adb9e9d1a78488adc332bfef" dependencies = [ "proc-macro-crate", "proc-macro2", diff --git a/applets/cosmic-applet-graphics/Cargo.toml b/applets/cosmic-applet-graphics/Cargo.toml index 465ec341..bd7e96ff 100644 --- a/applets/cosmic-applet-graphics/Cargo.toml +++ b/applets/cosmic-applet-graphics/Cargo.toml @@ -10,5 +10,6 @@ zbus = "3.4" libcosmic = { git = "https://github.com/pop-os/libcosmic/", branch = "sctk-cosmic-design-system", default-features = false, features = ["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" } +# iced_sctk = { path = "../../../fork/iced-sctk" } sctk = { package = "smithay-client-toolkit", git = "https://github.com/Smithay/client-toolkit" } diff --git a/applets/cosmic-applet-graphics/src/window.rs b/applets/cosmic-applet-graphics/src/window.rs index b29b4c84..d3ead35a 100644 --- a/applets/cosmic-applet-graphics/src/window.rs +++ b/applets/cosmic-applet-graphics/src/window.rs @@ -12,6 +12,7 @@ use cosmic::{ }; use cosmic_panel_config::{PanelAnchor, PanelSize}; use iced_sctk::alignment::Horizontal; +use iced_sctk::application::SurfaceIdWrapper; use iced_sctk::commands::popup::{destroy_popup, get_popup}; use iced_sctk::Color; use zbus::Connection; @@ -63,6 +64,7 @@ pub enum Message { DBusInit(Option<(Connection, PowerDaemonProxy<'static>)>), SelectGraphicsMode(Graphics), TogglePopup, + PopupClosed(window::Id), } impl Application for Window { @@ -136,9 +138,8 @@ impl Application for Window { |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); + let popup_settings = + get_popup_settings(window::Id::new(0), new_id, (200, 240), None, None); commands.push(get_popup(popup_settings)); return Command::batch(commands); } @@ -168,101 +169,105 @@ impl Application for Window { }); } } + Message::PopupClosed(id) => { + if self.popup.as_ref() == Some(&id) { + self.popup = None; + } + }, } 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.map(|g| g.inner()), - |g| Message::SelectGraphicsMode(g), - ) - .into(), - radio( - "Nvidia Graphics", - Graphics::Nvidia, - self.graphics_mode.map(|g| g.inner()), - |g| Message::SelectGraphicsMode(g), - ) - .into(), - radio( - "Hybrid Graphics", - Graphics::Hybrid, - self.graphics_mode.map(|g| g.inner()), - |g| Message::SelectGraphicsMode(g), - ) - .into(), - radio( - "Compute Graphics", - Graphics::Compute, - self.graphics_mode.map(|g| g.inner()), - |g| Message::SelectGraphicsMode(g), - ) - .into(), - ]; - if pending_restart { - content_list.insert( - 0, - text("Restart to apply changes") + fn view(&self, id: SurfaceIdWrapper) -> Element { + match id { + SurfaceIdWrapper::LayerSurface(_) => unimplemented!(), + SurfaceIdWrapper::Window(_) => icon_button().on_press(Message::TogglePopup).into(), + SurfaceIdWrapper::Popup(_) => { + let content = match self.state { + State::SelectGraphicsMode(pending_restart) => { + let mut content_list = vec![ + radio( + "Integrated Graphics", + Graphics::Integrated, + self.graphics_mode.map(|g| g.inner()), + |g| Message::SelectGraphicsMode(g), + ) + .into(), + radio( + "Nvidia Graphics", + Graphics::Nvidia, + self.graphics_mode.map(|g| g.inner()), + |g| Message::SelectGraphicsMode(g), + ) + .into(), + radio( + "Hybrid Graphics", + Graphics::Hybrid, + self.graphics_mode.map(|g| g.inner()), + |g| Message::SelectGraphicsMode(g), + ) + .into(), + radio( + "Compute Graphics", + Graphics::Compute, + self.graphics_mode.map(|g| g.inner()), + |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(16) + .size(24) .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()]) + separator!(1).into(), + content, + ]) + .padding(4) + .spacing(4), + ) .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 close_requested(&self, id: SurfaceIdWrapper) -> Self::Message { + match id { + SurfaceIdWrapper::LayerSurface(_) | SurfaceIdWrapper::Window(_) => unimplemented!(), + SurfaceIdWrapper::Popup(id) => { + Message::PopupClosed(id) + }, + } } fn style(&self) -> ::Style { @@ -272,13 +277,6 @@ impl Application for Window { }) } - 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 }