┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2011-01-15 17:52:00 +0000
committerPeter Penz <[email protected]>2011-01-15 17:52:00 +0000
commit1b30368506d4547a3ab963932110ff5cc0a48b9a (patch)
tree1748d06d21503a42b117887e8c4b1b793d045449
parent8ac62cc953a0a62f1998543227b2c0db9102b4d2 (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.cpp33
-rw-r--r--src/panels/filter/filterpanel.h1
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;
};