Summary: | plasma desktop containment seems to intermediately switch window type to normal when showing desktop | ||
---|---|---|---|
Product: | [Plasma] plasmashell | Reporter: | jeremy9856 |
Component: | Desktop Containment | Assignee: | Sebastian Kügler <sebas> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | bhush94, egorov_egor, enslaver, kde, mgraesslin, nate, notmart, notuxius, plasma-bugs, simonandric5, thomas.luebking |
Priority: | NOR | ||
Version: | 5.7.3 | ||
Target Milestone: | 1.0 | ||
Platform: | Fedora RPMs | ||
OS: | Linux | ||
See Also: |
https://bugs.kde.org/show_bug.cgi?id=365685 https://bugs.kde.org/show_bug.cgi?id=365824 |
||
Latest Commit: | Version Fixed In: | ||
Sentry Crash Report: | |||
Attachments: |
Debug patch (5.5)
debug layer updates on desktop showing |
Description
jeremy9856
2015-07-31 14:59:27 UTC
click what? KWin has no GUI :-P I assume some™ plasmoid (stock one) in some (desktop? panel? extra?) window. => run "kcmshell5 keys", select KWin, filter for "show deskt" (or scroll to death ;-) and ensure a shortcut (eg. "Meta+D", but it doesn't really matter) is set. => Does activation by shortcut work as expected? If so, please elaborate on the location of your "show desktop" plasmoid, your focus model (click or hover) and whether all or only some windows (plasmashell dialogs? keep above?) remain. Sorry I meant the "Show desktop" plasmoid ;) I placed it on the default panel. I tested with a shortcut and it's the same. Sometimes that doesn't work the first 2 or 3 times. - Does it also happen with the compositor suspended (SHIFT+Alt+F12) - please (esp. if not) attach the output of "qdbus org.kde.KWin /KWin supportInformation" It happen with the compositor suspended too qdbus org.kde.KWin /KWin supportInformation KWin Support Information: The following information should be used when requesting support on e.g. http://forum.kde.org. It provides information about the currently running instance, which options are used, what OpenGL driver and which effects are running. Please post the information provided underneath this introductory text to a paste bin service like http://paste.kde.org instead of pasting into support threads. ========================== Version ======= KWin version: 5.3.2 Qt Version: 5.4.2 Qt compile version: 5.4.2 XCB compile version: 1.11 Operation Mode: X11 only Build Options ============= KWIN_BUILD_DECORATIONS: yes KWIN_BUILD_TABBOX: yes KWIN_BUILD_ACTIVITIES: yes HAVE_WAYLAND: yes HAVE_WAYLAND_EGL: yes HAVE_WAYLAND_CURSOR: yes HAVE_XKB: yes HAVE_INPUT: yes HAVE_XCB_CURSOR: yes HAVE_XCB_SYNC: yes HAVE_X11_XCB: yes X11 === Vendor: The X.Org Foundation Vendor Release: 11702000 Protocol Version/Revision: 11/0 SHAPE: yes; Version: 0x11 RANDR: yes; Version: 0x14 DAMAGE: yes; Version: 0x11 Composite: yes; Version: 0x4 RENDER: yes; Version: 0xb XFIXES: yes; Version: 0x50 SYNC: yes; Version: 0x31 GLX: yes; Version: 0x0 Decoration ========== Plugin: org.kde.breeze Theme: Blur: 0 onAllDesktopsAvailable: false alphaChannelSupported: false closeOnDoubleClickOnMenu: false decorationButtonsLeft: 0, 2 decorationButtonsRight: 6, 3, 4, 5 borderSize: 3 gridUnit: 10 font: Droid Sans,10,-1,5,75,0,0,0,0,0 smallSpacing: 2 largeSpacing: 10 Options ======= focusPolicy: 0 nextFocusPrefersMouse: false clickRaise: true autoRaise: false autoRaiseInterval: 0 delayFocusInterval: 0 shadeHover: false shadeHoverInterval: 250 separateScreenFocus: false placement: 6 focusPolicyIsReasonable: true borderSnapZone: 10 windowSnapZone: 10 centerSnapZone: 0 snapOnlyWhenOverlapping: false rollOverDesktops: true focusStealingPreventionLevel: 1 legacyFullscreenSupport: false operationTitlebarDblClick: 5000 operationMaxButtonLeftClick: 5000 operationMaxButtonMiddleClick: 5015 operationMaxButtonRightClick: 5014 commandActiveTitlebar1: 0 commandActiveTitlebar2: 30 commandActiveTitlebar3: 2 commandInactiveTitlebar1: 4 commandInactiveTitlebar2: 30 commandInactiveTitlebar3: 2 commandWindow1: 7 commandWindow2: 8 commandWindow3: 8 commandWindowWheel: 31 commandAll1: 10 commandAll2: 3 commandAll3: 14 keyCmdAllModKey: 16777251 showGeometryTip: false condensedTitle: false electricBorderMaximize: false electricBorderTiling: true electricBorderCornerRatio: 0.25 borderlessMaximizedWindows: false killPingTimeout: 5000 hideUtilityWindowsForInactive: true inactiveTabsSkipTaskbar: false autogroupSimilarWindows: false autogroupInForeground: true compositingMode: 2 useCompositing: false compositingInitialized: false hiddenPreviews: 1 unredirectFullscreen: false glSmoothScale: 2 colorCorrected: false xrenderSmoothScale: false maxFpsInterval: 16666666 refreshRate: 0 vBlankTime: 6000000 glStrictBinding: true glStrictBindingFollowsDriver: true glCoreProfile: false glPreferBufferSwap: 97 glPlatformInterface: 1 Screen Edges ============ desktopSwitching: false desktopSwitchingMovingClients: false cursorPushBackDistance: 1x1 timeThreshold: 150 reActivateThreshold: 350 actionTopLeft: 0 actionTop: 0 actionTopRight: 0 actionRight: 0 actionBottomRight: 0 actionBottom: 0 actionBottomLeft: 0 actionLeft: 0 Screens ======= Multi-Head: no Active screen follows mouse: no Number of Screens: 1 Screen 0 Geometry: 0,0,1920x977 Compositing =========== Compositing is not active Ok, next time it happens, please watch the active window. As it's not an effect referencing all windows nor a double trigger (unlikely to be caused by plasmoid AND shortcut) some client will respond to the state change by a self activation - and break the state. I'll bet on firefox or thunderbird :-P I'm not sure to understand. When I test, I simply boot my VM, launch Konsole and try the plasmoid or the shortcut. Well, the behavior will not depend on the mood of your computer. If it doesn't work, there's a reason and there two things that could happen: a) the state isn't triggered/entered b) the state is immidiately re-broken As entering in general seems to work, and the problem exists for different triggers, it seemed more likely that the state gets broken (what eg. happens if activation for a client is enforced). But if this affects a setup where there is (across all desktops/activit[y|ies?]) only one window (konsole) that idea just got nuked as well. Have you ever seen such ouside a VM? I confirm, it happen with only one window (konsole). If I remember correctly it happen on a hard install too but I don't have one to test now. Since you've konsole open, please check the ouput of xprop -root _NET_SHOWING_DESKTOP when invocation fails (does it change and what does it say?) The output is : _NET_SHOWING_DESKTOP(CARDINAL) = 0 Nothing else happen Ok, this means the state is either not entered or immediately re-broken, but there's no bug in the implementation itself. Can you wmctrl -k on or (far superior¹ ;-) kwindowsystem desktop show [1] https://github.com/luebking/KLItools If I do "wmctrl -k on" it's exactly the same, sometimes the windows are hidden, sometimes they are not but something seems to happen because the window (konsole) lose the focus. I wanted to try kwindowsystem but their isn't much explanation. I tried ./make_kwindowsystem.sh but it say it don't find QApplication. (In reply to jeremy9856 from comment #12) > If I do "wmctrl -k on" it's exactly the same, sometimes the windows are > hidden, sometimes they are not but something seems to happen because the > window (konsole) lose the focus. Aha! The $60.000 question is: where does the focus go? In doubt, run wmctrl -k on; sleep 3; xprop -root _NET_ACTIVE_WINDOW This will print sth. like _NET_ACTIVE_WINDOW(WINDOW): window id # 0x3e0001b And you can then re-activate konsole and check (with the actual ID) xprop -id 0x3e0001b > I wanted to try kwindowsystem but their isn't much explanation. I tried > ./make_kwindowsystem.sh but it say it don't find QApplication. Errrrr, sorry :-\ I'm frankly not even sure whether I pushed a KF5 port somewhere (ie. the version on github links kdelibs from KDE4) When the windows are hidden I have something like this : _NET_WM_ICON_GEOMETRY(CARDINAL) = 70, 948, 288, 25 _NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_RESIZE, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_SHADE, _NET_WM_ACTION_MAXIMIZE_VERT, _NET_WM_ACTION_MAXIMIZE_HORZ, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_CLOSE _KDE_NET_WM_FRAME_STRUT(CARDINAL) = 2, 2, 29, 4 _NET_FRAME_EXTENTS(CARDINAL) = 2, 2, 29, 4 _NET_WM_DESKTOP(CARDINAL) = 0 _KDE_NET_WM_ACTIVITIES(STRING) = "6891f258-fe9b-4d7e-9ac1-627ced80ef87" WM_STATE(WM_STATE): window state: Normal icon window: 0x0 _NET_WM_STATE(ATOM) = _NET_WM_USER_TIME(CARDINAL) = 204479 _NET_WM_ICON(CARDINAL) = Icon (16 x 16): ... XdndAware(ATOM) = BITMAP _KDE_NET_WM_USER_CREATION_TIME(CARDINAL) = 160119 _NET_WM_NAME(UTF8_STRING) = "jeremy : bash" _MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x3, 0x3e, 0x7e, 0x0, 0x0 _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_NORMAL _XEMBED_INFO(_XEMBED_INFO) = 0x0, 0x1 WM_CLIENT_LEADER(WINDOW): window id # 0x5400002 WM_HINTS(WM_HINTS): Client accepts input or input focus: True Initial state is Normal State. _NET_WM_PID(CARDINAL) = 2146 _NET_WM_SYNC_REQUEST_COUNTER(CARDINAL) = 88080391 WM_CLASS(STRING) = "konsole", "konsole" WM_PROTOCOLS(ATOM): protocols WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING, _NET_WM_SYNC_REQUEST WM_NORMAL_HINTS(WM_SIZE_HINTS): user specified size: 777 by 459 program specified minimum size: 0 by 29 window gravity: Static When that don't work and Konsole lose focus : _KDE_NET_WM_ACTIVITIES(STRING) = "00000000-0000-0000-0000-000000000000" _NET_WM_ALLOWED_ACTIONS(ATOM) = _NET_WM_ACTION_MOVE, _NET_WM_ACTION_MINIMIZE, _NET_WM_ACTION_FULLSCREEN, _NET_WM_ACTION_CHANGE_DESKTOP, _NET_WM_ACTION_CLOSE _NET_WM_DESKTOP(CARDINAL) = 4294967295 WM_STATE(WM_STATE): window state: Normal icon window: 0x0 _NET_WM_STATE(ATOM) = _NET_WM_STATE_BELOW _NET_WM_USER_TIME(CARDINAL) = 149857 _NET_WM_ICON(CARDINAL) = Icon (16 x 16): ... XdndAware(ATOM) = BITMAP _KDE_NET_WM_USER_CREATION_TIME(CARDINAL) = 150218 _NET_WM_NAME(UTF8_STRING) = "Desktop — Plasma" _MOTIF_WM_HINTS(_MOTIF_WM_HINTS) = 0x2, 0x1, 0xe, 0x0, 0x0 _NET_WM_WINDOW_TYPE(ATOM) = _NET_WM_WINDOW_TYPE_DESKTOP _XEMBED_INFO(_XEMBED_INFO) = 0x0, 0x1 WM_CLIENT_LEADER(WINDOW): window id # 0x2c00002 WM_HINTS(WM_HINTS): Client accepts input or input focus: True Initial state is Normal State. _NET_WM_PID(CARDINAL) = 1967 _NET_WM_SYNC_REQUEST_COUNTER(CARDINAL) = 46137366 WM_CLASS(STRING) = "plasmashell", "plasmashell" WM_PROTOCOLS(ATOM): protocols WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING, _NET_WM_SYNC_REQUEST WM_NORMAL_HINTS(WM_SIZE_HINTS): user specified location: 0, 0 user specified size: 1920 by 977 program specified minimum size: 1920 by 977 program specified maximum size: 1920 by 977 window gravity: Static Any news on this ? Sorry.
The focus is on plasmashell (the desktop window), kwin would usually put it there when showing the desktop.
What's however suspicious is
> _NET_WM_STATE(ATOM) = _NET_WM_STATE_BELOW
That should not be there and the state will trigger plasmashell to be below most windows (regardless of the state)
But I'll be honest:
plasmashell currently doesn't even set its type to "_NET_WM_WINDOW_TYPE_DESKTOP" here - I need to apply a rule to fix this... (and aside that it reliably crashes on "kquitapp plasmashell")
> plasmashell currently doesn't even set its type to "_NET_WM_WINDOW_TYPE_DESKTOP" here That sounds related to https://mail.kde.org/pipermail/release-team/2015-July/008797.html - especially as Kubuntu was affected by this. Anything new ? Not here - it's not reproducible. Not even setting the desktop _NET_WM_STATE_BELOW interfers. Can you compile and test patches? (so we can trace whether KWin enters the state and why it's broken - maybe even by whom) If you say me what to do i can try. You mean the patch (I'll of course write that) or "how do i compile kwin"? For the latter: git clone git://anongit.kde.org/kwin.git cd kwin git checkout Plasma/5.4 mkdir build cd build ccmake .. [press c, adjust installation paths, maybe disable building tests and documentation, press "c" again, then "g" and "q" - if there were no error (you'll need quite some -dev packages, notably qtbase, kwayland, kwindowsystem and xcb)] make && sudo make install I meant that, compile kwin, and how to patch it with the patch you will make. Hello Thomas, I'm still waiting for the patch ;) Created attachment 95714 [details]
Debug patch (5.5)
Sorry, I didn't read that as "yes I can" ;-)
The patch should cleanly apply on the 5.5 or master branches, but hunks will likely auto-resolve on 5.4 as well.
Then just start "kwin_x11 --replace &" from konsole, should print reasons for state changes.
Once we know *what* happens, we can check *why* it happens.
Ok I tried and I hope that worked. I pressed 4 times the "show desktop" icon and this is the output : Show Desktop: (external) true Show Desktop: (THIS SHOULD FOLLOW A REASON) true QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" Show Desktop: (external) false Show Desktop: (THIS SHOULD FOLLOW A REASON) false QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" Show Desktop: (external) true Show Desktop: (THIS SHOULD FOLLOW A REASON) true QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" Show Desktop: (external) false Show Desktop: (THIS SHOULD FOLLOW A REASON) false QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" The first 2 times that didn't work, the third and fourth time that worked (windows hided and restored) Ok, that just reflects your descripted actions (though I'm a bit puzzled by the QXcbWiindow warning), so the state doesn't get actually broken. This patch prints out all windows that get their layer revisited while showing the desktop. The desktop window shall be among them and its last value shall *always* be "true". All other windows shall "relate" to the desktop (ie. some dock or the wallpaper dialog etc. etc., not kwrite or dolphin) You can see the desktop WId by calling "xwininfo -int" and clicking the desktop. diff --git a/abstract_client.cpp b/abstract_client.cpp index cbe5eb6..d4a52b0 100644 --- a/abstract_client.cpp +++ b/abstract_client.cpp @@ -216,6 +216,10 @@ void AbstractClient::invalidateLayer() Layer AbstractClient::belongsToLayer() const { + if (workspace()->showingDesktop()) { + qDebug() << "\'ID:" << window() << ";WMCLASS:" << resourceClass() << ":" + << resourceName() << ";Caption:" << caption() << "\'" << geometry() << isDesktop(); + } // NOTICE while showingDesktop, desktops move to the AboveLayer // (interchangeable w/ eg. yakuake etc. which will at first remain visible) // and the docks move into the NotificationLayer (which is between Above- and This is the full output starting from "kwin_x11 --replace &" with the 2 patches. Again the first 2 times that didn't work, the third and fourth time that worked (windows hided and restored). I made some others click to show that : "xwininfo: Window id: 41943059 "Desktop — Plasma"" I don't remember if it happen the first time but there is some "Show Desktop: BROKEN (init)" : Show Desktop: BROKEN (init) Show Desktop: (THIS SHOULD FOLLOW A REASON) false Show Desktop: BROKEN (client took focus) Show Desktop: (THIS SHOULD FOLLOW A REASON) false QXcbConnection: XCB error: 8 (BadMatch), sequence: 1215, resource id: 18874373, major code: 42 (SetInputFocus), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1717, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1718, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1719, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1720, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1727, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1728, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1729, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1730, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1731, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1732, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1733, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1734, resource id: 0, major code: 14 (GetGeometry), minor code: 0 Show Desktop: BROKEN (client took focus) Show Desktop: (THIS SHOULD FOLLOW A REASON) false QXcbConnection: XCB error: 9 (BadDrawable), sequence: 2552, resource id: 0, major code: 14 (GetGeometry), minor code: 0 Show Desktop: (external) true Show Desktop: (THIS SHOULD FOLLOW A REASON) true QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" Show Desktop: (external) false Show Desktop: (THIS SHOULD FOLLOW A REASON) false QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" Show Desktop: (external) true Show Desktop: (THIS SHOULD FOLLOW A REASON) true QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" Show Desktop: (external) false Show Desktop: (THIS SHOULD FOLLOW A REASON) false QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" Show Desktop: BROKEN (client took focus) Show Desktop: (THIS SHOULD FOLLOW A REASON) false Show Desktop: BROKEN (client took focus) Show Desktop: (THIS SHOULD FOLLOW A REASON) false The BROKEN message means that the state gets broken (because a client got activated) - it's printed even if the state isn't active, so that's no problem. However, either the second patch did not apply or the layer of the desktop (or any other window) doesn't get updated while the state is active. It should actually never work... The patch applied for sure? There was no error message (about failed hunks)? The patch don't seem to be complete and doesn't work. I have this message when I try to apply it : patching file abstract_client.cpp patch unexpectedly ends in middle of line Hunk #1 FAILED at 216. 1 out of 1 hunk FAILED -- saving rejects to file abstract_client.cpp.rej So I removed the comments and used this only : diff --git a/abstract_client.cpp b/abstract_client.cpp index cbe5eb6..d4a52b0 100644 --- a/abstract_client.cpp +++ b/abstract_client.cpp @@ -216,6 +216,10 @@ void AbstractClient::invalidateLayer() Layer AbstractClient::belongsToLayer() const { + if (workspace()->showingDesktop()) { + qDebug() << "\'ID:" << window() << ";WMCLASS:" << resourceClass() << ":" + << resourceName() << ";Caption:" << caption() << "\'" << geometry() << isDesktop(); + } And that seem to work : patching file abstract_client.cpp Hunk #1 succeeded at 155 with fuzz 2 (offset -61 lines). Just to be sure this is the output when I apply the first patch : patching file client.cpp Hunk #1 succeeded at 1426 (offset 36 lines). patching file effects.cpp Hunk #1 succeeded at 914 (offset -4 lines). patching file netinfo.cpp patching file useractions.cpp Hunk #1 succeeded at 1475 (offset 32 lines). patching file workspace.cpp Hunk #1 succeeded at 356 (offset 8 lines). Hunk #2 succeeded at 915 (offset -1 lines). Hunk #3 succeeded at 1037 (offset -1 lines). Hunk #4 succeeded at 1247 (offset -1 lines). Also note that I use the 5.4 branch. (In reply to jeremy9856 from comment #29) > patching file abstract_client.cpp > patch unexpectedly ends in middle of line Copy/paste issue from bugzilla - sorry, I should have anticipated that and attached the patch as file. Please check again with the succeeded patch now. The output from comment 27 is already with the succeeded patch ;) I saw by myself that the patch had a problem and "fix" it before posting the output. In comment 29 I explained to you what I did to be sure that there is no problem. Created attachment 95772 [details]
debug layer updates on desktop showing
Seems we narrowed our problem then.
Attached is a cross-test, should be sufficient to run w/o the other two patches (informes that the state changes and which windows - if any - get layer updates)
Output from the lastest patch (only this one applied) with the same behavior (the first 2 times that didn't work, the third and fourth time that worked (windows hided and restored)) : layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) set showing desktop false layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) QXcbConnection: XCB error: 8 (BadMatch), sequence: 1118, resource id: 23068677, major code: 42 (SetInputFocus), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1476, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1477, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1478, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1479, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1480, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1481, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1482, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1483, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1486, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1487, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1488, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1489, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1490, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1491, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1492, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1493, resource id: 0, major code: 14 (GetGeometry), minor code: 0 set showing desktop false layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) QXcbConnection: XCB error: 9 (BadDrawable), sequence: 2159, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 2160, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 2161, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 2162, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 2163, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 2164, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 2165, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 2166, resource id: 0, major code: 14 (GetGeometry), minor code: 0 set showing desktop true layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" set showing desktop false layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" set showing desktop true layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" set showing desktop false layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" set showing desktop false layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) layer update 'ID: 41943068 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) layer update 'ID: 41943059 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) Pheeewww.... the second patch didn't apply (otherwise we'd now have a problem) This should do (no cnp error, the function isn't in the same file in 5.4, the result should not even have compiled ;-) You can omit the other two patches. diff --git a/layers.cpp b/layers.cpp index d8328cc..48711a1 100644 --- a/layers.cpp +++ b/layers.cpp @@ -808,6 +808,10 @@ Layer Client::layer() const Layer Client::belongsToLayer() const { + if (workspace()->showingDesktop()) { + qDebug() << "\'ID:" << window() << ";WMCLASS:" << resourceClass() << ":" + << resourceName() << ";Caption:" << caption() << "\'" << geometry() << isDesktop(); + } // NOTICE while showingDesktop, desktops move to the AboveLayer // (interchangeable w/ eg. yakuake etc. which will at first remain visible) // and the docks move into the NotificationLayer (which is between Above- and What do you mean by the second patch didn't apply. On Comment 33 the third patch (debug layer updates on desktop showing) you give me applied. I only applied this one for the test on comment 33. When you say "You can omit the other two patches" do you mean that I should now just use the fourth patch from comment 34 ? Every patch you give me applied but I'm doing it right ? This is what I do : git clone git://anongit.kde.org/kwin.git cd kwin git checkout Plasma/5.4 patch < /home/jeremy/patch.file mkdir build cd build ccmake .. [press c, e, c, e, g] make && sudo make install (In reply to jeremy9856 from comment #35) > What do you mean by the second patch didn't apply. The one I posted and you edited. The edit stripped so much context that the patch system could apply it "somewhere", but not in the correct position. Thus we got no output (while from the third patch we really should have - or things were *severly* broken, like symbols wrongly resolved by the linker) > When you say "You can omit the other two patches" do you mean that I should > now just use the fourth patch from comment 34 ? Yupp. > Every patch you give me applied but I'm doing it right ? This is what I do : you can now just: --------------- git reset --hard HEAD patch < /home/jeremy/patch.file cd build make && sudo make install OK. The patch from comment 34 seems truncated too. Is it ok ? (In reply to jeremy9856 from comment #37) > The patch from comment 34 seems truncated too. Is it ok ? Yes, the comment continues in the following line (which is no more part of the regular context) Output from the lastest patch (only this one applied) with the same behavior (the first 2 times that didn't work, the third and fourth time that worked (windows hided and restored)) : QXcbConnection: XCB error: 8 (BadMatch), sequence: 1114, resource id: 58720261, major code: 42 (SetInputFocus), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1472, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1473, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1474, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1475, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1476, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1477, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1478, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1479, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1482, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1483, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1484, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1485, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1486, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1487, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1488, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 1489, resource id: 0, major code: 14 (GetGeometry), minor code: 0 QXcbConnection: XCB error: 9 (BadDrawable), sequence: 2218, resource id: 0, major code: 14 (GetGeometry), minor code: 0 'ID: 31457308 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) false 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) true 'ID: 31457308 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) false 'ID: 31457308 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) false 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) true 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) true QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" 'ID: 58720261 ;WMCLASS: "konsole" : "konsole" ;Caption: "build : bash — Konsole" ' QRect(567,220 786x503) false 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) true 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) false 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) false QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" 'ID: 31457308 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) false 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) true 'ID: 31457308 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) false 'ID: 31457308 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Plasma" ' QRect(0,943 1920x34) false 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) true 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) true QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" QXcbWindow: Unhandled client message: "_NET_SHOWING_DESKTOP" Any news ? Hello Thomas, Don't forget me ;) I don't forget you, I just have 100 unread mails in my inbox (no shit - and it's 23:20 now ...)
The relevant ouput will be
> 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) true
> 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) false
> 'ID: 31457299 ;WMCLASS: "plasmashell" : "plasmashell" ;Caption: "Desktop — Plasma" ' QRect(0,0 1920x977) false
The desktop window seems to alter it's type at this point and is suddenly no longer a desktop (thus not moved above)
Next is to figure whether this is correct.
Please add a kwin rule ("kcmshell5 kwinrules") for the desktop (use the detect button, but match all window types!) to force the type to "Desktop".
This should prevent the behavior (and then we can check why we stop thinking that it's a desktop)
Desktop window changing window type sounds awfully like the Dashboard. > I don't forget you, I just have 100 unread mails in my inbox (no shit - and it's 23:20 now ...) Sorry about that. I can wait, it's not a big problem. > Please add a kwin rule ("kcmshell5 kwinrules") for the desktop (use the detect button, but match all window types!) to force the type to "Desktop". > This should prevent the behavior (and then we can check why we stop thinking that it's a desktop) You are right, that works ! Take your time for the next tests ;) Not your fault (nor will I manage to handle them all tonight ;-) Kai will be right on this since I just confirmed that this needs to happen for a type change from outside (unless you already had a rule for the desktop in place?) But this would have happened in 5.3.2 and 5.4.3 ... the dashboard should be gone. I can however even reproduce it. Turning off the compositor and trying "sufficiently enough" the invocation sometimes (rarely) fails. The false type seems to be intermediate (explaining the occasionally), since when my inspection xprop timer hit several seconds later, it was (back to?) _NET_WM_WINDOW_TYPE_DESKTOP. Not reproducible with other desktops at all. => Marco, any idea why the desktop would change its type when showing the desktop? > Kai will be right on this since I just confirmed that this needs to happen for a type change from outside (unless you already had a rule for the desktop in place?)
I don't have one (except the one you ask me to add).
Ok, did "xprop -spy _NET_WM_WINDOW_TYPE" on the plasmashell desktop window and it changes like hell on desktop showing, most of the time from _NET_WM_WINDOW_TYPE_DESKTOP to _NET_WM_WINDOW_TYPE_DESKTOP (why does it "update" its type property???) and sometimes it turnes into "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE, _NET_WM_WINDOW_TYPE_NORMAL", so when the layer update looks "at a bad time", it's not a desktop. This is clearly a bug in plasmashell, re-assigning. there is an ensureWindowType() in DesktopView that seems a bit too happy about re setting the type on a lot of kinds of events, so yeah, that has to be redesigned a bit is it safe (and fast enough) checking what the existing window type is fairly often? (In reply to Marco Martin from comment #48) > is it safe (and fast enough) checking what the existing window type is > fairly often? I beg your pardon?? The KWindowSystem classes operate on locally cached data, so the X property isn't read on queries, but when it changes. The check is always "safe". Why do you think you need to "ensureWindowType()"? Nothing but the client (plasmashell) should ever change the type anyway. Indeed, it actually "should" (only) be set for an unmapped (before showing/managing) window - KWin is a bit graceful to respect runtime changes here (likely because the spec says "should" - and once more it's no way clear what the expected behavior is itr....) => The "correct" behavior is to set the type before showing the screen and then "expecting" it to remain untouched. If "something else™" touches *your* property, "something else™" is maicious or broken. > The "correct" behavior is to set the type before showing the screen and then "expecting" it to remain untouched. If "something else™" touches *your* property, "something else™" is maicious or broken.
in theory yes, in practice: well Qt might mess with it
because the whole api of that class was done around that yeah, was fine to change window type at runtime. since it turned out it isn't, the dashboard thing was removed, still a lot of untangling has to be done. probably it should be able to set the window type only before a window show? Unless Qt screws something (implicitly, by generating a new drawable?) you should only have to set the window type *once*. Unfortunately, Qt::WA_X11NetWmWindowTypeDesktop is only available for QWidget (and I assume it's not?) Is there any bugreport on the type being altered unwantedly or can we assume that this is just a leftover from the desktop -> dashboard approach? > Qt::WA_X11NetWmWindowTypeDesktop is only available for QWidget (and I assume it's not?)
AFAIK it's anyway ignored in the xcb platform.
Any news about this ? Thanks. No interest in fixing this ? ?? Is there a fix planned ? I cannot reproduce the problem on latest master. The desktop window stays in window type desktop. I will check on my side but that's great if it's already fixed ! Martin, is it working even with what Thomas said in Comment 47 ? oh no, with xprop spy I can still see changes. Sorry for the noise I confirm too that with plasma 5.5.4 the problem is still here. The "show desktop" feature doesn't work everytime. *** Bug 365685 has been marked as a duplicate of this bug. *** @Jeremy, as a workaround create a kwin rule (this oc. requires you to use kwin as WM ;-) to enforce the desktop to be of desktop type. Ensure to match normal and "unmanged" windows as well to have the rule applied. Plasma can then fight with QtQuick on juggling the type as much as it wants, KWin simply won't look there anymore. Thanks Thomas but I had enough of KDE5/KF5/Plasma5 bugs so I switch to Gnome 3 :D According to the latest dupe, this isn't limited to desktop showing but the type juggling also occurs when simply clicking the desktop when as a result the desktop eg. moves above keep below windows. Hello Thomas, I'm thinking using KDE again so what do you want me to test exactly ? Thanks ! Sorry for the delay (but I'm officially no longer here ;-) run "kcmshell5 kwinrules", "detect", click the desktop, ensure to select *all* window types in the lower listview of the main dialog and finally in its "appearance and fixes" tab, force the window to be of desktop type. That doesn't change anything it seems. "show desktop" doesn't work sometime. Well I spook too soon. The rule wasn't saved (I probably didn't click on "apply" even if I thought I had). So with the rule "show desktop" seem to work properly. It seem to happen far less frequently now but still happen (Manjaro, Plasma 5.7.4, KF 5.25, Qt 5.7). Is it fixed now ? Do you know if it's fixed now ? Looks related to https://bugs.kde.org/show_bug.cgi?id=351039 Can't reproduce in: Distribution: KDE neon Developer Edition - Stable Branches Plasma: 5.11.4 Frameworks: 5.41.0 Qt: 5.9.3 Kernel 4.10.0-40-generic Type: 64-bit I also can't reproduce in 5.11.5, Frameworks 5.41, and Qt 5.9.1. For anyone who is still hitting this with recent versions of things, can you list them here? Thanks! Yeah, fixed now. |