diff options
| author | Peter Penz <[email protected]> | 2011-01-15 17:52:00 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2011-01-15 17:52:00 +0000 |
| commit | 1b30368506d4547a3ab963932110ff5cc0a48b9a (patch) | |
| tree | 1748d06d21503a42b117887e8c4b1b793d045449 | |
| parent | 8ac62cc953a0a62f1998543227b2c0db9102b4d2 (diff) | |
If the searching has been triggered by clicking on a facet and the facet gets reset again, assure that not all indexed files are shown. Instead return to the previous state before the searching has been started.
svn path=/trunk/KDE/kdebase/apps/; revision=1214634
| -rw-r--r-- | src/panels/filter/filterpanel.cpp | 33 | ||||
| -rw-r--r-- | src/panels/filter/filterpanel.h | 1 |
2 files changed, 32 insertions, 2 deletions
diff --git a/src/panels/filter/filterpanel.cpp b/src/panels/filter/filterpanel.cpp index d13d6e520..453c12729 100644 --- a/src/panels/filter/filterpanel.cpp +++ b/src/panels/filter/filterpanel.cpp @@ -51,6 +51,7 @@ FilterPanel::FilterPanel(QWidget* parent) : m_initialized(false), m_nepomukEnabled(false), m_lastSetUrlStatJob(0), + m_startedFromDir(), m_facetWidget(0), m_unfacetedRestQuery() { @@ -62,6 +63,13 @@ FilterPanel::~FilterPanel() bool FilterPanel::urlChanged() { + if (!url().protocol().startsWith("nepomuk")) { + // Remember the current directory before a searching is started. + // This is required to restore the directory in case that all facets + // have been reset by the user (see slotQueryTermChanged()). + m_startedFromDir = url(); + } + if (isVisible() && m_nepomukEnabled) { setQuery(Nepomuk::Query::Query()); @@ -178,8 +186,29 @@ void FilterPanel::slotSetUrlStatFinished(KJob* job) void FilterPanel::slotQueryTermChanged(const Nepomuk::Query::Term& term) { - Nepomuk::Query::FileQuery query(m_unfacetedRestQuery && term); - emit urlActivated(query.toSearchUrl()); + if (term.isValid()) { + // Default case: A facet has been changed by the user to restrict the query. + Nepomuk::Query::FileQuery query(m_unfacetedRestQuery && term); + emit urlActivated(query.toSearchUrl()); + return; + } + + // All facets have been reset by the user to be unrestricted. + // Verify whether the unfaceted rest query contains any additional restriction + // (e.g. a filename in the search field). If no further restriction is given, exit + // the search mode by returning to the directory where the searching has been + // started from. + const Nepomuk::Query::Term rootTerm = m_unfacetedRestQuery.term(); + if (rootTerm.type() == Nepomuk::Query::Term::Comparison) { + const Nepomuk::Query::ComparisonTerm& compTerm = static_cast<const Nepomuk::Query::ComparisonTerm&>(rootTerm); + if (compTerm.subTerm().isValid()) { + Nepomuk::Query::FileQuery query(m_unfacetedRestQuery); + emit urlActivated(query.toSearchUrl()); + return; + } + } + + emit urlActivated(m_startedFromDir); } void FilterPanel::setQuery(const Nepomuk::Query::Query& query) diff --git a/src/panels/filter/filterpanel.h b/src/panels/filter/filterpanel.h index 574a9f389..20d4e9cbf 100644 --- a/src/panels/filter/filterpanel.h +++ b/src/panels/filter/filterpanel.h @@ -67,6 +67,7 @@ private: bool m_nepomukEnabled; KJob* m_lastSetUrlStatJob; + KUrl m_startedFromDir; Nepomuk::Utils::FacetWidget* m_facetWidget; Nepomuk::Query::Query m_unfacetedRestQuery; }; |
