Only commit XdgOutput::done if changed
Summary: XdgOutput no-ops if one calls setLogicalSize(someSize) and someSize matches the last sent size However, as we have an explicit done signal, we currently end up sending this regardless. This patches tracks if we've made any changes to commit in the done event. CCBUG: 400987 Reviewers: #kwin, romangg Reviewed By: #kwin, romangg Subscribers: romangg, kde-frameworks-devel Tags: #frameworks Differential Revision: https://phabricator.kde.org/D19255
This commit is contained in:
parent
1cb96f6439
commit
58af3e8200
1 changed files with 7 additions and 0 deletions
|
@ -80,6 +80,7 @@ public:
|
|||
void resourceDisconnected(XdgOutputV1Interface *resource);
|
||||
QPoint pos;
|
||||
QSize size;
|
||||
bool dirty = false;
|
||||
bool doneOnce = false;
|
||||
QList<XdgOutputV1Interface*> resources;
|
||||
};
|
||||
|
@ -187,6 +188,7 @@ void XdgOutputInterface::setLogicalSize(const QSize &size)
|
|||
return;
|
||||
}
|
||||
d->size = size;
|
||||
d->dirty = true;
|
||||
for(auto resource: d->resources) {
|
||||
resource->setLogicalSize(size);
|
||||
}
|
||||
|
@ -203,6 +205,7 @@ void XdgOutputInterface::setLogicalPosition(const QPoint &pos)
|
|||
return;
|
||||
}
|
||||
d->pos = pos;
|
||||
d->dirty = true;
|
||||
for(auto resource: d->resources) {
|
||||
resource->setLogicalPosition(pos);
|
||||
}
|
||||
|
@ -216,6 +219,10 @@ QPoint XdgOutputInterface::logicalPosition() const
|
|||
void XdgOutputInterface::done()
|
||||
{
|
||||
d->doneOnce = true;
|
||||
if (!d->dirty) {
|
||||
return;
|
||||
}
|
||||
d->dirty = false;
|
||||
for(auto resource: d->resources) {
|
||||
resource->done();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue