diff --git a/src/private/DropArea_p.h b/src/private/DropArea_p.h index 1d6f0b62..02c20eb7 100644 --- a/src/private/DropArea_p.h +++ b/src/private/DropArea_p.h @@ -67,6 +67,8 @@ private: friend class TestDocks; friend class DropIndicatorOverlayInterface; friend class AnimatedIndicators; + friend class FloatingWindow; + template bool validateAffinity(T *) const; bool drop(QWidgetOrQuick *droppedwindow, KDDockWidgets::Location location, Frame *relativeTo); diff --git a/src/private/FloatingWindow.cpp b/src/private/FloatingWindow.cpp index 49c4d1ac..375ed4a1 100644 --- a/src/private/FloatingWindow.cpp +++ b/src/private/FloatingWindow.cpp @@ -318,6 +318,8 @@ void FloatingWindow::onFrameCountChanged(int count) scheduleDeleteLater(); } else { updateTitleBarVisibility(); + if (count == 1) // if something was removed, then our single dock widget is floating, we need to check the QAction + dropArea()->updateFloatingActions(); } } diff --git a/tests/tst_docks.cpp b/tests/tst_docks.cpp index 6f2c71a4..c16adbe0 100644 --- a/tests/tst_docks.cpp +++ b/tests/tst_docks.cpp @@ -5352,11 +5352,18 @@ void TestDocks::tst_floatingAction() QVERIFY(!dock1->isFloating()); QVERIFY(!dock2->isFloating()); - QVERIFY(!dock2->floatAction()->isChecked()); QVERIFY(!dock1->floatAction()->isChecked()); + // Let's now remove dock1, dock2 should be floating + dock1->setFloating(true); + QVERIFY(dock1->isFloating()); + QVERIFY(dock2->isFloating()); + QVERIFY(dock2->floatAction()->isChecked()); + QVERIFY(dock1->floatAction()->isChecked()); + delete dock1->window(); + delete dock2->window(); delete oldFw2->window(); }