diff --git a/src/DockAreaWidget.cpp b/src/DockAreaWidget.cpp index 868934e..dbbf144 100644 --- a/src/DockAreaWidget.cpp +++ b/src/DockAreaWidget.cpp @@ -533,7 +533,9 @@ void CDockAreaWidget::setCurrentIndex(int index) { qWarning() << Q_FUNC_INFO << "Invalid index" << index; return; - } + } + + emit currentChanging(index); // Set active TAB and update all other tabs to be inactive for (int i = 0; i < d->TabsLayout->count(); ++i) diff --git a/src/DockAreaWidget.h b/src/DockAreaWidget.h index f9ff5df..0079f8b 100644 --- a/src/DockAreaWidget.h +++ b/src/DockAreaWidget.h @@ -187,6 +187,13 @@ signals: */ void tabBarClicked(int index); + /** + * This signal is emitted when the tab bar's current tab is about to be changed. The new + * current has the given index, or -1 if there isn't a new one. + * @param index + */ + void currentChanging(int index); + /** * This signal is emitted when the tab bar's current tab changes. The new * current has the given index, or -1 if there isn't a new one diff --git a/src/DockManager.cpp b/src/DockManager.cpp index c32c556..df34055 100644 --- a/src/DockManager.cpp +++ b/src/DockManager.cpp @@ -369,6 +369,8 @@ bool CDockManager::restoreState(const QByteArray &state, int version) } } + emit stateChanged(); + return true; } diff --git a/src/DockManager.h b/src/DockManager.h index 0aad01b..d6e19c7 100644 --- a/src/DockManager.h +++ b/src/DockManager.h @@ -187,6 +187,11 @@ signals: * This signal is emitted if the list of perspectives changed */ void perspectiveListChanged(); + + /** + * This signal is emitted if the state changed in restoreState + */ + void stateChanged(); }; // class DockManager } // namespace ads //----------------------------------------------------------------------------- diff --git a/src/DockWidgetTitleBar.cpp b/src/DockWidgetTitleBar.cpp index 2663206..b9f5be9 100644 --- a/src/DockWidgetTitleBar.cpp +++ b/src/DockWidgetTitleBar.cpp @@ -240,16 +240,19 @@ void CDockWidgetTitleBar::mouseReleaseEvent(QMouseEvent* ev) // End of tab moving, change order now if (d->isDraggingState(DraggingTab) && d->DockArea) { - // Find tab under mouse - QPoint pos = d->DockArea->mapFromGlobal(ev->globalPos()); - int fromIndex = d->DockArea->tabIndex(d->DockWidget); - int toIndex = d->DockArea->indexOfContentByTitlePos(pos, this); - if (-1 == toIndex) - { - toIndex = d->DockArea->count() - 1; + if (d->DockWidget->features() & CDockWidget::DockWidgetMovable) { + // Find tab under mouse + QPoint pos = d->DockArea->mapFromGlobal(ev->globalPos()); + int fromIndex = d->DockArea->tabIndex(d->DockWidget); + int toIndex = d->DockArea->indexOfContentByTitlePos(pos, this); + if (-1 == toIndex) + { + toIndex = d->DockArea->count() - 1; + } + qDebug() << "Move tab from " << fromIndex << " to " << toIndex; + d->DockArea->reorderDockWidget(fromIndex, toIndex); } - qDebug() << "Move tab from " << fromIndex << " to " << toIndex; - d->DockArea->reorderDockWidget(fromIndex, toIndex); + } if (!d->DragStartMousePosition.isNull()) @@ -275,7 +278,9 @@ void CDockWidgetTitleBar::mouseMoveEvent(QMouseEvent* ev) if (d->isDraggingState(DraggingFloatingWidget)) { - d->FloatingWidget->moveFloating(); + if (d->DockWidget->features() & CDockWidget::DockWidgetMovable) { + d->FloatingWidget->moveFloating(); + } QFrame::mouseMoveEvent(ev); return; } @@ -283,19 +288,25 @@ void CDockWidgetTitleBar::mouseMoveEvent(QMouseEvent* ev) // move tab if (d->isDraggingState(DraggingTab)) { - d->moveTab(ev); + if (d->DockWidget->features() & CDockWidget::DockWidgetMovable) { + d->moveTab(ev); + } } bool MouseInsideTitleArea = d->titleAreaGeometryContains(ev->globalPos()); if (!MouseInsideTitleArea) { - d->startFloating(); + if (d->DockWidget->features() & CDockWidget::DockWidgetMovable) { + d->startFloating(); + } return; } else if (d->DockArea->count() > 1 && (ev->pos() - d->DragStartMousePosition).manhattanLength() >= QApplication::startDragDistance()) // Wait a few pixels before start moving { - d->DragState = DraggingTab; + if (d->DockWidget->features() & CDockWidget::DockWidgetMovable) { + d->DragState = DraggingTab; + } return; }