From: Emmanuel Pescosta Date: Thu, 5 Sep 2013 14:22:59 +0000 (+0200) Subject: Fix Bug 296970 - split view wrong behavior with search tab X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/e1d88c4d69ba0fb38951954dceab937741528eab?ds=inline Fix Bug 296970 - split view wrong behavior with search tab Implemented setActive(bool active), isActive() and activated() signal for DolphinSearchBox - similar to the KUrlNavigator implementation. BUG: 296970 FIXED-IN: 4.11.2 REVIEW: 112534 --- diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 1e9e79ae7..e7c571294 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -98,6 +98,7 @@ DolphinViewContainer::DolphinViewContainer(const KUrl& url, QWidget* parent) : m_searchBox = new DolphinSearchBox(this); m_searchBox->hide(); + connect(m_searchBox, SIGNAL(activated()), this, SLOT(activate())); connect(m_searchBox, SIGNAL(closeRequest()), this, SLOT(closeSearchBox())); connect(m_searchBox, SIGNAL(searchRequest()), this, SLOT(startSearching())); connect(m_searchBox, SIGNAL(returnPressed(QString)), this, SLOT(requestFocus())); @@ -195,6 +196,7 @@ KUrl DolphinViewContainer::url() const void DolphinViewContainer::setActive(bool active) { + m_searchBox->setActive(active); m_urlNavigator->setActive(active); m_view->setActive(active); diff --git a/src/search/dolphinsearchbox.cpp b/src/search/dolphinsearchbox.cpp index ef9c2bfcf..cf1f0c8e5 100644 --- a/src/search/dolphinsearchbox.cpp +++ b/src/search/dolphinsearchbox.cpp @@ -58,6 +58,7 @@ DolphinSearchBox::DolphinSearchBox(QWidget* parent) : QWidget(parent), m_startedSearching(false), m_readOnly(false), + m_active(true), m_topLayout(0), m_searchLabel(0), m_searchInput(0), @@ -171,6 +172,22 @@ bool DolphinSearchBox::isReadOnly() const return m_readOnly; } +void DolphinSearchBox::setActive(bool active) +{ + if (active != m_active) { + m_active = active; + + if (active) { + emit activated(); + } + } +} + +bool DolphinSearchBox::isActive() const +{ + return m_active; +} + bool DolphinSearchBox::event(QEvent* event) { if (event->type() == QEvent::Polish) { @@ -199,6 +216,21 @@ void DolphinSearchBox::keyReleaseEvent(QKeyEvent* event) } } +bool DolphinSearchBox::eventFilter(QObject* obj, QEvent* event) +{ + switch (event->type()) { + case QEvent::FocusIn: + setActive(true); + setFocus(); + break; + + default: + break; + } + + return QObject::eventFilter(obj, event); +} + void DolphinSearchBox::emitSearchRequest() { m_startSearchTimer->stop(); @@ -253,6 +285,7 @@ void DolphinSearchBox::slotFacetChanged() void DolphinSearchBox::initButton(QToolButton* button) { + button->installEventFilter(this); button->setAutoExclusive(true); button->setAutoRaise(true); button->setCheckable(true); @@ -298,6 +331,7 @@ void DolphinSearchBox::init() // Create search box m_searchInput = new KLineEdit(this); + m_searchInput->installEventFilter(this); m_searchInput->setClearButtonShown(true); m_searchInput->setFont(KGlobalSettings::generalFont()); setFocusProxy(m_searchInput); @@ -348,6 +382,7 @@ void DolphinSearchBox::init() connect(m_facetsToggleButton, SIGNAL(clicked()), this, SLOT(slotFacetsButtonToggled())); m_facetsWidget = new DolphinFacetsWidget(this); + m_facetsWidget->installEventFilter(this); m_facetsWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); connect(m_facetsWidget, SIGNAL(facetChanged()), this, SLOT(slotFacetChanged())); diff --git a/src/search/dolphinsearchbox.h b/src/search/dolphinsearchbox.h index f3cc535d6..e4c14b7cb 100644 --- a/src/search/dolphinsearchbox.h +++ b/src/search/dolphinsearchbox.h @@ -87,10 +87,27 @@ public: void setReadOnly(bool readOnly, const KUrl& query = KUrl()); bool isReadOnly() const; + /** + * Set the search box to the active mode, if \a active + * is true. The active mode is default. The inactive mode only differs + * visually from the active mode, no change of the behavior is given. + * + * Using the search box in the inactive mode is useful when having split views, + * where the inactive view is indicated by an search box visually. + */ + void setActive(bool active); + + /** + * @return True, if the search box is in the active mode. + * @see DolphinSearchBox::setActive() + */ + bool isActive() const; + protected: virtual bool event(QEvent* event); virtual void showEvent(QShowEvent* event); virtual void keyReleaseEvent(QKeyEvent* event); + virtual bool eventFilter(QObject* obj, QEvent* event); signals: /** @@ -111,6 +128,13 @@ signals: */ void closeRequest(); + /** + * Is emitted, if the searchbox has been activated by + * an user interaction + * @see DolphinSearchBox::setActive() + */ + void activated(); + private slots: void emitSearchRequest(); void emitCloseRequest(); @@ -137,6 +161,7 @@ private: private: bool m_startedSearching; bool m_readOnly; + bool m_active; QVBoxLayout* m_topLayout;