Commit bc3ccaed authored by Thomas Lübking's avatar Thomas Lübking
Browse files

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
parent d388e3ff
...@@ -1865,14 +1865,20 @@ void Client::setGeometry(int x, int y, int w, int h, ForceGeometry_t force) ...@@ -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) ...@@ -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() ...@@ -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) ...@@ -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
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment