Luca Beltrame 2017-02-15 06:11:05 +00:00 committed by Git OBS Bridge
parent a92bc17591
commit 9169e1ce8c
5 changed files with 31 additions and 182 deletions

View File

@ -1,172 +0,0 @@
From 7b1dc9a4bb039ff5ff2a5b71a2c6bc687ad1db72 Mon Sep 17 00:00:00 2001
From: Harald Sitter <sitter@kde.org>
Date: Thu, 2 Feb 2017 19:57:23 +0100
Subject: [PATCH] make services disqualification much stricter
Summary:
after the recent set of changes to disqualification we ended up with a bit
too lax disqualification. if we saw the exec OR the storageid we'd
hence forth disqualify a service with either of them being equal.
in case of system settings this causes a match problem. systemsettings
has two desktop files one !KDE and one OnlyKDE they are however exactly
the same except for a different name and storageid. as a result if the !KDE
one is encountered first it will be disqualified on account of
noDisplay=true and marked as seen. when the OnlyKDE systemsettings is then
iterated it will already have the Exec entry in the seen list and be
disqualified on account of that.
to prevent this type of confusion make it a requirement to match both
storageid AND exec before disqualifying.
it may actually be suitable to drop the exec altogether. say I copy firefox
into the user local applications dir and set it NoDisplay=true but change
the exec. this would still lead to the system-wide firefox being found as
it is not getting disqualified. long story short: maybe we should
disqualify services solely on the storageid?
Test Plan:
- new autotest case
- fails without changes
- passes with changes
Reviewers: broulik
Reviewed By: broulik
Subscribers: plasma-devel
Tags: #plasma
Differential Revision: https://phabricator.kde.org/D4415
---
.../autotests/fixtures/kdesystemsettings.desktop | 13 +++++++++
.../autotests/fixtures/systemsettings.desktop | 14 +++++++++
runners/services/autotests/servicerunnertest.cpp | 34 ++++++++++++++++++++++
runners/services/servicerunner.cpp | 3 +-
4 files changed, 63 insertions(+), 1 deletion(-)
create mode 100644 runners/services/autotests/fixtures/kdesystemsettings.desktop
create mode 100644 runners/services/autotests/fixtures/systemsettings.desktop
diff --git a/runners/services/autotests/fixtures/kdesystemsettings.desktop b/runners/services/autotests/fixtures/kdesystemsettings.desktop
new file mode 100644
index 00000000..0623f57a
--- /dev/null
+++ b/runners/services/autotests/fixtures/kdesystemsettings.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Exec=systemsettings5
+Icon=preferences-system
+Type=Application
+X-KDE-StartupNotify=true
+NotShowIn=KDE;
+
+GenericName=KDE System Settings ServiceRunnerTest
+
+Name=KDE System Settings ServiceRunnerTest
+
+X-DBUS-StartupType=Unique
+Categories=Qt;KDE;Settings;
diff --git a/runners/services/autotests/fixtures/systemsettings.desktop b/runners/services/autotests/fixtures/systemsettings.desktop
new file mode 100644
index 00000000..935db902
--- /dev/null
+++ b/runners/services/autotests/fixtures/systemsettings.desktop
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Exec=systemsettings5
+Icon=preferences-system
+Type=Application
+X-DocPath=systemsettings/index.html
+X-KDE-StartupNotify=true
+OnlyShowIn=KDE;
+
+GenericName=System Settings ServiceRunnerTest
+
+Name=System Settings ServiceRunnerTest
+
+X-DBUS-StartupType=Unique
+Categories=Qt;KDE;Settings;
diff --git a/runners/services/autotests/servicerunnertest.cpp b/runners/services/autotests/servicerunnertest.cpp
index d0c6daed..d3217768 100644
--- a/runners/services/autotests/servicerunnertest.cpp
+++ b/runners/services/autotests/servicerunnertest.cpp
@@ -38,6 +38,7 @@ private Q_SLOTS:
void testChromeAppsRelevance();
void testKonsoleVsYakuakeComment();
+ void testSystemSettings();
};
void ServiceRunnerTest::initTestCase()
@@ -58,6 +59,11 @@ void ServiceRunnerTest::initTestCase()
setlocale(LC_ALL, "C.utf8");
KSycoca::self()->ensureCacheValid();
+
+ // Make sure noDisplay behaves consistently WRT OnlyShowIn etc.
+ QVERIFY(setenv("XDG_CURRENT_DESKTOP", "KDE", 1) == 0);
+ // NOTE: noDisplay also includes X-KDE-OnlyShowOnQtPlatforms which is a bit harder to fake
+ // and not currently under testing anyway.
}
void ServiceRunnerTest::cleanupTestCase()
@@ -123,6 +129,34 @@ void ServiceRunnerTest::testKonsoleVsYakuakeComment()
QVERIFY(yakuakeFound);
}
+void ServiceRunnerTest::testSystemSettings()
+{
+ // In 5.9.0 'System Settings' suddenly didn't come back as a match for 'settings' anymore.
+ // Sytem Settings has a noKDE version and a KDE version, if the noKDE version is encountered
+ // first it will be added to the seen cache, however disqualification of already seen items
+ // may then also disqualify the KDE version of system settings on account of having already
+ // seen it. This test makes sure we find the right version.
+ ServiceRunner runner(this, QVariantList());
+ Plasma::RunnerContext context;
+ context.setQuery("settings");
+
+ runner.match(context);
+
+ bool systemSettingsFound = false;
+ bool foreignSystemSettingsFound = false;
+ for (auto match : context.matches()) {
+ qDebug() << "matched" << match.text();
+ if (match.text() == "System Settings ServiceRunnerTest") {
+ systemSettingsFound = true;
+ }
+ if (match.text() == "KDE System Settings ServiceRunnerTest") {
+ foreignSystemSettingsFound = true;
+ }
+ }
+ QVERIFY(systemSettingsFound);
+ QVERIFY(!foreignSystemSettingsFound);
+}
+
QTEST_MAIN(ServiceRunnerTest)
#include "servicerunnertest.moc"
diff --git a/runners/services/servicerunner.cpp b/runners/services/servicerunner.cpp
index 68756f91..2f840a9b 100644
--- a/runners/services/servicerunner.cpp
+++ b/runners/services/servicerunner.cpp
@@ -76,7 +76,7 @@ private:
bool hasSeen(const KService::Ptr &service)
{
- return m_seen.contains(service->storageId()) ||
+ return m_seen.contains(service->storageId()) &&
m_seen.contains(service->exec());
}
@@ -88,6 +88,7 @@ private:
bool disqualify(const KService::Ptr &service)
{
auto ret = hasSeen(service) || service->noDisplay();
+ qCDebug(RUNNER_SERVICES) << service->name() << "disqualified?" << ret;
seen(service);
return ret;
}
--
2.11.0

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5357a42b1b48546580bc32c7f4c9f80ed61ade8f6b6ce3ba41ba1d3bf46c7d0f
size 6972416

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3acf08566e569a672c32c07c097facb6784598a19e5e86dc06468da736df4ce5
size 6936576

View File

@ -1,3 +1,27 @@
-------------------------------------------------------------------
Tue Feb 14 17:58:13 CET 2017 - fabian@ritter-vogt.de
- Update to 5.9.2
* New feature release
* For more details please see:
* https://www.kde.org/announcements/plasma-5.9.2.php
- Changes since 5.9.1:
* TaskManager: add icon to cache after painfully querying it over XCB/NETWM.
* Pass args to DataEngine superclass constructor
* turn the NotificationItem in a MouseArea
* [DesktopView] show() ConfigView when it is already opened
* Match QtQuick import to minimum Qt version
* [Clipboard plasmoid] Fix line breaks
* [System Tray] Part Revert "Trigger context menu on press" as this breaks xembedsniproxy
* Rename Application Menu to Global Menu to avoid conflict
* [kioslave/remote] Fix porting bugs
* [Icon Applet] More sensible minimum height
* make services disqualification much stricter
* [System Tray Containment] Drop useless Q_INVOKABLE from .cpp file
* [System Tray Containment] Ungrab mouse before opening context menu
- Remove patches, now upstream:
* 0001-make-services-disqualification-much-stricter.patch
-------------------------------------------------------------------
Sun Feb 12 11:26:03 UTC 2017 - fabian@ritter-vogt.de

View File

@ -20,11 +20,11 @@
%bcond_without lang
Name: plasma5-workspace
Version: 5.9.1
Version: 5.9.2
Release: 0
# Full Plasma 5 version (e.g. 5.9.1)
# Full Plasma 5 version (e.g. 5.9.2)
%{!?_plasma5_bugfix: %global _plasma5_bugfix %{version}}
# Lasted ABI-stable Plasma (e.g. 5.8 in KF5, but 5.9.1 in KUF)
# Lasted ABI-stable Plasma (e.g. 5.8 in KF5, but 5.9.2 in KUF)
%{!?_plasma5_version: %global _plasma5_version %(echo %{_plasma5_bugfix} | awk -F. '{print $1"."$2}')}
Summary: The KDE Plasma Workspace Components
License: GPL-2.0+
@ -39,8 +39,6 @@ Patch1: change-kioremote-severity.patch
# PATCH-FIX-OPENSUSE 0001-Ignore-default-sddm-face-icons.patch boo#1001364 fabian@ritter-vogt.de -- Ignore default sddm face icons
Patch2: 0001-Ignore-default-sddm-face-icons.patch
# PATCHES 100-200 and above are from upstream 5.9 branch
# PATCH-FIX-UPSTREAM 0001-make-services-disqualification-much-stricter.patch sitter@kde.org -- make services disqualification much stricter
Patch100: 0001-make-services-disqualification-much-stricter.patch
# PATCHES 201-300 and above are from upstream master/5.10 branch
BuildRequires: breeze5-icons
BuildRequires: fdupes
@ -212,7 +210,6 @@ workspace. Development files.
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch100 -p1
%build
%cmake_kf5 -d build -- -DKDE4_COMMON_PAM_SERVICE=xdm -DKDE_DEFAULT_HOME=.kde4 -DCMAKE_INSTALL_LOCALEDIR=%{_kf5_localedir}
@ -347,7 +344,7 @@ workspace. Development files.
%if %{with lang}
%files lang -f %{name}.lang
%doc %lang(ca) %{_kf5_htmldir}/ca/
%doc %lang(de) %{_kf5_htmldir}/de/
%endif
%changelog