summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSamuel Rødal <samuel.rodal@nokia.com>2011-05-02 12:00:00 +0200
committerSamuel Rødal <samuel.rodal@nokia.com>2011-05-02 12:00:00 +0200
commit59ded5cce47986ac941c437fbf972b1da581da05 (patch)
tree22cb3c50df76c842bc95d79a60289045bd199508 /src
parent3edff16c872fe7abe87007ba2ec78467f35430a9 (diff)
Implemented close event for QWindow and QWidgetWindow.
Diffstat (limited to 'src')
-rw-r--r--src/gui/kernel/qguiapplication_qpa.cpp8
-rw-r--r--src/gui/kernel/qwidgetwindow_qpa.cpp21
-rw-r--r--src/gui/kernel/qwidgetwindow_qpa_p.h3
-rw-r--r--src/gui/kernel/qwindow_qpa.cpp6
-rw-r--r--src/gui/kernel/qwindowsysteminterface_qpa_p.h6
5 files changed, 30 insertions, 14 deletions
diff --git a/src/gui/kernel/qguiapplication_qpa.cpp b/src/gui/kernel/qguiapplication_qpa.cpp
index 768fb767a4..aece38bd8c 100644
--- a/src/gui/kernel/qguiapplication_qpa.cpp
+++ b/src/gui/kernel/qguiapplication_qpa.cpp
@@ -710,11 +710,11 @@ void QGuiApplicationPrivate::processGeometryChangeEvent(QWindowSystemInterfacePr
void QGuiApplicationPrivate::processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e)
{
- if (e->topLevel.isNull()) {
- //qDebug() << "QGuiApplicationPrivate::processCloseEvent NULL";
+ if (e->window.isNull())
return;
- }
-// e->topLevel.data()->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent);
+
+ QCloseEvent event;
+ QGuiApplication::sendSpontaneousEvent(e->window.data(), &event);
}
void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *)
diff --git a/src/gui/kernel/qwidgetwindow_qpa.cpp b/src/gui/kernel/qwidgetwindow_qpa.cpp
index d19decc6e9..b5bc50c76d 100644
--- a/src/gui/kernel/qwidgetwindow_qpa.cpp
+++ b/src/gui/kernel/qwidgetwindow_qpa.cpp
@@ -41,6 +41,8 @@
#include "qwidgetwindow_qpa_p.h"
+#include "private/qwidget_p.h"
+
QT_BEGIN_NAMESPACE
QWidgetWindow::QWidgetWindow(QWidget *widget)
@@ -51,11 +53,8 @@ QWidgetWindow::QWidgetWindow(QWidget *widget)
bool QWidgetWindow::event(QEvent *event)
{
switch (event->type()) {
- case QEvent::MouseMove:
- case QEvent::MouseButtonPress:
- case QEvent::MouseButtonRelease:
- case QEvent::MouseButtonDblClick:
- handleMouseEvent(static_cast<QMouseEvent *>(event));
+ case QEvent::Close:
+ handleCloseEvent(static_cast<QCloseEvent *>(event));
return true;
case QEvent::KeyPress:
@@ -63,6 +62,13 @@ bool QWidgetWindow::event(QEvent *event)
handleKeyEvent(static_cast<QKeyEvent *>(event));
return true;
+ case QEvent::MouseMove:
+ case QEvent::MouseButtonPress:
+ case QEvent::MouseButtonRelease:
+ case QEvent::MouseButtonDblClick:
+ handleMouseEvent(static_cast<QMouseEvent *>(event));
+ return true;
+
case QEvent::Move:
handleMoveEvent(static_cast<QMoveEvent *>(event));
return true;
@@ -116,4 +122,9 @@ void QWidgetWindow::handleResizeEvent(QResizeEvent *event)
QGuiApplication::sendSpontaneousEvent(m_widget, event);
}
+void QWidgetWindow::handleCloseEvent(QCloseEvent *)
+{
+ m_widget->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent);
+}
+
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qwidgetwindow_qpa_p.h b/src/gui/kernel/qwidgetwindow_qpa_p.h
index c6cd9c81a6..37c9f383ea 100644
--- a/src/gui/kernel/qwidgetwindow_qpa_p.h
+++ b/src/gui/kernel/qwidgetwindow_qpa_p.h
@@ -63,8 +63,9 @@ public:
protected:
bool event(QEvent *);
- void handleMouseEvent(QMouseEvent *);
+ void handleCloseEvent(QCloseEvent *);
void handleKeyEvent(QKeyEvent *);
+ void handleMouseEvent(QMouseEvent *);
void handleMoveEvent(QMoveEvent *);
void handleResizeEvent(QResizeEvent *);
diff --git a/src/gui/kernel/qwindow_qpa.cpp b/src/gui/kernel/qwindow_qpa.cpp
index 19da97acef..baaec97eb1 100644
--- a/src/gui/kernel/qwindow_qpa.cpp
+++ b/src/gui/kernel/qwindow_qpa.cpp
@@ -293,7 +293,7 @@ void QWindow::setWindowIcon(const QImage &icon) const
QWindowContext * QWindow::glContext() const
{
Q_D(const QWindow);
- if (!d->glContext)
+ if (d->platformWindow && !d->glContext)
const_cast<QWindowPrivate *>(d)->glContext = new QWindowContext(const_cast<QWindow *>(this));
return d->glContext;
}
@@ -411,6 +411,10 @@ bool QWindow::event(QEvent *event)
break;
#endif
+ case QEvent::Close:
+ destroy();
+ break;
+
default:
return QObject::event(event);
}
diff --git a/src/gui/kernel/qwindowsysteminterface_qpa_p.h b/src/gui/kernel/qwindowsysteminterface_qpa_p.h
index 9ca48e3cb6..30adecc405 100644
--- a/src/gui/kernel/qwindowsysteminterface_qpa_p.h
+++ b/src/gui/kernel/qwindowsysteminterface_qpa_p.h
@@ -73,9 +73,9 @@ public:
class CloseEvent : public WindowSystemEvent {
public:
- CloseEvent(QWindow *tlw)
- : WindowSystemEvent(Close), topLevel(tlw) { }
- QWeakPointer<QWindow> topLevel;
+ CloseEvent(QWindow *w)
+ : WindowSystemEvent(Close), window(w) { }
+ QWeakPointer<QWindow> window;
};
class GeometryChangeEvent : public WindowSystemEvent {