1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 16:17:45 +00:00

PixelPaint: Move request_close_editor() logic inside ImageEditor

This allows us to request any specific editor to close itself. Earlier,
this could only be done for the currently active editor, so trying to
close inactive tabs would not work properly.
This commit is contained in:
Mustafa Quraish 2022-01-07 17:49:18 -05:00 committed by Andreas Kling
parent c2b3bab984
commit 6c60bf7537
4 changed files with 25 additions and 26 deletions

View file

@ -64,8 +64,8 @@ MainWidget::MainWidget()
};
m_tab_widget->on_tab_close_click = [&](auto& widget) {
if (request_close_editor()) {
auto& image_editor = verify_cast<PixelPaint::ImageEditor>(widget);
auto& image_editor = verify_cast<PixelPaint::ImageEditor>(widget);
if (image_editor.request_close()) {
m_tab_widget->deferred_invoke([&] {
m_tab_widget->remove_tab(image_editor);
if (m_tab_widget->children().size() == 1) {
@ -728,32 +728,12 @@ void MainWidget::create_image_from_clipboard()
m_layer_list_widget->set_selected_layer(layer);
}
bool MainWidget::request_close_editor()
{
auto* editor = current_image_editor();
VERIFY(editor);
if (!editor->undo_stack().is_current_modified()) {
return true;
}
auto result = GUI::MessageBox::ask_about_unsaved_changes(window(), editor->path(), editor->undo_stack().last_unmodified_timestamp());
if (result == GUI::MessageBox::ExecYes) {
m_save_image_action->activate();
return true;
}
if (result == GUI::MessageBox::ExecNo)
return true;
return false;
}
bool MainWidget::request_close()
{
while (!m_tab_widget->children().is_empty()) {
if (!request_close_editor())
auto* editor = current_image_editor();
VERIFY(editor);
if (!editor->request_close())
return false;
m_tab_widget->remove_tab(*m_tab_widget->active_widget());
}