diff --git a/client.cpp b/client.cpp index 7d2575ed96..ab9eeca455 100644 --- a/client.cpp +++ b/client.cpp @@ -698,18 +698,6 @@ bool Client::manage( bool isMapped, bool doNotShow, bool isInitial ) if ( ( (xSizeHint.flags & PPosition) && !ignorePPosition ) || (xSizeHint.flags & USPosition) ) { placementDone = TRUE; - if ( windowType() == NET::Normal && !area.contains( geom.topLeft() ) && may_move ) { - int tx = geom.x(); - int ty = geom.y(); - if ( tx >= 0 && tx < area.x() ) - tx = area.x(); - if ( ty >= 0 && ty < area.y() ) - ty = area.y(); - if ( tx > area.right() || ty > area.bottom() ) - placementDone = FALSE; // weird, do not trust. - else - geom.moveTopLeft( QPoint( tx, ty ) ); - } } if ( (xSizeHint.flags & USSize) || (xSizeHint.flags & PSize) ) { // keep in mind that we now actually have a size :-) @@ -720,6 +708,21 @@ bool Client::manage( bool isMapped, bool doNotShow, bool isInitial ) geom.setSize( geom.size().expandedTo( QSize(xSizeHint.min_width, xSizeHint.min_height ) ) ); } + if ( ( windowType() == NET::Normal || windowType() == NET::Dialog || windowType() == NET::Unknown + || windowType() == NET::Menu ) + && !area.contains( geom.topLeft() ) && may_move ) { + int tx = geom.x(); + int ty = geom.y(); + if ( tx >= 0 && tx < area.x() ) + tx = area.x(); + if ( ty >= 0 && ty < area.y() ) + ty = area.y(); + if ( tx > area.right() || ty > area.bottom() ) + placementDone = FALSE; // weird, do not trust. + else + geom.moveTopLeft( QPoint( tx, ty ) ); + } + windowWrapper()->resize( geom.size() ); // the clever activate() trick is necessary activateLayout();