plugins/mouseclick: Fix glitches

Effect frame geometry is not properly synchronized with the quick
scene geometry.

BUG: 477892
wilder/Plasma/6.2
Vlad Zahorodnii 2 years ago
parent b98607c689
commit 09f97c8037
  1. 8
      src/effect/effectframe.cpp
  2. 3
      src/effect/effectframe.h
  3. 3
      src/plugins/mouseclick/mouseclick.cpp

@ -229,9 +229,8 @@ EffectFrame::EffectFrame(EffectFrameStyle style, bool staticSize, QPoint positio
connect(m_view, &OffscreenQuickScene::repaintNeeded, this, [this] { connect(m_view, &OffscreenQuickScene::repaintNeeded, this, [this] {
effects->addRepaint(geometry()); effects->addRepaint(geometry());
}); });
connect(m_view, &OffscreenQuickScene::geometryChanged, this, [this](const QRect &oldGeometry, const QRect &newGeometry) { connect(m_view, &OffscreenQuickScene::geometryChanged, this, [](const QRect &oldGeometry, const QRect &newGeometry) {
effects->addRepaint(oldGeometry); effects->addRepaint(oldGeometry);
m_geometry = newGeometry;
effects->addRepaint(newGeometry); effects->addRepaint(newGeometry);
}); });
} }
@ -270,10 +269,9 @@ void EffectFrame::free()
m_view->hide(); m_view->hide();
} }
const QRect &EffectFrame::geometry() const QRect EffectFrame::geometry() const
{ {
// Can't forward to OffscreenQuickScene::geometry() because we return a reference. return m_view->geometry();
return m_geometry;
} }
void EffectFrame::setGeometry(const QRect &geometry, bool force) void EffectFrame::setGeometry(const QRect &geometry, bool force)

@ -139,7 +139,7 @@ public:
void setAlignment(Qt::Alignment alignment); void setAlignment(Qt::Alignment alignment);
Qt::Alignment alignment() const; Qt::Alignment alignment() const;
void setGeometry(const QRect &geometry, bool force = false); void setGeometry(const QRect &geometry, bool force = false);
const QRect &geometry() const; QRect geometry() const;
void setText(const QString &text); void setText(const QString &text);
const QString &text() const; const QString &text() const;
@ -198,7 +198,6 @@ public:
private: private:
EffectFrameQuickScene *m_view; EffectFrameQuickScene *m_view;
QRect m_geometry;
}; };
} // namespace KWin } // namespace KWin

@ -203,8 +203,7 @@ void MouseClickEffect::repaint()
for (auto &click : m_clicks) { for (auto &click : m_clicks) {
dirtyRegion |= QRect(click->m_pos.x() - radius, click->m_pos.y() - radius, 2 * radius, 2 * radius); dirtyRegion |= QRect(click->m_pos.x() - radius, click->m_pos.y() - radius, 2 * radius, 2 * radius);
if (click->m_frame) { if (click->m_frame) {
// we grant the plasma style 32px padding for stuff like shadows... dirtyRegion |= click->m_frame->geometry();
dirtyRegion |= click->m_frame->geometry().adjusted(-32, -32, 32, 32);
} }
} }
effects->addRepaint(dirtyRegion); effects->addRepaint(dirtyRegion);

Loading…
Cancel
Save