diff --git a/Userland/Applications/PixelPaint/MainWidget.cpp b/Userland/Applications/PixelPaint/MainWidget.cpp index f341375bb2..084d673bf8 100644 --- a/Userland/Applications/PixelPaint/MainWidget.cpp +++ b/Userland/Applications/PixelPaint/MainWidget.cpp @@ -61,9 +61,11 @@ MainWidget::MainWidget() m_toolbox->on_tool_selection = [&](auto* tool) { auto* editor = current_image_editor(); - VERIFY(editor); - editor->set_active_tool(tool); - m_tool_properties_widget->set_active_tool(tool); + // Ignore tool selection changes if we don't have an editor yet, e.g. if PixelPaint is started with a path argument. + if (editor) { + editor->set_active_tool(tool); + m_tool_properties_widget->set_active_tool(tool); + } }; m_tab_widget->on_middle_click = [&](auto& widget) { @@ -1298,6 +1300,7 @@ void MainWidget::open_image(FileSystemAccessClient::File file) editor.set_path(file.filename().to_byte_string()); editor.set_unmodified(); m_layer_list_widget->set_image(&image); + m_toolbox->ensure_tool_selection(); GUI::Application::the()->set_most_recently_open_file(file.filename()); } diff --git a/Userland/Applications/PixelPaint/ToolboxWidget.cpp b/Userland/Applications/PixelPaint/ToolboxWidget.cpp index 03dd21469e..0569db953d 100644 --- a/Userland/Applications/PixelPaint/ToolboxWidget.cpp +++ b/Userland/Applications/PixelPaint/ToolboxWidget.cpp @@ -55,8 +55,8 @@ void ToolboxWidget::setup_tools() auto action = GUI::Action::create_checkable(tool->tool_name(), shortcut, Gfx::Bitmap::load_from_file(ByteString::formatted("/res/icons/pixelpaint/{}.png", icon_name)).release_value_but_fixme_should_propagate_errors(), [this, tool = tool.ptr()](auto& action) { if (action.is_checked()) { - on_tool_selection(tool); m_active_tool = tool; + ensure_tool_selection(); } else { on_tool_selection(nullptr); } @@ -70,11 +70,11 @@ void ToolboxWidget::setup_tools() tool->set_action(action); m_tools.append(move(tool)); if (is_default_tool) { + VERIFY(m_active_tool == nullptr); action->set_checked(true); - auto default_tool_index = m_tools.size() - 1; - deferred_invoke([&, default_tool_index]() { - VERIFY(m_active_tool == nullptr); - on_tool_selection(m_tools[default_tool_index]); + m_active_tool = m_tools[m_tools.size() - 1]; + deferred_invoke([&]() { + ensure_tool_selection(); }); } }; @@ -100,4 +100,9 @@ void ToolboxWidget::setup_tools() add_tool("gradients"sv, { Mod_Ctrl, Key_G }, make()); } +void ToolboxWidget::ensure_tool_selection() +{ + if (on_tool_selection) + on_tool_selection(m_active_tool); +} } diff --git a/Userland/Applications/PixelPaint/ToolboxWidget.h b/Userland/Applications/PixelPaint/ToolboxWidget.h index 2d71b99689..a0238105a7 100644 --- a/Userland/Applications/PixelPaint/ToolboxWidget.h +++ b/Userland/Applications/PixelPaint/ToolboxWidget.h @@ -30,6 +30,7 @@ public: } Tool* active_tool() const { return m_active_tool; } + void ensure_tool_selection(); private: friend class ToolButton;