Skip to content
Permalink
Browse files

fix issue #76

When hidden file is hidden, if the current directory is hidden attribute, it will not be displayed properly.
隠しファイル非表示時、カレントディレクトリが隠し属性の場合に正常に表示されない不具合を修正。
  • Loading branch information...
haraki committed Jun 3, 2019
1 parent a6b7695 commit d22f1280a045f63558f6fb8b6540fc85975a2f50
Showing with 33 additions and 2 deletions.
  1. +33 −2 foldermodel.cpp
@@ -4,6 +4,7 @@
#include <QDebug>
#include <QItemSelectionModel>
#include <QFileIconProvider>
#include <functional>
#include "foldermodel.h"
#include "settings.h"
#include "types.h"
@@ -444,12 +445,42 @@ bool FolderModel::filterAcceptsRow(int source_row, const QModelIndex &source_par

if(pfi.isRoot() && cfi.fileName() == "..")
{
// ルートディレクトリより上には行けないようにする
return false;
}

if(!(m_filterFlags & FilterFlag::Hidden) && cfi.isHidden() && cfi.fileName() != "..")
if(!(m_filterFlags & FilterFlag::Hidden) && cfi.isHidden())
{
return false;
// 隠しファイル非表示時、カレントディレクトリが属するディレクトリは隠しであっても表示する
// 非表示にすると、隠し属性の親ディレクトリに移動した際、FolderView が正常に表示されなくなってしまう現象を回避するため
if(!cfi.isDir())
{
return false;
}

// source_row(childIndex)が指すディレクトリが、カレントディレクトリ(fsModel->rootPath())が属するディレクトリであるかを確認する
std::function<bool (const QModelIndex&)> isBelong =
[&isBelong, &fsModel, &childIndex](const QModelIndex& dirIndex)
{
if(!dirIndex.isValid() || fsModel->fileInfo(dirIndex).isRoot())
{
return false;
}
else if(childIndex == dirIndex)
{
return true;
}
return isBelong(dirIndex.parent());
};

if(isBelong(fsModel->index(fsModel->rootPath())))
{
return true;
}
else if(cfi.fileName() != "..")
{
return false;
}
}

#ifdef Q_OS_WIN

0 comments on commit d22f128

Please sign in to comment.
You can’t perform that action at this time.