summaryrefslogtreecommitdiffstats
path: root/scribus/checkDocument.cpp
diff options
context:
space:
mode:
authorjghali <jghali@11d20701-8431-0410-a711-e3c959e3b870>2012-01-25 22:59:27 +0000
committerjghali <jghali@11d20701-8431-0410-a711-e3c959e3b870>2012-01-25 22:59:27 +0000
commita88ef49ae198dbc010b181780f8a5afe043beb7e (patch)
tree33d4b980dc60e99981d352f2e01777b0100c153a /scribus/checkDocument.cpp
parent98a30cc8b97ed2f16cc15742327ae8ea732fc9a6 (diff)
downloadscribus-a88ef49ae198dbc010b181780f8a5afe043beb7e.tar.gz
scribus-a88ef49ae198dbc010b181780f8a5afe043beb7e.tar.xz
scribus-a88ef49ae198dbc010b181780f8a5afe043beb7e.zip
#10537 : crash when fixing multiple errors during PDF Pre-Flight verifier
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17240 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/checkDocument.cpp')
-rw-r--r--scribus/checkDocument.cpp66
1 files changed, 32 insertions, 34 deletions
diff --git a/scribus/checkDocument.cpp b/scribus/checkDocument.cpp
index 77c3da3..9a5a71a 100644
--- a/scribus/checkDocument.cpp
+++ b/scribus/checkDocument.cpp
@@ -197,26 +197,42 @@ void CheckDocument::slotSelect(QTreeWidgetItem* ite)
{
if (itemMap.contains(ite))
{
+ // #10537 Check item has not been destroyed before requesting its selection
+ if (itemMap[ite].isNull())
+ return;
ScCore->primaryMainWindow()->closeActiveWindowMasterPageEditor();
- emit selectElement(m_Doc->DocItems.at(itemMap[ite])->OwnPage, itemMap[ite]);
+ emit selectElement(itemMap[ite]->OwnPage, itemMap[ite]->ItemNr);
return;
}
if (pageMap.contains(ite))
{
+ // #10537 Get page index from pointer in case user has deleted a page
+ // after preflight has been run
+ int pageIndex = m_Doc->DocPages.indexOf(pageMap[ite]);
+ if (pageIndex < 0)
+ return;
ScCore->primaryMainWindow()->closeActiveWindowMasterPageEditor();
- emit selectPage(pageMap[ite]);
+ emit selectPage(pageIndex);
return;
}
if (masterPageMap.contains(ite))
{
- emit selectMasterPage(masterPageMap[ite]);
+ // #10537 Get page index from pointer in case user has deleted a page
+ // after preflight has been run
+ int pageIndex = m_Doc->MasterPages.indexOf(masterPageMap[ite]);
+ if (pageIndex < 0)
+ return;
+ emit selectMasterPage(masterPageMap[ite]->pageName());
return;
}
if (masterPageItemMap.contains(ite))
{
+ // #10537 Check item has not been destroyed before requesting its selection
+ if (masterPageItemMap[ite].isNull())
+ return;
if (!m_Doc->masterPageMode())
- emit selectMasterPage(m_Doc->MasterItems.at(masterPageItemMap[ite])->OnMasterPage);
- emit selectElement(-1, masterPageItemMap[ite]);
+ emit selectMasterPage(masterPageItemMap[ite]->OnMasterPage);
+ emit selectElement(-1, masterPageItemMap[ite]->ItemNr);
return;
}
}
@@ -454,7 +470,7 @@ void CheckDocument::buildErrorList(ScribusDoc *doc)
hasError = false;
pageGraveError = false;
QTreeWidgetItem * page = new QTreeWidgetItem( masterPageRootItem);//, pagep );
- masterPageMap.insert(page, doc->MasterPages.at(mPage)->pageName());
+ masterPageMap.insert(page, doc->MasterPages.at(mPage));
// pagep = page;
QMap<int, errorCodes>::Iterator masterItemErrorsIt;
for (masterItemErrorsIt = doc->masterItemErrors.begin();
@@ -466,7 +482,7 @@ void CheckDocument::buildErrorList(ScribusDoc *doc)
{
hasError = true;
QTreeWidgetItem * object = new QTreeWidgetItem( page);
- masterPageItemMap.insert(object, doc->MasterItems.at(masterItemErrorsIt.key())->ItemNr);
+ masterPageItemMap.insert(object, doc->MasterItems.at(masterItemErrorsIt.key()));
object->setText(COLUMN_ITEM, doc->MasterItems.at(masterItemErrorsIt.key())->itemName());
errorCodes::Iterator it3;
if (masterItemErrorsIt.value().count() == 1)
@@ -483,19 +499,13 @@ void CheckDocument::buildErrorList(ScribusDoc *doc)
}
object->setExpanded( true );
}
- if (itemError)
- object->setIcon(COLUMN_ITEM, graveError );
- else
- object->setIcon(COLUMN_ITEM, onlyWarning );
+ object->setIcon(COLUMN_ITEM, itemError ? graveError : onlyWarning);
}
}
if (hasError)
{
++mpErrorCount;
- if (pageGraveError)
- page->setIcon(COLUMN_ITEM, graveError );
- else
- page->setIcon(COLUMN_ITEM, onlyWarning );
+ page->setIcon(COLUMN_ITEM, pageGraveError ? graveError : onlyWarning);
page->setExpanded( true );
}
else
@@ -513,7 +523,7 @@ void CheckDocument::buildErrorList(ScribusDoc *doc)
hasError = false;
pageGraveError = false;
QTreeWidgetItem * page = new QTreeWidgetItem( reportDisplay);//, pagep );
- pageMap.insert(page, aPage);
+ pageMap.insert(page, doc->DocPages.at(aPage));
// pagep = page;
QMap<int, errorCodes>::Iterator docItemErrorsIt;
for (docItemErrorsIt = doc->docItemErrors.begin();
@@ -526,7 +536,7 @@ void CheckDocument::buildErrorList(ScribusDoc *doc)
itemError = false;
QTreeWidgetItem * object = new QTreeWidgetItem(page);
object->setText(COLUMN_ITEM, doc->DocItems.at(docItemErrorsIt.key())->itemName());
- itemMap.insert(object, doc->DocItems.at(docItemErrorsIt.key())->ItemNr);
+ itemMap.insert(object, doc->DocItems.at(docItemErrorsIt.key()));
errorCodes::Iterator it3;
if (docItemErrorsIt.value().count() == 1)
{
@@ -542,18 +552,12 @@ void CheckDocument::buildErrorList(ScribusDoc *doc)
}
object->setExpanded( true );
}
- if (itemError)
- object->setIcon(COLUMN_ITEM, graveError );
- else
- object->setIcon(COLUMN_ITEM, onlyWarning );
+ object->setIcon(COLUMN_ITEM, itemError ? graveError : onlyWarning);
}
}
if (hasError)
{
- if (pageGraveError)
- page->setIcon(COLUMN_ITEM, graveError );
- else
- page->setIcon(COLUMN_ITEM, onlyWarning );
+ page->setIcon(COLUMN_ITEM, itemError ? graveError : onlyWarning);
page->setExpanded( true );
}
else
@@ -590,7 +594,7 @@ void CheckDocument::buildErrorList(ScribusDoc *doc)
hasError = true;
QTreeWidgetItem * object = new QTreeWidgetItem(freeItem);
object->setText(0, doc->DocItems.at(freeItemsErrorsIt.key())->itemName());
- itemMap.insert(object, doc->DocItems.at(freeItemsErrorsIt.key())->ItemNr);
+ itemMap.insert(object, doc->DocItems.at(freeItemsErrorsIt.key()));
errorCodes::Iterator it3;
if (freeItemsErrorsIt.value().count() == 1)
{
@@ -606,18 +610,12 @@ void CheckDocument::buildErrorList(ScribusDoc *doc)
}
object->setExpanded( true );
}
- if (pageGraveError)
- object->setIcon(COLUMN_ITEM, graveError );
- else
- object->setIcon(COLUMN_ITEM, onlyWarning );
+ object->setIcon(COLUMN_ITEM, pageGraveError ? graveError : onlyWarning);
}
}
if (hasError)
{
- if (pageGraveError)
- freeItem->setIcon(COLUMN_ITEM, graveError );
- else
- freeItem->setIcon(COLUMN_ITEM, onlyWarning );
+ freeItem->setIcon(COLUMN_ITEM, pageGraveError ? graveError : onlyWarning );
freeItem->setExpanded( true );
}
else