From f58e046a611118a6349ee617a98dbb24280ef183 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 27 Jun 2012 16:20:18 +0200 Subject: Add framestrut mouse events. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add infrastructure to QWindowSystemInterface. - Add a setter for enabling framestrut events to QPlatformWindow. - Add Windows implementation, pass keyboard modifiers. QDockWidget relies on it for docking. Task-number: QTBUG-26296 Change-Id: I9d84b356e9a5eb341f57b6f51f34b6b494ff7f87 Reviewed-by: Jørgen Lind --- src/widgets/kernel/qwidgetwindow_qpa.cpp | 12 ++++++++++++ src/widgets/kernel/qwidgetwindow_qpa_p.h | 1 + src/widgets/widgets/qdockwidget.cpp | 7 +++++++ 3 files changed, 20 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidgetwindow_qpa.cpp b/src/widgets/kernel/qwidgetwindow_qpa.cpp index f8a5178be5..1b076d1801 100644 --- a/src/widgets/kernel/qwidgetwindow_qpa.cpp +++ b/src/widgets/kernel/qwidgetwindow_qpa.cpp @@ -137,6 +137,13 @@ bool QWidgetWindow::event(QEvent *event) handleMouseEvent(static_cast(event)); return true; + case QEvent::NonClientAreaMouseMove: + case QEvent::NonClientAreaMouseButtonPress: + case QEvent::NonClientAreaMouseButtonRelease: + case QEvent::NonClientAreaMouseButtonDblClick: + handleNonClientAreaMouseEvent(static_cast(event)); + return true; + case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: @@ -208,6 +215,11 @@ void QWidgetWindow::handleEnterLeaveEvent(QEvent *event) } } +void QWidgetWindow::handleNonClientAreaMouseEvent(QMouseEvent *e) +{ + QApplication::sendSpontaneousEvent(m_widget, e); +} + void QWidgetWindow::handleMouseEvent(QMouseEvent *event) { if (qApp->d_func()->inPopupMode()) { diff --git a/src/widgets/kernel/qwidgetwindow_qpa_p.h b/src/widgets/kernel/qwidgetwindow_qpa_p.h index 8afa3f33cd..5750a05d40 100644 --- a/src/widgets/kernel/qwidgetwindow_qpa_p.h +++ b/src/widgets/kernel/qwidgetwindow_qpa_p.h @@ -74,6 +74,7 @@ protected: void handleEnterLeaveEvent(QEvent *); void handleKeyEvent(QKeyEvent *); void handleMouseEvent(QMouseEvent *); + void handleNonClientAreaMouseEvent(QMouseEvent *); void handleTouchEvent(QTouchEvent *); void handleMoveEvent(QMoveEvent *); void handleResizeEvent(QResizeEvent *); diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index be216ecf9f..551549f97e 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -48,12 +48,14 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include "qdockwidget_p.h" @@ -1052,6 +1054,11 @@ void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect } } + if (unplug && floating && nativeDeco) + if (const QWindow *window = q->windowHandle()) + if (QPlatformWindow *platformWindow = window->handle()) + platformWindow->setFrameStrutEventsEnabled(true); + resizer->setActive(QWidgetResizeHandler::Resize, !unplug && floating && !nativeDeco); } -- cgit v1.2.3