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
commit 6c60bf7537
Notes: sideshowbarker 2024-07-17 21:23:23 +09:00
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());
}