KDDockWidgets icon indicating copy to clipboard operation
KDDockWidgets copied to clipboard

Docking bug with nested main windows

Open delins opened this issue 2 years ago • 6 comments

I've created an MWE that has a QMainWindow (level 0), that contains a KDDockWidgets::MainWindow (level 1), which in turn contains two KDDockWidgets::MainWindow (level 2). Docks in level 2 don't always work well: they only work in the KDDockWidgets::MainWindow that was created last.

In the screenshots below kdRootADock0 was created first and then kdRootADock1. kdRootADock1 can accept docks, but kdRootADock0 cannot.

image

image

I you move kdRootADock0 to a different main window, for instance kdRootB in the code below, it accepts drops again.

Code:

#include <QApplication>
#include <QMainWindow>
#include <QTextEdit>

#include <kddockwidgets/DockWidget.h>
#include <kddockwidgets/MainWindow>


KDDockWidgets::MainWindow* createSubMainWindow(int counter) {
    auto subName = QString::number(counter);
    KDDockWidgets::MainWindow *mw = new KDDockWidgets::MainWindow{subName};

    auto dock1 = new KDDockWidgets::DockWidget(subName + " dock 0");
    auto dock2 = new KDDockWidgets::DockWidget(subName + " dock 1");

    dock1->setWidget(new QTextEdit);
    dock1->setWidget(new QTextEdit);

    mw->addDockWidget(dock1, KDDockWidgets::Location::Location_OnRight);
    mw->addDockWidget(dock2, KDDockWidgets::Location::Location_OnRight);
    return mw;
}


int main(int argc, char* argv[]) {
    QApplication app{argc, argv};

    QMainWindow rootWindow;

    KDDockWidgets::MainWindow *kdRootA = new KDDockWidgets::MainWindow{"kdRootA"};
    rootWindow.setCentralWidget(kdRootA);

    auto aDock1 = new KDDockWidgets::DockWidget("kdRootADock0");
    auto aDock2 = new KDDockWidgets::DockWidget("kdRootADock1");

    aDock1->setWidget(createSubMainWindow(0));
    aDock2->setWidget(createSubMainWindow(1));

    kdRootA->addDockWidget(aDock1, KDDockWidgets::Location::Location_OnRight);
    kdRootA->addDockWidget(aDock2, KDDockWidgets::Location::Location_OnRight);

    rootWindow.showMaximized();
    rootWindow.show();

    QMainWindow secondWindow;
    KDDockWidgets::MainWindow *kdRootB = new KDDockWidgets::MainWindow{"kdRootB"};
    secondWindow.setCentralWidget(kdRootB);
    secondWindow.showMaximized();
    secondWindow.show();

    return app.exec();
}

cmake:

cmake_minimum_required(VERSION 3.3)
project(mwe)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

find_package(KDDockWidgets-qt6 CONFIG REQUIRED)
find_package(Qt6Widgets CONFIG REQUIRED)

add_executable(mwe main.cpp)

target_link_libraries(mwe Qt6::Widgets KDAB::kddockwidgets)

Tested on Kubuntu 20.04.2, Qt 6.1.3, various versions of KDDockWidgets including the latest master

delins avatar Sep 12 '21 16:09 delins