diff --git a/src/kcmultidialog.cpp b/src/kcmultidialog.cpp --- a/src/kcmultidialog.cpp +++ b/src/kcmultidialog.cpp @@ -37,6 +37,8 @@ #include #include #include +#include +#include #include #include @@ -83,19 +85,41 @@ void KCMultiDialogPrivate::_k_slotCurrentPageChanged(KPageWidgetItem *current, KPageWidgetItem *previous) { Q_Q(KCMultiDialog); - // qDebug(); - q->blockSignals(true); - q->setCurrentPage(previous); + KCModuleProxy *currentModule = nullptr; KCModuleProxy *previousModule = nullptr; for (int i = 0; i < modules.count(); ++i) { - if (modules[ i ].item == previous) { - previousModule = modules[ i ].kcm; - break; + if (modules[i].item == previous) { + previousModule = modules[i].kcm; } + if (modules[i].item == current) { + currentModule = modules[i].kcm; + } + } + Q_ASSERT(currentModule); + + if (currentModule->realModule() && currentModule->realModule()->inherits("KCModuleQml")) { + q->layout()->setContentsMargins(0, 0, 0, 0); + q->buttonBox()->setContentsMargins( + q->style()->pixelMetric(QStyle::PM_LayoutLeftMargin), + q->style()->pixelMetric(QStyle::PM_LayoutTopMargin), + q->style()->pixelMetric(QStyle::PM_LayoutRightMargin), + q->style()->pixelMetric(QStyle::PM_LayoutBottomMargin)); + } else { + q->buttonBox()->setContentsMargins(0, 0, 0, 0); + q->layout()->setContentsMargins( + q->style()->pixelMetric(QStyle::PM_LayoutLeftMargin), + q->style()->pixelMetric(QStyle::PM_LayoutTopMargin), + q->style()->pixelMetric(QStyle::PM_LayoutRightMargin), + q->style()->pixelMetric(QStyle::PM_LayoutBottomMargin)); } + q->blockSignals(true); + q->setCurrentPage(previous); + + + if (resolveChanges(previousModule)) { q->setCurrentPage(current); } @@ -426,6 +450,7 @@ KPageWidgetItem *KCMultiDialog::addModule(const KCModuleInfo &moduleInfo, KPageWidgetItem *parentItem, const QStringList &args) { + Q_D(KCMultiDialog); if (!moduleInfo.service()) { return nullptr; } @@ -449,6 +474,12 @@ // qDebug() << moduleInfo.moduleName(); KPageWidgetItem *item = new KPageWidgetItem(moduleScroll, moduleInfo.moduleName()); + KCMultiDialogPrivate::CreatedModule cm; + cm.kcm = kcm; + cm.item = item; + cm.componentNames = moduleInfo.service()->property(QStringLiteral("X-KDE-ParentComponents")).toStringList(); + d->modules.append(cm); + if (qobject_cast(kcm->realModule())) { item->setHeaderVisible(false); } @@ -513,13 +544,6 @@ connect(kcm, SIGNAL(changed(bool)), this, SLOT(_k_clientChanged())); connect(kcm->realModule(), SIGNAL(rootOnlyMessageChanged(bool,QString)), this, SLOT(_k_updateHeader(bool,QString))); - Q_D(KCMultiDialog); - KCMultiDialogPrivate::CreatedModule cm; - cm.kcm = kcm; - cm.item = item; - cm.componentNames = moduleInfo.service()->property(QStringLiteral("X-KDE-ParentComponents")).toStringList(); - d->modules.append(cm); - if (d->modules.count() == 1 || updateCurrentPage) { setCurrentPage(item); d->_k_clientChanged();