Make redocking floating windows with tabs possible

TitleBar::isFloating() was returning false, while it should
have returned true.

Fixed by making isFloating() simpler and dumb. isFloating() should
only say if it belongs to a floating window or not. It shouldn't
contain any logic about whether button should be visible or not.

There's already logic elsewhere that will hide the float button
in case there's nesting.

Fixes issue #96 and #44

(cherry-picked from commit 0099a19a82)
This commit is contained in:
Sergio Martins
2022-06-19 00:09:21 +01:00
parent 4c670a552e
commit 66b91c1de3
4 changed files with 20 additions and 2 deletions

View File

@@ -499,7 +499,7 @@ Controllers::DockWidget *TitleBar::singleDockWidget() const
bool TitleBar::isFloating() const
{
if (m_floatingWindow)
return m_floatingWindow->hasSingleDockWidget(); // Debatable! Maybe it's always floating.
return true;
if (m_frame)
return m_frame->isFloating();

View File

@@ -41,7 +41,7 @@ public:
void setTitle(const QString &title);
QString title() const;
///@brief Returns true if the dock widget which has this title bar is floating
///@brief Returns true if this title-bar is the title bar of a floating window
bool isFloating() const;
///@brief the list of dockwidgets under this TitleBar.

View File

@@ -6263,6 +6263,23 @@ void TestDocks::tst_persistentCentralWidget()
QVERIFY(saver.restoreLayout(saved));
}
void TestDocks::tst_unfloatTabbedFloatingWidgets()
{
auto m = createMainWindow(QSize(1000, 1000), MainWindowOption_None);
auto dock0 = createDockWidget("0", Platform::instance()->tests_createView({ true }));
auto dock1 = createDockWidget("1", Platform::instance()->tests_createView({ true }));
m->addDockWidget(dock0, Location_OnLeft);
dock0->addDockWidgetAsTab(dock1);
dock0->titleBar()->onFloatClicked();
QVERIFY(dock0->titleBar()->isFloating());
QVERIFY(!dock0->mainWindow());
dock0->titleBar()->onFloatClicked();
QVERIFY(!dock0->titleBar()->isFloating());
QVERIFY(dock0->mainWindow());
}
int main(int argc, char *argv[])
{
int exitCode = 0;

View File

@@ -145,6 +145,7 @@ private Q_SLOTS:
void tst_fairResizeAfterRemoveWidget();
void tst_invalidJSON_data();
void tst_invalidJSON();
void tst_unfloatTabbedFloatingWidgets();
void tst_invalidPlaceholderPosition_data();
void tst_invalidPlaceholderPosition();