diff --git a/CMakeLists.txt b/CMakeLists.txt index f9299677a..fe680ec05 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,8 @@ if(KDE_PLATFORM_FEATURE_BINARY_COMPATIBLE_FEATURE_REDUCTION) set(PLASMA_NO_SOLID TRUE) set(PLASMA_NO_KIO TRUE) set(PLASMA_NO_PACKAGEKIT TRUE) + set(PLASMA_NO_KUTILS TRUE) + set(PLASMA_NO_GLOBAL_SHORTCUTS TRUE) endif(KDE_PLATFORM_FEATURE_BINARY_COMPATIBLE_FEATURE_REDUCTION) if(NOT Q_WS_X11) @@ -18,7 +20,7 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${KDE4_KDEUI_INCLUDES} ${CMAKE_SOURCE_DIR}/experimental/libkdeclarative ${CMAKE_BINARY_DIR}/experimental/libkdeclarative - ${CMAKE_SOURCE_DIR}/threadweaver/ + ${CMAKE_SOURCE_DIR}/threadweaver ${CMAKE_SOURCE_DIR}/plasma/extenders ${CMAKE_SOURCE_DIR}/plasma/remote ${CMAKE_SOURCE_DIR}/plasma/private/qtjolie-branch/qtjolie @@ -47,10 +49,17 @@ if(NOT PLASMA_NO_SOLID) set(PLASMA_EXTRA_LIBS ${PLASMA_EXTRA_LIBS} ${KDE4_SOLID_LIBS}) endif(NOT PLASMA_NO_SOLID) +<<<<<<< HEAD if(NOT PLASMA_NO_PACKAGEKIT) add_definitions(-DPLASMA_ENABLE_PACKAGEKIT_SUPPORT=1) set(PLASMA_EXTRA_LIBS ${PLASMA_EXTRA_LIBS} ${QT_QTDBUS_LIBRARY}) endif(NOT PLASMA_NO_PACKAGEKIT) +======= +if (NOT PLASMA_NO_KUTILS) + include_directories(${CMAKE_SOURCE_DIR}/kutils) + set(PLASMA_EXTRA_LIBS ${PLASMA_EXTRA_LIBS} ${KDE4_KUTILS_LIBS}) +endif(NOT PLASMA_NO_KUTILS) +>>>>>>> origin/KDE/4.7 if(QCA2_FOUND) include_directories(${QCA2_INCLUDE_DIR}) @@ -272,7 +281,7 @@ kde4_add_library(plasma ${LIBRARY_TYPE} ${plasma_LIB_SRCS}) #add kdeclarative after the 4.7 release target_link_libraries(plasma ${QT_QTUITOOLS_LIBRARY} ${QT_QTWEBKIT_LIBRARY} ${QT_QTSCRIPT_LIBRARY} ${QT_QTNETWORK_LIBRARY} ${QT_QTXML_LIBRARY} ${QT_QTSQL_LIBRARY} ${QT_QTDECLARATIVE_LIBRARY} - ${KDE4_KDEUI_LIBS} kdnssd threadweaver ${PLASMA_EXTRA_LIBS}) + ${KDE4_KDEUI_LIBS} ${KDE4_KDNSSD_LIBS} ${KDE4_THREADWEAVER_LIBS} ${PLASMA_EXTRA_LIBS}) if(QCA2_FOUND) target_link_libraries(plasma ${QCA2_LIBRARIES}) diff --git a/applet.cpp b/applet.cpp index b78153e95..99671b62d 100644 --- a/applet.cpp +++ b/applet.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include #include #include @@ -65,6 +66,13 @@ #include #include +#ifndef PLASMA_NO_KUTILS +#include +#include +#else +#include +#endif + #ifndef PLASMA_NO_SOLID #include #endif @@ -1882,22 +1890,62 @@ void Applet::showConfigurationInterface() } d->publishUI.publishCheckbox = 0; - if (d->package && d->configLoader) { + if (d->package) { KConfigDialog *dialog = 0; - QString uiFile = d->package->filePath("mainconfigui"); - if (!uiFile.isEmpty()) { + const QString uiFile = d->package->filePath("mainconfigui"); + KDesktopFile df(d->package->path() + "/metadata.desktop"); + const QStringList kcmPlugins = df.desktopGroup().readEntry("X-Plasma-ConfigPlugins", QStringList()); + if (!uiFile.isEmpty() || !kcmPlugins.isEmpty()) { + KConfigSkeleton *configLoader = d->configLoader ? d->configLoader : new KConfigSkeleton(0); + dialog = new AppletConfigDialog(0, d->configDialogId(), configLoader); + + dialog->setWindowTitle(d->configWindowTitle()); + dialog->setAttribute(Qt::WA_DeleteOnClose, true); + bool hasPages = false; + QFile f(uiFile); QUiLoader loader; QWidget *w = loader.load(&f); if (w) { - dialog = new AppletConfigDialog(0, d->configDialogId(), d->configLoader); - dialog->setWindowTitle(d->configWindowTitle()); - dialog->setAttribute(Qt::WA_DeleteOnClose, true); dialog->addPage(w, i18n("Settings"), icon(), i18n("%1 Settings", name())); + hasPages = true; + } + + foreach (const QString &kcm, kcmPlugins) { +#ifndef PLASMA_NO_KUTILS + KCModuleProxy *module = new KCModuleProxy(kcm); + if (module->realModule()) { + dialog->addPage(module, module->moduleInfo().moduleName(), module->moduleInfo().icon()); + hasPages = true; + } else { + delete module; + } +#else + KService::Ptr service = KService::serviceByStorageId(kcm); + if (service) { + QString error; + KCModule *module = service->createInstance(dialog, QVariantList(), &error); + if (module) { + connect(module, SIGNAL(changed(bool)), dialog, SLOT(settingsModified(bool))); + dialog->addPage(module, service->name(), service->icon()); + hasPages = true; + } else { +#ifndef NDEBUG + kDebug() << "failed to load kcm" << kcm << "for" << name(); +#endif + } + } +#endif + } + + if (hasPages) { d->addGlobalShortcutsPage(dialog); d->addPublishPage(dialog); dialog->show(); + } else { + delete dialog; + dialog = 0; } } @@ -1987,6 +2035,7 @@ void AppletPrivate::addStandardConfigurationPages(KConfigDialog *dialog) void AppletPrivate::addGlobalShortcutsPage(KConfigDialog *dialog) { +#ifndef PLASMA_NO_GLOBAL_SHORTCUTS if (isContainment) { return; } @@ -2006,6 +2055,7 @@ void AppletPrivate::addGlobalShortcutsPage(KConfigDialog *dialog) QObject::connect(dialog, SIGNAL(applyClicked()), q, SLOT(configDialogFinished()), Qt::UniqueConnection); QObject::connect(dialog, SIGNAL(okClicked()), q, SLOT(configDialogFinished()), Qt::UniqueConnection); +#endif } void AppletPrivate::addPublishPage(KConfigDialog *dialog) diff --git a/config-plasma.h.cmake b/config-plasma.h.cmake index 5edfe18a3..936ab3a72 100644 --- a/config-plasma.h.cmake +++ b/config-plasma.h.cmake @@ -5,4 +5,6 @@ #cmakedefine PLASMA_NO_KNEWSTUFF #cmakedefine PLASMA_NO_SOLID #cmakedefine PLASMA_NO_KIO +#cmakedefine PLASMA_NO_KUTILS +#cmakedefine PLASMA_NO_GLOBAL_SHORTCUTS diff --git a/private/focusindicator.cpp b/private/focusindicator.cpp index f24217e05..1d0744fdd 100644 --- a/private/focusindicator.cpp +++ b/private/focusindicator.cpp @@ -304,6 +304,18 @@ void FocusIndicator::syncGeometry() } } +void FocusIndicator::setFrameSvg(FrameSvg *frameSvg) +{ + if (m_background != frameSvg) { + m_background = frameSvg; + } +} + +FrameSvg *FocusIndicator::frameSvg() const +{ + return m_background; +} + } #include diff --git a/private/focusindicator_p.h b/private/focusindicator_p.h index 9ac9e12aa..12a81d088 100644 --- a/private/focusindicator_p.h +++ b/private/focusindicator_p.h @@ -43,6 +43,9 @@ public: void animateVisibility(const bool visible); void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + void setFrameSvg(FrameSvg *svg); + FrameSvg *frameSvg() const; + protected: bool eventFilter(QObject *watched, QEvent *event); void resizeEvent(QGraphicsSceneResizeEvent *event); diff --git a/widgets/combobox.cpp b/widgets/combobox.cpp index 0de46d03e..48a492346 100644 --- a/widgets/combobox.cpp +++ b/widgets/combobox.cpp @@ -56,6 +56,7 @@ public: FrameSvg *background; FrameSvg *lineEditBackground; + FocusIndicator *focusIndicator; int animId; qreal opacity; QRectF activeRect; @@ -99,6 +100,13 @@ void ComboBoxPrivate::syncBorders() q->setFont(Theme::defaultTheme()->font(Theme::DefaultFont)); customFont = false; } + + if (q->nativeWidget()->isEditable()) { + focusIndicator->setFrameSvg(lineEditBackground); + } else { + focusIndicator->setFrameSvg(background); + } + focusIndicator->setFlag(QGraphicsItem::ItemStacksBehindParent, !q->nativeWidget()->isEditable() || !lineEditBackground->hasElement("hint-focus-over-base")); } @@ -119,7 +127,7 @@ ComboBox::ComboBox(QGraphicsWidget *parent) d->style = Style::sharedStyle(); - new FocusIndicator(this, d->background); + d->focusIndicator = new FocusIndicator(this, d->background); setNativeWidget(new KComboBox); connect(d->background, SIGNAL(repaintNeeded()), SLOT(syncBorders())); d->initTheming(); diff --git a/widgets/declarativewidget.cpp b/widgets/declarativewidget.cpp index 9ad2a436c..878164efa 100644 --- a/widgets/declarativewidget.cpp +++ b/widgets/declarativewidget.cpp @@ -94,13 +94,14 @@ void DeclarativeWidgetPrivate::execute(const QString &fileName) return; } - component->loadUrl(fileName); - KDeclarative kdeclarative; kdeclarative.setDeclarativeEngine(engine); kdeclarative.initialize(); //binds things like kconfig and icons kdeclarative.setupBindings(); + + component->loadUrl(fileName); + scriptEngine = kdeclarative.scriptEngine(); registerDataEngineMetaTypes(scriptEngine); @@ -194,9 +195,6 @@ DeclarativeWidget::DeclarativeWidget(QGraphicsWidget *parent) d->engine = new QDeclarativeEngine(this); d->engine->setNetworkAccessManagerFactory(new DeclarativeNetworkAccessManagerFactory); - foreach(const QString &importPath, KGlobal::dirs()->findDirs("module", "imports")) { - d->engine->addImportPath(importPath); - } d->component = new QDeclarativeComponent(d->engine, this); } diff --git a/widgets/lineedit.cpp b/widgets/lineedit.cpp index 9842379b2..708ef3a70 100644 --- a/widgets/lineedit.cpp +++ b/widgets/lineedit.cpp @@ -64,7 +64,10 @@ LineEdit::LineEdit(QGraphicsWidget *parent) d->background->setImagePath("widgets/lineedit"); d->background->setCacheAllRenderedFrames(true); - new FocusIndicator(this, d->background); + FocusIndicator *indicator = new FocusIndicator(this, d->background); + if (d->background->hasElement("hint-focus-over-base")) { + indicator->setFlag(QGraphicsItem::ItemStacksBehindParent, false); + } setNativeWidget(new KLineEdit); } diff --git a/widgets/spinbox.cpp b/widgets/spinbox.cpp index d76f7c459..bacdabdca 100644 --- a/widgets/spinbox.cpp +++ b/widgets/spinbox.cpp @@ -76,6 +76,9 @@ SpinBox::SpinBox(QGraphicsWidget *parent) d->background->setImagePath("widgets/lineedit"); d->background->setCacheAllRenderedFrames(true); + if (d->background->hasElement("hint-focus-over-base")) { + d->focusIndicator->setFlag(QGraphicsItem::ItemStacksBehindParent, false); + } d->style = Plasma::Style::sharedStyle(); native->setStyle(d->style.data());