Эх сурвалжийг харах

Preserve search state across view transitions

- Keep search query when navigating to book details view
- Restore filter when returning from details via back button
- Only clear search when explicitly closing search bar on shelf view
- Search entry text preserved across view transitions

Users can now search, click a result to view details, and return
to see the same filtered results without re-typing the query.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Bernardo Magri 1 сар өмнө
parent
commit
3a80d6adda
2 өөрчлөгдсөн 17 нэмэгдсэн , 5 устгасан
  1. 6 4
      PLAN.md
  2. 11 1
      src/BibliothecaWindow.cpp

+ 6 - 4
PLAN.md

@@ -104,11 +104,13 @@ Remaining for future:
 
 ### 2.3 Preserve Search State Across Views
 **Files**: `src/BibliothecaWindow.cpp`
-**Status**: Not Started
+**Status**: COMPLETED
 
-- [ ] Save search query when switching to details view
-- [ ] Restore search query when returning to shelf
-- [ ] Maintain filter state across navigation
+Implemented:
+- [x] Search query preserved in `m_lastQuery` when navigating to details
+- [x] Restore filter when returning from details via back button
+- [x] Only clear search when explicitly closing search bar on shelf/noresults views
+- [x] Search entry text preserved across view transitions
 
 ### 2.4 Improve Cover Handling
 **Files**: `src/BookImport.cpp`, `src/BookTile.cpp`

+ 11 - 1
src/BibliothecaWindow.cpp

@@ -157,6 +157,11 @@ void BibliothecaWindow::buildHeaderBar() {
   m_backButton.set_tooltip_text("Back");
   m_backButton.signal_clicked().connect([this]() {
     m_stack.set_visible_child("shelf");
+    // Restore search filter when returning from details
+    if (!m_lastQuery.empty()) {
+      m_shelf->setFilter(m_lastQuery);
+      updateVisibleView();
+    }
   });
   m_headerBar.pack_start(m_backButton);
 
@@ -305,7 +310,12 @@ void BibliothecaWindow::onSearchModeChanged() {
     m_searchEntry.grab_focus();
     m_searchEntry.select_region(0, -1);
   } else if (!m_searchEntry.get_text().empty()) {
-    m_searchEntry.set_text("");
+    // Only clear search when explicitly closing search mode (not when navigating)
+    // Check if we're on the shelf view - only clear if user is closing search there
+    if (m_stack.get_visible_child_name() == "shelf" ||
+        m_stack.get_visible_child_name() == "noresults") {
+      m_searchEntry.set_text("");
+    }
   }
 }