return;
QRect newRect = e->newGeometry;
- QRect cr = window->geometry();
+ QRect cr = window->d_func()->geometry;
bool isResize = cr.size() != newRect.size();
bool isMove = cr.topLeft() != newRect.topLeft();
window->d_func()->geometry = newRect;
- if (isResize) {
+ if (isResize || window->d_func()->resizeEventPending) {
QResizeEvent e(newRect.size(), cr.size());
QGuiApplication::sendSpontaneousEvent(window, &e);
+
+ window->d_func()->resizeEventPending = false;
}
if (isMove) {
QWindow *window = e->exposed.data();
- QResizeEvent resizeEvent(window->handle()->geometry().size(), window->size());
- QGuiApplication::sendSpontaneousEvent(window, &resizeEvent);
-
QExposeEvent exposeEvent(e->region);
QCoreApplication::sendSpontaneousEvent(window, &exposeEvent);
}
{
}
+void QWindow::moveEvent(QMoveEvent *)
+{
+}
+
void QWindow::resizeEvent(QResizeEvent *)
{
}
mouseDoubleClickEvent(static_cast<QMouseEvent*>(event));
break;
+ case QEvent::Move:
+ moveEvent(static_cast<QMoveEvent*>(event));
+ break;
+
case QEvent::Resize:
resizeEvent(static_cast<QResizeEvent*>(event));
break;
class QWindowPrivate;
class QExposeEvent;
+class QMoveEvent;
class QResizeEvent;
class QShowEvent;
class QHideEvent;
protected:
virtual void exposeEvent(QExposeEvent *);
virtual void resizeEvent(QResizeEvent *);
+ virtual void moveEvent(QMoveEvent *);
virtual void showEvent(QShowEvent *);
virtual void hideEvent(QHideEvent *);
, platformWindow(0)
, visible(false)
, windowState(Qt::WindowNoState)
+ , resizeEventPending(true)
, maximumSize(QWINDOWSIZE_MAX, QWINDOWSIZE_MAX)
, modality(Qt::NonModal)
, transientParent(0)
QString windowTitle;
QRect geometry;
Qt::WindowState windowState;
+ bool resizeEventPending;
QSize minimumSize;
QSize maximumSize;
qBound(1, rect.height(), XCOORD_MAX) };
Q_XCB_CALL(xcb_configure_window(xcb_connection(), m_window, mask, values));
+
+ xcb_flush(xcb_connection());
}
QMargins QXcbWindow::frameMargins() const
void QXcbWindow::handleConfigureNotifyEvent(const xcb_configure_notify_event_t *event)
{
- int xpos = geometry().x();
- int ypos = geometry().y();
-
- if ((event->width == geometry().width() && event->height == geometry().height()) || event->x != 0 || event->y != 0) {
- xpos = event->x;
- ypos = event->y;
- }
-
- QRect rect(xpos, ypos, event->width, event->height);
+ QRect rect(event->x, event->y, event->width, event->height);
QPlatformWindow::setGeometry(rect);
QWindowSystemInterface::handleGeometryChange(window(), rect);