summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@nokia.com>2010-07-23 10:24:06 +0200
committerJørgen Lind <jorgen.lind@nokia.com>2010-07-23 10:37:47 +0200
commitbe08fbc13f7370b6cc0c34660b4d1c16e4fdd3f5 (patch)
tree667ad95bc68c4a5423179672741152d758a0a6b3
parentd15e6a32aeced893a5b5b790f3235cc7b3e0b9af (diff)
downloadqt4-tools-be08fbc13f7370b6cc0c34660b4d1c16e4fdd3f5.tar.gz
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.
-rw-r--r--src/gui/kernel/qapplication_p.h3
-rw-r--r--src/gui/kernel/qapplication_qpa.cpp47
-rw-r--r--src/gui/kernel/qwidget_qpa.cpp1
-rw-r--r--src/gui/kernel/qwindowsysteminterface_qpa.cpp24
-rw-r--r--src/gui/kernel/qwindowsysteminterface_qpa_p.h22
5 files changed, 35 insertions, 62 deletions
diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
index de97f629ff..933e0ab967 100644
--- a/src/gui/kernel/qapplication_p.h
+++ b/src/gui/kernel/qapplication_p.h
@@ -500,8 +500,7 @@ public:
static void processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e);
- static void processMoveEvent(QWindowSystemInterfacePrivate::MoveEvent *e);
- static void processResizeEvent(QWindowSystemInterfacePrivate::ResizeEvent *e);
+ static void processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e);
static void processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e);
static void processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e);
diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp
index d289dee094..26ae82d657 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)
diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp
index ac868ebd6c..1b7d9d27d2 100644
--- a/src/gui/kernel/qwidget_qpa.cpp
+++ b/src/gui/kernel/qwidget_qpa.cpp
@@ -128,6 +128,7 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows)
if (windowType() != Qt::Desktop) {
if (destroyWindow && isWindow()) {
+//### jl: delete all child windows...
QTLWExtra *topData = d->maybeTopData();
if (topData) {
delete topData->platformWindow;
diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.cpp b/src/gui/kernel/qwindowsysteminterface_qpa.cpp
index dd78e8ea57..c49bd368be 100644
--- a/src/gui/kernel/qwindowsysteminterface_qpa.cpp
+++ b/src/gui/kernel/qwindowsysteminterface_qpa.cpp
@@ -75,28 +75,8 @@ void QWindowSystemInterface::handleLeaveEvent(QWidget *tlw)
void QWindowSystemInterface::handleGeometryChange(QWidget *tlw, const QRect &newRect)
{
- if (!tlw)
- return;
- 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 cr(tlw->geometry());
-
- bool isResize = cr.size() != newRect.size();
- bool isMove = cr.topLeft() != newRect.topLeft();
- if (isResize) {
- QWindowSystemInterfacePrivate::ResizeEvent *resizeEvent =
- new QWindowSystemInterfacePrivate::ResizeEvent(tlw,newRect.size());
- QWindowSystemInterfacePrivate::queueWindowSystemEvent(resizeEvent);
- }
-
- if (isMove) {
- QWindowSystemInterfacePrivate::MoveEvent *moveEvent =
- new QWindowSystemInterfacePrivate::MoveEvent(tlw,newRect.topLeft());
- QWindowSystemInterfacePrivate::queueWindowSystemEvent(moveEvent);
- }
+ QWindowSystemInterfacePrivate::GeometryChangeEvent *e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(tlw,newRect);
+ QWindowSystemInterfacePrivate::queueWindowSystemEvent(e);
}
diff --git a/src/gui/kernel/qwindowsysteminterface_qpa_p.h b/src/gui/kernel/qwindowsysteminterface_qpa_p.h
index 90d1702aa8..5f3ac5da1f 100644
--- a/src/gui/kernel/qwindowsysteminterface_qpa_p.h
+++ b/src/gui/kernel/qwindowsysteminterface_qpa_p.h
@@ -53,8 +53,7 @@ public:
enum EventType {
Close,
- Resize,
- Move,
+ GeometryChange,
Enter,
Leave,
Mouse,
@@ -80,22 +79,13 @@ public:
QWeakPointer<QWidget> topLevel;
};
- class ResizeEvent : public WindowSystemEvent {
+ class GeometryChangeEvent : public WindowSystemEvent {
public:
- ResizeEvent(QWidget *sizeChanged, const QSize &newSize)
- : WindowSystemEvent(Resize), sizeChanged(sizeChanged), newSize(newSize)
+ GeometryChangeEvent(QWidget *tlw, const QRect &newGeometry)
+ : WindowSystemEvent(GeometryChange), tlw(tlw), newGeometry(newGeometry)
{ }
- QWeakPointer<QWidget> sizeChanged;
- QSize newSize;
- };
-
- class MoveEvent : public WindowSystemEvent {
- public:
- MoveEvent(QWidget *moved, const QPoint &newPos)
- : WindowSystemEvent(Move), moved(moved), newPos(newPos)
- { }
- QWeakPointer<QWidget> moved;
- QPoint newPos;
+ QWeakPointer<QWidget> tlw;
+ QRect newGeometry;
};
class EnterEvent : public WindowSystemEvent {