Bug 451158 - 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
Summary: With display scaling, incorrect cursor scaling on non-XWayland-using GTK and ...
Status: RESOLVED UPSTREAM
Alias: None
Product: kwin
Classification: Plasma
Component: wayland-generic (show other bugs)
Version: 5.24.2
Platform: Arch Linux Linux
: NOR normal
Target Milestone: ---
Assignee: KWin default assignee
URL:
Keywords: wayland
: 443661 471001 (view as bug list)
Depends on:
Blocks: 459161
  Show dependency treegraph
 
Reported: 2022-03-05 11:34 UTC by nocturne
Modified: 2023-12-12 19:50 UTC (History)
9 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
display scaling 200% and cursor size 48 displaying small cursor on gtk window. (419.90 KB, image/png)
2022-03-05 11:34 UTC, nocturne
Details
correct cursor size for 200% scaling and cursor size 48 (422.73 KB, image/png)
2022-03-05 11:35 UTC, nocturne
Details

Note You need to log in before you can comment on or make changes to this bug.
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?