Hrvoje Senjan 2016-03-06 01:41:50 +00:00 committed by Git OBS Bridge
parent 2850476b14
commit a09eca6cc9
5 changed files with 7 additions and 159 deletions

View File

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

View File

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

View File

@ -18,9 +18,9 @@
%bcond_without lang
Name: plasma5-workspace
Version: 5.5.5.2
Version: 5.5.95
Release: 0
%define plasma_version 5.5.5
%define plasma_version 5.5.95
Summary: The KDE Plasma Workspace Components
License: GPL-2.0+
Group: System/GUI/KDE
@ -36,11 +36,8 @@ Patch1: create_kdehome.patch
Patch2: fix-breeze-sddm-theme-with-many-users.patch
# PATCH-FIX_OPENSUSE kuiserver5_qApp.patch -- kuiserver can't be a QCoreApplications as it uses QWidget
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
# PATCHES 201-300 and above are from upstream master/5.6 branch
Patch201: xembedsniproxy-avoid-ghost-entry.patch
# PATCHES 100-200 and above are from upstream 5.6 branch
# PATCHES 201-300 and above are from upstream master/5.7 branch
BuildRequires: kf5-filesystem
BuildRequires: update-desktop-files
BuildRequires: cmake(KF5Activities) >= 5.15.0
@ -209,8 +206,6 @@ workspace. Development files.
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch201 -p1
%build
%cmake_kf5 -d build -- -DKDE4_COMMON_PAM_SERVICE=xdm -DKDE_DEFAULT_HOME=.kde4 -DCMAKE_INSTALL_LOCALEDIR=share/locale/kf5

View File

@ -1,52 +0,0 @@
From: Andreas Hartmetz <ahartmetz@gmail.com>
Date: Sat, 20 Feb 2016 20:01:42 +0000
Subject: Disable fallback session management (requires Qt >= 5.6.0).
X-Git-Url: http://quickgit.kde.org/?p=plasma-workspace.git&a=commitdiff&h=b5e814a7b2867914327c889794b1088027aaafd6
---
Disable fallback session management (requires Qt >= 5.6.0).
This prevents processes from dying when session logout is cancelled.
Session restore is not an issue in these, it's disabled anyway.
---
--- a/klipper/main.cpp
+++ b/klipper/main.cpp
@@ -73,6 +73,9 @@
KAboutData::setApplicationData(aboutData);
+#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 1)
+ QGuiApplication::setFallbackSessionManagementEnabled(false);
+#endif
auto disableSessionManagement = [](QSessionManager &sm) {
sm.setRestartHint(QSessionManager::RestartNever);
};
--- a/krunner/main.cpp
+++ b/krunner/main.cpp
@@ -66,6 +66,9 @@
KAboutData::setApplicationData(aboutData);
+#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 1)
+ QGuiApplication::setFallbackSessionManagementEnabled(false);
+#endif
auto disableSessionManagement = [](QSessionManager &sm) {
sm.setRestartHint(QSessionManager::RestartNever);
};
diff --git a/shell/main.cpp b/shell/main.cpp
index 49ea484..68cf9e9 100644
--- a/shell/main.cpp
+++ b/shell/main.cpp
@@ -133,6 +133,9 @@ int main(int argc, char *argv[])
};
QObject::connect(&app, &QGuiApplication::commitDataRequest, disableSessionManagement);
QObject::connect(&app, &QGuiApplication::saveStateRequest, disableSessionManagement);
+#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 1)
+ QGuiApplication::setFallbackSessionManagementEnabled(false);
+#endif
ShellManager::s_crashes = cliOptions.value(crashOption).toInt();
ShellManager::s_forceWindowed = cliOptions.isSet(winOption);

View File

@ -1,95 +0,0 @@
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);