Hello community, here is the log from the commit of package plasma5-workspace for openSUSE:Factory checked in at 2016-03-03 15:15:26 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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-03-02 14:20:31.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.plasma5-workspace.new/plasma5-workspace.changes 2016-03-03 15:15:29.000000000 +0100 @@ -1,0 +2,17 @@ +Wed Mar 2 10:15:41 UTC 2016 - [email protected] + +- 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 - [email protected] + +- 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 + +------------------------------------------------------------------- Old: ---- fix-session-switch.patch plasma-workspace-5.5.4.tar.xz reset-the-model-on-list-always-shown-hide-change.patch New: ---- plasma-workspace-5.5.5.2.tar.xz xembedsniproxy-avoid-ghost-entry.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ plasma5-workspace.spec ++++++ --- /var/tmp/diff_new_pack.u8GMbE/_old 2016-03-03 15:15:30.000000000 +0100 +++ /var/tmp/diff_new_pack.u8GMbE/_new 2016-03-03 15:15:30.000000000 +0100 @@ -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 @@ # PATCH-FIX_OPENSUSE plasmashell-disable-windowclosing-on-logout.patch kde#349805 [email protected] -- 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 @@ %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 ++++++ plasma-workspace-5.5.4.tar.xz -> plasma-workspace-5.5.5.2.tar.xz ++++++ /work/SRC/openSUSE:Factory/plasma5-workspace/plasma-workspace-5.5.4.tar.xz /work/SRC/openSUSE:Factory/.plasma5-workspace.new/plasma-workspace-5.5.5.2.tar.xz differ: char 27, line 1 ++++++ xembedsniproxy-avoid-ghost-entry.patch ++++++ From: Weng Xuetian <[email protected]> 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);
