소스 검색

PixelPaint: Make PaletteWidget::set_image_editor take a ImageEditor*

After closing the last open ImageEditor, selecting a color would try to
dereference it causing a crash. Instead make set_image_editor() take a
pointer to it and set it to nullptr when closing the last tab like we
do with LayerListWidget and LayerPropertiesWidget.
Marcus Nilsson 3 년 전
부모
커밋
7ca4d045bd

+ 2 - 1
Userland/Applications/PixelPaint/MainWidget.cpp

@@ -71,6 +71,7 @@ MainWidget::MainWidget()
                 if (m_tab_widget->children().size() == 0) {
                     m_layer_list_widget->set_image(nullptr);
                     m_layer_properties_widget->set_layer(nullptr);
+                    m_palette_widget->set_image_editor(nullptr);
                 }
             });
         }
@@ -78,7 +79,7 @@ MainWidget::MainWidget()
 
     m_tab_widget->on_change = [&](auto& widget) {
         auto& image_editor = verify_cast<PixelPaint::ImageEditor>(widget);
-        m_palette_widget->set_image_editor(image_editor);
+        m_palette_widget->set_image_editor(&image_editor);
         m_layer_list_widget->set_image(&image_editor.image());
         m_layer_properties_widget->set_layer(image_editor.active_layer());
         if (auto* active_tool = m_toolbox->active_tool())

+ 13 - 8
Userland/Applications/PixelPaint/PaletteWidget.cpp

@@ -143,17 +143,20 @@ PaletteWidget::PaletteWidget()
     display_color_list(result.value());
 }
 
-void PaletteWidget::set_image_editor(ImageEditor& editor)
+void PaletteWidget::set_image_editor(ImageEditor* editor)
 {
-    m_editor = &editor;
-    set_primary_color(editor.primary_color());
-    set_secondary_color(editor.secondary_color());
+    m_editor = editor;
+    if (!m_editor)
+        return;
+
+    set_primary_color(editor->primary_color());
+    set_secondary_color(editor->secondary_color());
 
-    editor.on_primary_color_change = [this](Color color) {
+    editor->on_primary_color_change = [this](Color color) {
         set_primary_color(color);
     };
 
-    editor.on_secondary_color_change = [this](Color color) {
+    editor->on_secondary_color_change = [this](Color color) {
         set_secondary_color(color);
     };
 }
@@ -164,13 +167,15 @@ PaletteWidget::~PaletteWidget()
 
 void PaletteWidget::set_primary_color(Color color)
 {
-    m_editor->set_primary_color(color);
+    if (m_editor)
+        m_editor->set_primary_color(color);
     m_primary_color_widget->set_background_color(color);
 }
 
 void PaletteWidget::set_secondary_color(Color color)
 {
-    m_editor->set_secondary_color(color);
+    if (m_editor)
+        m_editor->set_secondary_color(color);
     m_secondary_color_widget->set_background_color(color);
 }
 

+ 1 - 1
Userland/Applications/PixelPaint/PaletteWidget.h

@@ -35,7 +35,7 @@ public:
     static Result<void, String> save_palette_fd_and_close(Vector<Color>, int);
     static Vector<Color> fallback_colors();
 
-    void set_image_editor(ImageEditor&);
+    void set_image_editor(ImageEditor*);
 
 private:
     static Result<Vector<Color>, String> load_palette_file(Core::File&);