Fix toggleAction() not emitting its signals

User might connect to it.
Use a less violent way of guarding against recursion
This commit is contained in:
Sergio Martins
2019-09-24 22:08:57 +01:00
parent b5d83e68a2
commit cf90980094

View File

@@ -35,9 +35,9 @@
#include <QAction>
#include <QEvent>
#include <QSignalBlocker>
#include <QCloseEvent>
#include <QTimer>
#include <QScopedValueRollback>
/**
* @file
@@ -62,7 +62,8 @@ public:
q->connect(q, &DockWidgetBase::hidden, q, [this] { onDockWidgetHidden(); } );
q->connect(toggleAction, &QAction::toggled, q, [this] (bool enabled) {
toggle(enabled);
if (!m_updatingToggleAction) // guard against recursiveness
toggle(enabled);
});
toggleAction->setCheckable(true);
@@ -100,6 +101,7 @@ public:
const DockWidgetBase::Options options;
QAction *const toggleAction;
LastPosition m_lastPosition;
bool m_updatingToggleAction = false;
};
DockWidgetBase::DockWidgetBase(const QString &name, Options options)
@@ -394,7 +396,8 @@ void DockWidgetBase::Private::toggle(bool enabled)
void DockWidgetBase::Private::updateToggleAction()
{
QSignalBlocker blocker(toggleAction);
QScopedValueRollback<bool> recursionGuard(m_updatingToggleAction, true); // Guard against recursiveness
m_updatingToggleAction = true;
if ((q->isVisible() || parentTabWidget()) && !toggleAction->isChecked()) {
toggleAction->setChecked(true);
} else if ((!q->isVisible() && !parentTabWidget()) && toggleAction->isChecked()) {