fix: refactor & handle close requests

This commit is contained in:
Ashley Wulber 2022-11-15 12:00:41 +01:00
parent e55ce3e519
commit 5b722286a1
No known key found for this signature in database
GPG key ID: 5216D4F46A90A820
3 changed files with 109 additions and 110 deletions

View file

@ -1271,7 +1271,7 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df"
[[package]] [[package]]
name = "iced" name = "iced"
version = "0.5.1" 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 = [ dependencies = [
"iced_core", "iced_core",
"iced_futures", "iced_futures",
@ -1287,7 +1287,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_core" name = "iced_core"
version = "0.6.0" 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 = [ dependencies = [
"bitflags", "bitflags",
"palette", "palette",
@ -1297,7 +1297,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_futures" name = "iced_futures"
version = "0.5.0" 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 = [ dependencies = [
"futures", "futures",
"log", "log",
@ -1308,7 +1308,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_glow" name = "iced_glow"
version = "0.4.0" 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 = [ dependencies = [
"bytemuck", "bytemuck",
"euclid", "euclid",
@ -1323,7 +1323,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_graphics" name = "iced_graphics"
version = "0.4.0" 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 = [ dependencies = [
"bitflags", "bitflags",
"bytemuck", "bytemuck",
@ -1343,7 +1343,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_lazy" name = "iced_lazy"
version = "0.2.0" 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 = [ dependencies = [
"iced_native", "iced_native",
"ouroboros", "ouroboros",
@ -1352,7 +1352,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_native" name = "iced_native"
version = "0.6.0" 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 = [ dependencies = [
"iced_core", "iced_core",
"iced_futures", "iced_futures",
@ -1366,7 +1366,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_sctk" name = "iced_sctk"
version = "0.1.0" 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 = [ dependencies = [
"enum-repr", "enum-repr",
"futures", "futures",
@ -1385,7 +1385,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_style" name = "iced_style"
version = "0.5.0" 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 = [ dependencies = [
"iced_core", "iced_core",
"once_cell", "once_cell",
@ -1395,7 +1395,7 @@ dependencies = [
[[package]] [[package]]
name = "iced_wgpu" name = "iced_wgpu"
version = "0.6.0" 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 = [ dependencies = [
"bitflags", "bitflags",
"bytemuck", "bytemuck",
@ -1546,7 +1546,7 @@ checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
[[package]] [[package]]
name = "libcosmic" name = "libcosmic"
version = "0.1.0" 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 = [ dependencies = [
"apply", "apply",
"cosmic-panel-config", "cosmic-panel-config",
@ -3401,9 +3401,9 @@ dependencies = [
[[package]] [[package]]
name = "zvariant" name = "zvariant"
version = "3.7.1" version = "3.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b794fb7f59af4105697b0449ba31731ee5dbb3e773a17dbdf3d36206ea1b1644" checksum = "5c817f416f05fcbc833902f1e6064b72b1778573978cfeac54731451ccc9e207"
dependencies = [ dependencies = [
"byteorder", "byteorder",
"enumflags2", "enumflags2",
@ -3415,9 +3415,9 @@ dependencies = [
[[package]] [[package]]
name = "zvariant_derive" name = "zvariant_derive"
version = "3.7.1" version = "3.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd58d4b6c8e26d3dd2149c8c40c6613ef6451b9885ff1296d1ac86c388351a54" checksum = "fdd24fffd02794a76eb10109de463444064c88f5adb9e9d1a78488adc332bfef"
dependencies = [ dependencies = [
"proc-macro-crate", "proc-macro-crate",
"proc-macro2", "proc-macro2",

View file

@ -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"] } 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 } 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 = { 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" } sctk = { package = "smithay-client-toolkit", git = "https://github.com/Smithay/client-toolkit" }

View file

@ -12,6 +12,7 @@ use cosmic::{
}; };
use cosmic_panel_config::{PanelAnchor, PanelSize}; use cosmic_panel_config::{PanelAnchor, PanelSize};
use iced_sctk::alignment::Horizontal; use iced_sctk::alignment::Horizontal;
use iced_sctk::application::SurfaceIdWrapper;
use iced_sctk::commands::popup::{destroy_popup, get_popup}; use iced_sctk::commands::popup::{destroy_popup, get_popup};
use iced_sctk::Color; use iced_sctk::Color;
use zbus::Connection; use zbus::Connection;
@ -63,6 +64,7 @@ pub enum Message {
DBusInit(Option<(Connection, PowerDaemonProxy<'static>)>), DBusInit(Option<(Connection, PowerDaemonProxy<'static>)>),
SelectGraphicsMode(Graphics), SelectGraphicsMode(Graphics),
TogglePopup, TogglePopup,
PopupClosed(window::Id),
} }
impl Application for Window { impl Application for Window {
@ -136,9 +138,8 @@ impl Application for Window {
|cur_graphics| Message::CurrentGraphics(cur_graphics.ok()), |cur_graphics| Message::CurrentGraphics(cur_graphics.ok()),
)); ));
} }
let mut popup_settings = let popup_settings =
get_popup_settings(window::Id::new(0), new_id, None, None); get_popup_settings(window::Id::new(0), new_id, (200, 240), None, None);
popup_settings.positioner.size = (200, 240);
commands.push(get_popup(popup_settings)); commands.push(get_popup(popup_settings));
return Command::batch(commands); 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() Command::none()
} }
fn view_popup(&self, _: window::Id) -> Element<Message> { fn view(&self, id: SurfaceIdWrapper) -> Element<Message> {
let content = match self.state { match id {
State::SelectGraphicsMode(pending_restart) => { SurfaceIdWrapper::LayerSurface(_) => unimplemented!(),
let mut content_list = vec![ SurfaceIdWrapper::Window(_) => icon_button().on_press(Message::TogglePopup).into(),
radio( SurfaceIdWrapper::Popup(_) => {
"Integrated Graphics", let content = match self.state {
Graphics::Integrated, State::SelectGraphicsMode(pending_restart) => {
self.graphics_mode.map(|g| g.inner()), let mut content_list = vec![
|g| Message::SelectGraphicsMode(g), radio(
) "Integrated Graphics",
.into(), Graphics::Integrated,
radio( self.graphics_mode.map(|g| g.inner()),
"Nvidia Graphics", |g| Message::SelectGraphicsMode(g),
Graphics::Nvidia, )
self.graphics_mode.map(|g| g.inner()), .into(),
|g| Message::SelectGraphicsMode(g), radio(
) "Nvidia Graphics",
.into(), Graphics::Nvidia,
radio( self.graphics_mode.map(|g| g.inner()),
"Hybrid Graphics", |g| Message::SelectGraphicsMode(g),
Graphics::Hybrid, )
self.graphics_mode.map(|g| g.inner()), .into(),
|g| Message::SelectGraphicsMode(g), radio(
) "Hybrid Graphics",
.into(), Graphics::Hybrid,
radio( self.graphics_mode.map(|g| g.inner()),
"Compute Graphics", |g| Message::SelectGraphicsMode(g),
Graphics::Compute, )
self.graphics_mode.map(|g| g.inner()), .into(),
|g| Message::SelectGraphicsMode(g), radio(
) "Compute Graphics",
.into(), Graphics::Compute,
]; self.graphics_mode.map(|g| g.inner()),
if pending_restart { |g| Message::SelectGraphicsMode(g),
content_list.insert( )
0, .into(),
text("Restart to apply changes") ];
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) .width(Length::Fill)
.horizontal_alignment(Horizontal::Center) .horizontal_alignment(Horizontal::Center)
.size(16) .size(24)
.into(), .into(),
) separator!(1).into(),
} content,
column(content_list).padding([8, 0]).spacing(8).into() ])
} .padding(4)
State::SettingGraphicsMode(graphics) => { .spacing(4),
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() .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( fn close_requested(&self, id: SurfaceIdWrapper) -> Self::Message {
&self, match id {
_: cosmic::iced_native::window::Id, SurfaceIdWrapper::LayerSurface(_) | SurfaceIdWrapper::Window(_) => unimplemented!(),
) -> iced::Element<'_, Self::Message, iced::Renderer<Self::Theme>> { SurfaceIdWrapper::Popup(id) => {
unimplemented!() Message::PopupClosed(id)
} },
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) -> <Self::Theme as application::StyleSheet>::Style { fn style(&self) -> <Self::Theme as application::StyleSheet>::Style {
@ -272,13 +277,6 @@ impl Application for Window {
}) })
} }
fn view_window(&self, _: window::Id) -> Element<Message> {
// TODO use panel config crate after resolving version mismatch
let btn = icon_button().on_press(Message::TogglePopup);
btn.into()
}
fn should_exit(&self) -> bool { fn should_exit(&self) -> bool {
false false
} }