diff options
| author | Emmanuel Pescosta <[email protected]> | 2013-09-05 16:22:59 +0200 |
|---|---|---|
| committer | Emmanuel Pescosta <[email protected]> | 2013-09-05 16:22:59 +0200 |
| commit | e1d88c4d69ba0fb38951954dceab937741528eab (patch) | |
| tree | c6d2759e0628a431880fe1ca2ad1519c4e5296c6 | |
| parent | 5df1b07bbc5cf669da1fb1a4a128755e7567c6a1 (diff) | |
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
| -rw-r--r-- | src/dolphinviewcontainer.cpp | 2 | ||||
| -rw-r--r-- | src/search/dolphinsearchbox.cpp | 35 | ||||
| -rw-r--r-- | src/search/dolphinsearchbox.h | 25 |
3 files changed, 62 insertions, 0 deletions
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; |
