mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:17:45 +00:00
PixelPaint: Close tab now prompts for a save
This commit is contained in:
parent
a7b558bf7d
commit
d4a0ecac31
3 changed files with 39 additions and 11 deletions
|
@ -22,6 +22,7 @@
|
|||
#include <LibGUI/Menubar.h>
|
||||
#include <LibGUI/MessageBox.h>
|
||||
#include <LibGUI/Toolbar.h>
|
||||
#include <LibGUI/Window.h>
|
||||
#include <LibGfx/Bitmap.h>
|
||||
|
||||
namespace PixelPaint {
|
||||
|
@ -61,16 +62,16 @@ MainWidget::MainWidget()
|
|||
};
|
||||
|
||||
m_tab_widget->on_tab_close_click = [&](auto& widget) {
|
||||
if (request_close()) {
|
||||
auto& image_editor = verify_cast<PixelPaint::ImageEditor>(widget);
|
||||
|
||||
m_tab_widget->deferred_invoke([&] {
|
||||
m_tab_widget->remove_tab(image_editor);
|
||||
if (m_tab_widget->children().size() == 1) {
|
||||
m_layer_list_widget->set_image(nullptr);
|
||||
m_layer_properties_widget->set_layer(nullptr);
|
||||
}
|
||||
|
||||
m_tab_widget->deferred_invoke([&] {
|
||||
m_tab_widget->remove_tab(image_editor);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
m_tab_widget->on_change = [&](auto& widget) {
|
||||
|
@ -173,7 +174,8 @@ void MainWidget::initialize_menubar(GUI::Window& window)
|
|||
return;
|
||||
m_tab_widget->on_tab_close_click(*active_widget);
|
||||
}));
|
||||
file_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
|
||||
file_menu.add_action(GUI::CommonActions::make_quit_action([this](auto&) {
|
||||
if (request_close())
|
||||
GUI::Application::the()->quit();
|
||||
}));
|
||||
|
||||
|
@ -748,6 +750,24 @@ void MainWidget::create_default_image()
|
|||
editor.set_active_layer(bg_layer);
|
||||
}
|
||||
|
||||
bool MainWidget::request_close()
|
||||
{
|
||||
if (m_tab_widget->children().is_empty())
|
||||
return true;
|
||||
|
||||
auto result = GUI::MessageBox::show(window(), "Save before closing?", "Save changes", GUI::MessageBox::Type::Warning, GUI::MessageBox::InputType::YesNoCancel);
|
||||
|
||||
if (result == GUI::MessageBox::ExecYes) {
|
||||
m_save_image_as_action->activate();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (result == GUI::MessageBox::ExecNo)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
ImageEditor* MainWidget::current_image_editor()
|
||||
{
|
||||
if (!m_tab_widget->active_widget())
|
||||
|
|
|
@ -35,6 +35,7 @@ public:
|
|||
|
||||
void open_image_fd(int fd, String const& path);
|
||||
void create_default_image();
|
||||
bool request_close();
|
||||
|
||||
private:
|
||||
MainWidget();
|
||||
|
|
|
@ -68,8 +68,15 @@ int main(int argc, char** argv)
|
|||
window->set_icon(app_icon.bitmap_for_size(16));
|
||||
|
||||
auto& main_widget = window->set_main_widget<PixelPaint::MainWidget>();
|
||||
|
||||
main_widget.initialize_menubar(*window);
|
||||
|
||||
window->on_close_request = [&]() -> GUI::Window::CloseRequestDecision {
|
||||
if (main_widget.request_close())
|
||||
return GUI::Window::CloseRequestDecision::Close;
|
||||
return GUI::Window::CloseRequestDecision::StayOpen;
|
||||
};
|
||||
|
||||
auto& statusbar = *main_widget.find_descendant_of_type_named<GUI::Statusbar>("statusbar");
|
||||
|
||||
app->on_action_enter = [&statusbar](GUI::Action& action) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue