mirror of
https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System.git
synced 2024-12-25 15:41:34 +08:00
Fixed double emission of focusedDockWidgetChanged() signal
This commit is contained in:
parent
8cf4134125
commit
9974256d71
@ -14,7 +14,8 @@ int main(int argc, char *argv[])
|
|||||||
ads::CDockManager::setConfigFlag(ads::CDockManager::AllTabsHaveCloseButton, true);
|
ads::CDockManager::setConfigFlag(ads::CDockManager::AllTabsHaveCloseButton, true);
|
||||||
auto dockManager = new ads::CDockManager(&w);
|
auto dockManager = new ads::CDockManager(&w);
|
||||||
QObject::connect(dockManager, &ads::CDockManager::focusedDockWidgetChanged, [] (ads::CDockWidget* old, ads::CDockWidget* now) {
|
QObject::connect(dockManager, &ads::CDockManager::focusedDockWidgetChanged, [] (ads::CDockWidget* old, ads::CDockWidget* now) {
|
||||||
qDebug() << "CDockManager::focusedDockWidgetChanged: " << now->objectName() << " visible: " << now->isVisible();
|
static int Count = 0;
|
||||||
|
qDebug() << Count++ << " CDockManager::focusedDockWidgetChanged old: " << (old ? old->objectName() : "-") << " now: " << now->objectName() << " visible: " << now->isVisible();
|
||||||
now->widget()->setFocus();
|
now->widget()->setFocus();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -447,7 +447,8 @@ void CDockAreaWidget::insertDockWidget(int index, CDockWidget* DockWidget,
|
|||||||
void CDockAreaWidget::removeDockWidget(CDockWidget* DockWidget)
|
void CDockAreaWidget::removeDockWidget(CDockWidget* DockWidget)
|
||||||
{
|
{
|
||||||
ADS_PRINT("CDockAreaWidget::removeDockWidget");
|
ADS_PRINT("CDockAreaWidget::removeDockWidget");
|
||||||
auto NextOpenDockWidget = nextOpenDockWidget(DockWidget);
|
auto CurrentDockWidget = currentDockWidget();
|
||||||
|
auto NextOpenDockWidget = (DockWidget == CurrentDockWidget) ? nextOpenDockWidget(DockWidget) : nullptr;
|
||||||
|
|
||||||
d->ContentsLayout->removeWidget(DockWidget);
|
d->ContentsLayout->removeWidget(DockWidget);
|
||||||
auto TabWidget = DockWidget->tabWidget();
|
auto TabWidget = DockWidget->tabWidget();
|
||||||
@ -466,7 +467,7 @@ void CDockAreaWidget::removeDockWidget(CDockWidget* DockWidget)
|
|||||||
DockContainer->removeDockArea(this);
|
DockContainer->removeDockArea(this);
|
||||||
this->deleteLater();
|
this->deleteLater();
|
||||||
}
|
}
|
||||||
else
|
else if (DockWidget == CurrentDockWidget)
|
||||||
{
|
{
|
||||||
// if contents layout is not empty but there are no more open dock
|
// if contents layout is not empty but there are no more open dock
|
||||||
// widgets, then we need to hide the dock area because it does not
|
// widgets, then we need to hide the dock area because it does not
|
||||||
|
@ -160,6 +160,11 @@ void DockFocusControllerPrivate::updateDockWidgetFocus(CDockWidget* DockWidget)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (old == DockWidget)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (DockWidget->isVisible())
|
if (DockWidget->isVisible())
|
||||||
{
|
{
|
||||||
emit DockManager->focusedDockWidgetChanged(old, DockWidget);
|
emit DockManager->focusedDockWidgetChanged(old, DockWidget);
|
||||||
@ -212,6 +217,8 @@ void CDockFocusController::onApplicationFocusChanged(QWidget* focusedOld, QWidge
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//qDebug() << "\n----------------------------";
|
||||||
|
//qDebug() << "CDockFocusController::onApplicationFocusChanged " << " old: " << focusedOld << " new: " << focusedNow;
|
||||||
Q_UNUSED(focusedOld)
|
Q_UNUSED(focusedOld)
|
||||||
if (!focusedNow)
|
if (!focusedNow)
|
||||||
{
|
{
|
||||||
@ -223,6 +230,14 @@ void CDockFocusController::onApplicationFocusChanged(QWidget* focusedOld, QWidge
|
|||||||
if (DockWidgetTab)
|
if (DockWidgetTab)
|
||||||
{
|
{
|
||||||
DockWidget = DockWidgetTab->dockWidget();
|
DockWidget = DockWidgetTab->dockWidget();
|
||||||
|
// If the DockWidgetTab "steals" the focus from a widget in the same
|
||||||
|
// DockWidget, then we immediately give the focus back to the previous
|
||||||
|
// focused widget focusedOld
|
||||||
|
if (DockWidget == d->FocusedDockWidget && focusedOld && focusedOld != focusedNow)
|
||||||
|
{
|
||||||
|
focusedOld->setFocus();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!DockWidget)
|
if (!DockWidget)
|
||||||
@ -278,7 +293,8 @@ void CDockFocusController::onFocusedDockAreaViewToggled(bool Open)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
CDockManager::setWidgetFocus(OpenedDockAreas[0]->currentDockWidget()->tabWidget());
|
//CDockManager::setWidgetFocus(OpenedDockAreas[0]->currentDockWidget()->tabWidget());
|
||||||
|
d->updateDockWidgetFocus(OpenedDockAreas[0]->currentDockWidget());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -293,7 +309,8 @@ void CDockFocusController::notifyWidgetOrAreaRelocation(QWidget* DroppedWidget)
|
|||||||
CDockWidget* DockWidget = qobject_cast<CDockWidget*>(DroppedWidget);
|
CDockWidget* DockWidget = qobject_cast<CDockWidget*>(DroppedWidget);
|
||||||
if (DockWidget)
|
if (DockWidget)
|
||||||
{
|
{
|
||||||
CDockManager::setWidgetFocus(DockWidget->tabWidget());
|
//CDockManager::setWidgetFocus(DockWidget->tabWidget());
|
||||||
|
d->updateDockWidgetFocus(DockWidget);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,7 +321,8 @@ void CDockFocusController::notifyWidgetOrAreaRelocation(QWidget* DroppedWidget)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DockWidget = DockArea->currentDockWidget();
|
DockWidget = DockArea->currentDockWidget();
|
||||||
CDockManager::setWidgetFocus(DockWidget->tabWidget());
|
//CDockManager::setWidgetFocus(DockWidget->tabWidget());
|
||||||
|
d->updateDockWidgetFocus(DockWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -325,8 +343,11 @@ void CDockFocusController::notifyFloatingWidgetDrop(CFloatingDockContainer* Floa
|
|||||||
auto DockWidget = vDockWidget.value<CDockWidget*>();
|
auto DockWidget = vDockWidget.value<CDockWidget*>();
|
||||||
if (DockWidget)
|
if (DockWidget)
|
||||||
{
|
{
|
||||||
|
d->FocusedDockWidget = nullptr;
|
||||||
DockWidget->dockAreaWidget()->setCurrentDockWidget(DockWidget);
|
DockWidget->dockAreaWidget()->setCurrentDockWidget(DockWidget);
|
||||||
CDockManager::setWidgetFocus(DockWidget->tabWidget());
|
//CDockManager::setWidgetFocus(DockWidget->tabWidget());
|
||||||
|
//qDebug() << "CDockFocusController::notifyFloatingWidgetDrop";
|
||||||
|
d->updateDockWidgetFocus(DockWidget);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user