[wayland] Fix Placement::placeTransient keeping screens in bound.
Summary: If a window flows off the left, we move left of the popup to the left edge of the screen. Currently if a window flows off the right, we move the window back by it's own width, leaving it floating at a random point. For consistency we should be setting it so the right edge of the popup is on the right edge of the screen. So in the auto test for the "right border" case: The screen is 1280 wide, and we open a 10px popup at 1279 the final X should be 1270. Test Plan: Unit test Reviewers: #kwin, zzag, graesslin Reviewed By: #kwin, zzag, graesslin Subscribers: zzag, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D16314
This commit is contained in:
parent
30ad58f559
commit
d70c3568e6
2 changed files with 6 additions and 6 deletions
|
@ -156,13 +156,13 @@ void TransientPlacementTest::testSimplePosition_data()
|
|||
QTest::newRow("0/0") << QSize(640, 512) << QPoint(0, 0) << QSize(10, 100) << QPoint(0, 0) << QRect(0, 0, 10, 100);
|
||||
QTest::newRow("bottomRight") << QSize(640, 512) << QPoint(0, 0) << QSize(10, 100) << QPoint(639, 511) << QRect(639, 511, 10, 100);
|
||||
QTest::newRow("offset") << QSize(640, 512) << QPoint(200, 300) << QSize(100, 10) << QPoint(320, 256) << QRect(520, 556, 100, 10);
|
||||
QTest::newRow("right border") << QSize(1280, 1024) << QPoint(0, 0) << QSize(10, 100) << QPoint(1279, 50) << QRect(1269, 50, 10, 100);
|
||||
QTest::newRow("bottom border") << QSize(1280, 1024) << QPoint(0, 0) << QSize(10, 100) << QPoint(512, 1020) << QRect(512, 920, 10, 100);
|
||||
QTest::newRow("bottom right") << QSize(1280, 1024) << QPoint(0, 0) << QSize(10, 100) << QPoint(1279, 1020) << QRect(1269, 920, 10, 100);
|
||||
QTest::newRow("right border") << QSize(1280, 1024) << QPoint(0, 0) << QSize(10, 100) << QPoint(1279, 50) << QRect(1270, 50, 10, 100);
|
||||
QTest::newRow("bottom border") << QSize(1280, 1024) << QPoint(0, 0) << QSize(10, 100) << QPoint(512, 1020) << QRect(512, 924, 10, 100);
|
||||
QTest::newRow("bottom right") << QSize(1280, 1024) << QPoint(0, 0) << QSize(10, 100) << QPoint(1279, 1020) << QRect(1270, 924, 10, 100);
|
||||
QTest::newRow("top border") << QSize(1280, 1024) << QPoint(0, -100) << QSize(10, 100) << QPoint(512, 50) << QRect(512, 0, 10, 100);
|
||||
QTest::newRow("left border") << QSize(1280, 1024) << QPoint(-100, 0) << QSize(100, 10) << QPoint(50, 512) << QRect(0, 512, 100, 10);
|
||||
QTest::newRow("top left") << QSize(1280, 1024) << QPoint(-100, -100) << QSize(100, 100) << QPoint(50, 50) << QRect(0, 0, 100, 100);
|
||||
QTest::newRow("bottom left") << QSize(1280, 1024) << QPoint(-100, 0) << QSize(100, 100) << QPoint(50, 1000) << QRect(0, 900, 100, 100);
|
||||
QTest::newRow("bottom left") << QSize(1280, 1024) << QPoint(-100, 0) << QSize(100, 100) << QPoint(50, 1000) << QRect(0, 924, 100, 100);
|
||||
}
|
||||
|
||||
void TransientPlacementTest::testSimplePosition()
|
||||
|
|
|
@ -507,12 +507,12 @@ void Placement::placeTransient(AbstractClient *c)
|
|||
CHECK
|
||||
if (screen.x() + screen.width() < c->x() + c->width()) {
|
||||
// overlaps on right
|
||||
c->move(c->x() - c->width(), c->y());
|
||||
c->move(screen.x() + screen.width() - c->width(), c->y());
|
||||
CHECK
|
||||
}
|
||||
if (screen.y() + screen.height() < c->y() + c->height()) {
|
||||
// overlaps on bottom
|
||||
c->move(c->x(), c->y() - c->height());
|
||||
c->move(c->x(), screen.y() + screen.height() - c->height());
|
||||
CHECK
|
||||
}
|
||||
if (screen.y() > c->y()) {
|
||||
|
|
Loading…
Reference in a new issue