QDockWidget: Delay-create QWidgetResizeHandler.

Task-number: QTBUG-34352
Change-Id: Ia7e5d8038b334686bedeee60c35656f3ab948e4c
Reviewed-by: J-P Nurmi <jpnurmi@digia.com>
bb10
Friedemann Kleint 2014-07-02 10:05:37 +02:00
parent 5f50416620
commit a4c4c12f0a
2 changed files with 19 additions and 11 deletions

View File

@ -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);
}
/*!

View File

@ -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