mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-09-30 08:41:15 +00:00
KeyboardMapper: Ask for unsaved changes on window close and file open
This commit is contained in:
parent
ae9e4c6f26
commit
b6510f8e76
Notes:
sideshowbarker
2024-07-17 17:47:15 +09:00
Author: https://github.com/krkk Commit: https://github.com/SerenityOS/serenity/commit/b6510f8e76 Pull-request: https://github.com/SerenityOS/serenity/pull/12775
|
@ -21,6 +21,22 @@ KeyboardMapperWidget::KeyboardMapperWidget()
|
|||
create_frame();
|
||||
}
|
||||
|
||||
bool KeyboardMapperWidget::request_close()
|
||||
{
|
||||
if (!window()->is_modified())
|
||||
return true;
|
||||
auto result = GUI::MessageBox::ask_about_unsaved_changes(window(), m_filename);
|
||||
if (result == GUI::MessageBox::ExecYes) {
|
||||
ErrorOr<void> error_or = save();
|
||||
if (error_or.is_error())
|
||||
show_error_to_user(error_or.error());
|
||||
|
||||
if (!window()->is_modified())
|
||||
return true;
|
||||
}
|
||||
return result == GUI::MessageBox::ExecNo;
|
||||
}
|
||||
|
||||
void KeyboardMapperWidget::create_frame()
|
||||
{
|
||||
set_fill_with_background_color(true);
|
||||
|
|
|
@ -25,6 +25,8 @@ public:
|
|||
void show_error_to_user(Error);
|
||||
void set_automatic_modifier(bool checked);
|
||||
|
||||
bool request_close();
|
||||
|
||||
protected:
|
||||
virtual void keydown_event(GUI::KeyEvent&) override;
|
||||
virtual void keyup_event(GUI::KeyEvent&) override;
|
||||
|
|
|
@ -47,6 +47,9 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
|
||||
auto open_action = GUI::CommonActions::make_open_action(
|
||||
[&](auto&) {
|
||||
if (!keyboard_mapper_widget->request_close())
|
||||
return;
|
||||
|
||||
Optional<String> path = GUI::FilePicker::get_open_filepath(window, "Open", "/res/keymaps/");
|
||||
if (!path.has_value())
|
||||
return;
|
||||
|
@ -99,6 +102,12 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
|||
auto& help_menu = window->add_menu("&Help");
|
||||
help_menu.add_action(GUI::CommonActions::make_about_action("Keyboard Mapper", app_icon, window));
|
||||
|
||||
window->on_close_request = [&]() -> GUI::Window::CloseRequestDecision {
|
||||
if (keyboard_mapper_widget->request_close())
|
||||
return GUI::Window::CloseRequestDecision::Close;
|
||||
return GUI::Window::CloseRequestDecision::StayOpen;
|
||||
};
|
||||
|
||||
window->show();
|
||||
|
||||
return app->exec();
|
||||
|
|
Loading…
Reference in a new issue