diff options
authorOlivier Goffart <>2017-02-21 15:45:00 +0100
committerOlivier Goffart (Woboq GmbH) <>2017-02-24 15:00:03 +0000
commit4d3781b640e8fb0a04e96b2d05199247556b8d86 (patch)
parentc4f122927a85dac85ba3432cf84b0d2e66c54cda (diff)
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 <>
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)) {
- return 0;
+ int index = widget->parentWidget()->layout()->indexOf(widget);
+ return widget->parentWidget()->layout()->itemAt(index);