diff --git a/project_fs/ProjectFilesystemPlugin.json.in b/project_fs/ProjectFilesystemPlugin.json.in index 0d8ab6d..3ae41ba 100644 --- a/project_fs/ProjectFilesystemPlugin.json.in +++ b/project_fs/ProjectFilesystemPlugin.json.in @@ -1,7 +1,7 @@ { \"Name\" : \"ProjectFilesystemPlugin\", - \"Version\" : \"1.0.0\", - \"CompatVersion\" : \"1.0.0\", + \"Version\" : \"1.1.0\", + \"CompatVersion\" : \"1.1.0\", \"Vendor\" : \"Peri4\", \"Copyright\" : \"(C) Peri4\", \"License\" : \"LGPLv3\", diff --git a/project_fs/projectfilesystemwidget.cpp b/project_fs/projectfilesystemwidget.cpp index 764fcf5..b858862 100644 --- a/project_fs/projectfilesystemwidget.cpp +++ b/project_fs/projectfilesystemwidget.cpp @@ -29,6 +29,7 @@ QFileInfo projectfs_menu_target; ProjectFilesystemWidget::ProjectFilesystemWidget(QWidget * parent): QWidget(parent) { setupUi(this); + in_proc = need_rebuild = false; int is = style()->pixelMetric(QStyle::PM_ButtonIconSize, 0, this); label->setFixedSize(is, is); buttonClear->setIcon(Utils::Icons::CLEAN.icon()); @@ -74,6 +75,7 @@ void ProjectFilesystemWidget::changeEvent(QEvent *e) { void ProjectFilesystemWidget::createTree(QTreeWidgetItem * ti, const QString & dir) { QFileInfoList fl = QDir(dir).entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot, QDir::LocaleAware | QDir::DirsFirst); + checkProcEvents(); for (QFileInfo i: fl) { QString nit = i.fileName(); if (i.isDir()) { @@ -163,7 +165,20 @@ void ProjectFilesystemWidget::setExtVariable() { } +void ProjectFilesystemWidget::checkProcEvents() { + if (tm.elapsed() < 10) return; + QApplication::processEvents(); + tm.start(); +} + + void ProjectFilesystemWidget::projectsChanged() { + if (in_proc) { + need_rebuild = true; + return; + } + in_proc = true; + tm.start(); last_expanded.clear(); item_map.clear(); int spos = tree->verticalScrollBar()->value(); @@ -192,6 +207,11 @@ void ProjectFilesystemWidget::projectsChanged() { QApplication::restoreOverrideCursor(); qApp->processEvents(); tree->verticalScrollBar()->setValue(spos); + in_proc = false; + if (need_rebuild) { + need_rebuild = false; + projectsChanged(); + } } diff --git a/project_fs/projectfilesystemwidget.h b/project_fs/projectfilesystemwidget.h index a017d13..0832d95 100644 --- a/project_fs/projectfilesystemwidget.h +++ b/project_fs/projectfilesystemwidget.h @@ -6,6 +6,7 @@ #include #include #include +#include #include extern QFileInfo projectfs_menu_target; @@ -32,13 +33,16 @@ protected: void rememberExpanded(QTreeWidgetItem * ti); void restoreExpanded(QTreeWidgetItem * ti); void setExtVariable(); + void checkProcEvents(); + bool in_proc, need_rebuild; ExtensionSystem::IPlugin * proj_plug; QMenu popup_menu; QMap item_map; QSet last_expanded; FilterDialog filter_dialog; FilterDialog::Filter cur_filter; + QElapsedTimer tm; public slots: void projectsChanged();