feat(ui): GraphRAG giữ project đã chọn, tự quét, và báo khi đang tải
Cùng lớp lỗi với tab Thư mục: _bind_project gọi _structure.set_project(pid) vô điều kiện, và chuỗi _goto -> refresh -> _load_current -> _bind_project chạy lại mỗi lần vào lại màn Workspace, nên bộ chọn project của chính màn GraphRAG bị kéo về giá trị của Workspace ở mỗi cú chuyển tab. set_workspace_project() bỏ qua khi project không đổi (dùng None làm giá trị khởi tạo, không phải "", để lần gọi đầu không bị bỏ qua khi chưa chọn project nào). Chọn project xong phải tự quét: _on_project_changed cố ý hoãn lượt quét sang "lần ghé tiếp", nhưng combo nằm ngay trên màn đó nên người dùng đang đứng ở đấy và không có lần ghé tiếp nào — họ phải tự bấm Scan. Giờ quét ngay khi màn đang mở; hoãn vẫn giữ cho trường hợp đổi project từ màn Workspace khi GraphRAG ẩn. Panel "đang tải": prewarm() chỉ chạy 3 giây sau khi cửa sổ hiện, nên bấm GraphRAG trong 3 giây đầu gặp _ensure_web() dựng QWebEngineView ĐỒNG BỘ trên GUI thread — đóng băng 1-2 giây mà không có gì báo. Vì GUI thread bị chặn, panel phải repaint() ngay chứ không update(): update() chỉ xếp hàng một lượt vẽ cho vòng lặp sự kiện, mà vòng lặp đó sắp bị chặn, nên panel sẽ chỉ hiện ra sau khi hết đóng băng — đúng lúc không còn cần tới nó nữa. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
committed by
thanhnv
co-authored by
Claude Opus 5
parent
6f122575b0
commit
33876f96f6
@@ -202,6 +202,14 @@ class GraphRenderer(QWidget):
|
||||
# Mark it and scan on the next visit rather than now — see
|
||||
# auto_scan_and_fit()'s docstring for why.
|
||||
self._needs_scan = True
|
||||
# ...except when this screen is the one on show. The picker lives HERE,
|
||||
# so a user changing project is already looking at the graph: there is
|
||||
# no "next visit" to defer to, and they had to press Scan by hand.
|
||||
# Deferring still applies when the change came from the Workspace
|
||||
# screen while this one is hidden, which is what it was for.
|
||||
if self.isVisible() and self.path_edit.text().strip():
|
||||
self._needs_scan = False
|
||||
self._scan()
|
||||
|
||||
# ---- helpers ---------------------------------------------------------------- #
|
||||
def _pick(self) -> None:
|
||||
|
||||
Reference in New Issue
Block a user