Accepting request 364151 from home:wolfi323:plasma5-workspace

- Added xembedsniproxy-avoid-ghost-entry.patch from upstream: prevents an empty icon being shown when e.g. fcitx is running (boo#954623, kde#358719)

OBS-URL: https://build.opensuse.org/request/show/364151
OBS-URL: https://build.opensuse.org/package/show/KDE:Frameworks5/plasma5-workspace?expand=0&rev=182
This commit is contained in:
Hrvoje Senjan 2016-03-02 12:45:40 +00:00 committed by Git OBS Bridge
parent 2e03b7075c
commit 7a985b107d
3 changed files with 104 additions and 0 deletions

View File

@ -1,3 +1,10 @@
-------------------------------------------------------------------
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

View File

@ -40,6 +40,7 @@ Patch3: kuiserver5_qApp.patch
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
BuildRequires: kf5-filesystem
BuildRequires: update-desktop-files
BuildRequires: cmake(KF5Activities) >= 5.15.0
@ -209,6 +210,7 @@ workspace. Development files.
%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

@ -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);