use synthetic configure notifies when needed
the patch omit them while the user just moves around a window and adds one that got lost with the deferred XMoveResize patch, causing BUG: 312346 FIXED-IN: 4.10 REVIEW: 108013
This commit is contained in:
parent
dcab3d44f3
commit
6fa52007ee
1 changed files with 12 additions and 6 deletions
16
geometry.cpp
16
geometry.cpp
|
@ -1865,14 +1865,20 @@ void Client::setGeometry(int x, int y, int w, int h, ForceGeometry_t force)
|
||||||
if (!isResize() || syncRequest.counter == None)
|
if (!isResize() || syncRequest.counter == None)
|
||||||
#endif
|
#endif
|
||||||
XMoveResizeWindow(display(), window(), 0, 0, cs.width(), cs.height());
|
XMoveResizeWindow(display(), window(), 0, 0, cs.width(), cs.height());
|
||||||
|
// SELI - won't this be too expensive?
|
||||||
|
// THOMAS - yes, but gtk+ clients will not resize without ...
|
||||||
|
sendSyntheticConfigureNotify();
|
||||||
}
|
}
|
||||||
updateShape();
|
updateShape();
|
||||||
} else {
|
} else {
|
||||||
if (moveResizeMode && compositing()) {
|
if (moveResizeMode) {
|
||||||
// Defer the X update until we leave this mode
|
if (compositing()) // Defer the X update until we leave this mode
|
||||||
needsXWindowMove = true;
|
needsXWindowMove = true;
|
||||||
|
else
|
||||||
|
XMoveWindow(display(), frameId(), x, y); // sendSyntheticConfigureNotify() on finish shall be sufficient
|
||||||
} else {
|
} else {
|
||||||
XMoveWindow(display(), frameId(), x, y);
|
XMoveWindow(display(), frameId(), x, y);
|
||||||
|
sendSyntheticConfigureNotify();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unconditionally move the input window: it won't affect rendering
|
// Unconditionally move the input window: it won't affect rendering
|
||||||
|
@ -1881,8 +1887,6 @@ void Client::setGeometry(int x, int y, int w, int h, ForceGeometry_t force)
|
||||||
XMoveWindow(display(), inputId(), pos.x(), pos.y());
|
XMoveWindow(display(), inputId(), pos.x(), pos.y());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// SELI TODO won't this be too expensive?
|
|
||||||
sendSyntheticConfigureNotify();
|
|
||||||
updateWindowRules(Rules::Position|Rules::Size);
|
updateWindowRules(Rules::Position|Rules::Size);
|
||||||
|
|
||||||
// keep track of old maximize mode
|
// keep track of old maximize mode
|
||||||
|
@ -2646,6 +2650,8 @@ void Client::leaveMoveResize()
|
||||||
XMoveWindow(display(), frameId(), geom.x(), geom.y());
|
XMoveWindow(display(), frameId(), geom.x(), geom.y());
|
||||||
needsXWindowMove = false;
|
needsXWindowMove = false;
|
||||||
}
|
}
|
||||||
|
if (!isResize())
|
||||||
|
sendSyntheticConfigureNotify(); // tell the client about it's new final position
|
||||||
if (geometryTip) {
|
if (geometryTip) {
|
||||||
geometryTip->hide();
|
geometryTip->hide();
|
||||||
delete geometryTip;
|
delete geometryTip;
|
||||||
|
@ -3026,7 +3032,7 @@ void Client::handleMoveResize(int x, int y, int x_root, int y_root)
|
||||||
sendSyncRequest();
|
sendSyncRequest();
|
||||||
} else { // for clients not supporting the XSYNC protocol, we
|
} else { // for clients not supporting the XSYNC protocol, we
|
||||||
syncRequest.isPending = true; // limit the resizes to 30Hz to take pointless load from X11
|
syncRequest.isPending = true; // limit the resizes to 30Hz to take pointless load from X11
|
||||||
syncRequest.timeout->start(33); // and the client, the mouse is still moved a full speed
|
syncRequest.timeout->start(33); // and the client, the mouse is still moved at full speed
|
||||||
} // and no human can control faster resizes anyway
|
} // and no human can control faster resizes anyway
|
||||||
XMoveResizeWindow(display(), window(), 0, 0, moveResizeGeom.width() - (border_left + border_right), moveResizeGeom.height() - (border_top + border_bottom));
|
XMoveResizeWindow(display(), window(), 0, 0, moveResizeGeom.width() - (border_left + border_right), moveResizeGeom.height() - (border_top + border_bottom));
|
||||||
} else
|
} else
|
||||||
|
|
Loading…
Reference in a new issue