Bug 451158

Summary: With display scaling, incorrect cursor scaling on non-XWayland-using GTK and Electron apps due to their lack of support for the cursor-shape-v1 protocl
Product: [Plasma] kwin Reporter: nocturne <gardenofglass54>
Component: wayland-genericAssignee: KWin default assignee <kwin-bugs-null>
Status: RESOLVED UPSTREAM    
Severity: normal CC: ad.liu.jin, be.0, contijn.buijs, djmenig, kde, milakam, nate, oxalicc, postix
Priority: NOR Keywords: wayland
Version: 5.24.2   
Target Milestone: ---   
Platform: Arch Linux   
OS: Linux   
Latest Commit: Version Fixed In:
Bug Depends on:    
Bug Blocks: 459161    
Attachments: display scaling 200% and cursor size 48 displaying small cursor on gtk window.
correct cursor size for 200% scaling and cursor size 48

Description nocturne 2022-03-05 11:34:15 UTC
Created attachment 147290 [details]
display scaling 200% and cursor size 48 displaying small cursor on gtk window.

SUMMARY
On a single 4k display on laptop, the cursor is scaled incorrectly in wayland gtk apps, it is smaller when it is over gtk app surfaces compared to rest of desktop. Noticed this issue since upgrade to plasma 5.23. Not sure if this is a bug with upgraded gtk library or plasma.
Observed the following:
1) with 250% display scaling and cursor size of 24, The cursor is smaller in gtk apps.
2) with 200% display scaling and cursor size of 24, the issue is not present. Cursor size is constant in gtk apps, qt apps and plasma desktop
3) with 200% display scaling and cursor size of 48, the issue is again present, the cursor is smaller in gtk apps.

STEPS TO REPRODUCE
1. Start kde wayland session.
2. Set display scaling to 250%.
3. Compare cursor sizes on regular desktop with that on native wayland gtk apps.

OBSERVED RESULT
Cursor sizes are smaller in gtk apps


EXPECTED RESULT
Cursor size should be same.

SOFTWARE/OS VERSIONS 
Linux/KDE Plasma: 
(available in About System)
KDE Plasma Version: 5.24.2
KDE Frameworks Version: 5.91.0
Qt Version: 5.15.2
Comment 1 nocturne 2022-03-05 11:35:36 UTC
Created attachment 147291 [details]
correct cursor size for 200% scaling and cursor size 48
Comment 2 Be 2022-05-27 19:05:50 UTC
I am also running into this bug with kwin 5.24.5 on Fedora 36.
Comment 3 Vlad Zahorodnii 2022-09-15 13:39:38 UTC

*** This bug has been marked as a duplicate of bug 459161 ***
Comment 4 Nate Graham 2023-01-17 16:32:27 UTC
Not quite a duplicate of Bug 459161; rather a sub-task of it given that it's an umbrella bug.
Comment 5 Nate Graham 2023-12-11 16:10:39 UTC
*** Bug 471001 has been marked as a duplicate of this bug. ***
Comment 6 Nate Graham 2023-12-11 16:20:08 UTC
Git commit 215941542b886b20d1364fefd8c28d733b96fc20 by Nate Graham, on behalf of Jin Liu.
Committed on 11/12/2023 at 17:20.
Pushed by ngraham into branch 'master'.

cursor: generate sizes corresponding to more global scales

I.e. 24px x (50% 75% 100% 125% 150% 175% 200% 225% 250% 275% 300%).

This should make Breeze cursors properly sized on Wayland (at least when
using those scale factors) in GTK3 and Electron apps, and any other apps
written in toolkits that don't implement the cursor-shape-v1 protocol.
Related: bug 448555

M  +-    --    cursors/Breeze/Breeze/cursors/alias
M  +-    --    cursors/Breeze/Breeze/cursors/all-scroll
M  +-    --    cursors/Breeze/Breeze/cursors/bottom_left_corner
M  +-    --    cursors/Breeze/Breeze/cursors/bottom_right_corner
M  +-    --    cursors/Breeze/Breeze/cursors/bottom_side
M  +-    --    cursors/Breeze/Breeze/cursors/cell
M  +-    --    cursors/Breeze/Breeze/cursors/center_ptr
M  +-    --    cursors/Breeze/Breeze/cursors/col-resize
M  +-    --    cursors/Breeze/Breeze/cursors/color-picker
M  +-    --    cursors/Breeze/Breeze/cursors/context-menu
M  +-    --    cursors/Breeze/Breeze/cursors/copy
M  +-    --    cursors/Breeze/Breeze/cursors/crosshair
M  +-    --    cursors/Breeze/Breeze/cursors/default
M  +-    --    cursors/Breeze/Breeze/cursors/dnd-move
M  +-    --    cursors/Breeze/Breeze/cursors/dnd-no-drop
M  +-    --    cursors/Breeze/Breeze/cursors/down-arrow
M  +-    --    cursors/Breeze/Breeze/cursors/draft
M  +-    --    cursors/Breeze/Breeze/cursors/fleur
M  +-    --    cursors/Breeze/Breeze/cursors/help
M  +-    --    cursors/Breeze/Breeze/cursors/left-arrow
M  +-    --    cursors/Breeze/Breeze/cursors/left_side
M  +-    --    cursors/Breeze/Breeze/cursors/no-drop
M  +-    --    cursors/Breeze/Breeze/cursors/not-allowed
M  +-    --    cursors/Breeze/Breeze/cursors/openhand
M  +-    --    cursors/Breeze/Breeze/cursors/pencil
M  +-    --    cursors/Breeze/Breeze/cursors/pirate
M  +-    --    cursors/Breeze/Breeze/cursors/pointer
M  +-    --    cursors/Breeze/Breeze/cursors/progress
M  +-    --    cursors/Breeze/Breeze/cursors/right-arrow
M  +-    --    cursors/Breeze/Breeze/cursors/right_ptr
M  +-    --    cursors/Breeze/Breeze/cursors/right_side
M  +-    --    cursors/Breeze/Breeze/cursors/row-resize
M  +-    --    cursors/Breeze/Breeze/cursors/size_bdiag
M  +-    --    cursors/Breeze/Breeze/cursors/size_fdiag
M  +-    --    cursors/Breeze/Breeze/cursors/size_hor
M  +-    --    cursors/Breeze/Breeze/cursors/size_ver
M  +-    --    cursors/Breeze/Breeze/cursors/text
M  +-    --    cursors/Breeze/Breeze/cursors/top_left_corner
M  +-    --    cursors/Breeze/Breeze/cursors/top_right_corner
M  +-    --    cursors/Breeze/Breeze/cursors/top_side
M  +-    --    cursors/Breeze/Breeze/cursors/up-arrow
M  +-    --    cursors/Breeze/Breeze/cursors/vertical-text
M  +-    --    cursors/Breeze/Breeze/cursors/wait
M  +-    --    cursors/Breeze/Breeze/cursors/wayland-cursor
M  +-    --    cursors/Breeze/Breeze/cursors/x-cursor
M  +-    --    cursors/Breeze/Breeze/cursors/zoom-in
M  +-    --    cursors/Breeze/Breeze/cursors/zoom-out
M  +25   -42   cursors/Breeze/build.sh
D  +-    --    cursors/Breeze/build/x1/alias.png
D  +-    --    cursors/Breeze/build/x1/all-scroll.png
D  +-    --    cursors/Breeze/build/x1/bottom_left_corner.png
D  +-    --    cursors/Breeze/build/x1/bottom_right_corner.png
D  +-    --    cursors/Breeze/build/x1/bottom_side.png
D  +-    --    cursors/Breeze/build/x1/cell.png
D  +-    --    cursors/Breeze/build/x1/center_ptr.png
D  +-    --    cursors/Breeze/build/x1/col-resize.png
D  +-    --    cursors/Breeze/build/x1/color-picker.png
D  +-    --    cursors/Breeze/build/x1/context-menu.png
D  +-    --    cursors/Breeze/build/x1/copy.png
D  +-    --    cursors/Breeze/build/x1/crosshair.png
D  +-    --    cursors/Breeze/build/x1/default.png
D  +-    --    cursors/Breeze/build/x1/dnd-move.png
D  +-    --    cursors/Breeze/build/x1/dnd-no-drop.png
D  +-    --    cursors/Breeze/build/x1/down-arrow.png
D  +-    --    cursors/Breeze/build/x1/draft.png
D  +-    --    cursors/Breeze/build/x1/fleur.png
D  +-    --    cursors/Breeze/build/x1/help.png
D  +-    --    cursors/Breeze/build/x1/left-arrow.png
D  +-    --    cursors/Breeze/build/x1/left_side.png
D  +-    --    cursors/Breeze/build/x1/no-drop.png
D  +-    --    cursors/Breeze/build/x1/not-allowed.png
D  +-    --    cursors/Breeze/build/x1/openhand.png
D  +-    --    cursors/Breeze/build/x1/pencil.png
D  +-    --    cursors/Breeze/build/x1/pirate.png
D  +-    --    cursors/Breeze/build/x1/pointer.png
D  +-    --    cursors/Breeze/build/x1/progress-01.png
D  +-    --    cursors/Breeze/build/x1/progress-02.png
D  +-    --    cursors/Breeze/build/x1/progress-03.png
D  +-    --    cursors/Breeze/build/x1/progress-04.png
D  +-    --    cursors/Breeze/build/x1/progress-05.png
D  +-    --    cursors/Breeze/build/x1/progress-06.png
D  +-    --    cursors/Breeze/build/x1/progress-07.png
D  +-    --    cursors/Breeze/build/x1/progress-08.png
D  +-    --    cursors/Breeze/build/x1/progress-09.png
D  +-    --    cursors/Breeze/build/x1/progress-10.png
D  +-    --    cursors/Breeze/build/x1/progress-11.png
D  +-    --    cursors/Breeze/build/x1/progress-12.png
D  +-    --    cursors/Breeze/build/x1/progress-13.png
D  +-    --    cursors/Breeze/build/x1/progress-14.png
D  +-    --    cursors/Breeze/build/x1/progress-15.png
D  +-    --    cursors/Breeze/build/x1/progress-16.png
D  +-    --    cursors/Breeze/build/x1/progress-17.png
D  +-    --    cursors/Breeze/build/x1/progress-18.png
D  +-    --    cursors/Breeze/build/x1/progress-19.png
D  +-    --    cursors/Breeze/build/x1/progress-20.png
D  +-    --    cursors/Breeze/build/x1/progress-21.png
D  +-    --    cursors/Breeze/build/x1/progress-22.png
D  +-    --    cursors/Breeze/build/x1/progress-23.png
D  +-    --    cursors/Breeze/build/x1/progress.png
D  +-    --    cursors/Breeze/build/x1/right-arrow.png
D  +-    --    cursors/Breeze/build/x1/right_ptr.png
D  +-    --    cursors/Breeze/build/x1/right_side.png
D  +-    --    cursors/Breeze/build/x1/row-resize.png
D  +-    --    cursors/Breeze/build/x1/size_bdiag.png
D  +-    --    cursors/Breeze/build/x1/size_fdiag.png
D  +-    --    cursors/Breeze/build/x1/size_hor.png
D  +-    --    cursors/Breeze/build/x1/size_ver.png
D  +-    --    cursors/Breeze/build/x1/text.png
D  +-    --    cursors/Breeze/build/x1/top_left_corner.png
D  +-    --    cursors/Breeze/build/x1/top_right_corner.png
D  +-    --    cursors/Breeze/build/x1/top_side.png
D  +-    --    cursors/Breeze/build/x1/up-arrow.png
D  +-    --    cursors/Breeze/build/x1/vertical-text.png
D  +-    --    cursors/Breeze/build/x1/wait-01.png
D  +-    --    cursors/Breeze/build/x1/wait-02.png
D  +-    --    cursors/Breeze/build/x1/wait-03.png
D  +-    --    cursors/Breeze/build/x1/wait-04.png
D  +-    --    cursors/Breeze/build/x1/wait-05.png
D  +-    --    cursors/Breeze/build/x1/wait-06.png
D  +-    --    cursors/Breeze/build/x1/wait-07.png
D  +-    --    cursors/Breeze/build/x1/wait-08.png
D  +-    --    cursors/Breeze/build/x1/wait-09.png
D  +-    --    cursors/Breeze/build/x1/wait-10.png
D  +-    --    cursors/Breeze/build/x1/wait-11.png
D  +-    --    cursors/Breeze/build/x1/wait-12.png
D  +-    --    cursors/Breeze/build/x1/wait-13.png
D  +-    --    cursors/Breeze/build/x1/wait-14.png
D  +-    --    cursors/Breeze/build/x1/wait-15.png
D  +-    --    cursors/Breeze/build/x1/wait-16.png
D  +-    --    cursors/Breeze/build/x1/wait-17.png
D  +-    --    cursors/Breeze/build/x1/wait-18.png
D  +-    --    cursors/Breeze/build/x1/wait-19.png
D  +-    --    cursors/Breeze/build/x1/wait-20.png
D  +-    --    cursors/Breeze/build/x1/wait-21.png
D  +-    --    cursors/Breeze/build/x1/wait-22.png
D  +-    --    cursors/Breeze/build/x1/wait-23.png
D  +-    --    cursors/Breeze/build/x1/wait.png
D  +-    --    cursors/Breeze/build/x1/wayland-cursor.png
D  +-    --    cursors/Breeze/build/x1/x-cursor.png
D  +-    --    cursors/Breeze/build/x1/zoom-in.png
D  +-    --    cursors/Breeze/build/x1/zoom-out.png
D  +-    --    cursors/Breeze/build/x1_5/alias.png
D  +-    --    cursors/Breeze/build/x1_5/all-scroll.png
D  +-    --    cursors/Breeze/build/x1_5/bottom_left_corner.png
D  +-    --    cursors/Breeze/build/x1_5/bottom_right_corner.png
D  +-    --    cursors/Breeze/build/x1_5/bottom_side.png
D  +-    --    cursors/Breeze/build/x1_5/cell.png
D  +-    --    cursors/Breeze/build/x1_5/center_ptr.png
D  +-    --    cursors/Breeze/build/x1_5/col-resize.png
D  +-    --    cursors/Breeze/build/x1_5/color-picker.png
D  +-    --    cursors/Breeze/build/x1_5/context-menu.png
D  +-    --    cursors/Breeze/build/x1_5/copy.png
D  +-    --    cursors/Breeze/build/x1_5/crosshair.png
D  +-    --    cursors/Breeze/build/x1_5/default.png
D  +-    --    cursors/Breeze/build/x1_5/dnd-move.png
D  +-    --    cursors/Breeze/build/x1_5/dnd-no-drop.png
D  +-    --    cursors/Breeze/build/x1_5/down-arrow.png
D  +-    --    cursors/Breeze/build/x1_5/draft.png
D  +-    --    cursors/Breeze/build/x1_5/fleur.png
D  +-    --    cursors/Breeze/build/x1_5/help.png
D  +-    --    cursors/Breeze/build/x1_5/left-arrow.png
D  +-    --    cursors/Breeze/build/x1_5/left_side.png
D  +-    --    cursors/Breeze/build/x1_5/no-drop.png
D  +-    --    cursors/Breeze/build/x1_5/not-allowed.png
D  +-    --    cursors/Breeze/build/x1_5/openhand.png
D  +-    --    cursors/Breeze/build/x1_5/pencil.png
D  +-    --    cursors/Breeze/build/x1_5/pirate.png
D  +-    --    cursors/Breeze/build/x1_5/pointer.png
D  +-    --    cursors/Breeze/build/x1_5/progress-01.png
D  +-    --    cursors/Breeze/build/x1_5/progress-02.png
D  +-    --    cursors/Breeze/build/x1_5/progress-03.png
D  +-    --    cursors/Breeze/build/x1_5/progress-04.png
D  +-    --    cursors/Breeze/build/x1_5/progress-05.png
D  +-    --    cursors/Breeze/build/x1_5/progress-06.png
D  +-    --    cursors/Breeze/build/x1_5/progress-07.png
D  +-    --    cursors/Breeze/build/x1_5/progress-08.png
D  +-    --    cursors/Breeze/build/x1_5/progress-09.png
D  +-    --    cursors/Breeze/build/x1_5/progress-10.png
D  +-    --    cursors/Breeze/build/x1_5/progress-11.png
D  +-    --    cursors/Breeze/build/x1_5/progress-12.png
D  +-    --    cursors/Breeze/build/x1_5/progress-13.png
D  +-    --    cursors/Breeze/build/x1_5/progress-14.png
D  +-    --    cursors/Breeze/build/x1_5/progress-15.png
D  +-    --    cursors/Breeze/build/x1_5/progress-16.png
D  +-    --    cursors/Breeze/build/x1_5/progress-17.png
D  +-    --    cursors/Breeze/build/x1_5/progress-18.png
D  +-    --    cursors/Breeze/build/x1_5/progress-19.png
D  +-    --    cursors/Breeze/build/x1_5/progress-20.png
D  +-    --    cursors/Breeze/build/x1_5/progress-21.png
D  +-    --    cursors/Breeze/build/x1_5/progress-22.png
D  +-    --    cursors/Breeze/build/x1_5/progress-23.png
D  +-    --    cursors/Breeze/build/x1_5/progress.png
D  +-    --    cursors/Breeze/build/x1_5/right-arrow.png
D  +-    --    cursors/Breeze/build/x1_5/right_ptr.png
D  +-    --    cursors/Breeze/build/x1_5/right_side.png
D  +-    --    cursors/Breeze/build/x1_5/row-resize.png
D  +-    --    cursors/Breeze/build/x1_5/size_bdiag.png
D  +-    --    cursors/Breeze/build/x1_5/size_fdiag.png
D  +-    --    cursors/Breeze/build/x1_5/size_hor.png
D  +-    --    cursors/Breeze/build/x1_5/size_ver.png
D  +-    --    cursors/Breeze/build/x1_5/text.png
D  +-    --    cursors/Breeze/build/x1_5/top_left_corner.png
D  +-    --    cursors/Breeze/build/x1_5/top_right_corner.png
D  +-    --    cursors/Breeze/build/x1_5/top_side.png
D  +-    --    cursors/Breeze/build/x1_5/up-arrow.png
D  +-    --    cursors/Breeze/build/x1_5/vertical-text.png
D  +-    --    cursors/Breeze/build/x1_5/wait-01.png
D  +-    --    cursors/Breeze/build/x1_5/wait-02.png
D  +-    --    cursors/Breeze/build/x1_5/wait-03.png
D  +-    --    cursors/Breeze/build/x1_5/wait-04.png
D  +-    --    cursors/Breeze/build/x1_5/wait-05.png
D  +-    --    cursors/Breeze/build/x1_5/wait-06.png
D  +-    --    cursors/Breeze/build/x1_5/wait-07.png
D  +-    --    cursors/Breeze/build/x1_5/wait-08.png
D  +-    --    cursors/Breeze/build/x1_5/wait-09.png
D  +-    --    cursors/Breeze/build/x1_5/wait-10.png
D  +-    --    cursors/Breeze/build/x1_5/wait-11.png
D  +-    --    cursors/Breeze/build/x1_5/wait-12.png
D  +-    --    cursors/Breeze/build/x1_5/wait-13.png
D  +-    --    cursors/Breeze/build/x1_5/wait-14.png
D  +-    --    cursors/Breeze/build/x1_5/wait-15.png
D  +-    --    cursors/Breeze/build/x1_5/wait-16.png
D  +-    --    cursors/Breeze/build/x1_5/wait-17.png
D  +-    --    cursors/Breeze/build/x1_5/wait-18.png
D  +-    --    cursors/Breeze/build/x1_5/wait-19.png
D  +-    --    cursors/Breeze/build/x1_5/wait-20.png
D  +-    --    cursors/Breeze/build/x1_5/wait-21.png
D  +-    --    cursors/Breeze/build/x1_5/wait-22.png
D  +-    --    cursors/Breeze/build/x1_5/wait-23.png
D  +-    --    cursors/Breeze/build/x1_5/wait.png
D  +-    --    cursors/Breeze/build/x1_5/wayland-cursor.png
D  +-    --    cursors/Breeze/build/x1_5/x-cursor.png
D  +-    --    cursors/Breeze/build/x1_5/zoom-in.png
D  +-    --    cursors/Breeze/build/x1_5/zoom-out.png
D  +-    --    cursors/Breeze/build/x2/alias.png
D  +-    --    cursors/Breeze/build/x2/all-scroll.png
D  +-    --    cursors/Breeze/build/x2/bottom_left_corner.png
D  +-    --    cursors/Breeze/build/x2/bottom_right_corner.png
D  +-    --    cursors/Breeze/build/x2/bottom_side.png
D  +-    --    cursors/Breeze/build/x2/cell.png
D  +-    --    cursors/Breeze/build/x2/center_ptr.png
D  +-    --    cursors/Breeze/build/x2/col-resize.png
D  +-    --    cursors/Breeze/build/x2/color-picker.png
D  +-    --    cursors/Breeze/build/x2/context-menu.png
D  +-    --    cursors/Breeze/build/x2/copy.png
D  +-    --    cursors/Breeze/build/x2/crosshair.png
D  +-    --    cursors/Breeze/build/x2/default.png
D  +-    --    cursors/Breeze/build/x2/dnd-move.png
D  +-    --    cursors/Breeze/build/x2/dnd-no-drop.png
D  +-    --    cursors/Breeze/build/x2/down-arrow.png
D  +-    --    cursors/Breeze/build/x2/draft.png
D  +-    --    cursors/Breeze/build/x2/fleur.png
D  +-    --    cursors/Breeze/build/x2/help.png
D  +-    --    cursors/Breeze/build/x2/left-arrow.png
D  +-    --    cursors/Breeze/build/x2/left_side.png
D  +-    --    cursors/Breeze/build/x2/no-drop.png
D  +-    --    cursors/Breeze/build/x2/not-allowed.png
D  +-    --    cursors/Breeze/build/x2/openhand.png
D  +-    --    cursors/Breeze/build/x2/pencil.png
D  +-    --    cursors/Breeze/build/x2/pirate.png
D  +-    --    cursors/Breeze/build/x2/pointer.png
D  +-    --    cursors/Breeze/build/x2/progress-01.png
D  +-    --    cursors/Breeze/build/x2/progress-02.png
D  +-    --    cursors/Breeze/build/x2/progress-03.png
D  +-    --    cursors/Breeze/build/x2/progress-04.png
D  +-    --    cursors/Breeze/build/x2/progress-05.png
D  +-    --    cursors/Breeze/build/x2/progress-06.png
D  +-    --    cursors/Breeze/build/x2/progress-07.png
D  +-    --    cursors/Breeze/build/x2/progress-08.png
D  +-    --    cursors/Breeze/build/x2/progress-09.png
D  +-    --    cursors/Breeze/build/x2/progress-10.png
D  +-    --    cursors/Breeze/build/x2/progress-11.png
D  +-    --    cursors/Breeze/build/x2/progress-12.png
D  +-    --    cursors/Breeze/build/x2/progress-13.png
D  +-    --    cursors/Breeze/build/x2/progress-14.png
D  +-    --    cursors/Breeze/build/x2/progress-15.png
D  +-    --    cursors/Breeze/build/x2/progress-16.png
D  +-    --    cursors/Breeze/build/x2/progress-17.png
D  +-    --    cursors/Breeze/build/x2/progress-18.png
D  +-    --    cursors/Breeze/build/x2/progress-19.png
D  +-    --    cursors/Breeze/build/x2/progress-20.png
D  +-    --    cursors/Breeze/build/x2/progress-21.png
D  +-    --    cursors/Breeze/build/x2/progress-22.png
D  +-    --    cursors/Breeze/build/x2/progress-23.png
D  +-    --    cursors/Breeze/build/x2/progress.png
D  +-    --    cursors/Breeze/build/x2/right-arrow.png
D  +-    --    cursors/Breeze/build/x2/right_ptr.png
D  +-    --    cursors/Breeze/build/x2/right_side.png
D  +-    --    cursors/Breeze/build/x2/row-resize.png
D  +-    --    cursors/Breeze/build/x2/size_bdiag.png
D  +-    --    cursors/Breeze/build/x2/size_fdiag.png
D  +-    --    cursors/Breeze/build/x2/size_hor.png
D  +-    --    cursors/Breeze/build/x2/size_ver.png
D  +-    --    cursors/Breeze/build/x2/text.png
D  +-    --    cursors/Breeze/build/x2/top_left_corner.png
D  +-    --    cursors/Breeze/build/x2/top_right_corner.png
D  +-    --    cursors/Breeze/build/x2/top_side.png
D  +-    --    cursors/Breeze/build/x2/up-arrow.png
D  +-    --    cursors/Breeze/build/x2/vertical-text.png
D  +-    --    cursors/Breeze/build/x2/wait-01.png
D  +-    --    cursors/Breeze/build/x2/wait-02.png
D  +-    --    cursors/Breeze/build/x2/wait-03.png
D  +-    --    cursors/Breeze/build/x2/wait-04.png
D  +-    --    cursors/Breeze/build/x2/wait-05.png
D  +-    --    cursors/Breeze/build/x2/wait-06.png
D  +-    --    cursors/Breeze/build/x2/wait-07.png
D  +-    --    cursors/Breeze/build/x2/wait-08.png
D  +-    --    cursors/Breeze/build/x2/wait-09.png
D  +-    --    cursors/Breeze/build/x2/wait-10.png
D  +-    --    cursors/Breeze/build/x2/wait-11.png
D  +-    --    cursors/Breeze/build/x2/wait-12.png
D  +-    --    cursors/Breeze/build/x2/wait-13.png
D  +-    --    cursors/Breeze/build/x2/wait-14.png
D  +-    --    cursors/Breeze/build/x2/wait-15.png
D  +-    --    cursors/Breeze/build/x2/wait-16.png
D  +-    --    cursors/Breeze/build/x2/wait-17.png
D  +-    --    cursors/Breeze/build/x2/wait-18.png
D  +-    --    cursors/Breeze/build/x2/wait-19.png
D  +-    --    cursors/Breeze/build/x2/wait-20.png
D  +-    --    cursors/Breeze/build/x2/wait-21.png
D  +-    --    cursors/Breeze/build/x2/wait-22.png
D  +-    --    cursors/Breeze/build/x2/wait-23.png
D  +-    --    cursors/Breeze/build/x2/wait.png
D  +-    --    cursors/Breeze/build/x2/wayland-cursor.png
D  +-    --    cursors/Breeze/build/x2/x-cursor.png
D  +-    --    cursors/Breeze/build/x2/zoom-in.png
D  +-    --    cursors/Breeze/build/x2/zoom-out.png
A  +25   -0    cursors/Breeze/scale_cursor
M  +0    -2    cursors/Breeze/src/config/alias.cursor
M  +0    -2    cursors/Breeze/src/config/all-scroll.cursor
M  +0    -2    cursors/Breeze/src/config/bottom_left_corner.cursor
M  +0    -2    cursors/Breeze/src/config/bottom_right_corner.cursor
M  +0    -2    cursors/Breeze/src/config/bottom_side.cursor
M  +0    -2    cursors/Breeze/src/config/cell.cursor
M  +0    -2    cursors/Breeze/src/config/center_ptr.cursor
M  +0    -2    cursors/Breeze/src/config/col-resize.cursor
M  +0    -2    cursors/Breeze/src/config/color-picker.cursor
M  +0    -2    cursors/Breeze/src/config/context-menu.cursor
M  +0    -2    cursors/Breeze/src/config/copy.cursor
M  +0    -2    cursors/Breeze/src/config/crosshair.cursor
M  +0    -2    cursors/Breeze/src/config/default.cursor
M  +0    -2    cursors/Breeze/src/config/dnd-move.cursor
M  +0    -2    cursors/Breeze/src/config/dnd-no-drop.cursor
M  +0    -2    cursors/Breeze/src/config/down-arrow.cursor
M  +0    -2    cursors/Breeze/src/config/draft.cursor
M  +0    -2    cursors/Breeze/src/config/fleur.cursor
M  +0    -2    cursors/Breeze/src/config/help.cursor
M  +0    -2    cursors/Breeze/src/config/left-arrow.cursor
M  +0    -2    cursors/Breeze/src/config/left_side.cursor
M  +0    -2    cursors/Breeze/src/config/no-drop.cursor
M  +0    -2    cursors/Breeze/src/config/not-allowed.cursor
M  +0    -2    cursors/Breeze/src/config/openhand.cursor
M  +0    -2    cursors/Breeze/src/config/pencil.cursor
M  +0    -2    cursors/Breeze/src/config/pirate.cursor
M  +0    -2    cursors/Breeze/src/config/pointer.cursor
M  +0    -46   cursors/Breeze/src/config/progress.cursor
M  +0    -2    cursors/Breeze/src/config/right-arrow.cursor
M  +0    -2    cursors/Breeze/src/config/right_ptr.cursor
M  +0    -2    cursors/Breeze/src/config/right_side.cursor
M  +0    -2    cursors/Breeze/src/config/row-resize.cursor
M  +0    -2    cursors/Breeze/src/config/size_bdiag.cursor
M  +0    -2    cursors/Breeze/src/config/size_fdiag.cursor
M  +0    -2    cursors/Breeze/src/config/size_hor.cursor
M  +0    -2    cursors/Breeze/src/config/size_ver.cursor
M  +0    -2    cursors/Breeze/src/config/text.cursor
M  +0    -2    cursors/Breeze/src/config/top_left_corner.cursor
M  +0    -2    cursors/Breeze/src/config/top_right_corner.cursor
M  +0    -2    cursors/Breeze/src/config/top_side.cursor
M  +0    -2    cursors/Breeze/src/config/up-arrow.cursor
M  +0    -2    cursors/Breeze/src/config/vertical-text.cursor
M  +0    -46   cursors/Breeze/src/config/wait.cursor
M  +0    -2    cursors/Breeze/src/config/wayland-cursor.cursor
M  +0    -2    cursors/Breeze/src/config/x-cursor.cursor
M  +0    -2    cursors/Breeze/src/config/zoom-in.cursor
M  +0    -2    cursors/Breeze/src/config/zoom-out.cursor
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/alias
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/all-scroll
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/bottom_left_corner
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/bottom_right_corner
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/bottom_side
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/cell
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/center_ptr
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/col-resize
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/color-picker
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/context-menu
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/copy
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/crosshair
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/default
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/dnd-move
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/dnd-no-drop
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/down-arrow
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/draft
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/fleur
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/help
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/left-arrow
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/left_side
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/no-drop
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/not-allowed
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/openhand
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/pencil
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/pirate
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/pointer
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/progress
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/right-arrow
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/right_ptr
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/right_side
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/row-resize
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/size_bdiag
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/size_fdiag
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/size_hor
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/size_ver
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/text
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/top_left_corner
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/top_right_corner
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/top_side
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/up-arrow
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/vertical-text
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/wait
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/wayland-cursor
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/x-cursor
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/zoom-in
M  +-    --    cursors/Breeze_Light/Breeze_Light/cursors/zoom-out
T  +1    -150  cursors/Breeze_Light/build.sh
A  +1    -0    cursors/Breeze_Light/scale_cursor
M  +0    -2    cursors/Breeze_Light/src/config/alias.cursor
M  +0    -2    cursors/Breeze_Light/src/config/all-scroll.cursor
M  +0    -2    cursors/Breeze_Light/src/config/bottom_left_corner.cursor
M  +0    -2    cursors/Breeze_Light/src/config/bottom_right_corner.cursor
M  +0    -2    cursors/Breeze_Light/src/config/bottom_side.cursor
M  +0    -2    cursors/Breeze_Light/src/config/cell.cursor
M  +0    -2    cursors/Breeze_Light/src/config/center_ptr.cursor
M  +0    -2    cursors/Breeze_Light/src/config/col-resize.cursor
M  +0    -2    cursors/Breeze_Light/src/config/color-picker.cursor
M  +0    -2    cursors/Breeze_Light/src/config/context-menu.cursor
M  +0    -2    cursors/Breeze_Light/src/config/copy.cursor
M  +0    -2    cursors/Breeze_Light/src/config/crosshair.cursor
M  +0    -2    cursors/Breeze_Light/src/config/default.cursor
M  +0    -2    cursors/Breeze_Light/src/config/dnd-move.cursor
M  +0    -2    cursors/Breeze_Light/src/config/dnd-no-drop.cursor
M  +0    -2    cursors/Breeze_Light/src/config/down-arrow.cursor
M  +0    -2    cursors/Breeze_Light/src/config/draft.cursor
M  +0    -2    cursors/Breeze_Light/src/config/fleur.cursor
M  +0    -2    cursors/Breeze_Light/src/config/help.cursor
M  +0    -2    cursors/Breeze_Light/src/config/left-arrow.cursor
M  +0    -2    cursors/Breeze_Light/src/config/left_side.cursor
M  +0    -2    cursors/Breeze_Light/src/config/no-drop.cursor
M  +0    -2    cursors/Breeze_Light/src/config/not-allowed.cursor
M  +0    -2    cursors/Breeze_Light/src/config/openhand.cursor
M  +0    -2    cursors/Breeze_Light/src/config/pencil.cursor
M  +0    -2    cursors/Breeze_Light/src/config/pirate.cursor
M  +0    -2    cursors/Breeze_Light/src/config/pointer.cursor
M  +0    -46   cursors/Breeze_Light/src/config/progress.cursor
M  +0    -2    cursors/Breeze_Light/src/config/right-arrow.cursor
M  +0    -2    cursors/Breeze_Light/src/config/right_ptr.cursor
M  +0    -2    cursors/Breeze_Light/src/config/right_side.cursor
M  +0    -2    cursors/Breeze_Light/src/config/row-resize.cursor
M  +0    -2    cursors/Breeze_Light/src/config/size_bdiag.cursor
M  +0    -2    cursors/Breeze_Light/src/config/size_fdiag.cursor
M  +0    -2    cursors/Breeze_Light/src/config/size_hor.cursor
M  +0    -2    cursors/Breeze_Light/src/config/size_ver.cursor
M  +0    -2    cursors/Breeze_Light/src/config/text.cursor
M  +0    -2    cursors/Breeze_Light/src/config/top_left_corner.cursor
M  +0    -2    cursors/Breeze_Light/src/config/top_right_corner.cursor
M  +0    -2    cursors/Breeze_Light/src/config/top_side.cursor
M  +0    -2    cursors/Breeze_Light/src/config/up-arrow.cursor
M  +0    -2    cursors/Breeze_Light/src/config/vertical-text.cursor
M  +0    -46   cursors/Breeze_Light/src/config/wait.cursor
M  +0    -2    cursors/Breeze_Light/src/config/wayland-cursor.cursor
M  +0    -2    cursors/Breeze_Light/src/config/x-cursor.cursor
M  +0    -2    cursors/Breeze_Light/src/config/zoom-in.cursor
M  +0    -2    cursors/Breeze_Light/src/config/zoom-out.cursor

https://invent.kde.org/plasma/breeze/-/commit/215941542b886b20d1364fefd8c28d733b96fc20
Comment 7 Nate Graham 2023-12-11 16:28:27 UTC
So there are three options here.

1. Wait until GTK gains support for the cursor-shape-v1 protocol
2. Patch all cursor themes in existence to have sizes for all possible scale factors (we just did this for KDE's Breeze cursors)
3. Automatically scale cursors as needed in KWin

---

Downside of #1 is that it's up to toolkit developers outside of KDE.

Downside of #2 is that it's up theme authors outside of KDE, and therefore really not feasible at all.

Downsides of #3 include:
- It's a hack/workaround due to lack of proper support for a public standard in other toolkits
- Scaling cursors would introduce blurriness, so the result wouldn't be pixel-perfect in comparison to parts of the system written in toolkits that do implement the cursor-shape-v1 protocol, therefore it wouldn't actually fix the bug.
Comment 8 Nate Graham 2023-12-11 16:30:46 UTC
*** Bug 443661 has been marked as a duplicate of this bug. ***
Comment 9 Nate Graham 2023-12-11 16:33:41 UTC
Given that we have no good options available to fix this in KDE code, and that there's a clear path forward for the developers of the GTK and Electron toolkits, I think unfortunately we have to call this an upstream issue. I'll mention it on https://community.kde.org/Plasma/Wayland_Showstoppers.
Comment 10 sac 2023-12-11 17:54:21 UTC
(In reply to Nate Graham from comment #9)
> Given that we have no good options available to fix this in KDE code, and
> that there's a clear path forward for the developers of the GTK and Electron
> toolkits, I think unfortunately we have to call this an upstream issue. I'll
> mention it on https://community.kde.org/Plasma/Wayland_Showstoppers.

This seems to be https://gitlab.gnome.org/GNOME/gtk/-/issues/5567
Comment 11 Jin Liu 2023-12-11 23:36:09 UTC
(In reply to Nate Graham from comment #7)
> So there are three options here.
> 
> 1. Wait until GTK gains support for the cursor-shape-v1 protocol
> 2. Patch all cursor themes in existence to have sizes for all possible scale
> factors (we just did this for KDE's Breeze cursors)
> 3. Automatically scale cursors as needed in KWin
> 
> ---
> 
> Downside of #1 is that it's up to toolkit developers outside of KDE.
> 
> Downside of #2 is that it's up theme authors outside of KDE, and therefore
> really not feasible at all.
> 
> Downsides of #3 include:
> - It's a hack/workaround due to lack of proper support for a public standard
> in other toolkits
> - Scaling cursors would introduce blurriness, so the result wouldn't be
> pixel-perfect in comparison to parts of the system written in toolkits that
> do implement the cursor-shape-v1 protocol, therefore it wouldn't actually
> fix the bug.

Downside of #2 also: We patched Breeze cursors only for 24px. It won't work if the user selected a larger cursor size. (Unless we remove the ability to select cursor size in systemsettings)

About #3: The cursor-shape-v1 protocol would have to scale cursors in kwin anyway, so the same code can be reused and yield same results. If we are to continue supporting X11 apps, and if we can't expect all Wayland apps beside KDE/GTK/Electron to use the  cursor-shape-v1 protocol, then we have to implement this.
Comment 12 Nate Graham 2023-12-12 19:50:38 UTC
Ultimately I would also like to have KWin do something here, since it's not feasible to support every combination of cursor size and screen scale in the Breeze cursor theme--let alone every cursor theme in existence. Even if the result isn't perfect, having KWin upscale small pixmaps as needed would be better than having the cursor be the wrong size when passing over different UI elements in random-seeming apps.

This seems like something we need a developer discussion about. With your understanding of this issue, would yo like to write something up at https://invent.kde.org/plasma/kwin/-/issues?