mirror of
https://invent.kde.org/system/dolphin
synced 2024-07-15 18:01:11 +00:00
Fix loop of FocusIn events
Summary:
Commit 43da84eefc
introduced the risk of entering an endless loop of
`FocusIn`/`FocusOut` events sent to two DolphinSearchBox instances when
opening a second tab (see D11871).
This happens because we deactivate the first tab when we open a new one, but
since the `setActive(true)` is delayed with a QTimer, both the old tab
and the new one become active and receive their own `FocusIn` event
(which starts the loop of focus in/out events).
To prevent this issue, we schedule the searchbox activation only if the
searchbox is not already active.
Test Plan:
- Search something in dolphin
- Open a new tab after the search ends
- Check that dolphin does not eat the CPU
Reviewers: #dolphin, anthonyfieroni
Subscribers: kfm-devel
Tags: #dolphin
Differential Revision: https://phabricator.kde.org/D13152
This commit is contained in:
parent
2f6635f4e8
commit
9616edbb66
|
@ -231,10 +231,14 @@ bool DolphinSearchBox::eventFilter(QObject* obj, QEvent* event)
|
|||
// #379135: we get the FocusIn event when we close a tab but we don't want to emit
|
||||
// the activated() signal before the removeTab() call in DolphinTabWidget::closeTab() returns.
|
||||
// To avoid this issue, we delay the activation of the search box.
|
||||
QTimer::singleShot(0, this, [this] {
|
||||
setActive(true);
|
||||
setFocus();
|
||||
});
|
||||
// We also don't want to schedule the activation process if we are already active,
|
||||
// otherwise we can enter in a loop of FocusIn/FocusOut events with the searchbox of another tab.
|
||||
if (!isActive()) {
|
||||
QTimer::singleShot(0, this, [this] {
|
||||
setActive(true);
|
||||
setFocus();
|
||||
});
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Reference in a new issue