diff --git a/kcmkwin/kwindecoration/CMakeLists.txt b/kcmkwin/kwindecoration/CMakeLists.txt index 7d51e979c3..2b4d5ceca1 100644 --- a/kcmkwin/kwindecoration/CMakeLists.txt +++ b/kcmkwin/kwindecoration/CMakeLists.txt @@ -24,7 +24,7 @@ kde4_add_ui_files(kcm_kwindecoration_PART_SRCS ) kde4_add_plugin(kcm_kwindecoration ${kcm_kwindecoration_PART_SRCS}) -target_link_libraries(kcm_kwindecoration ${KDE4_KNEWSTUFF3_LIBS} kdecorations ${QT_QTDECLARATIVE_LIBRARY} ${X11_LIBRARIES}) +target_link_libraries(kcm_kwindecoration ${KDE4_KNEWSTUFF3_LIBS} kdecorations ${KDE4_PLASMA_LIBS} ${QT_QTDECLARATIVE_LIBRARY} ${QT_QTUITOOLS_LIBRARY} ${X11_LIBRARIES}) install(TARGETS kcm_kwindecoration DESTINATION ${PLUGIN_INSTALL_DIR} ) ########### install files ############### diff --git a/kcmkwin/kwindecoration/auroraeconfig.ui b/kcmkwin/kwindecoration/auroraeconfig.ui index 96e006624b..168709b0e4 100644 --- a/kcmkwin/kwindecoration/auroraeconfig.ui +++ b/kcmkwin/kwindecoration/auroraeconfig.ui @@ -6,113 +6,114 @@ 0 0 - 400 - 300 + 384 + 95 - - - QFormLayout::ExpandingFieldsGrow - - - - - Border size: - - - borderSizesCombo - - + + + + + + + Border size: + + + borderSizesCombo + + + + + + + + Tiny + + + + + Normal + + + + + Large + + + + + Very Large + + + + + Huge + + + + + Very Huge + + + + + Oversized + + + + + + + + Button size: + + + buttonSizesCombo + + + + + + + + Tiny + + + + + Normal + + + + + Large + + + + + Very Large + + + + + Huge + + + + + Very Huge + + + + + Oversized + + + + + - - - - - Tiny - - - - - Normal - - - - - Large - - - - - Very Large - - - - - Huge - - - - - Very Huge - - - - - Oversized - - - - - - - - Button size: - - - buttonSizesCombo - - - - - - - - Tiny - - - - - Normal - - - - - Large - - - - - Very Large - - - - - Huge - - - - - Very Huge - - - - - Oversized - - - - - + diff --git a/kcmkwin/kwindecoration/decorationmodel.cpp b/kcmkwin/kwindecoration/decorationmodel.cpp index d62d2f1657..022c80ad0c 100644 --- a/kcmkwin/kwindecoration/decorationmodel.cpp +++ b/kcmkwin/kwindecoration/decorationmodel.cpp @@ -457,4 +457,12 @@ QVariant DecorationModel::readConfig(const QString &themeName, const QString &ke return m_config->group(themeName).readEntry(key, defaultValue); } +void DecorationModel::notifyConfigChanged(const QModelIndex &index) +{ + if (!index.isValid()) { + return; + } + emit configChanged(m_decorations[index.row()].auroraeName); +} + } // namespace KWin diff --git a/kcmkwin/kwindecoration/decorationmodel.h b/kcmkwin/kwindecoration/decorationmodel.h index fe740b19ed..efc6d7ad72 100644 --- a/kcmkwin/kwindecoration/decorationmodel.h +++ b/kcmkwin/kwindecoration/decorationmodel.h @@ -121,6 +121,8 @@ public: Q_INVOKABLE QVariant readConfig(const QString &themeName, const QString &key, const QVariant &defaultValue = QVariant()); + void notifyConfigChanged(const QModelIndex &index); + Q_SIGNALS: void configChanged(QString themeName); public slots: diff --git a/kcmkwin/kwindecoration/kwindecoration.cpp b/kcmkwin/kwindecoration/kwindecoration.cpp index aaa792ec40..ea932705d6 100644 --- a/kcmkwin/kwindecoration/kwindecoration.cpp +++ b/kcmkwin/kwindecoration/kwindecoration.cpp @@ -43,13 +43,16 @@ #include #include #include +#include // KDE #include #include #include #include #include +#include #include +#include #include // KCModule plugin interface @@ -353,10 +356,39 @@ void KWinDecorationModule::slotConfigureDecoration() form->borderSizesCombo->setCurrentIndex(index.data(DecorationModel::BorderSizeRole).toInt()); form->buttonSizesCombo->setCurrentIndex(index.data(DecorationModel::ButtonSizeRole).toInt()); form->closeWindowsDoubleClick->setChecked(index.data(DecorationModel::CloseOnDblClickRole).toBool()); + // in case of QmlDecoration look for a config.ui in the package structure + KConfigDialogManager *configManager = NULL; + if (index.data(DecorationModel::TypeRole).toInt() == DecorationModelData::QmlDecoration) { + const QString packageName = index.data(DecorationModel::AuroraeNameRole).toString(); + const QString uiPath = KStandardDirs::locate("data", "kwin/decorations/" + packageName + "/contents/ui/config.ui"); + const QString configPath = KStandardDirs::locate("data", "kwin/decorations/" + packageName + "/contents/config/main.xml"); + if (!uiPath.isEmpty() && !configPath.isEmpty()) { + // load the KConfigSkeleton + QFile configFile(configPath); + KSharedConfigPtr auroraeConfig = KSharedConfig::openConfig("auroraerc"); + KConfigGroup configGroup = auroraeConfig->group(packageName); + Plasma::ConfigLoader *skeleton = new Plasma::ConfigLoader(&configGroup, &configFile, dlg); + // load the ui file + QUiLoader *loader = new QUiLoader(dlg); + QFile uiFile(uiPath); + uiFile.open(QFile::ReadOnly); + QWidget *customConfigForm = loader->load(&uiFile, form); + uiFile.close(); + form->layout()->addWidget(customConfigForm); + // connect the ui file with the skeleton + configManager = new KConfigDialogManager(customConfigForm, skeleton); + configManager->updateWidgets(); + } + } if (dlg->exec() == KDialog::Accepted) { m_model->setData(index, form->borderSizesCombo->currentIndex(), DecorationModel::BorderSizeRole); m_model->setData(index, form->buttonSizesCombo->currentIndex(), DecorationModel::ButtonSizeRole); m_model->setData(index, form->closeWindowsDoubleClick->isChecked(), DecorationModel::CloseOnDblClickRole); + if (configManager && configManager->hasChanged()) { + // we have a config manager and the settings changed + configManager->updateSettings(); + m_model->notifyConfigChanged(index); + } reload = true; } delete dlg;