Enable non-client-area mouse events by default for widgets.

Task-number: QTBUG-30530
Task-number: QTBUG-29012

Change-Id: Iaddbb89bbb198e2b04419407e0871951650552ce
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
This commit is contained in:
Friedemann Kleint 2013-05-03 10:39:12 +02:00 committed by The Qt Project
parent eb11f67dd9
commit f2fcf75381
2 changed files with 3 additions and 14 deletions

View File

@ -137,6 +137,9 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
qt_window_private(win)->positionPolicy = topData()->posIncludesFrame ?
QWindowPrivate::WindowFrameInclusive : QWindowPrivate::WindowFrameExclusive;
win->create();
// Enable nonclient-area events for QDockWidget and other NonClientArea-mouse event processing.
if ((flags & Qt::Desktop) == Qt::Window)
win->handle()->setFrameStrutEventsEnabled(true);
data.window_flags = win->flags();

View File

@ -55,7 +55,6 @@
#include <qtoolbutton.h>
#include <qdebug.h>
#include <qpa/qplatformwindow.h>
#include <private/qwidgetresizehandler_p.h>
#include "qdockwidget_p.h"
@ -1000,14 +999,6 @@ void QDockWidgetPrivate::plug(const QRect &rect)
setWindowState(false, false, rect);
}
static void setFrameStrutEventsEnabled(const QWidget *w, bool enabled)
{
if (const QWindow *window = w->windowHandle())
if (QPlatformWindow *platformWindow = window->handle())
if (platformWindow->frameStrutEventsEnabled() != enabled)
platformWindow->setFrameStrutEventsEnabled(enabled);
}
void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect &rect)
{
Q_Q(QDockWidget);
@ -1060,9 +1051,6 @@ void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect
}
}
if (floating && nativeDeco)
setFrameStrutEventsEnabled(q, true);
resizer->setActive(QWidgetResizeHandler::Resize, !unplug && floating && !nativeDeco);
}
@ -1397,8 +1385,6 @@ bool QDockWidget::event(QEvent *event)
emit visibilityChanged(false);
break;
case QEvent::Show:
if (static_cast<QDockWidgetLayout *>(QDockWidget::layout())->nativeWindowDeco(isFloating()))
setFrameStrutEventsEnabled(this, true);
d->toggleViewAction->setChecked(true);
emit visibilityChanged(geometry().right() >= 0 && geometry().bottom() >= 0);
break;