1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 08:37: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

@ -700,6 +700,24 @@ void ImageEditor::image_select_layer(Layer* layer)
set_active_layer(layer); set_active_layer(layer);
} }
bool ImageEditor::request_close()
{
if (!undo_stack().is_current_modified())
return true;
auto result = GUI::MessageBox::ask_about_unsaved_changes(window(), path(), undo_stack().last_unmodified_timestamp());
if (result == GUI::MessageBox::ExecYes) {
save_project();
return true;
}
if (result == GUI::MessageBox::ExecNo)
return true;
return false;
}
void ImageEditor::save_project() void ImageEditor::save_project()
{ {
if (path().is_empty()) { if (path().is_empty()) {

View file

@ -109,6 +109,8 @@ public:
Gfx::FloatPoint image_position_to_editor_position(Gfx::IntPoint const&) const; Gfx::FloatPoint image_position_to_editor_position(Gfx::IntPoint const&) const;
Gfx::FloatPoint editor_position_to_image_position(Gfx::IntPoint const&) const; Gfx::FloatPoint editor_position_to_image_position(Gfx::IntPoint const&) const;
bool request_close();
void save_project_as(); void save_project_as();
void save_project(); void save_project();

View file

@ -64,8 +64,8 @@ MainWidget::MainWidget()
}; };
m_tab_widget->on_tab_close_click = [&](auto& widget) { 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->deferred_invoke([&] {
m_tab_widget->remove_tab(image_editor); m_tab_widget->remove_tab(image_editor);
if (m_tab_widget->children().size() == 1) { 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); 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() bool MainWidget::request_close()
{ {
while (!m_tab_widget->children().is_empty()) { while (!m_tab_widget->children().is_empty()) {
if (!request_close_editor()) auto* editor = current_image_editor();
VERIFY(editor);
if (!editor->request_close())
return false; return false;
m_tab_widget->remove_tab(*m_tab_widget->active_widget()); m_tab_widget->remove_tab(*m_tab_widget->active_widget());
} }

View file

@ -37,7 +37,6 @@ public:
void open_image_fd(int fd, String const& path); void open_image_fd(int fd, String const& path);
void create_default_image(); void create_default_image();
bool request_close_editor();
bool request_close(); bool request_close();
private: private: