Author: jghali
Date: Thu Jun 30 22:05:56 2022
New Revision: 25114

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=25114
Log:
#16882: Scribus crash if you delete a symbol in "symbol edit mode".

Modified:
    trunk/Scribus/scribus/ui/symbolpalette.cpp
    trunk/Scribus/scribus/ui/symbolpalette.h

Modified: trunk/Scribus/scribus/ui/symbolpalette.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=25114&path=/trunk/Scribus/scribus/ui/symbolpalette.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/symbolpalette.cpp  (original)
+++ trunk/Scribus/scribus/ui/symbolpalette.cpp  Thu Jun 30 22:05:56 2022
@@ -45,23 +45,23 @@
        delegate = new ScListWidgetDelegate(this, this);
        setItemDelegate(delegate);
        setIconSize(QSize(48, 48));
-       connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, 
SLOT(HandleContextMenu(QPoint)));
-}
-
-void SymbolView::HandleContextMenu(QPoint p)
+       connect(this, SIGNAL(customContextMenuRequested(QPoint)), this, 
SLOT(handleContextMenu(QPoint)));
+}
+
+void SymbolView::handleContextMenu(QPoint p)
 {
        QListWidgetItem *item = itemAt(p);
-       if (!item)
-       {
-               QMenu *pmenu = new QMenu();
-               QAction* viewAct;
-               viewAct = pmenu->addAction( tr("Display Icons only"));
-               viewAct->setCheckable(true);
-               viewAct->setChecked(delegate->iconOnly());
-               connect(viewAct, SIGNAL(triggered()), this, 
SLOT(changeDisplay()));
-               pmenu->exec(QCursor::pos());
-               delete pmenu;
-       }
+       if (item)
+               return;
+
+       QMenu *pmenu = new QMenu();
+       QAction* viewAct;
+       viewAct = pmenu->addAction( tr("Display Icons only"));
+       viewAct->setCheckable(true);
+       viewAct->setChecked(delegate->iconOnly());
+       connect(viewAct, SIGNAL(triggered()), this, SLOT(changeDisplay()));
+       pmenu->exec(QCursor::pos());
+       delete pmenu;
 }
 
 void SymbolView::changeDisplay()
@@ -166,26 +166,31 @@
        languageChange();
        m_item = nullptr;
        connect(SymbolViewWidget, SIGNAL(itemDoubleClicked(QListWidgetItem*)), 
this, SLOT(handleDoubleClick(QListWidgetItem*)));
-       connect(SymbolViewWidget, SIGNAL(customContextMenuRequested(QPoint)), 
this, SLOT(handleContextMenue(QPoint)));
+       connect(SymbolViewWidget, SIGNAL(customContextMenuRequested(QPoint)), 
this, SLOT(handleContextMenu(QPoint)));
        connect(SymbolViewWidget, SIGNAL(objectDropped()), this, 
SIGNAL(objectDropped()));
 }
 
-void SymbolPalette::handleContextMenue(QPoint p)
+void SymbolPalette::handleContextMenu(QPoint p)
 {
        if (!m_doc)
                return;
+
        QListWidgetItem *item = SymbolViewWidget->itemAt(p);
-       if (item)
-       {
-               m_item = item;
-               QMenu *pmenu = new QMenu();
-               QAction* editAct = pmenu->addAction( tr("Edit Item"));
-               connect(editAct, SIGNAL(triggered()), this, 
SLOT(handleEditItem()));
-               QAction* delAct = pmenu->addAction( tr("Remove Item"));
-               connect(delAct, SIGNAL(triggered()), this, 
SLOT(handleDeleteItem()));
-               pmenu->exec(QCursor::pos());
-               delete pmenu;
-       }
+       if (!item)
+               return;
+       m_item = item;
+
+       QMenu *pmenu = new QMenu();
+       QAction* editAct = pmenu->addAction( tr("Edit Item"));
+       editAct->setEnabled(item->flags() & Qt::ItemIsEnabled);
+       connect(editAct, SIGNAL(triggered()), this, SLOT(handleEditItem()));
+
+       QAction* delAct = pmenu->addAction( tr("Remove Item"));
+       delAct->setEnabled(item->flags() & Qt::ItemIsEnabled);
+       connect(delAct, SIGNAL(triggered()), this, SLOT(handleDeleteItem()));
+
+       pmenu->exec(QCursor::pos());
+       delete pmenu;
 }
 
 void SymbolPalette::handleDoubleClick(QListWidgetItem *item)
@@ -205,16 +210,16 @@
 
 void SymbolPalette::handleDeleteItem()
 {
-       if (m_item != nullptr)
-       {
-               if (m_doc->docPatterns.contains(m_item->text()))
-               {
-                       m_doc->removePattern(m_item->text());
-                       updateSymbolList();
-                       m_doc->regionsChanged()->update(QRect());
-               }
-               m_item = nullptr;
-       }
+       if (m_item == nullptr)
+               return;
+
+       if (m_doc->docPatterns.contains(m_item->text()))
+       {
+               m_doc->removePattern(m_item->text());
+               updateSymbolList();
+               m_doc->regionsChanged()->update(QRect());
+       }
+       m_item = nullptr;
 }
 
 void SymbolPalette::editingStart(QStringList names)

Modified: trunk/Scribus/scribus/ui/symbolpalette.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=25114&path=/trunk/Scribus/scribus/ui/symbolpalette.h
==============================================================================
--- trunk/Scribus/scribus/ui/symbolpalette.h    (original)
+++ trunk/Scribus/scribus/ui/symbolpalette.h    Thu Jun 30 22:05:56 2022
@@ -53,7 +53,7 @@
        ~SymbolView() {};
 
 public slots:
-       void HandleContextMenu(QPoint p);
+       void handleContextMenu(QPoint p);
        void changeDisplay();
 
 protected:
@@ -77,6 +77,7 @@
 public:
        SymbolPalette(QWidget* parent);
        ~SymbolPalette() {};
+
        void setMainWindow(ScribusMainWindow *mw);
        void setDoc(ScribusDoc *);
        void unsetDoc();
@@ -85,7 +86,7 @@
        void updateSymbolList();
 
 public slots:
-       void handleContextMenue(QPoint p);
+       void handleContextMenu(QPoint p);
        void handleDoubleClick(QListWidgetItem *item);
        void handleEditItem();
        void handleDeleteItem();
@@ -99,12 +100,12 @@
        void objectDropped();
 
 protected:
-       SymbolView *SymbolViewWidget;
-       QVBoxLayout* PaletteLayout;
-       ScribusDoc *m_doc;
-       ScribusMainWindow *m_scMW;
+       SymbolView *SymbolViewWidget { nullptr };
+       QVBoxLayout* PaletteLayout { nullptr };
+       ScribusDoc *m_doc { nullptr };
+       ScribusMainWindow *m_scMW { nullptr };
        QStringList editItemNames;
-       QListWidgetItem *m_item;
+       QListWidgetItem *m_item { nullptr };
 
        void changeEvent(QEvent *e) override;
 };


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to