https://bugs.kde.org/show_bug.cgi?id=480582

Vlad Zahorodnii <vlad.zahorod...@kde.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Latest Commit|https://invent.kde.org/plas |https://invent.kde.org/plas
                   |ma/kwin/-/commit/13e7cac019 |ma/kwin/-/commit/7644499e20
                   |fcb9825a3e2f1655622cf393e43 |280fd7cf99b2bb1424fc38f021c
                   |8ab                         |cd6

--- Comment #6 from Vlad Zahorodnii <vlad.zahorod...@kde.org> ---
Git commit 7644499e20280fd7cf99b2bb1424fc38f021ccd6 by Vlad Zahorodnii.
Committed on 09/02/2024 at 12:08.
Pushed by vladz into branch 'Plasma/6.0'.

Handle wl_surface destruction in SurfaceCursorSource

Wine/Wayland hides the cursor as follows:

[ 853107.473]  -> wl_pointer@15.set_cursor(172832, wl_surface@38, 0, 0)
...
[ 858989.757]  -> wl_surface@38.destroy()
[ 858989.759]  -> wl_pointer@15.set_cursor(172832, nil, 0, 0)

i.e. it destroys the cursor surface, then calls wl_pointer.set_cursor().

SurfaceCursorSource stores the wl_surface in a QPointer, furthermore it
is going to emit the changed signal, which is needed to force the
CursorItem to update its content, only if either a new hotspot or a
surface has been passed to SurfaceCursorSource::update(). So what happens
is the following:

- The SurfaceInterface object is destroyed and the QPointer resets its
  value to nullptr
- SurfaceCursorSource::update(nullptr, QPointF(0, 0)) gets called in
  response to wl_pointer@15.set_cursor(nil, 0, 0)
- but since m_surface has been implicitly reset to nullptr, no changed
  signal is going to be emitted

This change addresses the issue by making the SurfaceCursorSource track
the SurfaceInterface's destroyed signal.


(cherry picked from commit 13e7cac019fcb9825a3e2f1655622cf393e438ab)

M  +10   -0    src/cursorsource.cpp
M  +2    -2    src/cursorsource.h

https://invent.kde.org/plasma/kwin/-/commit/7644499e20280fd7cf99b2bb1424fc38f021ccd6

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to