I'm using the Crystal White mouse cursor theme on my system. Since upgrading to KDE 4.11 (it was RC1 to be precise), the mouse cursor doesn't change it's shape anymore when I move a window. When switching the theme to one of the Oxygen variants this works, but it doesn't work with any other theme I have installed. Reproducible: Always Steps to Reproduce: 1. Set a different mouse cursor theme than Oxygen in systemsettings 2. Click on a window's titlebar and move it Actual Results: Mouse cursor stays the same while moving the window Expected Results: Mouse cursor should change to the "move window" shape (normally arrows) This is a regression in 4.11, this worked fine with the same themes up to 4.10.5. It only happens with the "Window Move" shape, the other shapes (like "Window resize") work correctly. Another glitch that may be related: When I change the cursor theme in systemsettings and click on "Apply", the cursor theme changes immediately, but moving a window still shows the cursor from the previously selected theme (this also happens with the Oxygen themes). The other shapes work correctly though (window size f.e.). After logging out and in again this "fixes" itself and shows the correct "move" cursor for the Oxygen themes and the standard (i.e. not changed to the "move window" shape) cursor for other themes.
please attach the output of "qdbus org.kde.kwin /KWin supportInformation"
Theme doesn't change because the KWin Cursor implementation does not hook onto KGlobalSettings::cursorChanged() to wipe the m_cursors hash. This *might* cause the issue with the other themes not using the proper shape, but can't say (nor reproduce) Can you try a patch?
*some* cursor themes do not apply the cross - some don't even have in the "kcmshell4 cursortheme" list (eg. i use neutral++ which like the oxygen themes shows the corss cursor - though it's more like a hand there ;-) There's maybe an ambigious name convention / case sensitivity issue with those themes? I also installed a "crystal xcursors" theme, but it doesn't show up in the theme list at all.... Altering the bug to what can be confirmed being a kwin issue.
Created attachment 82720 [details] Output of qdbus org.kde.kwin /KWin supportInformation.
Created attachment 82721 [details] Screenshot showing the theme's cursors (In reply to comment #2) > Theme doesn't change because the KWin Cursor implementation does not hook > onto KGlobalSettings::cursorChanged() to wipe the m_cursors hash. I think you misunderstood. The theme _does_ change, just not the "Cross" shape. And the "Cross" shape doesn't work at all with themes other than Oxygen. > This *might* cause the issue with the other themes not using the proper > shape, but can't say (nor reproduce) But all the other shapes work. It's just the "cross" cursor that doesn't work. (In reply to comment #3) > *some* cursor themes do not apply the cross - some don't even have in the > "kcmshell4 cursortheme" list (eg. i use neutral++ which like the oxygen > themes shows the corss cursor - though it's more like a hand there ;-) > > There's maybe an ambigious name convention / case sensitivity issue with > those themes? The theme does contain it, see attached screenshot. The mouse cursor does change to that shape if I hover over it (see the screenshot for proof). And as I wrote, the same themes work fine in 4.10.5. Here's a file listing: ls -l /usr/share/icons/crystalwhite/cursors/ insgesamt 272 lrwxrwxrwx 1 root root 14 11. Mär 2013 00008160000006810000408080010102 -> v_double_arrow lrwxrwxrwx 1 root root 14 11. Mär 2013 028006030e0e7ebffc7f7070c0600140 -> h_double_arrow lrwxrwxrwx 1 root root 14 11. Mär 2013 03b6e0fcb3499374a867c041f52298f0 -> crossed_circle lrwxrwxrwx 1 root root 14 11. Mär 2013 08e8e1c95fe2fc01f976f1e063a24ccd -> left_ptr_watch lrwxrwxrwx 1 root root 4 11. Mär 2013 1081e37283d90000800003c07f3ef6bf -> copy lrwxrwxrwx 1 root root 17 11. Mär 2013 14fef782d02440884392942c11205230 -> sb_h_double_arrow lrwxrwxrwx 1 root root 17 11. Mär 2013 2870a09082c103050810ffdffffe0204 -> sb_v_double_arrow lrwxrwxrwx 1 root root 4 11. Mär 2013 3085a0e285430894940527032f8b26df -> link lrwxrwxrwx 1 root root 14 11. Mär 2013 3ecb610c1bf2410f44200f48c40d3599 -> left_ptr_watch lrwxrwxrwx 1 root root 4 11. Mär 2013 4498f0e0c1937ffe01fd06f973665830 -> move lrwxrwxrwx 1 root root 4 11. Mär 2013 6407b0e94181790501fd1e167b474872 -> copy lrwxrwxrwx 1 root root 4 11. Mär 2013 640fb0e74195791501fd1ed57b41487f -> link lrwxrwxrwx 1 root root 4 11. Mär 2013 9081237383d90e509aa00f00170e968f -> move lrwxrwxrwx 1 root root 5 11. Mär 2013 9d800788f1b08800ae810202380a0822 -> hand1 lrwxrwxrwx 1 root root 9 11. Mär 2013 arrow -> right_ptr -rw-r--r-- 1 root root 1344 27. Jän 2013 base_arrow_down -rw-r--r-- 1 root root 1344 27. Jän 2013 base_arrow_up lrwxrwxrwx 1 root root 15 11. Mär 2013 based_arrow_down -> base_arrow_down lrwxrwxrwx 1 root root 13 11. Mär 2013 based_arrow_up -> base_arrow_up -rw-r--r-- 1 root root 1288 27. Jän 2013 bd_double_arrow -rw-r--r-- 1 root root 1288 27. Jän 2013 bottom_left_corner -rw-r--r-- 1 root root 1288 27. Jän 2013 bottom_right_corner -rw-r--r-- 1 root root 1352 27. Jän 2013 bottom_side lrwxrwxrwx 1 root root 15 11. Mär 2013 c7088f0f3e6c8088236ef8e1e3e70000 -> bd_double_arrow -rw-r--r-- 1 root root 1472 27. Jän 2013 center_ptr -rw-r--r-- 1 root root 2664 27. Jän 2013 circle -rw-r--r-- 1 root root 2560 27. Jän 2013 copy -rw-r--r-- 1 root root 2564 27. Jän 2013 cross -rw-r--r-- 1 root root 2368 27. Jän 2013 crossed_circle lrwxrwxrwx 1 root root 5 11. Mär 2013 crosshair -> cross lrwxrwxrwx 1 root root 5 11. Mär 2013 cross_reverse -> cross lrwxrwxrwx 1 root root 14 11. Mär 2013 d9ce0ab605698f320427677b458ad60b -> question_arrow -rw-r--r-- 1 root root 2664 27. Jän 2013 dot -rw-r--r-- 1 root root 2368 27. Jän 2013 dotbox lrwxrwxrwx 1 root root 14 11. Mär 2013 double_arrow -> v_double_arrow lrwxrwxrwx 1 root root 9 11. Mär 2013 draft_large -> right_ptr lrwxrwxrwx 1 root root 9 11. Mär 2013 draft_small -> right_ptr -rw-r--r-- 1 root root 2368 27. Jän 2013 draped_box lrwxrwxrwx 1 root root 5 11. Mär 2013 e29285e634086352946a0e7090d73106 -> hand2 lrwxrwxrwx 1 root root 15 11. Mär 2013 fcf1c3c7cd4491d801f1e1c78f100000 -> fd_double_arrow -rw-r--r-- 1 root root 1288 27. Jän 2013 fd_double_arrow -rw-r--r-- 1 root root 2368 27. Jän 2013 fleur -rw-r--r-- 1 root root 2172 27. Jän 2013 hand lrwxrwxrwx 1 root root 4 11. Mär 2013 hand1 -> hand lrwxrwxrwx 1 root root 4 11. Mär 2013 hand2 -> hand -rw-r--r-- 1 root root 1504 27. Jän 2013 h_double_arrow -rw-r--r-- 1 root root 1628 27. Jän 2013 left_ptr -rw-r--r-- 1 root root 54608 27. Jän 2013 left_ptr_watch -rw-r--r-- 1 root root 1504 27. Jän 2013 left_side -rw-r--r-- 1 root root 2560 27. Jän 2013 link lrwxrwxrwx 1 root root 15 11. Mär 2013 ll_angle -> fd_double_arrow lrwxrwxrwx 1 root root 15 11. Mär 2013 lr_angle -> bd_double_arrow -rw-r--r-- 1 root root 2768 27. Jän 2013 move -rw-r--r-- 1 root root 2368 27. Jän 2013 pencil -rw-r--r-- 1 root root 3200 27. Jän 2013 pirate lrwxrwxrwx 1 root root 5 11. Mär 2013 plus -> cross -rw-r--r-- 1 root root 2368 27. Jän 2013 question_arrow -rw-r--r-- 1 root root 1312 27. Jän 2013 right_ptr -rw-r--r-- 1 root root 1504 27. Jän 2013 right_side -rw-r--r-- 1 root root 2332 27. Jän 2013 sb_h_double_arrow -rw-r--r-- 1 root root 1408 27. Jän 2013 sb_right_arrow -rw-r--r-- 1 root root 1472 27. Jän 2013 sb_up_arrow -rw-r--r-- 1 root root 2040 27. Jän 2013 sb_v_double_arrow lrwxrwxrwx 1 root root 5 11. Mär 2013 tcross -> cross lrwxrwxrwx 1 root root 8 11. Mär 2013 top_left_arrow -> left_ptr -rw-r--r-- 1 root root 1288 27. Jän 2013 top_left_corner -rw-r--r-- 1 root root 1288 27. Jän 2013 top_right_corner -rw-r--r-- 1 root root 1352 27. Jän 2013 top_side -rw-r--r-- 1 root root 1352 27. Jän 2013 v_double_arrow -rw-r--r-- 1 root root 66320 27. Jän 2013 watch -rw-r--r-- 1 root root 1744 27. Jän 2013 X_cursor -rw-r--r-- 1 root root 1312 27. Jän 2013 xterm > I also installed a "crystal xcursors" theme, but it doesn't show up in the > theme list at all.... According to the package description, it's this: http://digilander.iol.it/m4rt/crystalcursors.html But it also happens with all other themes I have installed, except Oxygen. That includes: DMZ, Adwaita, handhelds, redglass, whiteglass > Can you try a patch? Yes. I would be glad to.
Well, I wrote "cross" shape in my previous , but the theme's image file is actually called "fleur". It's the shape that should be shown when you move a window.
Well, "cross" would be loaded and given the maaaaaaaaany sylinks and copies i got in ~/.icons/Neutral++/cursors i assume this is the issue: completely inconsistent naming between what's loaded and the themes provide, eg. "EntisCursors" has "fleur" as well, but no "cross" (though "crossed_circle") I've no idea about fdo cursor specification, but hope there's at least one. I'll check it. Either this is a bug in KWin/KDE (for the icons should be "fleur") or in the cursor theme (for it should be "cross")
I found out the reason why the mouse cursor doesn't change while moving a window: Those themes don't contain a file "size_all". If I manually create a symlink named "size_all" to "fleur" (as included in the Oxygen themes), it works. But I still don't understand why that shape shows up in systemsettings->Workspace Appearance->Cursor Theme then. And those themes fully worked (without "size_all") in 4.10.5.
The cursor theme kcm loads "size_all" and resorts to "fleur" as failsafe - "cross" is something entirely different. The kwin cursor abstraction just loads size_all. I've not yet found any half-wise official naming convention (and am far more confused than before ;-)
Next second i found http://www.freedesktop.org/wiki/Specifications/cursor-spec/ after http://lists.freedesktop.org/archives/xdg/2003-October/001021.html It mentions neither ... =) Luckily, there's a familiar name in the document... Fredrik, what's the correct name here? "fleur" or "size_all"?
> The kwin cursor abstraction just loads size_all. ftr: the kwin cursor abstraction uses the same names as QCursor (Qt 4.8) does.
(In reply to comment #10) > Next second i found > http://www.freedesktop.org/wiki/Specifications/cursor-spec/ after > http://lists.freedesktop.org/archives/xdg/2003-October/001021.html > > It mentions neither ... =) Well, the mailinglist post does mention the "fleur cursor". ;) And since _all_ my themes have "fleur" (even Oxygen, they additionally provide the "size_all" symlink to "fleur") I would prefer that. (In reply to comment #9) > The cursor theme kcm loads "size_all" and resorts to "fleur" as failsafe - > "cross" is something entirely different. > The kwin cursor abstraction just loads size_all. Thanks, that explains it. But shouldn't those two behave the same for consistency? This can cause confusion for the user. And btw. I have tested your review request now. It seems to fix the issue that the fleur cursor (why only this one?) was still taken from the previous theme after a theme change. But I discovered another glitch that's still there with your patch, not sure if I should open another bug report for this: After changing the theme and clicking on "Apply" it happens that there's either no cursor change anymore for window sizing, or the cursors are swapped (the wrong arrows are used). All other shapes seem to work though. I then killed and restarted kwin and now the mouse cursor changes the theme when moved over the window decorations??? (I think that's bug#324120 though) Logout/Login again fixes those glitches.
(In reply to comment #12) > Well, the mailinglist post does mention the "fleur cursor". ;) > And since _all_ my themes have "fleur" (even Oxygen, they additionally > provide the "size_all" symlink to "fleur") I would prefer that. > [...] > Thanks, that explains it. But shouldn't those two behave the same for > consistency? This can cause confusion for the user. See Martins comment on either. (Code is apparently copied from Qt - happened indepently and later) I'd prefer the name that is somehow specified somewhere. What icon themes do doesn't matter - they're most likely all created by the same conversion script ... > And btw. I have tested your review request now. It seems to fix the issue > that the fleur cursor (why only this one?) was still taken from the previous > theme after a theme change. Yes, that's the idea. > After changing the theme and clicking on "Apply" it happens that there's > either no cursor change anymore for window sizing, or the cursors are > swapped (the wrong arrows are used). I get no size arrows as hints, but on resizing - but only after trying a "broken" theme. These (hinting, not dragging/resizing) cursors are however set via QWidget::setCursor(enum Qt::CursorShape) > I then killed and restarted kwin and now the mouse cursor changes the theme > when moved over the window decorations??? (I think that's bug#324120 though) I get the same for every new appliaction (and previously used shape?) Maybe the kcm forgets to delete some on disk cache.
> See Martins comment on either. (Code is apparently copied from Qt - happened > indepently and later) I thought about it more and remembered that I did not look into the code, but followed the documentation: https://qt-project.org/doc/qt-4.8/qcursor.html But it's the same in the code, only size_all: http://code.woboq.org/kde/qt4/src/gui/kernel/qcursor_x11.cpp.html#262
Created attachment 82738 [details] Screenshot showing wrong resize cursor after theme change (In reply to comment #13) > See Martins comment on either. (Code is apparently copied from Qt - happened > indepently and later) > > I'd prefer the name that is somehow specified somewhere. What icon themes do > doesn't matter - they're most likely all created by the same conversion > script ... > OK, so that was apparently changed on purpose for 4.11. I agree with you of course that the name used should be part of a specification. It's just that I have been using that Crystal White theme for about 10 years, and suddenly that fleur/size_all cursor stopped working, so I thought this must be a regression in kwin. But I really think the kcm and kwin should use exactly the same files for consistency. But this can be seen as bug in the kcm as well, of course. > > After changing the theme and clicking on "Apply" it happens that there's > > either no cursor change anymore for window sizing, or the cursors are > > swapped (the wrong arrows are used). > I get no size arrows as hints, but on resizing - but only after trying a > "broken" theme. > These (hinting, not dragging/resizing) cursors are however set via > QWidget::setCursor(enum Qt::CursorShape) > What do you mean with "hinting"? If I switch _to_ the Crystal White theme and press "Apply", I get the wrong sizing cursor when moving the mouse to a window's corner (see the newly attached screenshot for clarification). The same happens with those other mentioned themes that provide a resize cursor. (redglass f.e. doesn't, so if I switch to that, the cursor doesn't change its shape on resizing, and I don't have a different cursor shape for resizing even if I change to another theme _with_ those cursors then) When I logout and login again, all this is fixed and the correct shapes are shown (and redglass f.e. shows X's? default one). I think this has to do with the theme's filenames as well, since those themes don't include "size_bdiag" and "size_fdiag" as Oxygen does (they are called "fd_double_arrow" and "bd_double_arrow" in Crystal White). If I create a link it seems to work correctly even after a theme change. But IMHO there's a bug in kwin here: apparently different filenames are used as fallback by kwin when starting up, as opposed to loading a new theme when already running. (I could be wrong of course, and something completely different happens... ;) ) > I get the same for every new appliaction (and previously used shape?) > Maybe the kcm forgets to delete some on disk cache. Hm, but why does it get fixed when you logout and login again? If it's a stale disk cache, the problem should persist then, shouldn't it?
I just want to add that the thing about the wrong resize cursor already happens in 4.10.5. The rest works fine there, though, as far as I can tell (including the resize cursor for a theme that doesn't provide one).
(In reply to comment #15) > What do you mean with "hinting"? There's a cursor set when you hover the edge of the decoration/titlebar, "hinting" the action that is gonna take place. That one's set by QWidget. Then there's a cursor set when actually performing the action (also with alt+rmb) That one's set by KWin directly. > But IMHO there's a bug in kwin here: apparently different filenames are used > as fallback by kwin when starting up, as opposed to loading a new theme when > already running. (I could be wrong of course, and something completely > different happens... ;) ) The hovering cursors are set by Qt, not kwin - could be due to Qt internal cursor image caching. > Hm, but why does it get fixed when you logout and login again? If it's a > stale disk cache, the problem should persist then, shouldn't it? Unless Qt deletes it - or the caching happens on the X11 server (what's actually more reasonable), ie. Qt keeps a "private" cache as root property or whatnot. I'd have to look that up ;-)
(In reply to comment #10) > Next second i found > http://www.freedesktop.org/wiki/Specifications/cursor-spec/ after > http://lists.freedesktop.org/archives/xdg/2003-October/001021.html > > It mentions neither ... =) > > Luckily, there's a familiar name in the document... > Fredrik, what's the correct name here? "fleur" or "size_all"? "fleur" is the name of the crossed double-arrow cursor in the X11 cursor font, but QCursor expects this cursor to be named "size_all". I assume the Qt developer who added it wasn't aware that the cursor already existed under a different name. The proposed freedesktop standard is not implemented by anyone AFAIK, including us.
head -> table Seems wayland just recycles X11 cursor themes. Qt5.2 as the same names, so i guess we'll have to follow the alternatives approach from xcursortheme (instead of resorting to XCB_CURSOR_NONE) OTOH, a theme that does not include the cursors which Qt expects is just broken with any Qt client anyway - so why should it work with only KWin... *sigh* In the meantime: http://kde-look.org/content/show.php?content=161037
(In reply to comment #17) > (In reply to comment #15) > > What do you mean with "hinting"? > There's a cursor set when you hover the edge of the decoration/titlebar, > "hinting" the action that is gonna take place. > That one's set by QWidget. > > Then there's a cursor set when actually performing the action (also with > alt+rmb) > That one's set by KWin directly. > Aha. So then, "hinting" shows the wrong shape as can be seen in the screenshot. The actual resize showed the shape from the previous set theme. With your patch added, it does not change the mouse cursor at all. I somehow have the impression that this is actually caused by the kcm. It shows the wrong "resize" shape in the preview for those themes ("size_fdiag", whereas for Oxygen "size_bdiag" is shown). Maybe this wrong shape gets added to that cache you mentioned because of that preview? Anyway, this is all down to the theme's filenames now it seems as it works correctly when I add symlinks, so that maybe should be fixed in the themes themselves. The only thing left then is the discrepancy between the kcm's preview and kwin regarding the shapes I think.
I had a look at the kcm's sources now to find out why the wrong resize pointer is shown for those themes that don't provide "size_bdiag". Apparently in XCursorTheme::findAlternative() (file kcontrol/input/xcursor/xcursortheme.cpp) the alternatives for "size_bdiag" and "size_fdiag" are swapped. I have created a separate bug report for this: bug#325837 I just want to point to that function here, maybe something similar should be used in kwin as well? And FTR, there's this comment in there: // Qt uses non-standard names for some core cursors. // If Xcursor fails to load the cursor, Qt creates it with the correct name using the // core protcol instead (which in turn calls Xcursor). We emulate that process here. // Note that there's a core cursor called cross, but it's not the one Qt expects.
Git commit 7dc2baf74d67761ecee579af26a1b80ba7daa92c by Martin Gräßlin. Committed on 08/01/2015 at 16:03. Pushed by graesslin into branch 'Plasma/5.2'. Update cursor theme when it changes at runtime Connecting to the DBus signal emitted on KGlobalAccels by the cursor kcm and forcing a reload of all cursors. For runtime config change we need to take the config value and need to ignore the now outdated environment variables. REVIEW: 121928 FIXED-IN: 5.2.0 M +24 -6 cursor.cpp M +2 -0 cursor.h http://commits.kde.org/kwin/7dc2baf74d67761ecee579af26a1b80ba7daa92c