From a4c4c12f0a7d00f238ede46f1fa8f89f61dce9a0 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 2 Jul 2014 10:05:37 +0200 Subject: QDockWidget: Delay-create QWidgetResizeHandler. Task-number: QTBUG-34352 Change-Id: Ia7e5d8038b334686bedeee60c35656f3ab948e4c Reviewed-by: J-P Nurmi --- src/widgets/widgets/qdockwidget.cpp | 22 ++++++++++++++-------- src/widgets/widgets/qdockwidget_p.h | 8 +++++--- 2 files changed, 19 insertions(+), 11 deletions(-) (limited to 'src/widgets') 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(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 -- cgit v1.2.3