mirror of
https://github.com/GradienceTeam/Gradience.git
synced 2024-09-06 13:42:32 +00:00
feat: show close dialog if app is dirty #406
This commit is contained in:
parent
9ee15e1098
commit
9891485f1e
2 changed files with 83 additions and 7 deletions
|
@ -199,8 +199,6 @@ class GradienceApplication(Adw.Application):
|
||||||
)
|
)
|
||||||
|
|
||||||
buglog(self.custom_presets)
|
buglog(self.custom_presets)
|
||||||
print(self.custom_presets)
|
|
||||||
|
|
||||||
custom_menu_section = Gio.Menu()
|
custom_menu_section = Gio.Menu()
|
||||||
if self.custom_presets["user"] or self.custom_presets["curated"] or self.custom_presets["official"]:
|
if self.custom_presets["user"] or self.custom_presets["curated"] or self.custom_presets["official"]:
|
||||||
for repo, content in self.custom_presets.items():
|
for repo, content in self.custom_presets.items():
|
||||||
|
@ -216,7 +214,6 @@ class GradienceApplication(Adw.Application):
|
||||||
menu_item.set_action_and_target_value("")
|
menu_item.set_action_and_target_value("")
|
||||||
custom_menu_section.append_item(menu_item)
|
custom_menu_section.append_item(menu_item)
|
||||||
else:
|
else:
|
||||||
print("no presets")
|
|
||||||
menu_item = Gio.MenuItem()
|
menu_item = Gio.MenuItem()
|
||||||
menu_item.set_label("No presets found")
|
menu_item.set_label("No presets found")
|
||||||
custom_menu_section.append_item(menu_item)
|
custom_menu_section.append_item(menu_item)
|
||||||
|
@ -636,6 +633,79 @@ class GradienceApplication(Adw.Application):
|
||||||
|
|
||||||
dialog.present()
|
dialog.present()
|
||||||
|
|
||||||
|
def show_exit_dialog(self, *_args):
|
||||||
|
dialog = Adw.MessageDialog(
|
||||||
|
transient_for=self.props.active_window,
|
||||||
|
heading=_("You have unsaved changes!"),
|
||||||
|
body=_(
|
||||||
|
"Saving preset to <tt>{0}</tt>. If that preset already exists, it will be overwritten!"
|
||||||
|
).format(
|
||||||
|
os.path.join(
|
||||||
|
os.environ.get("XDG_CONFIG_HOME",
|
||||||
|
os.environ["HOME"] + "/.config"),
|
||||||
|
"presets",
|
||||||
|
"user",
|
||||||
|
to_slug_case(self.preset_name) + ".json",
|
||||||
|
)
|
||||||
|
),
|
||||||
|
body_use_markup=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
dialog.add_response("cancel", _("Cancel"))
|
||||||
|
dialog.add_response("discard", _("Discard"))
|
||||||
|
dialog.add_response("save", _("Save"))
|
||||||
|
dialog.set_response_appearance(
|
||||||
|
"save", Adw.ResponseAppearance.SUGGESTED)
|
||||||
|
dialog.set_response_appearance(
|
||||||
|
"discard", Adw.ResponseAppearance.DESTRUCTIVE)
|
||||||
|
dialog.set_default_response("cancel")
|
||||||
|
dialog.set_close_response("cancel")
|
||||||
|
|
||||||
|
preset_entry = Gtk.Entry(placeholder_text="Preset Name")
|
||||||
|
preset_entry.set_text(self.preset_name)
|
||||||
|
|
||||||
|
def on_preset_entry_change(*_args):
|
||||||
|
if len(preset_entry.get_text()) == 0:
|
||||||
|
dialog.set_body(
|
||||||
|
_(
|
||||||
|
"Saving preset to <tt>{0}</tt>. If that preset already exists, it will be overwritten!"
|
||||||
|
).format(
|
||||||
|
os.path.join(
|
||||||
|
os.environ.get(
|
||||||
|
"XDG_CONFIG_HOME", os.environ["HOME"] +
|
||||||
|
"/.config"
|
||||||
|
),
|
||||||
|
"presets",
|
||||||
|
"user",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
dialog.set_response_enabled("save", False)
|
||||||
|
else:
|
||||||
|
dialog.set_body(
|
||||||
|
_(
|
||||||
|
"Saving preset to <tt>{0}</tt>. If that preset already exists, it will be overwritten!"
|
||||||
|
).format(
|
||||||
|
os.path.join(
|
||||||
|
os.environ.get(
|
||||||
|
"XDG_CONFIG_HOME", os.environ["HOME"] +
|
||||||
|
"/.config"
|
||||||
|
),
|
||||||
|
"presets",
|
||||||
|
"user",
|
||||||
|
to_slug_case(preset_entry.get_text()) + ".json",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
dialog.set_response_enabled("save", True)
|
||||||
|
|
||||||
|
preset_entry.connect("changed", on_preset_entry_change)
|
||||||
|
dialog.set_extra_child(preset_entry)
|
||||||
|
|
||||||
|
dialog.connect("response", self.save_preset, preset_entry)
|
||||||
|
|
||||||
|
dialog.present()
|
||||||
|
|
||||||
def save_preset(self, _unused, response, entry):
|
def save_preset(self, _unused, response, entry):
|
||||||
if response == "save":
|
if response == "save":
|
||||||
if not os.path.exists(
|
if not os.path.exists(
|
||||||
|
@ -678,7 +748,9 @@ class GradienceApplication(Adw.Application):
|
||||||
self.clear_dirty()
|
self.clear_dirty()
|
||||||
self.win.toast_overlay.add_toast(
|
self.win.toast_overlay.add_toast(
|
||||||
Adw.Toast(title=_("Preset saved")))
|
Adw.Toast(title=_("Preset saved")))
|
||||||
|
elif response == "discard":
|
||||||
|
self.clear_dirty()
|
||||||
|
self.win.close()
|
||||||
def apply_color_scheme(self, widget, response):
|
def apply_color_scheme(self, widget, response):
|
||||||
if response == "apply":
|
if response == "apply":
|
||||||
if widget.get_app_types()["gtk4"]:
|
if widget.get_app_types()["gtk4"]:
|
||||||
|
|
|
@ -78,7 +78,7 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
"window-fullscreen", self, "fullscreened", Gio.SettingsBindFlags.DEFAULT
|
"window-fullscreen", self, "fullscreened", Gio.SettingsBindFlags.DEFAULT
|
||||||
)
|
)
|
||||||
|
|
||||||
self.connect("close-request", self.close_window)
|
self.connect("close-request", self.on_close_request)
|
||||||
self.style_manager = self.get_application().style_manager
|
self.style_manager = self.get_application().style_manager
|
||||||
self.first_apply = True
|
self.first_apply = True
|
||||||
|
|
||||||
|
@ -109,9 +109,13 @@ class GradienceMainWindow(Adw.ApplicationWindow):
|
||||||
def on_file_picker_button_clicked(self, *args):
|
def on_file_picker_button_clicked(self, *args):
|
||||||
self.monet_file_chooser_dialog.show()
|
self.monet_file_chooser_dialog.show()
|
||||||
|
|
||||||
def close_window(self, *args):
|
def on_close_request(self, *args):
|
||||||
if self.get_application().is_dirty:
|
if self.get_application().is_dirty:
|
||||||
buglog("app is dirty")
|
buglog("Window close request")
|
||||||
|
self.get_application().show_exit_dialog()
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
self.close()
|
||||||
|
|
||||||
def on_monet_file_chooser_response(self, widget, response):
|
def on_monet_file_chooser_response(self, widget, response):
|
||||||
if response == Gtk.ResponseType.ACCEPT:
|
if response == Gtk.ResponseType.ACCEPT:
|
||||||
|
|
Loading…
Reference in a new issue