Hello community, here is the log from the commit of package plasma5-desktop for openSUSE:Factory checked in at 2015-03-16 09:31:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/plasma5-desktop (Old) and /work/SRC/openSUSE:Factory/.plasma5-desktop.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "plasma5-desktop" Changes: -------- --- /work/SRC/openSUSE:Factory/plasma5-desktop/plasma5-desktop.changes 2015-03-01 15:06:07.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.plasma5-desktop.new/plasma5-desktop.changes 2015-03-16 09:31:44.000000000 +0100 @@ -1,0 +2,15 @@ +Sat Mar 7 22:38:11 UTC 2015 - [email protected] + +- Added patches from upstream: + Let-kcmkded-also-handle-kded-modules-that-use-JSON-metadata.patch, + 0001-Fix-the-no-checkbox-being-checked-for-displayText-co.patch + (kde#344711), + 0003-Fix-Bug-266760-The-autostart-kcm-doesn-t-show-the-co.patch + (kde#266760), + 0004-Fix-double-click.patch, + 0005-Fix-tabbar-not-showing-up-when-switching-to-favorite.patch + (kde#343524) + and 0006-Close-config-dialog-when-panel-gets-locked-from-cont.patch + (kde#345068) + +------------------------------------------------------------------- New: ---- 0001-Fix-the-no-checkbox-being-checked-for-displayText-co.patch 0003-Fix-Bug-266760-The-autostart-kcm-doesn-t-show-the-co.patch 0004-Fix-double-click.patch 0005-Fix-tabbar-not-showing-up-when-switching-to-favorite.patch 0006-Close-config-dialog-when-panel-gets-locked-from-cont.patch Let-kcmkded-also-handle-kded-modules-that-use-JSON-metadata.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ plasma5-desktop.spec ++++++ --- /var/tmp/diff_new_pack.hzGhKZ/_old 2015-03-16 09:31:45.000000000 +0100 +++ /var/tmp/diff_new_pack.hzGhKZ/_new 2015-03-16 09:31:45.000000000 +0100 @@ -25,6 +25,14 @@ Url: http://www.kde.org/ Source: plasma-desktop-%{version}.tar.xz Source99: %{name}-rpmlintrc +# PATCHES 100-1000 and above are from upstream 5.2 branch +Patch100: 0001-Fix-the-no-checkbox-being-checked-for-displayText-co.patch +Patch101: 0003-Fix-Bug-266760-The-autostart-kcm-doesn-t-show-the-co.patch +Patch102: 0004-Fix-double-click.patch +Patch103: 0005-Fix-tabbar-not-showing-up-when-switching-to-favorite.patch +Patch104: 0006-Close-config-dialog-when-panel-gets-locked-from-cont.patch +# PATCHES 1000 and above are from upstream master/5.3 branch +Patch1000: Let-kcmkded-also-handle-kded-modules-that-use-JSON-metadata.patch BuildRequires: attica-qt5-devel BuildRequires: baloo5-devel >= %{version} BuildRequires: boost-devel @@ -103,6 +111,12 @@ %lang_package %prep %setup -q -n plasma-desktop-%{version} +%patch100 -p1 +%patch101 -p1 +%patch102 -p1 +%patch103 -p1 +%patch104 -p1 +%patch1000 -p1 %build %cmake_kf5 -d build -- -DCMAKE_INSTALL_LOCALEDIR=share/locale/kf5 ++++++ 0001-Fix-the-no-checkbox-being-checked-for-displayText-co.patch ++++++ >From c50e4b987dc365d741880794ee6f2924065a87a6 Mon Sep 17 00:00:00 2001 From: Bhushan Shah <[email protected]> Date: Mon, 2 Mar 2015 08:50:29 +0530 Subject: [PATCH 1/6] Fix the no checkbox being checked for displayText config BUG: 344711 FIXED-IN: Plasma/5.2 --- applets/pager/package/contents/ui/configGeneral.qml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/applets/pager/package/contents/ui/configGeneral.qml b/applets/pager/package/contents/ui/configGeneral.qml index 1915b764a27d20282f0dda42480ac8e34d1b5f12..1004c8ef2423a0cdaef962478e9900f1855c0eb6 100644 --- a/applets/pager/package/contents/ui/configGeneral.qml +++ b/applets/pager/package/contents/ui/configGeneral.qml @@ -66,7 +66,10 @@ Item { } } - Component.onCompleted: cfg_currentDesktopSelectedChanged() + Component.onCompleted: { + cfg_currentDesktopSelectedChanged(); + cfg_displayedTextChanged(); + } QtControls.ExclusiveGroup { id: displayedTextGroup -- 2.3.1 ++++++ 0003-Fix-Bug-266760-The-autostart-kcm-doesn-t-show-the-co.patch ++++++ >From ecbefe504d792aa5700451e8987ec05fdae2bf1d Mon Sep 17 00:00:00 2001 From: Montel Laurent <[email protected]> Date: Sat, 7 Mar 2015 15:20:34 +0100 Subject: [PATCH 3/6] Fix Bug 266760 - The autostart kcm doesn't show the correct name immediately after "adding program" FIXED-IN: Plasma-5.2.1 BUG: 266760 --- kcms/autostart/autostart.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kcms/autostart/autostart.cpp b/kcms/autostart/autostart.cpp index e948087c6116cb32eae65a2a711f50d47f5f62f6..fd41fc82d098737a51b2253338bdddb4ff4f5664 100644 --- a/kcms/autostart/autostart.cpp +++ b/kcms/autostart/autostart.cpp @@ -302,8 +302,9 @@ void Autostart::slotAddProgram() if ( dlg.exec() != QDialog::Accepted ) return; } + KDesktopFile newConf(desktopTemplate.path()); DesktopStartItem * item = new DesktopStartItem( desktopPath, m_programItem,this ); - addItem( item, service->name(), m_pathName[0], service->exec() , false); + addItem( item, service->name(), m_pathName[0], newConf.desktopGroup().readEntry("Exec") , false); } void Autostart::slotAddScript() -- 2.3.1 ++++++ 0004-Fix-double-click.patch ++++++ >From 429d1bb6bfb32c4a4ad3e9e682513ab2625c823c Mon Sep 17 00:00:00 2001 From: Montel Laurent <[email protected]> Date: Sun, 8 Mar 2015 09:09:01 +0100 Subject: [PATCH 4/6] Fix double click --- kcms/autostart/autostart.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kcms/autostart/autostart.cpp b/kcms/autostart/autostart.cpp index fd41fc82d098737a51b2253338bdddb4ff4f5664..b102323a3ca6fd8e8238615e534ae8a701ac5590 100644 --- a/kcms/autostart/autostart.cpp +++ b/kcms/autostart/autostart.cpp @@ -353,14 +353,14 @@ void Autostart::slotRemoveCMD() void Autostart::slotEditCMD(QTreeWidgetItem* ent) { + if (!ent) return; - AutoStartItem *entry = dynamic_cast<AutoStartItem*>( ent ); - if ( entry ) + DesktopStartItem *desktopEntry = dynamic_cast<DesktopStartItem*>( ent ); + if ( desktopEntry ) { - const KFileItem kfi = KFileItem( KFileItem::Unknown, KFileItem::Unknown, QUrl( entry->fileName() ), true ); + const KFileItem kfi = KFileItem( KFileItem::Unknown, KFileItem::Unknown, QUrl( desktopEntry->fileName() ), true ); if (! slotEditCMD( kfi )) return; - DesktopStartItem *desktopEntry = dynamic_cast<DesktopStartItem*>( entry ); if (desktopEntry) { KService service(desktopEntry->fileName().path()); addItem( desktopEntry, service.name(), m_pathName.value(m_paths.indexOf(desktopEntry->fileName().adjusted(QUrl::RemoveFilename).toString())), service.exec(),false ); -- 2.3.1 ++++++ 0005-Fix-tabbar-not-showing-up-when-switching-to-favorite.patch ++++++ >From 336094f43d82d83f374116862a0f568fe9092224 Mon Sep 17 00:00:00 2001 From: Bhushan Shah <[email protected]> Date: Mon, 9 Mar 2015 21:04:09 +0530 Subject: [PATCH 5/6] Fix tabbar not showing up when switching to favorites from search when we are in search view tabbar is not visible and immediatly switching to favorites causes no tabbar. BUG: 343524 FIXED-IN: 5.2.2 --- applets/kickoff/package/contents/ui/FullRepresentation.qml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/applets/kickoff/package/contents/ui/FullRepresentation.qml b/applets/kickoff/package/contents/ui/FullRepresentation.qml index d97898775ae679ee2fa39f53064c8f9423b24b53..0ba18e610948fb022a2064c37f7316c4fbfe702c 100644 --- a/applets/kickoff/package/contents/ui/FullRepresentation.qml +++ b/applets/kickoff/package/contents/ui/FullRepresentation.qml @@ -493,6 +493,10 @@ Item { target: root Keys.forwardTo: [tabBar.layout] } + PropertyChanges { + target: tabBar + visible: true + } }, State { name: "Applications" @@ -500,6 +504,10 @@ Item { target: root Keys.forwardTo: [root] } + PropertyChanges { + target: tabBar + visible: true + } }, State { name: "Search" -- 2.3.1 ++++++ 0006-Close-config-dialog-when-panel-gets-locked-from-cont.patch ++++++ >From 113ea3c638b910c3ac9f411a2e41a88110650ab4 Mon Sep 17 00:00:00 2001 From: Bhushan Shah <[email protected]> Date: Thu, 12 Mar 2015 08:59:53 +0530 Subject: [PATCH 6/6] Close config dialog when panel gets locked from context menu BUG: 345068 FIXED-IN: 5.2.2 --- desktoppackage/contents/configuration/PanelConfiguration.qml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/desktoppackage/contents/configuration/PanelConfiguration.qml b/desktoppackage/contents/configuration/PanelConfiguration.qml index 8e2bf3223e5c1dac2d662d79ca01bcfcf0510f8e..a2910c6ea7eb3e37f92612ae3c940c847c278328 100644 --- a/desktoppackage/contents/configuration/PanelConfiguration.qml +++ b/desktoppackage/contents/configuration/PanelConfiguration.qml @@ -60,6 +60,11 @@ PlasmaCore.FrameSvgItem { onMinimumLengthChanged: ruler.minimumLength = panel.minimumLength onMaximumLengthChanged: ruler.maximumLength = panel.maximumLength } + + Connections { + target: plasmoid + onImmutableChanged: configDialog.close() + } //END Connections -- 2.3.1 ++++++ Let-kcmkded-also-handle-kded-modules-that-use-JSON-metadata.patch ++++++ From: Alex Richardson <[email protected]> Date: Tue, 03 Feb 2015 11:32:23 +0000 Subject: Let kcmkded also handle kded modules that use JSON metadata --- Let kcmkded also handle kded modules that use JSON metadata REVIEW: 121738 --- --- a/kcms/kded/kcmkded.cpp +++ b/kcms/kded/kcmkded.cpp @@ -31,16 +31,17 @@ #include <QLoggingCategory> #include <QDialog> -#include <KConfigGroup> - #include <kaboutdata.h> #include <kdesktopfile.h> #include <kmessagebox.h> #include <kservice.h> #include <kservicetypetrader.h> +#include <KConfigGroup> +#include <KPluginInfo> #include <KPluginFactory> #include <KPluginLoader> +#include <KPluginMetaData> #include <KLocalizedString> K_PLUGIN_FACTORY(KDEDFactory, @@ -153,80 +154,108 @@ } -QString setModuleGroup(const QString &filename) -{ - QString module = filename; - int i = module.lastIndexOf('/'); - if (i != -1) - module = module.mid(i+1); - i = module.lastIndexOf('.'); - if (i != -1) - module = module.left(i); - - return QString("Module-%1").arg(module); -} - -bool KDEDConfig::autoloadEnabled(KConfig *config, const QString &filename) -{ - KConfigGroup cg(config, setModuleGroup(filename)); +QString setModuleGroup(const KPluginMetaData &module) +{ + return QStringLiteral("Module-%1").arg(module.pluginId()); +} + +bool KDEDConfig::autoloadEnabled(KConfig *config, const KPluginMetaData &module) +{ + KConfigGroup cg(config, setModuleGroup(module)); return cg.readEntry("autoload", true); } -void KDEDConfig::setAutoloadEnabled(KConfig *config, const QString &filename, bool b) -{ - KConfigGroup cg(config, setModuleGroup(filename)); +void KDEDConfig::setAutoloadEnabled(KConfig *config, const KPluginMetaData &module, bool b) +{ + KConfigGroup cg(config, setModuleGroup(module)); return cg.writeEntry("autoload", b); } +// This code was copied from kded.cpp +// TODO: move this KCM to the KDED framework and share the code? +static QVector<KPluginMetaData> availableModules() +{ + QVector<KPluginMetaData> plugins = KPluginLoader::findPlugins("kf5/kded"); + QSet<QString> moduleIds; + foreach (const KPluginMetaData &md, plugins) { + moduleIds.insert(md.pluginId()); + } + // also search for old .desktop based kded modules + KPluginInfo::List oldStylePlugins = KPluginInfo::fromServices(KServiceTypeTrader::self()->query("KDEDModule")); + foreach (const KPluginInfo &info, oldStylePlugins) { + if (moduleIds.contains(info.pluginName())) { + qCWarning(KCM_KDED).nospace() << "kded module " << info.pluginName() << " has already been found using " + "JSON metadata, please don't install the now unneeded .desktop file (" << info.entryPath() << ")."; + } else { + qCDebug(KCM_KDED).nospace() << "kded module " << info.pluginName() << " still uses .desktop files (" + << info.entryPath() << "). Please port it to JSON metadata."; + plugins.append(info.toMetaData()); + } + } + return plugins; +} + +// this code was copied from kded.cpp +static bool isModuleLoadedOnDemand(const KPluginMetaData &module) +{ + bool loadOnDemand = true; + // use toVariant() since it could be string or bool in the json and QJsonObject does not convert + QVariant p = module.rawData().value("X-KDE-Kded-load-on-demand").toVariant(); + if (p.isValid() && p.canConvert<bool>() && (p.toBool() == false)) { + loadOnDemand = false; + } + return loadOnDemand; +} + void KDEDConfig::load() { - KConfig kdedrc( "kded5rc", KConfig::NoGlobals ); + KConfig kdedrc("kded5rc", KConfig::NoGlobals); _lvStartup->clear(); _lvLoD->clear(); - KService::List offers = KServiceTypeTrader::self()->query( "KDEDModule" ); QTreeWidgetItem* treeitem = 0L; - for ( KService::List::const_iterator it = offers.constBegin(); - it != offers.constEnd(); ++it) - { - QString servicePath = (*it)->entryPath(); - qCDebug(KCM_KDED) << servicePath; - - const KDesktopFile file(QStandardPaths::GenericDataLocation, "kservices5/" + servicePath ); - const KConfigGroup grp = file.desktopGroup(); + const auto modules = availableModules(); + for (const KPluginMetaData &mod : modules) { + QString servicePath = mod.metaDataFileName(); + + // autoload defaults to false if it is not found + const bool autoload = mod.rawData().value(QStringLiteral("X-KDE-Kded-autoload")).toVariant().toBool(); + const QString dbusModuleName = mod.value(QStringLiteral("X-KDE-DBus-ModuleName")); + qCDebug(KCM_KDED) << "reading kded info from" << servicePath << "autoload =" << autoload << "dbus module name =" << dbusModuleName; + // The logic has to be identical to Kded::initModules. // They interpret X-KDE-Kded-autoload as false if not specified // X-KDE-Kded-load-on-demand as true if not specified - if ( grp.readEntry("X-KDE-Kded-autoload", false) ) { + if (autoload) { treeitem = new QTreeWidgetItem(); - treeitem->setCheckState( StartupUse, autoloadEnabled(&kdedrc, file.name()) ? Qt::Checked : Qt::Unchecked ); - treeitem->setText( StartupService, file.readName() ); - treeitem->setText( StartupDescription, file.readComment() ); - treeitem->setText( StartupStatus, NOT_RUNNING ); - if (grp.hasKey("X-KDE-DBus-ModuleName")) { - treeitem->setData( StartupService, LibraryRole, grp.readEntry("X-KDE-DBus-ModuleName") ); + treeitem->setCheckState(StartupUse, autoloadEnabled(&kdedrc, mod.pluginId()) ? Qt::Checked : Qt::Unchecked); + treeitem->setText(StartupService, mod.name()); + treeitem->setText(StartupDescription, mod.description()); + treeitem->setText(StartupStatus, NOT_RUNNING); + if (!dbusModuleName.isEmpty()) { + treeitem->setData(StartupService, LibraryRole, dbusModuleName); } else { - qCWarning(KCM_KDED) << "X-KDE-DBUS-ModuleName not set for module " << file.readName(); - treeitem->setData( StartupService, LibraryRole, grp.readEntry("X-KDE-Library") ); - } - _lvStartup->addTopLevelItem( treeitem ); - } - else if ( grp.readEntry("X-KDE-Kded-load-on-demand", true) ) { + qCWarning(KCM_KDED) << "X-KDE-DBUS-ModuleName not set for module " << mod.name() << "from file" << mod.metaDataFileName(); + treeitem->setData(StartupService, LibraryRole, mod.fileName()); + } + _lvStartup->addTopLevelItem(treeitem); + } + else if (isModuleLoadedOnDemand(mod)) { treeitem = new QTreeWidgetItem(); - treeitem->setText( OnDemandService, file.readName() ); - treeitem->setText( OnDemandDescription, file.readComment() ); - treeitem->setText( OnDemandStatus, NOT_RUNNING ); - if (grp.hasKey("X-KDE-DBus-ModuleName")) { - treeitem->setData( OnDemandService, LibraryRole, grp.readEntry("X-KDE-DBus-ModuleName") ); + treeitem->setText(OnDemandService, mod.name() ); + treeitem->setText(OnDemandDescription, mod.description()); + treeitem->setText(OnDemandStatus, NOT_RUNNING); + if (!dbusModuleName.isEmpty()) { + treeitem->setData(OnDemandService, LibraryRole, dbusModuleName); } else { - qCWarning(KCM_KDED) << "X-KDE-DBUS-ModuleName not set for module " << file.readName(); - treeitem->setData( OnDemandService, LibraryRole, grp.readEntry("X-KDE-Library") ); - } - _lvLoD->addTopLevelItem( treeitem ); + qCWarning(KCM_KDED) << "X-KDE-DBUS-ModuleName not set for module " << mod.name() << "from file" << mod.metaDataFileName(); + treeitem->setData(OnDemandService, LibraryRole, mod.fileName()); + } + _lvLoD->addTopLevelItem(treeitem); } else { - qCWarning(KCM_KDED) << "kcmkded: Module " << file.readName() << " not loaded on demand or startup! Skipping."; + qCWarning(KCM_KDED) << "kcmkded: Module " << mod.name() << "from file" << mod.metaDataFileName() << " not loaded on demand or startup! Skipping."; } } @@ -246,26 +275,19 @@ { KConfig kdedrc("kded5rc", KConfig::NoGlobals); - KService::List offers = KServiceTypeTrader::self()->query( "KDEDModule" ); - for ( KService::List::const_iterator it = offers.constBegin(); - it != offers.constEnd(); ++it) - { - QString servicePath = (*it)->entryPath(); - qCDebug(KCM_KDED) << servicePath; - - const KDesktopFile file(QStandardPaths::GenericDataLocation, "kservices5/" + servicePath ); - const KConfigGroup grp = file.desktopGroup(); - if (grp.readEntry("X-KDE-Kded-autoload", false)){ - - QString libraryName = grp.readEntry( "X-KDE-Library" ); + const auto modules = availableModules(); + for (const KPluginMetaData &mod : modules) { + qCDebug(KCM_KDED) << "saving settings for kded module" << mod.metaDataFileName(); + // autoload defaults to false if it is not found + const bool autoload = mod.rawData().value(QStringLiteral("X-KDE-Kded-autoload")).toVariant().toBool(); + if (autoload) { + const QString libraryName = mod.fileName(); int count = _lvStartup->topLevelItemCount(); - for( int i = 0; i < count; ++i ) - { - QTreeWidgetItem *treeitem = _lvStartup->topLevelItem( i ); - if ( treeitem->data( StartupService, LibraryRole ).toString() == libraryName ) - { + for(int i = 0; i < count; ++i) { + QTreeWidgetItem *treeitem = _lvStartup->topLevelItem(i); + if ( treeitem->data(StartupService, LibraryRole ).toString() == libraryName) { // we found a match, now compare and see what changed - setAutoloadEnabled( &kdedrc, servicePath, treeitem->checkState( StartupUse ) == Qt::Checked); + setAutoloadEnabled(&kdedrc, mod, treeitem->checkState( StartupUse ) == Qt::Checked); break; } } @@ -275,8 +297,8 @@ emit changed(false); - QDBusInterface kdedInterface( "org.kde.kded5", "/kded", "org.kde.kded5" ); - kdedInterface.call( "reconfigure" ); + QDBusInterface kdedInterface("org.kde.kded5", "/kded", "org.kde.kded5"); + kdedInterface.call("reconfigure"); QTimer::singleShot(0, this, SLOT(slotServiceRunningToggled())); } @@ -310,6 +332,7 @@ KMessageBox::error(this, i18n("Unable to contact KDED.")); return; } + qCDebug(KCM_KDED) << "Loaded kded modules:" << modules; // Initialize int count = _lvLoD->topLevelItemCount(); @@ -470,7 +493,7 @@ if ( reply.value() ) slotServiceRunningToggled(); else - KMessageBox::error(this, "<qt>" + i18n("Unable to stop server <em>%1</em>.", service) + "</qt>"); + KMessageBox::error(this, "<qt>" + i18n("Unable to stop service <em>%1</em>.", service) + "</qt>"); } else { KMessageBox::error(this, "<qt>" + i18n("Unable to stop service <em>%1</em>.<br /><br /><i>Error: %2</i>", --- a/kcms/kded/kcmkded.h +++ b/kcms/kded/kcmkded.h @@ -27,6 +27,7 @@ class QTreeWidget; class QTreeWidgetItem; class KConfig; +class KPluginMetaData; Q_DECLARE_LOGGING_CATEGORY(KCM_KDED) @@ -51,8 +52,8 @@ void slotItemChecked(QTreeWidgetItem *item, int column); void getServiceStatus(); - bool autoloadEnabled(KConfig *config, const QString &filename); - void setAutoloadEnabled(KConfig *config, const QString &filename, bool b); + bool autoloadEnabled(KConfig *config, const KPluginMetaData &filename); + void setAutoloadEnabled(KConfig *config, const KPluginMetaData &filename, bool b); private: QTreeWidget *_lvLoD; -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
