Accepting request 364853 from KDE:Frameworks5
Update to 5.5.5 OBS-URL: https://build.opensuse.org/request/show/364853 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/plasma5-workspace?expand=0&rev=35
This commit is contained in:
@@ -1,114 +0,0 @@
|
||||
From: Kai Uwe Broulik <kde@privat.broulik.de>
|
||||
Date: Thu, 25 Feb 2016 21:16:22 +0000
|
||||
Subject: [User Switcher] Fix session switching when automatic screen locking is enabled
|
||||
X-Git-Url: http://quickgit.kde.org/?p=plasma-workspace.git&a=commitdiff&h=7a0096ba99d7a71ae9f45d7c0011d0ebb1eae23d
|
||||
---
|
||||
[User Switcher] Fix session switching when automatic screen locking is enabled
|
||||
|
||||
When automatic screen locking is enabled, we want to ensure the screen is fully locked
|
||||
before we switch sessions or go to the login screen to avoid brief exposure of the desktop
|
||||
when we return.
|
||||
|
||||
This check happens asynchronously and because the User Switcher dialog closes immediately
|
||||
after issuing the switch request, the SessionsModel is already destroyed and the reply is never
|
||||
actually processed.
|
||||
|
||||
BUG: 356945
|
||||
FIXED-IN: 5.5.5
|
||||
|
||||
Differential Revision: https://phabricator.kde.org/D1020
|
||||
---
|
||||
|
||||
|
||||
--- a/components/sessionsprivate/sessionsmodel.cpp
|
||||
+++ b/components/sessionsprivate/sessionsmodel.cpp
|
||||
@@ -45,8 +45,10 @@
|
||||
if (active) {
|
||||
if (m_pendingVt) {
|
||||
m_displayManager.switchVT(m_pendingVt);
|
||||
+ emit switchedUser(m_pendingVt);
|
||||
} else if (m_pendingReserve) {
|
||||
m_displayManager.startReserve();
|
||||
+ emit startedNewSession();
|
||||
}
|
||||
|
||||
m_pendingVt = 0;
|
||||
@@ -78,6 +80,7 @@
|
||||
|
||||
if (!shouldLock) {
|
||||
m_displayManager.switchVT(vt);
|
||||
+ emit switchedUser(vt);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -85,6 +88,7 @@
|
||||
if (locked) {
|
||||
// already locked, switch right away
|
||||
m_displayManager.switchVT(vt);
|
||||
+ emit switchedUser(vt);
|
||||
} else {
|
||||
m_pendingReserve = false;
|
||||
m_pendingVt = vt;
|
||||
@@ -101,6 +105,7 @@
|
||||
|
||||
if (!shouldLock) {
|
||||
m_displayManager.startReserve();
|
||||
+ emit startedNewSession();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -108,6 +113,7 @@
|
||||
if (locked) {
|
||||
// already locked, switch right away
|
||||
m_displayManager.startReserve();
|
||||
+ emit startedNewSession();
|
||||
} else {
|
||||
m_pendingReserve = true;
|
||||
m_pendingVt = 0;
|
||||
|
||||
--- a/components/sessionsprivate/sessionsmodel.h
|
||||
+++ b/components/sessionsprivate/sessionsmodel.h
|
||||
@@ -86,8 +86,10 @@
|
||||
|
||||
signals:
|
||||
void shouldLockChanged();
|
||||
+ void countChanged();
|
||||
|
||||
- void countChanged();
|
||||
+ void switchedUser(int vt);
|
||||
+ void startedNewSession();
|
||||
|
||||
private:
|
||||
void checkScreenLocked(const std::function<void (bool)> &cb);
|
||||
|
||||
--- a/lookandfeel/contents/userswitcher/UserSwitcher.qml
|
||||
+++ b/lookandfeel/contents/userswitcher/UserSwitcher.qml
|
||||
@@ -38,6 +38,11 @@
|
||||
|
||||
SessionsModel {
|
||||
id: sessionsModel
|
||||
+ // the calls takes place asynchronously; if we were to dismiss the dialog right
|
||||
+ // after startNewSession/switchUser we would be destroyed before the reply
|
||||
+ // returned leaving us do nothing (Bug 356945)
|
||||
+ onStartedNewSession: root.dismissed()
|
||||
+ onSwitchedUser: root.dismissed()
|
||||
}
|
||||
|
||||
Controls.Action {
|
||||
@@ -125,7 +130,6 @@
|
||||
visible: sessionsModel.canStartNewSession
|
||||
onClicked: {
|
||||
sessionsModel.startNewSession(sessionsModel.shouldLock)
|
||||
- root.dismissed()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,7 +152,6 @@
|
||||
visible: sessionsModel.count > 0
|
||||
onClicked: {
|
||||
sessionsModel.switchUser(block.mainItem.selectedItem.vtNumber, sessionsModel.shouldLock)
|
||||
- root.dismissed()
|
||||
}
|
||||
|
||||
Controls.Action {
|
||||
|
@@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:f0a0eb82346514b0b3b00644cd9464c32152d48accee13ed322c500b3036097e
|
||||
size 7391812
|
3
plasma-workspace-5.5.5.2.tar.xz
Normal file
3
plasma-workspace-5.5.5.2.tar.xz
Normal file
@@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:bed1e65d878b963dbbb85129c206dc70db71461de29c19e95b6053c9c4fe7b26
|
||||
size 7374560
|
@@ -1,3 +1,20 @@
|
||||
-------------------------------------------------------------------
|
||||
Wed Mar 2 10:15:41 UTC 2016 - wbauer@tmo.at
|
||||
|
||||
- Added xembedsniproxy-avoid-ghost-entry.patch from upstream:
|
||||
prevents an empty icon being shown when e.g. fcitx is running
|
||||
(boo#954623, kde#358719)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Mar 1 17:33:31 UTC 2016 - hrvoje.senjan@gmail.com
|
||||
|
||||
- Update to 5.5.5 (boo#968966)
|
||||
* Bugfix release
|
||||
* For more details please see:
|
||||
https://www.kde.org/announcements/plasma-5.5.5.php
|
||||
- Drop upstreamed fix-session-switch.patch and
|
||||
reset-the-model-on-list-always-shown-hide-change.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Feb 26 15:09:14 UTC 2016 - hrvoje.senjan@gmail.com
|
||||
|
||||
|
@@ -18,9 +18,9 @@
|
||||
|
||||
%bcond_without lang
|
||||
Name: plasma5-workspace
|
||||
Version: 5.5.4
|
||||
Version: 5.5.5.2
|
||||
Release: 0
|
||||
%define plasma_version 5.5.4
|
||||
%define plasma_version 5.5.5
|
||||
Summary: The KDE Plasma Workspace Components
|
||||
License: GPL-2.0+
|
||||
Group: System/GUI/KDE
|
||||
@@ -39,9 +39,8 @@ Patch3: kuiserver5_qApp.patch
|
||||
# PATCH-FIX_OPENSUSE plasmashell-disable-windowclosing-on-logout.patch kde#349805 wbauer@tmo.at -- Prevent plasma from closing too early on logout resulting in an unusable desktop if the logout is cancelled
|
||||
Patch4: plasmashell-disable-windowclosing-on-logout.patch
|
||||
# PATCHES 100-200 and above are from upstream 5.5 branch
|
||||
Patch100: reset-the-model-on-list-always-shown-hide-change.patch
|
||||
Patch101: fix-session-switch.patch
|
||||
# PATCHES 201-300 and above are from upstream master/5.6 branch
|
||||
Patch201: xembedsniproxy-avoid-ghost-entry.patch
|
||||
BuildRequires: kf5-filesystem
|
||||
BuildRequires: update-desktop-files
|
||||
BuildRequires: cmake(KF5Activities) >= 5.15.0
|
||||
@@ -211,8 +210,7 @@ workspace. Development files.
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch100 -p1
|
||||
%patch101 -p1
|
||||
%patch201 -p1
|
||||
|
||||
%build
|
||||
%cmake_kf5 -d build -- -DKDE4_COMMON_PAM_SERVICE=xdm -DKDE_DEFAULT_HOME=.kde4 -DCMAKE_INSTALL_LOCALEDIR=share/locale/kf5
|
||||
|
@@ -1,74 +0,0 @@
|
||||
From 42a3d8accd4e494d343954ddaa916a6c618d94f3 Mon Sep 17 00:00:00 2001
|
||||
From: Marco Martin <notmart@gmail.com>
|
||||
Date: Wed, 3 Feb 2016 15:36:31 +0100
|
||||
Subject: [PATCH 1/1] reset the model on list always shown/hide change
|
||||
|
||||
something really wrong is going on on the proxymodel updates
|
||||
the wrong item gets removed from the list.
|
||||
it may be a wrong mapping between source and dest model
|
||||
(doesn't seem so)
|
||||
or may have been some misguided attempt by QML to recycle delegates
|
||||
|
||||
anyways resetting the model in some conditions even if expensive
|
||||
seems to be the only way to workaround this.
|
||||
Anyways this systray implementation is beyond any repair and
|
||||
the rewritten version won't have to rely on so many models
|
||||
and proxymodels
|
||||
|
||||
BUG:357627
|
||||
CCBUG:352055
|
||||
---
|
||||
applets/systemtray/plugin/tasksproxymodel.cpp | 13 ++++++++++---
|
||||
applets/systemtray/plugin/tasksproxymodel.h | 5 ++++-
|
||||
2 files changed, 14 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/applets/systemtray/plugin/tasksproxymodel.cpp b/applets/systemtray/plugin/tasksproxymodel.cpp
|
||||
index 632e84b..b93b05e 100644
|
||||
--- a/applets/systemtray/plugin/tasksproxymodel.cpp
|
||||
+++ b/applets/systemtray/plugin/tasksproxymodel.cpp
|
||||
@@ -50,9 +50,9 @@ void TasksProxyModel::setHost(Host *host)
|
||||
|
||||
connect(m_host, &Host::taskStatusChanged, this, &TasksProxyModel::invalidateFilter);
|
||||
connect(m_host, &Host::shownCategoriesChanged, this, &TasksProxyModel::invalidateFilter);
|
||||
- connect(m_host, &Host::showAllItemsChanged, this, &TasksProxyModel::invalidateFilter);
|
||||
- connect(m_host, &Host::forcedHiddenItemsChanged, this, &TasksProxyModel::invalidateFilter);
|
||||
- connect(m_host, &Host::forcedShownItemsChanged, this, &TasksProxyModel::invalidateFilter);
|
||||
+ connect(m_host, &Host::showAllItemsChanged, this, &TasksProxyModel::reset);
|
||||
+ connect(m_host, &Host::forcedHiddenItemsChanged, this, &TasksProxyModel::reset);
|
||||
+ connect(m_host, &Host::forcedShownItemsChanged, this, &TasksProxyModel::reset);
|
||||
}
|
||||
|
||||
invalidateFilter();
|
||||
@@ -74,6 +74,13 @@ void TasksProxyModel::setCategory(Category category)
|
||||
}
|
||||
}
|
||||
|
||||
+void TasksProxyModel::reset()
|
||||
+{
|
||||
+ beginResetModel();
|
||||
+ invalidateFilter();
|
||||
+ endResetModel();
|
||||
+}
|
||||
+
|
||||
bool TasksProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
|
||||
{
|
||||
Q_UNUSED(sourceParent);
|
||||
diff --git a/applets/systemtray/plugin/tasksproxymodel.h b/applets/systemtray/plugin/tasksproxymodel.h
|
||||
index 70e723a..5799d62 100644
|
||||
--- a/applets/systemtray/plugin/tasksproxymodel.h
|
||||
+++ b/applets/systemtray/plugin/tasksproxymodel.h
|
||||
@@ -56,7 +56,10 @@ public:
|
||||
|
||||
virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
||||
|
||||
-signals:
|
||||
+private Q_SLOTS:
|
||||
+ void reset();
|
||||
+
|
||||
+Q_SIGNALS:
|
||||
void hostChanged();
|
||||
void categoryChanged();
|
||||
void countChanged();
|
||||
--
|
||||
2.6.2
|
||||
|
95
xembedsniproxy-avoid-ghost-entry.patch
Normal file
95
xembedsniproxy-avoid-ghost-entry.patch
Normal file
@@ -0,0 +1,95 @@
|
||||
From: Weng Xuetian <wengxt@gmail.com>
|
||||
Date: Tue, 09 Feb 2016 02:56:59 +0000
|
||||
Subject: Check whether there is any BadWindow error before monitor the event
|
||||
X-Git-Url: http://quickgit.kde.org/?p=plasma-workspace.git&a=commitdiff&h=829158f830555c031755c6d4348e684779264342
|
||||
---
|
||||
Check whether there is any BadWindow error before monitor the event
|
||||
|
||||
The tray window itself may be destroyed before we start monitor the
|
||||
event of it. Check the returned error and skip this window if BadWindow
|
||||
happens.
|
||||
|
||||
FIXED-IN: 5.6.0
|
||||
BUG: 358719
|
||||
REVIEW: 127014
|
||||
---
|
||||
|
||||
|
||||
--- a/xembed-sni-proxy/fdoselectionmanager.cpp
|
||||
+++ b/xembed-sni-proxy/fdoselectionmanager.cpp
|
||||
@@ -83,7 +83,7 @@
|
||||
m_selectionOwner->claim(false);
|
||||
}
|
||||
|
||||
-void FdoSelectionManager::addDamageWatch(xcb_window_t client)
|
||||
+bool FdoSelectionManager::addDamageWatch(xcb_window_t client)
|
||||
{
|
||||
qCDebug(SNIPROXY) << "adding damage watch for " << client;
|
||||
|
||||
@@ -94,15 +94,27 @@
|
||||
m_damageWatches[client] = damageId;
|
||||
xcb_damage_create(c, damageId, client, XCB_DAMAGE_REPORT_LEVEL_NON_EMPTY);
|
||||
|
||||
- QScopedPointer<xcb_get_window_attributes_reply_t, QScopedPointerPodDeleter> attr(xcb_get_window_attributes_reply(c, attribsCookie, Q_NULLPTR));
|
||||
+ xcb_generic_error_t *error = Q_NULLPTR;
|
||||
+ QScopedPointer<xcb_get_window_attributes_reply_t, QScopedPointerPodDeleter> attr(xcb_get_window_attributes_reply(c, attribsCookie, &error));
|
||||
+ QScopedPointer<xcb_generic_error_t, QScopedPointerPodDeleter> getAttrError(error);
|
||||
uint32_t events = XCB_EVENT_MASK_STRUCTURE_NOTIFY;
|
||||
if (!attr.isNull()) {
|
||||
events = events | attr->your_event_mask;
|
||||
}
|
||||
+ // if window is already gone, there is no need to handle it.
|
||||
+ if (getAttrError && getAttrError->error_code == XCB_WINDOW) {
|
||||
+ return false;
|
||||
+ }
|
||||
// the event mask will not be removed again. We cannot track whether another component also needs STRUCTURE_NOTIFY (e.g. KWindowSystem).
|
||||
// if we would remove the event mask again, other areas will break.
|
||||
- xcb_change_window_attributes(c, client, XCB_CW_EVENT_MASK, &events);
|
||||
-
|
||||
+ const auto changeAttrCookie = xcb_change_window_attributes_checked(c, client, XCB_CW_EVENT_MASK, &events);
|
||||
+ QScopedPointer<xcb_generic_error_t, QScopedPointerPodDeleter> changeAttrError(xcb_request_check(c, changeAttrCookie));
|
||||
+ // if window is gone by this point, it will be catched by eventFilter, so no need to check later errors.
|
||||
+ if (changeAttrError && changeAttrError->error_code == XCB_WINDOW) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ return true;
|
||||
}
|
||||
|
||||
bool FdoSelectionManager::nativeEventFilter(const QByteArray& eventType, void* message, long int* result)
|
||||
@@ -130,6 +142,11 @@
|
||||
if (m_proxies[unmappedWId]) {
|
||||
undock(unmappedWId);
|
||||
}
|
||||
+ } else if (responseType == XCB_DESTROY_NOTIFY) {
|
||||
+ const auto destroyedWId = reinterpret_cast<xcb_destroy_notify_event_t *>(ev)->window;
|
||||
+ if (m_proxies[destroyedWId]) {
|
||||
+ undock(destroyedWId);
|
||||
+ }
|
||||
} else if (responseType == m_damageEventBase + XCB_DAMAGE_NOTIFY) {
|
||||
const auto damagedWId = reinterpret_cast<xcb_damage_notify_event_t *>(ev)->drawable;
|
||||
const auto sniProx = m_proxies[damagedWId];
|
||||
@@ -153,8 +170,9 @@
|
||||
return;
|
||||
}
|
||||
|
||||
- addDamageWatch(winId);
|
||||
- m_proxies[winId] = new SNIProxy(winId, this);
|
||||
+ if (addDamageWatch(winId)) {
|
||||
+ m_proxies[winId] = new SNIProxy(winId, this);
|
||||
+ }
|
||||
}
|
||||
|
||||
void FdoSelectionManager::undock(xcb_window_t winId)
|
||||
|
||||
--- a/xembed-sni-proxy/fdoselectionmanager.h
|
||||
+++ b/xembed-sni-proxy/fdoselectionmanager.h
|
||||
@@ -48,7 +48,7 @@
|
||||
|
||||
private:
|
||||
void init();
|
||||
- void addDamageWatch(xcb_window_t client);
|
||||
+ bool addDamageWatch(xcb_window_t client);
|
||||
void dock(xcb_window_t embed_win);
|
||||
void undock(xcb_window_t client);
|
||||
|
Reference in New Issue
Block a user