summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel/qapplication_qpa.cpp
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@nokia.com>2010-07-23 08:24:06 (GMT)
committerJørgen Lind <jorgen.lind@nokia.com>2010-07-23 08:37:47 (GMT)
commitbe08fbc13f7370b6cc0c34660b4d1c16e4fdd3f5 (patch)
tree667ad95bc68c4a5423179672741152d758a0a6b3 /src/gui/kernel/qapplication_qpa.cpp
parentd15e6a32aeced893a5b5b790f3235cc7b3e0b9af (diff)
downloadQt-be08fbc13f7370b6cc0c34660b4d1c16e4fdd3f5.zip
Qt-be08fbc13f7370b6cc0c34660b4d1c16e4fdd3f5.tar.gz
Qt-be08fbc13f7370b6cc0c34660b4d1c16e4fdd3f5.tar.bz2
Handle behavior change in resize and move events in Lighthouse
Dont post the resize event and move event seperatly on the windowsystemintegration event queue, but as one event which will be processed in one go.
Diffstat (limited to 'src/gui/kernel/qapplication_qpa.cpp')
-rw-r--r--src/gui/kernel/qapplication_qpa.cpp47
1 files changed, 25 insertions, 22 deletions
diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp
index d289dee..26ae82d 100644
--- a/src/gui/kernel/qapplication_qpa.cpp
+++ b/src/gui/kernel/qapplication_qpa.cpp
@@ -102,11 +102,8 @@ void QApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate
case QWindowSystemInterfacePrivate::Touch:
QApplicationPrivate::processTouchEvent(static_cast<QWindowSystemInterfacePrivate::TouchEvent *>(e));
break;
- case QWindowSystemInterfacePrivate::Move:
- QApplicationPrivate::processMoveEvent(static_cast<QWindowSystemInterfacePrivate::MoveEvent *>(e));
- break;
- case QWindowSystemInterfacePrivate::Resize:
- QApplicationPrivate::processResizeEvent(static_cast<QWindowSystemInterfacePrivate::ResizeEvent *>(e));
+ case QWindowSystemInterfacePrivate::GeometryChange:
+ QApplicationPrivate::processGeometryChangeEvent(static_cast<QWindowSystemInterfacePrivate::GeometryChangeEvent*>(e));
break;
case QWindowSystemInterfacePrivate::Enter:
QApplicationPrivate::processEnterEvent(static_cast<QWindowSystemInterfacePrivate::EnterEvent *>(e));
@@ -826,27 +823,33 @@ void QApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::Leave
}
-void QApplicationPrivate::processMoveEvent(QWindowSystemInterfacePrivate::MoveEvent *moveEvent)
+
+void QApplicationPrivate::processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e)
{
- if (moveEvent->moved.isNull()) {
- //qDebug() << "QApplicationPrivate::processMoveEvent NULL";
- return;
+ if (e->tlw.isNull())
+ return;
+ QWidget *tlw = e->tlw.data();
+ if (!tlw->isWindow())
+ return; //geo of native child widgets is controlled by lighthouse
+ //so we already have sent the events; besides this new rect
+ //is not mapped to parent
+
+ QRect newRect = e->newGeometry;
+ QRect cr(tlw->geometry());
+ bool isResize = cr.size() != newRect.size();
+ bool isMove = cr.topLeft() != newRect.topLeft();
+ tlw->data->crect = newRect;
+ if (isResize) {
+ QResizeEvent e(tlw->data->crect.size(), cr.size());
+ QApplication::sendSpontaneousEvent(tlw, &e);
+ tlw->update();
}
- moveEvent->moved.data()->data->crect.setTopLeft(moveEvent->newPos);
- QMoveEvent e(moveEvent->moved.data()->geometry().topLeft(), moveEvent->newPos);
- QApplication::sendSpontaneousEvent(moveEvent->moved.data(), &e);
-}
-void QApplicationPrivate::processResizeEvent(QWindowSystemInterfacePrivate::ResizeEvent *e)
-{
- if (e->sizeChanged.isNull()) {
- //qDebug() << "QApplicationPrivate::processResizeEvent NULL";
- return;
+ if (isMove) {
+ //### frame geometry
+ QMoveEvent e(tlw->data->crect.topLeft(), cr.topLeft());
+ QApplication::sendSpontaneousEvent(tlw, &e);
}
- e->sizeChanged.data()->data->crect.setSize(e->newSize);
- QResizeEvent resizeEvent(e->sizeChanged.data()->data->crect.size(), e->newSize);
- QApplication::sendSpontaneousEvent(e->sizeChanged.data(), &resizeEvent);
- e->sizeChanged.data()->update();
}
void QApplicationPrivate::processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e)