Clean up Placement::placeCascaded()
Avoid using Window::frameGeometry() because its position is invalid. In the future, the XdgToplevelWindow would need to run the placement code before updating the Window::frameGeometry(). In order to prepare for that, this change also makes placeCascaded() pull the window size from a cached QSizeF() object.
This commit is contained in:
parent
3810811730
commit
646f071291
1 changed files with 5 additions and 4 deletions
|
@ -379,7 +379,8 @@ void Placement::placeCascaded(Window *c, const QRect &area, PlacementPolicy next
|
|||
{
|
||||
Q_ASSERT(area.isValid());
|
||||
|
||||
if (!c->frameGeometry().isValid()) {
|
||||
const QSizeF size = c->size();
|
||||
if (size.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -402,11 +403,11 @@ void Placement::placeCascaded(Window *c, const QRect &area, PlacementPolicy next
|
|||
int yp = cci[dn].pos.y();
|
||||
|
||||
// here to touch in case people vote for resize on placement
|
||||
if ((yp + c->height()) > area.height()) {
|
||||
if ((yp + size.height()) > area.height()) {
|
||||
yp = area.top();
|
||||
}
|
||||
|
||||
if ((xp + c->width()) > area.width()) {
|
||||
if ((xp + size.width()) > area.width()) {
|
||||
if (!yp) {
|
||||
place(c, area, nextPlacement);
|
||||
return;
|
||||
|
@ -427,7 +428,7 @@ void Placement::placeCascaded(Window *c, const QRect &area, PlacementPolicy next
|
|||
}
|
||||
|
||||
// last resort: if still doesn't fit, smart place it
|
||||
if (((xp + c->width()) > area.width() - area.left()) || ((yp + c->height()) > area.height() - area.top())) {
|
||||
if (((xp + size.width()) > area.width() - area.left()) || ((yp + size.height()) > area.height() - area.top())) {
|
||||
place(c, area, nextPlacement);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue