From 054a0e8e456443a3bf5f029c8ede9f8fbc0e3834 Mon Sep 17 00:00:00 2001 From: visualfc Date: Thu, 3 Sep 2026 15:34:47 +0800 Subject: [PATCH 1/2] liteapp: collapse untracked folders after closing editors --- liteidex/src/liteapp/multifolderwindow.cpp | 23 ++++++++++++++++++++++ liteidex/src/liteapp/multifolderwindow.h | 1 + 2 files changed, 24 insertions(+) diff --git a/liteidex/src/liteapp/multifolderwindow.cpp b/liteidex/src/liteapp/multifolderwindow.cpp index 8490bbac6..07691afee 100644 --- a/liteidex/src/liteapp/multifolderwindow.cpp +++ b/liteidex/src/liteapp/multifolderwindow.cpp @@ -51,6 +51,7 @@ MultiFolderWindow::MultiFolderWindow(LiteApi::IApplication *app, QObject *parent connect(m_folderListView,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(doubleClickedFolderView(QModelIndex))); connect(m_folderListView,SIGNAL(enterKeyPressed(QModelIndex)),this,SLOT(enterKeyPressedFolderView(QModelIndex))); connect(m_liteApp->editorManager(),SIGNAL(currentEditorChanged(LiteApi::IEditor*)),this,SLOT(currentEditorChanged(LiteApi::IEditor*))); + connect(m_liteApp->editorManager(),SIGNAL(editorAboutToClose(LiteApi::IEditor*)),this,SLOT(editorAboutToClose(LiteApi::IEditor*))); } MultiFolderWindow::~MultiFolderWindow() @@ -168,6 +169,28 @@ void MultiFolderWindow::currentEditorChanged(LiteApi::IEditor *editor) m_folderListView->setCurrentIndex(index); } +void MultiFolderWindow::editorAboutToClose(LiteApi::IEditor *editor) +{ + if (!m_bSyncEditor || !editor || editor->filePath().isEmpty()) { + return; + } + + QString folderPath = QFileInfo(editor->filePath()).absolutePath(); + foreach (LiteApi::IEditor *openEditor, m_liteApp->editorManager()->editorList()) { + if (openEditor != editor && !openEditor->filePath().isEmpty() + && QFileInfo(openEditor->filePath()).absolutePath() == folderPath) { + return; + } + } + + QList indexes = m_folderListView->indexForPath(folderPath); + foreach (const QModelIndex &index, indexes) { + if (index.isValid()) { + m_folderListView->setExpanded(index, false); + } + } +} + void MultiFolderWindow::aboutToShowFolderContextMenu(QMenu *menu, LiteApi::FILESYSTEM_CONTEXT_FLAG flag, const QFileInfo &info) { m_liteApp->fileManager()->emitAboutToShowFolderContextMenu(menu,flag,info,"liteapp/folder"); diff --git a/liteidex/src/liteapp/multifolderwindow.h b/liteidex/src/liteapp/multifolderwindow.h index 99951637d..4dd7703a9 100644 --- a/liteidex/src/liteapp/multifolderwindow.h +++ b/liteidex/src/liteapp/multifolderwindow.h @@ -47,6 +47,7 @@ public slots: void doubleClickedFolderView(const QModelIndex &index); void enterKeyPressedFolderView(const QModelIndex &index); void currentEditorChanged(LiteApi::IEditor *editor); + void editorAboutToClose(LiteApi::IEditor *editor); void aboutToShowFolderContextMenu(QMenu *menu, LiteApi::FILESYSTEM_CONTEXT_FLAG flag, const QFileInfo &info); protected: LiteApi::IApplication *m_liteApp; From 9fe92dec3d8922b2bfe2adfe3e905199fedab9bf Mon Sep 17 00:00:00 2001 From: visualfc Date: Thu, 3 Sep 2026 15:36:49 +0800 Subject: [PATCH 2/2] liteapp: support folder collapse in split view --- liteidex/src/liteapp/splitfolderwindow.cpp | 24 ++++++++++++++++++++++ liteidex/src/liteapp/splitfolderwindow.h | 1 + 2 files changed, 25 insertions(+) diff --git a/liteidex/src/liteapp/splitfolderwindow.cpp b/liteidex/src/liteapp/splitfolderwindow.cpp index 906b47a48..4e616dd0f 100644 --- a/liteidex/src/liteapp/splitfolderwindow.cpp +++ b/liteidex/src/liteapp/splitfolderwindow.cpp @@ -71,6 +71,7 @@ SplitFolderWindow::SplitFolderWindow(IApplication *app, QObject *parent) connect(m_tree,SIGNAL(reloadFolderIndex(QModelIndex)),this,SLOT(reloadFolderIndex(QModelIndex))); connect(m_liteApp->editorManager(),SIGNAL(currentEditorChanged(LiteApi::IEditor*)),this,SLOT(currentEditorChanged(LiteApi::IEditor*))); + connect(m_liteApp->editorManager(),SIGNAL(editorAboutToClose(LiteApi::IEditor*)),this,SLOT(editorAboutToClose(LiteApi::IEditor*))); QByteArray state = m_liteApp->settings()->value("LiteApp/BoxFolderSplitter").toByteArray(); m_spliter->restoreState(state); @@ -243,6 +244,29 @@ void SplitFolderWindow::currentEditorChanged(IEditor *editor) } } +void SplitFolderWindow::editorAboutToClose(IEditor *editor) +{ + if (!m_bSyncEditor || !editor || editor->filePath().isEmpty()) { + return; + } + + QString folderPath = QFileInfo(editor->filePath()).absolutePath(); + foreach (IEditor *openEditor, m_liteApp->editorManager()->editorList()) { + if (openEditor != editor && !openEditor->filePath().isEmpty() + && QFileInfo(openEditor->filePath()).absolutePath() == folderPath) { + return; + } + } + + for (int i = 0; i < m_stacked->count(); ++i) { + FolderView *view = (FolderView*)m_stacked->widget(i); + QModelIndex index = view->indexForPath(QDir::toNativeSeparators(folderPath)); + if (index.isValid()) { + view->setExpanded(index, false); + } + } +} + void SplitFolderWindow::doubleClickedFolderView(const QModelIndex &index) { if (!index.isValid()) { diff --git a/liteidex/src/liteapp/splitfolderwindow.h b/liteidex/src/liteapp/splitfolderwindow.h index d6179d1ec..dce7da6e9 100644 --- a/liteidex/src/liteapp/splitfolderwindow.h +++ b/liteidex/src/liteapp/splitfolderwindow.h @@ -52,6 +52,7 @@ public slots: void closeFolderIndex(const QModelIndex &index); void reloadFolderIndex(const QModelIndex &index); void currentEditorChanged(LiteApi::IEditor *editor); + void editorAboutToClose(LiteApi::IEditor *editor); void doubleClickedFolderView(const QModelIndex &index); void enterKeyPressedFolderView(const QModelIndex &index); void aboutToShowFolderContextMenu(QMenu *menu, LiteApi::FILESYSTEM_CONTEXT_FLAG flag, const QFileInfo &info);