align zero corner placement to client, not deco
BUG: 318107 FIXED-IN: 4.11.1 REVIEW: 112102
This commit is contained in:
parent
2568fcb149
commit
7d6d80351c
2 changed files with 28 additions and 5 deletions
|
@ -377,6 +377,7 @@ bool Client::manage(xcb_window_t w, bool isMapped)
|
||||||
if (!placementDone) {
|
if (!placementDone) {
|
||||||
// Placement needs to be after setting size
|
// Placement needs to be after setting size
|
||||||
Placement::self()->place(this, area);
|
Placement::self()->place(this, area);
|
||||||
|
dontKeepInArea = true;
|
||||||
placementDone = true;
|
placementDone = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,7 +420,7 @@ bool Client::manage(xcb_window_t w, bool isMapped)
|
||||||
if (pseudo_max != Client::MaximizeRestore) {
|
if (pseudo_max != Client::MaximizeRestore) {
|
||||||
maximize((MaximizeMode)pseudo_max);
|
maximize((MaximizeMode)pseudo_max);
|
||||||
// from now on, care about maxmode, since the maximization call will override mode for fix aspects
|
// from now on, care about maxmode, since the maximization call will override mode for fix aspects
|
||||||
dontKeepInArea = (max_mode == Client::MaximizeFull);
|
dontKeepInArea |= (max_mode == Client::MaximizeFull);
|
||||||
geom_restore = QRect(); // Use placement when unmaximizing ...
|
geom_restore = QRect(); // Use placement when unmaximizing ...
|
||||||
if (!(max_mode & Client::MaximizeVertical)) {
|
if (!(max_mode & Client::MaximizeVertical)) {
|
||||||
geom_restore.setY(y()); // ...but only for horizontal direction
|
geom_restore.setY(y()); // ...but only for horizontal direction
|
||||||
|
|
|
@ -28,6 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#include <QTextStream>
|
#include <QTextStream>
|
||||||
|
|
||||||
#ifndef KCMRULES
|
#ifndef KCMRULES
|
||||||
|
#include <kdecoration.h>
|
||||||
#include "workspace.h"
|
#include "workspace.h"
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
@ -96,6 +97,30 @@ void Placement::place(Client* c, QRect& area, Policy policy, Policy nextPlacemen
|
||||||
placeMaximizing(c, area, nextPlacement);
|
placeMaximizing(c, area, nextPlacement);
|
||||||
else
|
else
|
||||||
placeSmart(c, area, nextPlacement);
|
placeSmart(c, area, nextPlacement);
|
||||||
|
|
||||||
|
if (options->borderSnapZone()) {
|
||||||
|
// snap to titlebar / snap to window borders on inner screen edges
|
||||||
|
const QRect geo(c->geometry());
|
||||||
|
QPoint corner = geo.topLeft();
|
||||||
|
const QPoint cp = c->clientPos();
|
||||||
|
const QSize cs = geo.size() - c->clientSize();
|
||||||
|
KDecorationDefines::Position titlePos = c->titlebarPosition();
|
||||||
|
|
||||||
|
const QRect fullRect = workspace()->clientArea(FullArea, c);
|
||||||
|
if (!(c->maximizeMode() & KDecorationDefines::MaximizeHorizontal)) {
|
||||||
|
if (titlePos != KDecorationDefines::PositionRight && geo.right() == fullRect.right())
|
||||||
|
corner.rx() += cs.width() - cp.x();
|
||||||
|
if (titlePos != KDecorationDefines::PositionLeft && geo.x() == fullRect.x())
|
||||||
|
corner.rx() -= cp.x();
|
||||||
|
}
|
||||||
|
if (!(c->maximizeMode() & KDecorationDefines::MaximizeVertical)) {
|
||||||
|
if (titlePos != KDecorationDefines::PositionBottom && geo.bottom() == fullRect.bottom())
|
||||||
|
corner.ry() += cs.height() - cp.y();
|
||||||
|
if (titlePos != KDecorationDefines::PositionTop && geo.y() == fullRect.y())
|
||||||
|
corner.ry() -= cp.y();
|
||||||
|
}
|
||||||
|
c->move(corner);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -442,10 +467,7 @@ void Placement::placeCentered(Client* c, const QRect& area, Policy /*next*/)
|
||||||
void Placement::placeZeroCornered(Client* c, const QRect& area, Policy /*next*/)
|
void Placement::placeZeroCornered(Client* c, const QRect& area, Policy /*next*/)
|
||||||
{
|
{
|
||||||
// get the maximum allowed windows space and desk's origin
|
// get the maximum allowed windows space and desk's origin
|
||||||
const QRect maxRect = checkArea(c, area);
|
c->move(checkArea(c, area).topLeft());
|
||||||
|
|
||||||
// place the window
|
|
||||||
c->move(QPoint(maxRect.left(), maxRect.top()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Placement::placeUtility(Client* c, QRect& area, Policy /*next*/)
|
void Placement::placeUtility(Client* c, QRect& area, Policy /*next*/)
|
||||||
|
|
Loading…
Reference in a new issue