summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/xcb/qxcbwindow.cpp
diff options
context:
space:
mode:
authorSamuel Rødal <samuel.rodal@nokia.com>2011-09-22 14:37:58 +0200
committerQt by Nokia <qt-info@nokia.com>2011-09-23 11:31:21 +0200
commit0bc19b49975bc82185aa24857f2a921584c9684f (patch)
tree7c4dbb914ebc0e40588d083171bba3de2fc65970 /src/plugins/platforms/xcb/qxcbwindow.cpp
parent294df24621ddd4e08ca792cd8e541dcc84409acb (diff)
Implemented QWidget's move() vs setGeometry() distinction in QWindow.
QWidget's move() sets the position of the window including the window frame, unlike setGeometry(). There was no equivalent for this in QWindow, so several QWidget auto-tests were failing. Now we add setFramePos() to achieve the same purpose in QWindow. This fixes tst_QWidget::windowState(), which uses move(). Change-Id: I9a3e558bd615a8f0234cc3dd94fbb2bf5ecbc148 Reviewed-on: http://codereview.qt-project.org/5405 Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com> Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbwindow.cpp')
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index bf882bdf84..4169ba5e4f 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -246,6 +246,8 @@ void QXcbWindow::create()
Q_XCB_CALL(xcb_change_window_attributes(xcb_connection(), m_window, mask, values));
+ propagateSizeHints();
+
xcb_atom_t properties[4];
int propertyCount = 0;
properties[propertyCount++] = atom(QXcbAtom::WM_DELETE_WINDOW);
@@ -335,6 +337,8 @@ void QXcbWindow::setGeometry(const QRect &rect)
{
QPlatformWindow::setGeometry(rect);
+ propagateSizeHints();
+
const quint32 mask = XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT;
const quint32 values[] = { rect.x(),
rect.y(),
@@ -1062,11 +1066,12 @@ void QXcbWindow::propagateSizeHints()
QRect rect = geometry();
+ QWindow *win = window();
+
xcb_size_hints_set_position(&hints, true, rect.x(), rect.y());
xcb_size_hints_set_size(&hints, true, rect.width(), rect.height());
- xcb_size_hints_set_win_gravity(&hints, XCB_GRAVITY_STATIC);
-
- QWindow *win = window();
+ xcb_size_hints_set_win_gravity(&hints, qt_window_private(win)->positionPolicy == QWindowPrivate::WindowFrameInclusive
+ ? XCB_GRAVITY_NORTH_WEST : XCB_GRAVITY_STATIC);
QSize minimumSize = win->minimumSize();
QSize maximumSize = win->maximumSize();