mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-17 15:31:20 +00:00
Fix "show hidden files" issues
Use KFileItemModel instead of KDirLister for toggling the whether hidden files should be shown. This assures that the signal KFileItemModel::loadingCompleted() will be emitted. In the longterm Dolphin should only use the KFileItemModel, so that the KDirLister instance is used only internally as implementation detail in KFileItemModel. Although there are only a few cases left where KDirLister is used instead of KFileItemModel this cleanup will be postponed to after the 4.8 release... BUG: 287314 BUG: 288213 FIXED-IN: 4.8.0
This commit is contained in:
parent
d5bfe1863c
commit
2827b96d98
|
@ -165,6 +165,24 @@ bool KFileItemModel::sortFoldersFirst() const
|
|||
return m_sortFoldersFirst;
|
||||
}
|
||||
|
||||
void KFileItemModel::setShowHiddenFiles(bool show)
|
||||
{
|
||||
KDirLister* dirLister = m_dirLister.data();
|
||||
if (dirLister) {
|
||||
dirLister->setShowingDotFiles(show);
|
||||
dirLister->emitChanges();
|
||||
if (show) {
|
||||
slotCompleted();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool KFileItemModel::showHiddenFiles() const
|
||||
{
|
||||
const KDirLister* dirLister = m_dirLister.data();
|
||||
return dirLister ? dirLister->showingDotFiles() : false;
|
||||
}
|
||||
|
||||
QMimeData* KFileItemModel::createMimeData(const QSet<int>& indexes) const
|
||||
{
|
||||
QMimeData* data = new QMimeData();
|
||||
|
|
|
@ -41,6 +41,15 @@ class QTimer;
|
|||
*
|
||||
* Also the recursive expansion of sub-directories is supported by
|
||||
* KFileItemModel::setExpanded().
|
||||
*
|
||||
* TODO: In the longterm instead of passing a KDirLister just an URL should
|
||||
* be passed and a KDirLister used internally. This solves the following issues:
|
||||
* - The user of the API does not need to decide whether he listens to KDirLister
|
||||
* or KFileItemModel.
|
||||
* - It resolves minor conceptual differences between KDirLister and KFileItemModel.
|
||||
* E.g. there is no way for KFileItemModel to check whether a completed() signal
|
||||
* will be emitted after newItems() will be send by KDirLister or not (in the case
|
||||
* of setShowingDotFiles() no completed() signal will get emitted).
|
||||
*/
|
||||
class LIBDOLPHINPRIVATE_EXPORT KFileItemModel : public KItemModelBase
|
||||
{
|
||||
|
@ -60,6 +69,9 @@ public:
|
|||
void setSortFoldersFirst(bool foldersFirst);
|
||||
bool sortFoldersFirst() const;
|
||||
|
||||
void setShowHiddenFiles(bool show);
|
||||
bool showHiddenFiles() const;
|
||||
|
||||
/** @reimp */
|
||||
virtual QMimeData* createMimeData(const QSet<int>& indexes) const;
|
||||
|
||||
|
@ -138,6 +150,13 @@ public:
|
|||
QString nameFilter() const;
|
||||
|
||||
signals:
|
||||
/**
|
||||
* Is emitted after the loading of a directory has been completed or new
|
||||
* items have been inserted to an already loaded directory. Usually
|
||||
* one or more itemsInserted() signals are emitted before loadingCompleted()
|
||||
* (the only exception is loading an empty directory, where only a
|
||||
* loadingCompleted() signal gets emitted).
|
||||
*/
|
||||
void loadingCompleted();
|
||||
|
||||
protected:
|
||||
|
|
|
@ -76,8 +76,7 @@ void FoldersPanel::setHiddenFilesShown(bool show)
|
|||
if (m_dirLister) {
|
||||
KFileItemModel* model = fileItemModel();
|
||||
const QSet<KUrl> expandedUrls = model->expandedUrls();
|
||||
m_dirLister->setShowingDotFiles(show);
|
||||
m_dirLister->openUrl(m_dirLister->url(), KDirLister::Reload);
|
||||
model->setShowHiddenFiles(show);
|
||||
model->setExpanded(expandedUrls);
|
||||
}
|
||||
}
|
||||
|
@ -146,7 +145,6 @@ void FoldersPanel::showEvent(QShowEvent* event)
|
|||
m_dirLister->setMainWindow(window());
|
||||
m_dirLister->setDelayedMimeTypes(true);
|
||||
m_dirLister->setAutoErrorHandlingEnabled(false, this);
|
||||
m_dirLister->setShowingDotFiles(FoldersPanelSettings::hiddenFilesShown());
|
||||
|
||||
KFileItemListView* view = new KFileItemListView();
|
||||
view->setWidgetCreator(new KItemListWidgetCreator<KFileItemListWidget>());
|
||||
|
@ -165,6 +163,7 @@ void FoldersPanel::showEvent(QShowEvent* event)
|
|||
view->setOpacity(0);
|
||||
|
||||
KFileItemModel* model = new KFileItemModel(m_dirLister, this);
|
||||
model->setShowHiddenFiles(FoldersPanelSettings::hiddenFilesShown());
|
||||
// Use a QueuedConnection to give the view the possibility to react first on the
|
||||
// finished loading.
|
||||
connect(model, SIGNAL(loadingCompleted()), this, SLOT(slotLoadingCompleted()), Qt::QueuedConnection);
|
||||
|
|
|
@ -262,8 +262,7 @@ void DolphinView::setHiddenFilesShown(bool show)
|
|||
ViewProperties props(url());
|
||||
props.setHiddenFilesShown(show);
|
||||
|
||||
m_dirLister->setShowingDotFiles(show);
|
||||
m_dirLister->emitChanges();
|
||||
fileItemModel()->setShowHiddenFiles(show);
|
||||
emit hiddenFilesShownChanged(show);
|
||||
}
|
||||
|
||||
|
@ -1170,9 +1169,8 @@ void DolphinView::applyViewProperties()
|
|||
}
|
||||
|
||||
const bool hiddenFilesShown = props.hiddenFilesShown();
|
||||
if (hiddenFilesShown != m_dirLister->showingDotFiles()) {
|
||||
m_dirLister->setShowingDotFiles(hiddenFilesShown);
|
||||
m_dirLister->emitChanges();
|
||||
if (hiddenFilesShown != model->showHiddenFiles()) {
|
||||
model->setShowHiddenFiles(hiddenFilesShown);
|
||||
emit hiddenFilesShownChanged(hiddenFilesShown);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue