summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKatja Marttila <katja.marttila@qt.io>2020-08-25 13:00:58 +0300
committerKatja Marttila <katja.marttila@qt.io>2020-08-26 11:05:24 +0300
commiteedb0ee312c092a623f5e55bcaf94788290161bb (patch)
tree33b268d829e7627db06b935272a8c5fb4f97c996 /src
parent2efc27fc698e18afc98f1c414e5519cf455d95c2 (diff)
Fix crash when fetching categories
Component scripts are re-evaluated when new categories are fetched. Remove refereces to already added custom widgets from pages as those are re-added when scripts are re-evaluated. Task-number: QTIFW-1928 Change-Id: Iad52232920eaf3859d710d6fe06e80eeee90797d Reviewed-by: Arttu Tarkiainen <arttu.tarkiainen@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/libs/installer/packagemanagergui.cpp18
-rw-r--r--src/libs/installer/packagemanagergui.h1
2 files changed, 19 insertions, 0 deletions
diff --git a/src/libs/installer/packagemanagergui.cpp b/src/libs/installer/packagemanagergui.cpp
index 26af00bdc..8c0877d3e 100644
--- a/src/libs/installer/packagemanagergui.cpp
+++ b/src/libs/installer/packagemanagergui.cpp
@@ -828,6 +828,12 @@ void PackageManagerGui::wizardWidgetInsertionRequested(QWidget *widget,
void PackageManagerGui::wizardWidgetRemovalRequested(QWidget *widget)
{
Q_ASSERT(widget);
+
+ const QList<int> pages = pageIds();
+ foreach (int id, pages) {
+ PackageManagerPage *managerPage = qobject_cast<PackageManagerPage *>(page(id));
+ managerPage->removeCustomWidget(widget);
+ }
widget->setParent(nullptr);
packageManagerCore()->controlScriptEngine()->removeFromGlobalObject(widget);
packageManagerCore()->componentScriptEngine()->removeFromGlobalObject(widget);
@@ -1357,6 +1363,18 @@ bool PackageManagerPage::validatePage()
}
/*!
+ \internal
+*/
+void PackageManagerPage::removeCustomWidget(const QWidget *widget)
+{
+ for (auto it = m_customWidgets.begin(); it != m_customWidgets.end();) {
+ if (it.value() == widget)
+ it = m_customWidgets.erase(it);
+ else
+ ++it;
+ }
+}
+/*!
Inserts \a widget at the position specified by \a offset in relation to
another widget specified by \a siblingName. The default position is directly
behind the sibling.
diff --git a/src/libs/installer/packagemanagergui.h b/src/libs/installer/packagemanagergui.h
index b266b1109..fc0718be4 100644
--- a/src/libs/installer/packagemanagergui.h
+++ b/src/libs/installer/packagemanagergui.h
@@ -178,6 +178,7 @@ public:
bool settingsButtonRequested() const { return m_needsSettingsButton; }
void setSettingsButtonRequested(bool request) { m_needsSettingsButton = request; }
+ void removeCustomWidget(const QWidget *widget);
signals:
void entered();