diff --git a/src/qtgui/guiutils.cpp b/src/qtgui/guiutils.cpp index 17dae927..0e6a6ed9 100644 --- a/src/qtgui/guiutils.cpp +++ b/src/qtgui/guiutils.cpp @@ -146,12 +146,21 @@ void rwSettings(bool writing) "english"); SETTING_RW(prefs.useDesktopOpen, "/Recoll/prefs/useDesktopOpen", Bool, true); + SETTING_RW(prefs.keepSort, "/Recoll/prefs/keepSort", Bool, false); + SETTING_RW(prefs.sortField, "/Recoll/prefs/sortField", String, ""); SETTING_RW(prefs.sortActive, "/Recoll/prefs/sortActive", Bool, false); SETTING_RW(prefs.sortDesc, "/Recoll/prefs/query/sortDesc", Bool, 0); + if (!writing) { + // Handle transition from older prefs which did not store sortColumn + // (Active always meant sort by date). + if (prefs.sortActive && prefs.sortField.isNull()) + prefs.sortField = "mtime"; + } + SETTING_RW(prefs.queryBuildAbstract, "/Recoll/prefs/query/buildAbstract", Bool, true); SETTING_RW(prefs.queryReplaceAbstract, diff --git a/src/qtgui/guiutils.h b/src/qtgui/guiutils.h index 6edec1a7..fc9f73cf 100644 --- a/src/qtgui/guiutils.h +++ b/src/qtgui/guiutils.h @@ -58,6 +58,7 @@ class PrefsPack { bool useDesktopOpen; // Remember sort state between invocations ? bool keepSort; + QString sortField; bool sortActive; bool sortDesc; // Abstract preferences. Building abstracts can slow result display diff --git a/src/qtgui/rclmain_w.cpp b/src/qtgui/rclmain_w.cpp index 0e7ce17d..9f33882d 100644 --- a/src/qtgui/rclmain_w.cpp +++ b/src/qtgui/rclmain_w.cpp @@ -260,8 +260,8 @@ void RclMain::init() connect(this, SIGNAL(sortDataChanged(DocSeqSortSpec)), restable, SLOT(onSortDataChanged(DocSeqSortSpec))); - connect(restable->getModel(), SIGNAL(sortColumnChanged(DocSeqSortSpec)), - this, SLOT(onResTableSortBy(DocSeqSortSpec))); + connect(restable->getModel(), SIGNAL(sortDataChanged(DocSeqSortSpec)), + this, SLOT(onSortDataChanged(DocSeqSortSpec))); connect(restable, SIGNAL(docEditClicked(Rcl::Doc)), this, SLOT(startNativeViewer(Rcl::Doc))); connect(restable, SIGNAL(docPreviewClicked(int, Rcl::Doc, int)), @@ -320,11 +320,10 @@ void RclMain::init() this, SLOT(showQueryDetails())); if (prefs.keepSort && prefs.sortActive) { - if (prefs.sortDesc) - actionSortByDateDesc->setChecked(true); - else - actionSortByDateAsc->setChecked(true); - onSortCtlChanged(); + m_sortspec.field = (const char *)prefs.sortField.toUtf8(); + m_sortspec.desc = prefs.sortDesc; + onSortDataChanged(m_sortspec); + emit sortDataChanged(m_sortspec); } // Start timer on a slow period (used for checking ^C). Will be @@ -915,23 +914,26 @@ void RclMain::onSortCtlChanged() m_sortspec.desc = false; prefs.sortActive = true; prefs.sortDesc = false; + prefs.sortField = "mtime"; } else if (actionSortByDateDesc->isChecked()) { m_sortspec.field = "mtime"; m_sortspec.desc = true; prefs.sortActive = true; prefs.sortDesc = true; + prefs.sortField = "mtime"; } else { prefs.sortActive = prefs.sortDesc = false; + prefs.sortField = ""; } - LOGDEB(("RclMain::onCtlDataChanged(): emitting change signals\n")); if (m_source.isNotNull()) m_source->setSortSpec(m_sortspec); emit sortDataChanged(m_sortspec); emit applyFiltSortData(); } -void RclMain::onResTableSortBy(DocSeqSortSpec spec) +void RclMain::onSortDataChanged(DocSeqSortSpec spec) { + LOGDEB(("RclMain::onSortDataChanged\n")); m_sortspecnochange = true; if (spec.field.compare("mtime")) { actionSortByDateDesc->setChecked(false); @@ -944,6 +946,11 @@ void RclMain::onResTableSortBy(DocSeqSortSpec spec) if (m_source.isNotNull()) m_source->setSortSpec(spec); m_sortspec = spec; + + prefs.sortField = QString::fromUtf8(spec.field.c_str()); + prefs.sortDesc = spec.desc; + prefs.sortActive = !spec.field.empty(); + emit applyFiltSortData(); } diff --git a/src/qtgui/rclmain_w.h b/src/qtgui/rclmain_w.h index 6e5fd69c..3f0f9267 100644 --- a/src/qtgui/rclmain_w.h +++ b/src/qtgui/rclmain_w.h @@ -97,7 +97,7 @@ public slots: virtual void on_actionSortByDateAsc_toggled(bool on); virtual void on_actionSortByDateDesc_toggled(bool on); virtual void on_actionShowResultsAsTable_toggled(bool on); - virtual void onResTableSortBy(DocSeqSortSpec); + virtual void onSortDataChanged(DocSeqSortSpec); virtual void resultCount(int); virtual void showQueryDetails(); virtual void onResultsChanged(); diff --git a/src/qtgui/restable.cpp b/src/qtgui/restable.cpp index 3f20aaea..05422608 100644 --- a/src/qtgui/restable.cpp +++ b/src/qtgui/restable.cpp @@ -368,7 +368,7 @@ void RecollModel::sort(int column, Qt::SortOrder order) spec.field = "mtime"; spec.desc = order == Qt::AscendingOrder ? false : true; } - emit sortColumnChanged(spec); + emit sortDataChanged(spec); } /////////////////////////// diff --git a/src/qtgui/restable.h b/src/qtgui/restable.h index 16883b96..6805ac7b 100644 --- a/src/qtgui/restable.h +++ b/src/qtgui/restable.h @@ -65,7 +65,7 @@ public: friend class ResTable; signals: - void sortColumnChanged(DocSeqSortSpec); + void sortDataChanged(DocSeqSortSpec); private: mutable RefCntr m_source;