fix: refactor & handle close requests
This commit is contained in:
parent
e55ce3e519
commit
5b722286a1
3 changed files with 109 additions and 110 deletions
30
applets/cosmic-applet-graphics/Cargo.lock
generated
30
applets/cosmic-applet-graphics/Cargo.lock
generated
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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" }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue