┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnthony Fieroni <[email protected]>2017-05-22 20:35:29 +0300
committerAnthony Fieroni <[email protected]>2017-05-22 20:35:29 +0300
commit43da84eefc7d68ce86cda2d353216dbe7552fc2c (patch)
tree024e21f52dbb2b1cfa5b16672b58c7aba082d789 /src
parent73f885f9d3513bdfed2d22b21d0d1a88fe4f6a7a (diff)
Correct searchbox, split view transitions between tabs
Differential Revision: https://phabricator.kde.org/D5864 BUG: 379135 BUG: 380032 FIXED-IN: 17.04.2 Signed-off-by: Anthony Fieroni <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/dolphintabpage.cpp29
-rw-r--r--src/dolphintabpage.h7
-rw-r--r--src/dolphintabwidget.cpp16
-rw-r--r--src/search/dolphinsearchbox.cpp9
4 files changed, 44 insertions, 17 deletions
diff --git a/src/dolphintabpage.cpp b/src/dolphintabpage.cpp
index 5c42d41ec..1d3a6f08c 100644
--- a/src/dolphintabpage.cpp
+++ b/src/dolphintabpage.cpp
@@ -28,7 +28,8 @@
DolphinTabPage::DolphinTabPage(const QUrl &primaryUrl, const QUrl &secondaryUrl, QWidget* parent) :
QWidget(parent),
m_primaryViewActive(true),
- m_splitViewEnabled(false)
+ m_splitViewEnabled(false),
+ m_active(true)
{
QVBoxLayout* layout = new QVBoxLayout(this);
layout->setSpacing(0);
@@ -286,17 +287,31 @@ void DolphinTabPage::restoreStateV1(const QByteArray& state)
m_splitter->restoreState(splitterState);
}
+void DolphinTabPage::setActive(bool active)
+{
+ if (active) {
+ m_active = active;
+ } else {
+ // we should bypass changing active view in split mode
+ m_active = !m_splitViewEnabled;
+ }
+ // we want view to fire activated when goes from false to true
+ activeViewContainer()->setActive(active);
+}
+
void DolphinTabPage::slotViewActivated()
{
const DolphinView* oldActiveView = activeViewContainer()->view();
// Set the view, which was active before, to inactive
- // and update the active view type.
- if (m_splitViewEnabled) {
- activeViewContainer()->setActive(false);
- m_primaryViewActive = !m_primaryViewActive;
- } else {
- m_primaryViewActive = true;
+ // and update the active view type, if tab is active
+ if (m_active) {
+ if (m_splitViewEnabled) {
+ activeViewContainer()->setActive(false);
+ m_primaryViewActive = !m_primaryViewActive;
+ } else {
+ m_primaryViewActive = true;
+ }
}
const DolphinView* newActiveView = activeViewContainer()->view();
diff --git a/src/dolphintabpage.h b/src/dolphintabpage.h
index 1a97ea457..45c540775 100644
--- a/src/dolphintabpage.h
+++ b/src/dolphintabpage.h
@@ -129,6 +129,12 @@ public:
*/
void restoreStateV1(const QByteArray& state);
+ /**
+ * Set whether the tab page is active
+ *
+ */
+ void setActive(bool active);
+
signals:
void activeViewChanged(DolphinViewContainer* viewContainer);
void activeViewUrlChanged(const QUrl& url);
@@ -165,6 +171,7 @@ private:
bool m_primaryViewActive;
bool m_splitViewEnabled;
+ bool m_active;
};
#endif // DOLPHIN_TAB_PAGE_H
diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp
index bcd4a49fd..94b7a0144 100644
--- a/src/dolphintabwidget.cpp
+++ b/src/dolphintabwidget.cpp
@@ -33,7 +33,7 @@
DolphinTabWidget::DolphinTabWidget(QWidget* parent) :
QTabWidget(parent),
m_placesSelectorVisible(true),
- m_previousTab(-1)
+ m_previousTab(0)
{
connect(this, &DolphinTabWidget::tabCloseRequested,
this, static_cast<void (DolphinTabWidget::*)(int)>(&DolphinTabWidget::closeTab));
@@ -304,15 +304,15 @@ void DolphinTabWidget::tabUrlChanged(const QUrl& url)
void DolphinTabWidget::currentTabChanged(int index)
{
- DolphinViewContainer* viewContainer = tabPageAt(index)->activeViewContainer();
- viewContainer->setActive(true);
+ // previous tab deactivation
+ if (DolphinTabPage* tabPage = tabPageAt(m_previousTab)) {
+ tabPage->setActive(false);
+ }
+ DolphinTabPage* tabPage = tabPageAt(index);
+ DolphinViewContainer* viewContainer = tabPage->activeViewContainer();
emit activeViewChanged(viewContainer);
emit currentUrlChanged(viewContainer->url());
- viewContainer->view()->setFocus();
-
- if (tabPageAt(m_previousTab)) {
- tabPageAt(m_previousTab)->activeViewContainer()->setActive(false);
- }
+ tabPage->setActive(true);
m_previousTab = index;
}
diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp
index 5d5906b78..c6943c608 100644
--- a/src/search/dolphinsearchbox.cpp
+++ b/src/search/dolphinsearchbox.cpp
@@ -230,8 +230,13 @@ bool DolphinSearchBox::eventFilter(QObject* obj, QEvent* event)
{
switch (event->type()) {
case QEvent::FocusIn:
- setActive(true);
- setFocus();
+ // #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();
+ });
break;
default: