Hello community,

here is the log from the commit of package plasma5-workspace for 
openSUSE:Factory checked in at 2016-11-14 20:09:31
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/plasma5-workspace (Old)
 and      /work/SRC/openSUSE:Factory/.plasma5-workspace.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "plasma5-workspace"

Changes:
--------
--- /work/SRC/openSUSE:Factory/plasma5-workspace/plasma5-workspace.changes      
2016-11-10 13:56:32.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.plasma5-workspace.new/plasma5-workspace.changes 
2016-11-14 20:09:33.000000000 +0100
@@ -1,0 +2,18 @@
+Sat Nov 12 21:03:18 UTC 2016 - [email protected]
+
+- Add Look-for-both-json-and-desktop-metadata.patch to fix adding a
+  panel or plasmoid with the new json metadata files
+
+-------------------------------------------------------------------
+Thu Nov 10 12:12:45 UTC 2016 - [email protected]
+
+- Backport several commits for better multiscreen handling:
+  * 0001-taskmanagerrulesrc-Add-Rewrite-Rule-for-Google-chrom.patch
+  * 0002-make-sure-all-outputs-are-known.patch
+  * 0003-Sync-app-config-in-sync-with-applets-config.patch
+  * 0004-Avoid-connecting-to-screen-changed-signals-twice.patch
+  * 0005-Load-screenpool-at-the-same-time-as-we-connect-to-sc.patch
+  * kde#372099,kde#371858,kde#371991,kde#371819,kde#371734
+  * boo#1003438
+
+-------------------------------------------------------------------

New:
----
  0001-taskmanagerrulesrc-Add-Rewrite-Rule-for-Google-chrom.patch
  0002-make-sure-all-outputs-are-known.patch
  0003-Sync-app-config-in-sync-with-applets-config.patch
  0004-Avoid-connecting-to-screen-changed-signals-twice.patch
  0005-Load-screenpool-at-the-same-time-as-we-connect-to-sc.patch
  Look-for-both-json-and-desktop-metadata.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ plasma5-workspace.spec ++++++
--- /var/tmp/diff_new_pack.zG6JDy/_old  2016-11-14 20:09:34.000000000 +0100
+++ /var/tmp/diff_new_pack.zG6JDy/_new  2016-11-14 20:09:34.000000000 +0100
@@ -45,6 +45,18 @@
 Patch100:       
keep-wallpaper-aspect-ratio-wallpaper-on-screen-resolution-change.diff
 # PATCH-FIX-UPSTREAM use-nearest-aspect-ratio-available-wallpaper.diff 
[email protected] -- New distance algorithm to simplify and improve the 
wallpaper selection
 Patch101:       use-nearest-aspect-ratio-available-wallpaper.diff
+# PATCH-FIX-UPSTREAM 
0001-taskmanagerrulesrc-Add-Rewrite-Rule-for-Google-chrom.patch 
[email protected] -- [taskmanagerrulesrc] Add Rewrite Rule for 
Google-chrome
+Patch102:       0001-taskmanagerrulesrc-Add-Rewrite-Rule-for-Google-chrom.patch
+# PATCH-FIX-UPSTREAM 0002-make-sure-all-outputs-are-known.patch 
[email protected] -- make sure all outputs are known
+Patch103:       0002-make-sure-all-outputs-are-known.patch
+# PATCH-FIX-UPSTREAM 0003-Sync-app-config-in-sync-with-applets-config.patch 
[email protected] -- Sync app config in sync with applets config
+Patch104:       0003-Sync-app-config-in-sync-with-applets-config.patch
+# PATCH-FIX-UPSTREAM 
0004-Avoid-connecting-to-screen-changed-signals-twice.patch 
[email protected] -- Avoid connecting to screen changed signals twice
+Patch105:       0004-Avoid-connecting-to-screen-changed-signals-twice.patch
+# PATCH-FIX-UPSTREAM 
0005-Load-screenpool-at-the-same-time-as-we-connect-to-sc.patch 
[email protected] -- Load screenpool at the same time as we connect to 
screenchanged signals
+Patch106:       0005-Load-screenpool-at-the-same-time-as-we-connect-to-sc.patch
+# PATCH-FIX-UPSTREAM Look-for-both-json-and-desktop-metadata.patch -- Fix 
adding a panel with the new json metadata files
+Patch107:       Look-for-both-json-and-desktop-metadata.patch
 # PATCHES 201-300 and above are from upstream master/5.9 branch
 BuildRequires:  breeze5-icons
 BuildRequires:  fdupes
@@ -217,6 +229,12 @@
 %patch3 -p1
 %patch100 -p1
 %patch101 -p1
+%patch102 -p1
+%patch103 -p1
+%patch104 -p1
+%patch105 -p1
+%patch106 -p1
+%patch107 -p1
 
 %build
   %cmake_kf5 -d build -- -DKDE4_COMMON_PAM_SERVICE=xdm 
-DKDE_DEFAULT_HOME=.kde4 -DCMAKE_INSTALL_LOCALEDIR=%{_kf5_localedir}

++++++ 0001-taskmanagerrulesrc-Add-Rewrite-Rule-for-Google-chrom.patch ++++++
>From 6995ba91368aafdb79f49eee379bd7c8ed79b671 Mon Sep 17 00:00:00 2001
From: Kai Uwe Broulik <[email protected]>
Date: Tue, 8 Nov 2016 15:14:33 +0100
Subject: [PATCH 1/5] [taskmanagerrulesrc] Add Rewrite Rule for Google-chrome

Google Chrome needlessly changed its window class class to Google-chrome
(was google-chrome previously) breaking our launcher mapping.

BUG: 372211
FIXED-IN: 5.8.4

Differential Revision: https://phabricator.kde.org/D3308
---
 libtaskmanager/taskmanagerrulesrc | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libtaskmanager/taskmanagerrulesrc 
b/libtaskmanager/taskmanagerrulesrc
index 56ff05b..915f99f 100644
--- a/libtaskmanager/taskmanagerrulesrc
+++ b/libtaskmanager/taskmanagerrulesrc
@@ -22,6 +22,13 @@ Identifier=DesktopEntryName
 Match=(?<=crx_)(?'match'[a-z]+)
 Target=chrome-%1-default
 
+# Google changed the class to be "Google-chrome" around version 54
+[Rewrite Rules][Google-chrome][1]
+Property=ClassName
+Identifier=DesktopEntryName
+Match=(?<=crx_)(?'match'[a-z]+)
+Target=chrome-%1-default
+
 [Rewrite Rules][chromium][1]
 Property=ClassName
 Identifier=DesktopEntryName
-- 
2.10.1

++++++ 0002-make-sure-all-outputs-are-known.patch ++++++
>From c89560cb534692ac9344533a207216e219de60d1 Mon Sep 17 00:00:00 2001
From: Marco Martin <[email protected]>
Date: Wed, 9 Nov 2016 15:54:42 +0100
Subject: [PATCH 2/5] make sure all outputs are known

at startup, if a screen id is missing from the screenpool mapping
containment::screen() will return -1 for a moment in the startup
phase even if it has a valid lastScreen

populate mappings of eventual missing stuff at screenpool ctor

make sure destroyed containments don't get assigned a view

reviewed-by: David Edmundson

CCBUG:372099
CCBUG:371858
CCBUG:371991
CCBUG:371819
CCBUG:371734
---
 shell/screenpool.cpp  | 11 +++++++++++
 shell/shellcorona.cpp |  8 +++++++-
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/shell/screenpool.cpp b/shell/screenpool.cpp
index 89868e8..011300d 100644
--- a/shell/screenpool.cpp
+++ b/shell/screenpool.cpp
@@ -51,6 +51,17 @@ ScreenPool::ScreenPool(KSharedConfig::Ptr config, QObject 
*parent)
             m_configGroup.deleteEntry(key);
         }
     }
+
+    // if there are already connected unknown screens, map those
+    // all needs to be populated as soon as possible, otherwise
+    // containment->screen() will return an incorrect -1
+    // at startup, if it' asked before corona::addOutput()
+    // is performed, driving to the creation of a new containment
+    for (QScreen* screen : qGuiApp->screens()) {
+        if (!m_idForConnector.contains(screen->name())) {
+            insertScreenMapping(firstAvailableId(), screen->name());
+        }
+    }
 }
 
 ScreenPool::~ScreenPool()
diff --git a/shell/shellcorona.cpp b/shell/shellcorona.cpp
index 33259da..8189eed 100644
--- a/shell/shellcorona.cpp
+++ b/shell/shellcorona.cpp
@@ -1154,7 +1154,12 @@ Plasma::Containment 
*ShellCorona::createContainmentForActivity(const QString& ac
 {
     if (m_desktopContainments.contains(activity)) {
         for (Plasma::Containment *cont : 
m_desktopContainments.value(activity)) {
-            if (cont->screen() == screenNum && cont->activity() == activity) {
+            //in the case of a corrupt config file
+            //with multiple containments with same lastScreen
+            //it can happen two insertContainment happen for
+            //the same screen, leading to the old containment 
+            //to be destroyed
+            if (!cont->destroyed() && cont->screen() == screenNum && 
cont->activity() == activity) {
                 return cont;
             }
         }
@@ -1808,6 +1813,7 @@ int ShellCorona::screenForContainment(const 
Plasma::Containment *containment) co
 //     qDebug() << "ShellCorona screenForContainment: " << containment << " 
Last screen is " << containment->lastScreen();
 
     for (auto screen : qGuiApp->screens()) {
+        // containment->lastScreen() == m_screenPool->id(screen->name()) to 
check if the lastScreen refers to a screen that exists/it's known
         if (containment->lastScreen() == m_screenPool->id(screen->name()) &&
             (containment->activity() == 
m_activityController->currentActivity() ||
             containment->containmentType() == Plasma::Types::PanelContainment 
|| containment->containmentType() == Plasma::Types::CustomPanelContainment)) {
-- 
2.10.1

++++++ 0003-Sync-app-config-in-sync-with-applets-config.patch ++++++
>From 8ddb7ff40ea8027a1a355b67e4e4e2d57bd28abe Mon Sep 17 00:00:00 2001
From: David Edmundson <[email protected]>
Date: Wed, 9 Nov 2016 15:11:52 +0000
Subject: [PATCH 3/5] Sync app config in sync with applets config

---
 shell/shellcorona.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/shell/shellcorona.cpp b/shell/shellcorona.cpp
index 8189eed..2e6dda7 100644
--- a/shell/shellcorona.cpp
+++ b/shell/shellcorona.cpp
@@ -114,6 +114,9 @@ ShellCorona::ShellCorona(QObject *parent)
     m_appConfigSyncTimer.setSingleShot(true);
     m_appConfigSyncTimer.setInterval(s_configSyncDelay);
     connect(&m_appConfigSyncTimer, &QTimer::timeout, this, 
&ShellCorona::syncAppConfig);
+    //we want our application config with screen mapping to always be in sync 
with the applets one, so a crash at any time will still
+    //leave containments pointing to the correct screens
+    connect(this, &Corona::configSynced, this, &ShellCorona::syncAppConfig);
 
     m_waitingPanelsTimer.setSingleShot(true);
     m_waitingPanelsTimer.setInterval(250);
-- 
2.10.1

++++++ 0004-Avoid-connecting-to-screen-changed-signals-twice.patch ++++++
>From 6248a975791a71465f06e8e403fcf5326326958d Mon Sep 17 00:00:00 2001
From: David Edmundson <[email protected]>
Date: Thu, 10 Nov 2016 10:28:16 +0000
Subject: [PATCH 4/5] Avoid connecting to screen changed signals twice

Summary:
load() can be called multiple times; either from setShell or
loadLookAndFeelDefaultLayout. We still only want addOutput once when a
screen is added

Reviewers: #plasma, apol

Reviewed By: apol

Subscribers: plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D3320

CCBUG:372099
CCBUG:371858
CBUG:371991
CCBUG:371819
CCBUG:371734
---
 shell/shellcorona.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/shell/shellcorona.cpp b/shell/shellcorona.cpp
index 2e6dda7..0e926dd 100644
--- a/shell/shellcorona.cpp
+++ b/shell/shellcorona.cpp
@@ -675,9 +675,9 @@ void ShellCorona::load()
             addOutput(screen);
         }
     }
-    connect(qGuiApp, &QGuiApplication::screenAdded, this, 
&ShellCorona::addOutput);
-    connect(qGuiApp, &QGuiApplication::primaryScreenChanged, this, 
&ShellCorona::primaryOutputChanged);
-    connect(qGuiApp, &QGuiApplication::screenRemoved, this, 
&ShellCorona::screenRemoved);
+    connect(qGuiApp, &QGuiApplication::screenAdded, this, 
&ShellCorona::addOutput, Qt::UniqueConnection);
+    connect(qGuiApp, &QGuiApplication::primaryScreenChanged, this, 
&ShellCorona::primaryOutputChanged, Qt::UniqueConnection);
+    connect(qGuiApp, &QGuiApplication::screenRemoved, this, 
&ShellCorona::screenRemoved, Qt::UniqueConnection);
 
     if (!m_waitingPanels.isEmpty()) {
         m_waitingPanelsTimer.start();
-- 
2.10.1

++++++ 0005-Load-screenpool-at-the-same-time-as-we-connect-to-sc.patch ++++++
>From 38eb3766279bbd5e1faab5295f8e49cdd4b3317f Mon Sep 17 00:00:00 2001
From: David Edmundson <[email protected]>
Date: Thu, 10 Nov 2016 10:29:27 +0000
Subject: [PATCH 5/5] Load screenpool at the same time as we connect to
 screenchanged signals

Summary:
Otherwise we have a gap during load (waiting querying kactivities))
between screen pool being created and us connecting to the screen
changed signals, which in turn are used to update screen pool.

In particular the primary screen can get out of sync between the current
state and the screen pool.

Test Plan: Based on Christopher Feck's research and initial patch

Reviewers: #plasma

Subscribers: mart, rwooninck, fvogt, cfeck, plasma-devel

Tags: #plasma

Differential Revision: https://phabricator.kde.org/D3319

    CCBUG:372099
    CCBUG:371858
    CBUG:371991
    CCBUG:371819
    CCBUG:371734
---
 shell/autotests/screenpooltest.cpp | 1 +
 shell/screenpool.cpp               | 8 ++++++++
 shell/screenpool.h                 | 1 +
 shell/shellcorona.cpp              | 4 +++-
 4 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/shell/autotests/screenpooltest.cpp 
b/shell/autotests/screenpooltest.cpp
index 5d0522f..5fc844a 100644
--- a/shell/autotests/screenpooltest.cpp
+++ b/shell/autotests/screenpooltest.cpp
@@ -51,6 +51,7 @@ void ScreenPoolTest::initTestCase()
     cg.deleteGroup();
     cg.sync();
     m_screenPool = new ScreenPool(KSharedConfig::openConfig(), this);
+    m_screenPool->load();
 }
 
 void ScreenPoolTest::cleanupTestCase()
diff --git a/shell/screenpool.cpp b/shell/screenpool.cpp
index 011300d..b60cca1 100644
--- a/shell/screenpool.cpp
+++ b/shell/screenpool.cpp
@@ -30,6 +30,14 @@ ScreenPool::ScreenPool(KSharedConfig::Ptr config, QObject 
*parent)
     connect(&m_configSaveTimer, &QTimer::timeout, this, [this](){
         m_configGroup.sync();
     });
+}
+
+void ScreenPool::load()
+{
+    m_primaryConnector = QString();
+    m_connectorForId.clear();
+    m_idForConnector.clear();
+
     QScreen *primary = qGuiApp->primaryScreen();
     if (primary) {
         m_primaryConnector = primary->name();
diff --git a/shell/screenpool.h b/shell/screenpool.h
index 046d18b..9b3a9af 100644
--- a/shell/screenpool.h
+++ b/shell/screenpool.h
@@ -33,6 +33,7 @@ class ScreenPool : public QObject {
 
 public:
     ScreenPool(KSharedConfig::Ptr config, QObject *parent = nullptr);
+    void load();
     ~ScreenPool() override;
 
     QString primaryConnector() const;
diff --git a/shell/shellcorona.cpp b/shell/shellcorona.cpp
index 0e926dd..0cab1b7 100644
--- a/shell/shellcorona.cpp
+++ b/shell/shellcorona.cpp
@@ -627,6 +627,8 @@ void ShellCorona::load()
 
     disconnect(m_activityController, 
&KActivities::Controller::serviceStatusChanged, this, &ShellCorona::load);
 
+    m_screenPool->load();
+
     //TODO: a kconf_update script is needed
     QString configFileName(QStringLiteral("plasma-") + m_shell + 
QStringLiteral("-appletsrc"));
 
@@ -1160,7 +1162,7 @@ Plasma::Containment 
*ShellCorona::createContainmentForActivity(const QString& ac
             //in the case of a corrupt config file
             //with multiple containments with same lastScreen
             //it can happen two insertContainment happen for
-            //the same screen, leading to the old containment 
+            //the same screen, leading to the old containment
             //to be destroyed
             if (!cont->destroyed() && cont->screen() == screenNum && 
cont->activity() == activity) {
                 return cont;
-- 
2.10.1

++++++ Look-for-both-json-and-desktop-metadata.patch ++++++
From: Aleix Pol <[email protected]>
Date: Mon, 31 Oct 2016 11:06:30 +0000
Subject: Make sure we're looking both for json and desktop metadata
X-Git-Url: 
http://quickgit.kde.org/?p=plasma-workspace.git&a=commitdiff&h=bfb91f9de153d53a30d82ad6ce0d6732da4ab367
---
Make sure we're looking both for json and desktop metadata

We shouldn't assume metadata is in metadata.desktop

REVIEW: 129276
---


--- a/shell/containmentconfigview.cpp
+++ b/shell/containmentconfigview.cpp
@@ -141,8 +141,8 @@
             QStringList packages;
 
             foreach (const QString &sdir, dir.entryList(QDir::AllDirs | 
QDir::Readable)) {
-                QString metadata = dirPath + '/' + sdir + "/metadata.desktop";
-                if (QFile::exists(metadata)) {
+                const QString metadata = dirPath + '/' + sdir;
+                if (QFile::exists(metadata + "/metadata.json") || 
QFile::exists(metadata + "/metadata.desktop")) {
                     packages << sdir;
                 }
             }

--- a/shell/scripting/scriptengine_v1.cpp
+++ b/shell/scripting/scriptengine_v1.cpp
@@ -510,6 +510,11 @@
         if (sc) {
             const QString overridePackagePath = 
sc->lookAndFeelPackage().path() + QStringLiteral("contents/layouts/") + 
pluginData.pluginId();
 
+            path = overridePackagePath + QStringLiteral("/metadata.json");
+            if (QFile::exists(path)) {
+                package.setPath(overridePackagePath);
+            }
+
             path = overridePackagePath + QStringLiteral("/metadata.desktop");
             if (QFile::exists(path)) {
                 package.setPath(overridePackagePath);
@@ -518,7 +523,10 @@
     }
 
     if (!package.isValid()) {
-        path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, 
package.defaultPackageRoot() + pluginData.pluginId() + "/metadata.desktop");
+        path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, 
package.defaultPackageRoot() + pluginData.pluginId() + "/metadata.json");
+        if (path.isEmpty()) {
+            path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, 
package.defaultPackageRoot() + pluginData.pluginId() + "/metadata.desktop");
+        }
         if (path.isEmpty()) {
             // qDebug() << "script path is empty";
             return false;

--- a/wallpapers/image/backgroundlistmodel.cpp
+++ b/wallpapers/image/backgroundlistmodel.cpp
@@ -559,7 +559,7 @@
                 }
 
                 const QString filePath = wp.filePath();
-                if (QFile::exists(filePath + 
QString::fromLatin1("/metadata.desktop"))) {
+                if (QFile::exists(filePath + 
QString::fromLatin1("/metadata.desktop")) || QFile::exists(filePath + 
QString::fromLatin1("/metadata.json"))) {
                     package.setPath(filePath);
                     if (package.isValid()) {
                         if (!package.filePath("images").isEmpty()) {

--- a/wallpapers/image/image.cpp
+++ b/wallpapers/image/image.cpp
@@ -453,7 +453,9 @@
         }
     } else {
         //if it's not an absolute path, check if it's just a wallpaper name
-        const QString path = 
QStandardPaths::locate(QStandardPaths::GenericDataLocation, 
QLatin1String("wallpapers/") + QString(m_wallpaper + 
QString::fromLatin1("/metadata.desktop")));
+        QString path = 
QStandardPaths::locate(QStandardPaths::GenericDataLocation, 
QLatin1String("wallpapers/") + QString(m_wallpaper + 
QString::fromLatin1("/metadata.json")));
+        if (path.isEmpty())
+            path = QStandardPaths::locate(QStandardPaths::GenericDataLocation, 
QLatin1String("wallpapers/") + QString(m_wallpaper + 
QString::fromLatin1("/metadata.desktop")));
 
         if (!path.isEmpty()) {
             QDir dir(path);


Reply via email to