filesystem watching optimization
This commit is contained in:
@@ -105,7 +105,7 @@ void ProjectFilesystemWidget::setCurrentFilter(const FilterDialog::Filter & v) {
|
||||
}
|
||||
|
||||
|
||||
void ProjectFilesystemWidget::changeEvent(QEvent *e) {
|
||||
void ProjectFilesystemWidget::changeEvent(QEvent * e) {
|
||||
QWidget::changeEvent(e);
|
||||
switch (e->type()) {
|
||||
case QEvent::LanguageChange:
|
||||
@@ -117,6 +117,30 @@ void ProjectFilesystemWidget::changeEvent(QEvent *e) {
|
||||
}
|
||||
|
||||
|
||||
void ProjectFilesystemWidget::timerEvent(QTimerEvent * e) {
|
||||
if (timer_fs_changed > 0)
|
||||
killTimer(timer_fs_changed);
|
||||
timer_fs_changed = 0;
|
||||
int spos = tree->verticalScrollBar()->value();
|
||||
last_expanded.clear();
|
||||
rememberExpanded(tree->invisibleRootItem());
|
||||
for (QString path: fs_changed) {
|
||||
QTreeWidgetItem * ti = item_map.value(path);
|
||||
//QMessageBox::information(0, "", "changed " + path + " " + QString::number((qulonglong)ti));
|
||||
if (ti) {
|
||||
createTree(ti, path, false);
|
||||
cleanMappedItems();
|
||||
}
|
||||
}
|
||||
filter();
|
||||
restoreExpanded(tree->invisibleRootItem());
|
||||
fs_changed.clear();
|
||||
currentFileChanged();
|
||||
tree->verticalScrollBar()->setValue(spos);
|
||||
QWidget::timerEvent(e);
|
||||
}
|
||||
|
||||
|
||||
void ProjectFilesystemWidget::projectNameChanged() {
|
||||
for (int i = 0; i < tree->topLevelItemCount(); ++i) {
|
||||
ProjectExplorer::Project * p = (ProjectExplorer::Project *)itemProject(tree->topLevelItem(i));
|
||||
@@ -350,18 +374,10 @@ void ProjectFilesystemWidget::cleanMappedItems() {
|
||||
|
||||
|
||||
void ProjectFilesystemWidget::directoryChanged(const QString & path) {
|
||||
QTreeWidgetItem * ti = item_map.value(path);
|
||||
//QMessageBox::information(0, "", "changed " + path + " " + QString::number((qulonglong)ti));
|
||||
if (!ti) return;
|
||||
int spos = tree->verticalScrollBar()->value();
|
||||
last_expanded.clear();
|
||||
rememberExpanded(tree->invisibleRootItem());
|
||||
createTree(ti, path, false);
|
||||
filter();
|
||||
restoreExpanded(tree->invisibleRootItem());
|
||||
cleanMappedItems();
|
||||
tree->verticalScrollBar()->setValue(spos);
|
||||
currentFileChanged();
|
||||
if (timer_fs_changed > 0)
|
||||
killTimer(timer_fs_changed);
|
||||
timer_fs_changed = startTimer(500);
|
||||
fs_changed << path;
|
||||
//QMessageBox::information(0, "", "map " + QString::number(ais.size()));
|
||||
//QMessageBox::information(0, "", "remove " + removed);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user