]> cloud.milkyroute.net Git - dolphin.git/commitdiff
If the searching has been triggered by clicking on a facet and the facet gets reset...
authorPeter Penz <peter.penz19@gmail.com>
Sat, 15 Jan 2011 17:52:00 +0000 (17:52 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 15 Jan 2011 17:52:00 +0000 (17:52 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=1214634

src/panels/filter/filterpanel.cpp
src/panels/filter/filterpanel.h

index d13d6e5207e7ecac87f48131770d231b9bcd0b2c..453c12729ff7d32e47082e3cf44768d53202b089 100644 (file)
@@ -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)
index 574a9f389e275329c42899386febb500e5132183..20d4e9cbf14a3c0c35293ed377e43557687f91c4 100644 (file)
@@ -67,6 +67,7 @@ private:
     bool m_nepomukEnabled;
     KJob* m_lastSetUrlStatJob;
 
+    KUrl m_startedFromDir;
     Nepomuk::Utils::FacetWidget* m_facetWidget;
     Nepomuk::Query::Query m_unfacetedRestQuery;
 };