┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorElvis Angelaccio <[email protected]>2018-06-03 14:53:55 +0200
committerElvis Angelaccio <[email protected]>2018-06-13 21:39:22 +0200
commit9616edbb66a8efbdd2bbc9be18e24aaf38a45b59 (patch)
tree5fdd23bdc33c6b37d1a2136e7decc1aff45b4f79 /src
parent2f6635f4e8c25d30b8e9483b0611cf613fc6f043 (diff)
Fix loop of FocusIn events
Summary: Commit 43da84eefc7d 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
Diffstat (limited to 'src')
-rw-r--r--src/search/dolphinsearchbox.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp
index 12f0c2138..61f5c2db4 100644
--- a/src/search/dolphinsearchbox.cpp
+++ b/src/search/dolphinsearchbox.cpp
@@ -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: