diff options
author | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2014-07-02 10:05:37 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2014-07-03 06:31:01 +0200 |
commit | a4c4c12f0a7d00f238ede46f1fa8f89f61dce9a0 (patch) | |
tree | e6d1019d2cae85761d13c13e13445c0b17228a95 /src/widgets/widgets | |
parent | 5f504166203d9562ef5b41a0f18ae191aa34ee63 (diff) |
QDockWidget: Delay-create QWidgetResizeHandler.
Task-number: QTBUG-34352
Change-Id: Ia7e5d8038b334686bedeee60c35656f3ab948e4c
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
Diffstat (limited to 'src/widgets/widgets')
-rw-r--r-- | src/widgets/widgets/qdockwidget.cpp | 22 | ||||
-rw-r--r-- | src/widgets/widgets/qdockwidget_p.h | 8 |
2 files changed, 19 insertions, 11 deletions
diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp index ad9481a928..3efa89edb3 100644 --- a/src/widgets/widgets/qdockwidget.cpp +++ b/src/widgets/widgets/qdockwidget.cpp @@ -591,10 +591,6 @@ void QDockWidgetPrivate::init() QObject::connect(button, SIGNAL(clicked()), q, SLOT(close())); layout->setWidgetForRole(QDockWidgetLayout::CloseButton, button); - resizer = new QWidgetResizeHandler(q); - resizer->setMovingEnabled(false); - resizer->setActive(false); - #ifndef QT_NO_ACTION toggleViewAction = new QAction(q); toggleViewAction->setCheckable(true); @@ -760,13 +756,12 @@ void QDockWidgetPrivate::endDrag(bool abort) Qt::WindowFlags flags = q->windowFlags(); flags &= ~Qt::X11BypassWindowManagerHint; q->setWindowFlags(flags); - resizer->setActive(QWidgetResizeHandler::Resize, true); + setResizerActive(true); q->show(); } else { QDockWidgetLayout *myLayout = qobject_cast<QDockWidgetLayout*>(layout); - resizer->setActive(QWidgetResizeHandler::Resize, - myLayout->widgetForRole(QDockWidgetLayout::TitleBar) != 0); + setResizerActive(myLayout->widgetForRole(QDockWidgetLayout::TitleBar) != 0); } undockedGeometry = q->geometry(); q->activateWindow(); @@ -779,6 +774,17 @@ void QDockWidgetPrivate::endDrag(bool abort) state = 0; } +void QDockWidgetPrivate::setResizerActive(bool active) +{ + Q_Q(QDockWidget); + if (active && !resizer) { + resizer = new QWidgetResizeHandler(q); + resizer->setMovingEnabled(false); + } + if (resizer) + resizer->setActive(QWidgetResizeHandler::Resize, active); +} + bool QDockWidgetPrivate::isAnimating() const { Q_Q(const QDockWidget); @@ -1052,7 +1058,7 @@ void QDockWidgetPrivate::setWindowState(bool floating, bool unplug, const QRect } } - resizer->setActive(QWidgetResizeHandler::Resize, !unplug && floating && !nativeDeco); + setResizerActive(!unplug && floating && !nativeDeco); } /*! diff --git a/src/widgets/widgets/qdockwidget_p.h b/src/widgets/widgets/qdockwidget_p.h index f7cd8c0039..a4dc68dd7d 100644 --- a/src/widgets/widgets/qdockwidget_p.h +++ b/src/widgets/widgets/qdockwidget_p.h @@ -88,7 +88,7 @@ public: features(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable), - allowedAreas(Qt::AllDockWidgetAreas) + allowedAreas(Qt::AllDockWidgetAreas), resizer(0) { } void init(); @@ -101,8 +101,6 @@ public: QDockWidget::DockWidgetFeatures features; Qt::DockWidgetAreas allowedAreas; - QWidgetResizeHandler *resizer; - #ifndef QT_NO_ACTION QAction *toggleViewAction; #endif @@ -124,8 +122,12 @@ public: void unplug(const QRect &rect); void plug(const QRect &rect); + void setResizerActive(bool active); bool isAnimating() const; + +private: + QWidgetResizeHandler *resizer; }; class Q_WIDGETS_EXPORT QDockWidgetLayout : public QLayout |