mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:37:45 +00:00
Calendar: Ask about unsaved changes when closing the window :^)
The Calendar now asks about unsaved changes in the calendar when attempting to close the window.
This commit is contained in:
parent
75faa9239a
commit
b657fa6f95
3 changed files with 34 additions and 1 deletions
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2023, the SerenityOS developers.
|
* Copyright (c) 2023, the SerenityOS developers.
|
||||||
|
* Copyright (c) 2023, David Ganz <david.g.ganz@gmail.com>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -93,10 +94,14 @@ ErrorOr<NonnullRefPtr<CalendarWidget>> CalendarWidget::create(GUI::Window* paren
|
||||||
|
|
||||||
file_menu->add_separator();
|
file_menu->add_separator();
|
||||||
|
|
||||||
file_menu->add_action(GUI::CommonActions::make_quit_action([](auto&) {
|
file_menu->add_action(GUI::CommonActions::make_quit_action([&](auto&) {
|
||||||
|
if (!widget->request_close())
|
||||||
|
return;
|
||||||
GUI::Application::the()->quit();
|
GUI::Application::the()->quit();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
widget->m_save_action = save_action;
|
||||||
|
|
||||||
auto event_menu = parent_window->add_menu("&Event"_string);
|
auto event_menu = parent_window->add_menu("&Event"_string);
|
||||||
event_menu->add_action(add_event_action);
|
event_menu->add_action(add_event_action);
|
||||||
|
|
||||||
|
@ -114,6 +119,23 @@ ErrorOr<NonnullRefPtr<CalendarWidget>> CalendarWidget::create(GUI::Window* paren
|
||||||
return widget;
|
return widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CalendarWidget::request_close()
|
||||||
|
{
|
||||||
|
if (!m_event_calendar->event_manager().is_dirty())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
auto result = GUI::MessageBox::ask_about_unsaved_changes(window(), m_event_calendar->event_manager().current_filename());
|
||||||
|
if (result == GUI::MessageBox::ExecResult::Yes) {
|
||||||
|
m_save_action->activate();
|
||||||
|
return !m_event_calendar->event_manager().is_dirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (result == GUI::MessageBox::ExecResult::No)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void CalendarWidget::create_on_events_change()
|
void CalendarWidget::create_on_events_change()
|
||||||
{
|
{
|
||||||
m_event_calendar->event_manager().on_events_change = [&]() {
|
m_event_calendar->event_manager().on_events_change = [&]() {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2023, the SerenityOS developers.
|
* Copyright (c) 2023, the SerenityOS developers.
|
||||||
|
* Copyright (c) 2023, David Ganz <david.g.ganz@gmail.com>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -24,6 +25,8 @@ public:
|
||||||
void update_window_title();
|
void update_window_title();
|
||||||
void load_file(FileSystemAccessClient::File file);
|
void load_file(FileSystemAccessClient::File file);
|
||||||
|
|
||||||
|
bool request_close();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void create_on_tile_doubleclick();
|
void create_on_tile_doubleclick();
|
||||||
|
|
||||||
|
@ -43,6 +46,7 @@ private:
|
||||||
ErrorOr<NonnullRefPtr<GUI::Action>> create_open_settings_action();
|
ErrorOr<NonnullRefPtr<GUI::Action>> create_open_settings_action();
|
||||||
|
|
||||||
OwnPtr<GUI::ActionGroup> m_view_type_action_group;
|
OwnPtr<GUI::ActionGroup> m_view_type_action_group;
|
||||||
|
RefPtr<GUI::Action> m_save_action;
|
||||||
|
|
||||||
RefPtr<EventCalendar> m_event_calendar;
|
RefPtr<EventCalendar> m_event_calendar;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2019-2020, Ryan Grieb <ryan.m.grieb@gmail.com>
|
* Copyright (c) 2019-2020, Ryan Grieb <ryan.m.grieb@gmail.com>
|
||||||
|
* Copyright (c) 2023, David Ganz <david.g.ganz@gmail.com>
|
||||||
*
|
*
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
@ -67,6 +68,12 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
|
||||||
auto calendar_widget = TRY(Calendar::CalendarWidget::create(window));
|
auto calendar_widget = TRY(Calendar::CalendarWidget::create(window));
|
||||||
window->set_main_widget(calendar_widget);
|
window->set_main_widget(calendar_widget);
|
||||||
|
|
||||||
|
window->on_close_request = [&]() -> GUI::Window::CloseRequestDecision {
|
||||||
|
if (calendar_widget->request_close())
|
||||||
|
return GUI::Window::CloseRequestDecision::Close;
|
||||||
|
return GUI::Window::CloseRequestDecision::StayOpen;
|
||||||
|
};
|
||||||
|
|
||||||
window->show();
|
window->show();
|
||||||
|
|
||||||
if (!filename.is_empty()) {
|
if (!filename.is_empty()) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue