Drop PointerInterface::cursor() getter

This commit is contained in:
Vlad Zahorodnii 2023-05-08 14:55:55 +03:00
parent 4f9f73e28d
commit 88c35ab5fe
5 changed files with 27 additions and 60 deletions

View file

@ -99,7 +99,7 @@ void PointerInputRedirection::init()
connect(Cursors::self()->mouse(), &Cursor::rendered, m_cursor, &CursorImage::markAsRendered);
connect(m_cursor, &CursorImage::changed, Cursors::self()->mouse(), [this] {
Cursors::self()->mouse()->setSource(m_cursor->source());
updateCursorOutputs();
m_cursor->updateCursorOutputs(m_pos);
});
Q_EMIT m_cursor->changed();
@ -769,32 +769,11 @@ void PointerInputRedirection::updatePosition(const QPointF &pos)
m_pos = p;
workspace()->setActiveCursorOutput(m_pos);
updateCursorOutputs();
m_cursor->updateCursorOutputs(m_pos);
Q_EMIT input()->globalPointerChanged(m_pos);
}
void PointerInputRedirection::updateCursorOutputs()
{
KWaylandServer::PointerInterface *pointer = waylandServer()->seat()->pointer();
if (!pointer) {
return;
}
KWaylandServer::Cursor *cursor = pointer->cursor();
if (!cursor) {
return;
}
KWaylandServer::SurfaceInterface *surface = cursor->surface();
if (!surface) {
return;
}
const QRectF cursorGeometry(m_pos - m_cursor->source()->hotspot(), surface->size());
surface->setOutputs(waylandServer()->display()->outputsIntersecting(cursorGeometry.toAlignedRect()));
}
void PointerInputRedirection::updateButton(uint32_t button, InputRedirection::PointerButtonState state)
{
m_buttons[button] = state;
@ -934,24 +913,25 @@ CursorImage::CursorImage(PointerInputRedirection *parent)
CursorImage::~CursorImage() = default;
void CursorImage::updateCursorOutputs(const QPointF &pos)
{
if (m_currentSource == m_serverCursor.cursor.get()) {
auto cursorSurface = m_serverCursor.cursor->surface();
if (cursorSurface) {
const QRectF cursorGeometry(pos - m_currentSource->hotspot(), m_currentSource->size());
cursorSurface->setOutputs(waylandServer()->display()->outputsIntersecting(cursorGeometry.toAlignedRect()));
}
}
}
void CursorImage::markAsRendered(std::chrono::milliseconds timestamp)
{
if (m_currentSource != m_serverCursor.cursor.get()) {
return;
if (m_currentSource == m_serverCursor.cursor.get()) {
auto cursorSurface = m_serverCursor.cursor->surface();
if (cursorSurface) {
cursorSurface->frameRendered(timestamp.count());
}
}
auto p = waylandServer()->seat()->pointer();
if (!p) {
return;
}
auto c = p->cursor();
if (!c) {
return;
}
auto cursorSurface = c->surface();
if (!cursorSurface) {
return;
}
cursorSurface->frameRendered(timestamp.count());
}
void CursorImage::handleFocusedSurfaceChanged()
@ -998,17 +978,10 @@ void CursorImage::updateMoveResize()
reevaluteSource();
}
void CursorImage::updateServerCursor()
void CursorImage::updateServerCursor(KWaylandServer::Cursor *cursor)
{
m_serverCursor.cursor->update(cursor->surface(), cursor->hotspot());
reevaluteSource();
auto p = waylandServer()->seat()->pointer();
if (!p) {
return;
}
auto c = p->cursor();
if (c) {
m_serverCursor.cursor->update(c->surface(), c->hotspot());
}
}
void CursorImage::setEffectsOverrideCursor(Qt::CursorShape shape)

View file

@ -23,6 +23,7 @@ class QWindow;
namespace KWaylandServer
{
class Cursor;
class SurfaceInterface;
}
@ -72,7 +73,6 @@ public:
void removeWindowSelectionCursor();
void updatePointerConstraints();
void updateCursorOutputs();
void setEnableConstraints(bool set);
@ -214,6 +214,8 @@ public:
KXcursorTheme theme() const;
CursorSource *source() const;
void setSource(CursorSource *source);
void updateCursorOutputs(const QPointF &pos);
void markAsRendered(std::chrono::milliseconds timestamp);
Q_SIGNALS:
@ -221,7 +223,7 @@ Q_SIGNALS:
private:
void reevaluteSource();
void updateServerCursor();
void updateServerCursor(KWaylandServer::Cursor *cursor);
void updateDecoration();
void updateDecorationCursor();
void updateMoveResize();

View file

@ -1321,14 +1321,13 @@ void TestWaylandSeat::testCursor()
QVERIFY(enteredSpy.wait());
QCOMPARE_GT(enteredSpy.first().first().value<quint32>(), serial);
QVERIFY(m_seatInterface->focusedPointerSurface());
QVERIFY(!m_seatInterface->pointer()->cursor());
QSignalSpy cursorChangedSpy(m_seatInterface->pointer(), &KWaylandServer::PointerInterface::cursorChanged);
// just remove the pointer
p->setCursor(nullptr);
QVERIFY(cursorChangedSpy.wait());
QCOMPARE(cursorChangedSpy.count(), 1);
auto cursor = m_seatInterface->pointer()->cursor();
auto cursor = cursorChangedSpy.last().first().value<KWaylandServer::Cursor *>();
QVERIFY(cursor);
QVERIFY(!cursor->surface());
QCOMPARE(cursor->hotspot(), QPoint());

View file

@ -86,7 +86,7 @@ void PointerInterfacePrivate::pointer_set_cursor(Resource *resource, uint32_t se
cursor->d->hotspot = QPointF(hotspot_x, hotspot_y) / focusedSurface->client()->scaleOverride();
cursor->d->surface = surface;
Q_EMIT q->cursorChanged();
Q_EMIT q->cursorChanged(cursor.get());
}
void PointerInterfacePrivate::pointer_release(Resource *resource)
@ -344,11 +344,6 @@ void PointerInterface::sendFrame()
}
}
Cursor *PointerInterface::cursor() const
{
return d->cursor.get();
}
SeatInterface *PointerInterface::seat() const
{
return d->seat;

View file

@ -43,8 +43,6 @@ public:
*/
SurfaceInterface *focusedSurface() const;
Cursor *cursor() const;
/**
* Returns the seat to which this pointer belongs to.
*/
@ -67,7 +65,7 @@ Q_SIGNALS:
* This signal is emitted whenever the cursor surface changes. As long as there is no
* any focused surface, the cursor cannot be changed.
*/
void cursorChanged();
void cursorChanged(KWaylandServer::Cursor *cursor);
/**
* This signal is emitted whenever the focused pointer surface changes.
*/