fix(applets): multi-window fix (#42)

This commit is contained in:
Ashley Wulber 2023-06-06 15:42:42 -04:00 committed by GitHub
parent 82ac6aac1c
commit cd299892b2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 55 additions and 36 deletions

View file

@ -418,6 +418,10 @@ impl Application for SettingsApp {
fn close_requested(&self, id: window::Id) -> Self::Message {
if id == window::Id(0) {
Message::Close
} else if id == applets::ADD_APPLET_DIALOGUE_ID {
Message::PageMessage(crate::pages::Message::Applet(
applets::Message::ClosedAppletDialogue,
))
} else {
Message::None
}

View file

@ -59,7 +59,9 @@ pub fn main() -> color_eyre::Result<()> {
cosmic::settings::set_default_icon_theme("Pop");
let mut settings = cosmic::settings();
settings.initial_surface = InitialSurface::XdgWindow(SctkWindowSettings {
title: Some(fl!("app")),
size_limits: Limits::NONE.min_width(600.0).min_height(300.0),
app_id: Some("com.system76.CosmicSettings".to_string()),
..Default::default()
});

View file

@ -78,6 +78,7 @@ pub struct Page {
current_config: Option<CosmicPanelConfig>,
reorder_widget_state: ReorderWidgetState,
search: String,
has_dialogue: bool,
}
impl Default for Page {
@ -95,6 +96,7 @@ impl Default for Page {
current_config,
reorder_widget_state: ReorderWidgetState::default(),
search: String::new(),
has_dialogue: false,
}
}
}
@ -135,6 +137,7 @@ pub enum Message {
AddApplet(Applet<'static>),
AddAppletDialogue,
CloseAppletDialogue,
ClosedAppletDialogue,
DragAppletDialogue,
Save,
Cancel,
@ -165,6 +168,7 @@ impl Debug for Message {
Message::AddAppletDialogue => write!(f, "AddAppletDialogue"),
Message::CloseAppletDialogue => write!(f, "CloseAppletDialogue"),
Message::DragAppletDialogue => write!(f, "DragAppletDialogue"),
Message::ClosedAppletDialogue => write!(f, "ClosedAppletDialogue"),
}
}
}
@ -428,11 +432,12 @@ impl Page {
return commands::window::close_window(ADD_APPLET_DIALOGUE_ID);
}
Message::AddAppletDialogue => {
self.has_dialogue = true;
let window_settings = SctkWindowSettings {
window_id: ADD_APPLET_DIALOGUE_ID,
app_id: Some("com.system76.CosmicSettings".to_string()),
title: Some(fl!("add-applet")),
parent: None,
parent: Some(window::Id(0)),
autosize: false,
size_limits: layout::Limits::NONE
.min_width(300.0)
@ -446,7 +451,11 @@ impl Page {
};
return commands::window::get_window(window_settings);
}
Message::ClosedAppletDialogue => {
self.has_dialogue = false;
}
Message::CloseAppletDialogue => {
self.has_dialogue = false;
return commands::window::close_window(ADD_APPLET_DIALOGUE_ID);
}
Message::DragAppletDialogue => {
@ -465,14 +474,18 @@ pub fn lists() -> Section<crate::pages::Message> {
text(fl!("unknown"))
);
};
let button = cosmic::iced::widget::button(text(fl!("add-applet")))
.style(theme::Button::Secondary)
.padding(8.0);
column![
column![
row![
text(fl!("applets")).width(Length::Fill).size(24),
cosmic::iced::widget::button(text(fl!("add-applet")))
.style(theme::Button::Secondary)
.padding(8.0)
.on_press(Message::AddAppletDialogue)
if page.has_dialogue {
button
} else {
button.on_press(Message::AddAppletDialogue)
}
],
text(fl!("start-segment")),
AppletReorderList::new(