diff --git a/Applications/TextEditor/TextEditorWidget.cpp b/Applications/TextEditor/TextEditorWidget.cpp index ffda29672e..1627d9fadd 100644 --- a/Applications/TextEditor/TextEditorWidget.cpp +++ b/Applications/TextEditor/TextEditorWidget.cpp @@ -55,7 +55,6 @@ TextEditorWidget::TextEditorWidget() GMessageBox::Type::Information, GMessageBox::InputType::OK, window()); } - }); m_find_previous_action = GAction::create("Find previous", { Mod_Ctrl | Mod_Shift, Key_G }, [&](auto&) { auto needle = m_find_textbox->text(); @@ -171,9 +170,10 @@ TextEditorWidget::TextEditorWidget() app_menu->add_action(*m_save_action); app_menu->add_action(*m_save_as_action); app_menu->add_separator(); - app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [](const GAction&) { + app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [this](const GAction&) { + if (!request_close()) + return; GApplication::the().quit(0); - return; })); menubar->add_menu(move(app_menu)); @@ -200,7 +200,6 @@ TextEditorWidget::TextEditorWidget() }); menubar->add_menu(move(font_menu)); - auto view_menu = make("View"); view_menu->add_action(*m_line_wrapping_setting_action); menubar->add_menu(move(view_menu)); @@ -265,3 +264,12 @@ void TextEditorWidget::open_sesame(const String& path) m_editor->set_text(file.read_all()); set_path(FileSystemPath(path)); } + +bool TextEditorWidget::request_close() +{ + if (!m_document_dirty) + return true; + GMessageBox box("The document has been modified. Quit without saving?", "Quit without saving?", GMessageBox::Type::Warning, GMessageBox::InputType::OKCancel, window()); + auto result = box.exec(); + return result == GMessageBox::ExecOK; +} diff --git a/Applications/TextEditor/TextEditorWidget.h b/Applications/TextEditor/TextEditorWidget.h index 3b44a667c1..aafc6c8367 100644 --- a/Applications/TextEditor/TextEditorWidget.h +++ b/Applications/TextEditor/TextEditorWidget.h @@ -16,6 +16,7 @@ public: TextEditorWidget(); virtual ~TextEditorWidget() override; void open_sesame(const String& path); + bool request_close(); private: void set_path(const FileSystemPath& file); diff --git a/Applications/TextEditor/main.cpp b/Applications/TextEditor/main.cpp index 9564b7ca01..80f7925da2 100644 --- a/Applications/TextEditor/main.cpp +++ b/Applications/TextEditor/main.cpp @@ -12,6 +12,12 @@ int main(int argc, char** argv) auto* text_widget = new TextEditorWidget(); window->set_main_widget(text_widget); + window->on_close_request = [&]() -> GWindow::CloseRequestDecision { + if (text_widget->request_close()) + return GWindow::CloseRequestDecision::Close; + return GWindow::CloseRequestDecision::StayOpen; + }; + if (argc >= 2) text_widget->open_sesame(argv[1]);