x11: Fix client area lookup with pending move resize
If there's a pending move resize, Window::output() won't be updated until geometry updated are unlocked. We need to use moveResizeOutput() instead.
This commit is contained in:
parent
074a4fd286
commit
18870f67cc
1 changed files with 9 additions and 9 deletions
|
@ -756,7 +756,7 @@ bool X11Window::manage(xcb_window_t w, bool isMapped)
|
||||||
// Placement needs to be after setting size
|
// Placement needs to be after setting size
|
||||||
workspace()->placement()->place(this, area);
|
workspace()->placement()->place(this, area);
|
||||||
// The client may have been moved to another screen, update placement area.
|
// The client may have been moved to another screen, update placement area.
|
||||||
area = workspace()->clientArea(PlacementArea, this);
|
area = workspace()->clientArea(PlacementArea, this, moveResizeOutput());
|
||||||
dontKeepInArea = true;
|
dontKeepInArea = true;
|
||||||
placementDone = true;
|
placementDone = true;
|
||||||
}
|
}
|
||||||
|
@ -3726,11 +3726,11 @@ void X11Window::getWmNormalHints()
|
||||||
if ((!isSpecialWindow() || isToolbar()) && !isFullScreen()) {
|
if ((!isSpecialWindow() || isToolbar()) && !isFullScreen()) {
|
||||||
// try to keep the window in its xinerama screen if possible,
|
// try to keep the window in its xinerama screen if possible,
|
||||||
// if that fails at least keep it visible somewhere
|
// if that fails at least keep it visible somewhere
|
||||||
QRectF area = workspace()->clientArea(MovementArea, this);
|
QRectF area = workspace()->clientArea(MovementArea, this, moveResizeOutput());
|
||||||
if (area.contains(origClientGeometry)) {
|
if (area.contains(origClientGeometry)) {
|
||||||
keepInArea(area);
|
keepInArea(area);
|
||||||
}
|
}
|
||||||
area = workspace()->clientArea(WorkArea, this);
|
area = workspace()->clientArea(WorkArea, this, moveResizeOutput());
|
||||||
if (area.contains(origClientGeometry)) {
|
if (area.contains(origClientGeometry)) {
|
||||||
keepInArea(area);
|
keepInArea(area);
|
||||||
}
|
}
|
||||||
|
@ -3940,7 +3940,7 @@ void X11Window::configureRequest(int value_mask, qreal rx, qreal ry, qreal rw, q
|
||||||
GeometryUpdatesBlocker blocker(this);
|
GeometryUpdatesBlocker blocker(this);
|
||||||
move(new_pos);
|
move(new_pos);
|
||||||
resize(requestedFrameSize);
|
resize(requestedFrameSize);
|
||||||
QRectF area = workspace()->clientArea(WorkArea, this);
|
QRectF area = workspace()->clientArea(WorkArea, this, moveResizeOutput());
|
||||||
if (!from_tool && (!isSpecialWindow() || isToolbar()) && !isFullScreen()
|
if (!from_tool && (!isSpecialWindow() || isToolbar()) && !isFullScreen()
|
||||||
&& area.contains(origClientGeometry)) {
|
&& area.contains(origClientGeometry)) {
|
||||||
keepInArea(area);
|
keepInArea(area);
|
||||||
|
@ -3976,11 +3976,11 @@ void X11Window::configureRequest(int value_mask, qreal rx, qreal ry, qreal rw, q
|
||||||
if (!from_tool && (!isSpecialWindow() || isToolbar()) && !isFullScreen()) {
|
if (!from_tool && (!isSpecialWindow() || isToolbar()) && !isFullScreen()) {
|
||||||
// try to keep the window in its xinerama screen if possible,
|
// try to keep the window in its xinerama screen if possible,
|
||||||
// if that fails at least keep it visible somewhere
|
// if that fails at least keep it visible somewhere
|
||||||
QRectF area = workspace()->clientArea(MovementArea, this);
|
QRectF area = workspace()->clientArea(MovementArea, this, moveResizeOutput());
|
||||||
if (area.contains(origClientGeometry)) {
|
if (area.contains(origClientGeometry)) {
|
||||||
keepInArea(area);
|
keepInArea(area);
|
||||||
}
|
}
|
||||||
area = workspace()->clientArea(WorkArea, this);
|
area = workspace()->clientArea(WorkArea, this, moveResizeOutput());
|
||||||
if (area.contains(origClientGeometry)) {
|
if (area.contains(origClientGeometry)) {
|
||||||
keepInArea(area);
|
keepInArea(area);
|
||||||
}
|
}
|
||||||
|
@ -4285,7 +4285,7 @@ void X11Window::maximize(MaximizeMode mode)
|
||||||
if (isElectricBorderMaximizing()) {
|
if (isElectricBorderMaximizing()) {
|
||||||
clientArea = workspace()->clientArea(MaximizeArea, this, Cursors::self()->mouse()->pos());
|
clientArea = workspace()->clientArea(MaximizeArea, this, Cursors::self()->mouse()->pos());
|
||||||
} else {
|
} else {
|
||||||
clientArea = workspace()->clientArea(MaximizeArea, this, moveResizeGeometry().center());
|
clientArea = workspace()->clientArea(MaximizeArea, this, moveResizeOutput());
|
||||||
}
|
}
|
||||||
|
|
||||||
MaximizeMode old_mode = max_mode;
|
MaximizeMode old_mode = max_mode;
|
||||||
|
@ -4588,7 +4588,7 @@ void X11Window::setFullScreen(bool set, bool user)
|
||||||
if (info->fullscreenMonitors().isSet()) {
|
if (info->fullscreenMonitors().isSet()) {
|
||||||
moveResize(fullscreenMonitorsArea(info->fullscreenMonitors()));
|
moveResize(fullscreenMonitorsArea(info->fullscreenMonitors()));
|
||||||
} else {
|
} else {
|
||||||
moveResize(workspace()->clientArea(FullScreenArea, this));
|
moveResize(workspace()->clientArea(FullScreenArea, this, moveResizeOutput()));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Q_ASSERT(!fullscreenGeometryRestore().isNull());
|
Q_ASSERT(!fullscreenGeometryRestore().isNull());
|
||||||
|
@ -4650,7 +4650,7 @@ bool X11Window::doStartInteractiveMoveResize()
|
||||||
// This reportedly improves smoothness of the moveresize operation,
|
// This reportedly improves smoothness of the moveresize operation,
|
||||||
// something with Enter/LeaveNotify events, looks like XFree performance problem or something *shrug*
|
// something with Enter/LeaveNotify events, looks like XFree performance problem or something *shrug*
|
||||||
// (https://lists.kde.org/?t=107302193400001&r=1&w=2)
|
// (https://lists.kde.org/?t=107302193400001&r=1&w=2)
|
||||||
QRectF r = workspace()->clientArea(FullArea, this);
|
QRectF r = workspace()->clientArea(FullArea, this, moveResizeOutput());
|
||||||
m_moveResizeGrabWindow.create(Xcb::toXNative(r), XCB_WINDOW_CLASS_INPUT_ONLY, 0, nullptr, kwinApp()->x11RootWindow());
|
m_moveResizeGrabWindow.create(Xcb::toXNative(r), XCB_WINDOW_CLASS_INPUT_ONLY, 0, nullptr, kwinApp()->x11RootWindow());
|
||||||
m_moveResizeGrabWindow.map();
|
m_moveResizeGrabWindow.map();
|
||||||
m_moveResizeGrabWindow.raise();
|
m_moveResizeGrabWindow.raise();
|
||||||
|
|
Loading…
Reference in a new issue