diff options
author | Olivier Goffart <ogoffart@woboq.com> | 2017-02-21 15:45:00 +0100 |
---|---|---|
committer | Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com> | 2017-02-24 15:00:03 +0000 |
commit | 4d3781b640e8fb0a04e96b2d05199247556b8d86 (patch) | |
tree | 4f21cbd4d6712b588ffbd230f2669aab0392d59b /src | |
parent | c4f122927a85dac85ba3432cf84b0d2e66c54cda (diff) | |
download | qtbase-4d3781b640e8fb0a04e96b2d05199247556b8d86.tar.gz |
QDockWidget: Fix memory leak when dragging a tab outside of a floating tab window
A QDockWidgetItem will be leaked if a QDockWidget is dragged out of a
floating tab window, and then plugged back somewhere.
The problem is that QMainWindowLayout::unplug was not returning the
QDockWidgetItem* from the floating tab's layout. When that's the case,
a new QDockWidgetItem is created in QDockWidgetPrivate::startDrag
and will be put into the layout, leaking the old QDockWidgetItem.
Change-Id: Ifb9c1c562cb74383ebff1df0f91ee225c5cdb296
Reviewed-by: Sérgio Martins <sergio.martins@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/widgets/widgets/qmainwindowlayout.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp index 0d9c42fdf0..640154063e 100644 --- a/src/widgets/widgets/qmainwindowlayout.cpp +++ b/src/widgets/widgets/qmainwindowlayout.cpp @@ -2378,7 +2378,8 @@ QLayoutItem *QMainWindowLayout::unplug(QWidget *widget, bool group) // We are unplugging a dock widget from a floating window. if (QDockWidget *dw = qobject_cast<QDockWidget*>(widget)) { dw->d_func()->unplug(widget->geometry()); - return 0; + int index = widget->parentWidget()->layout()->indexOf(widget); + return widget->parentWidget()->layout()->itemAt(index); } } } |