Added required refreshItems logic. This resolves bug 146.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
pull/1/head
Michele Calgaro 10 years ago
parent c3ab177a38
commit 064539d8a5

@ -144,8 +144,6 @@ void SessionManager::loadSettings()
DirFilterPlugin::DirFilterPlugin (TQObject* parent, const char* name,
const TQStringList&)
:KParts::Plugin (parent, name),
m_pFilterMenu(0),
m_searchWidget(0),
m_oldFilterString("")
{
m_part = ::tqqt_cast<KonqDirPart*>(parent);
@ -167,6 +165,8 @@ DirFilterPlugin::DirFilterPlugin (TQObject* parent, const char* name,
TQT_SLOT (slotItemsAdded(const KFileItemList&)));
connect (m_part, TQT_SIGNAL(itemsFilteredByMime(const KFileItemList&)),
TQT_SLOT (slotItemsAdded(const KFileItemList&)));
connect (m_part, TQT_SIGNAL(itemsRefresh(const KFileItemList&)),
TQT_SLOT (slotItemsRefresh(const KFileItemList&)));
connect (m_part, TQT_SIGNAL(aboutToOpenURL()), TQT_SLOT(slotOpenURL()));
// add a searchline filter for konqis icons/list views
@ -189,7 +189,10 @@ DirFilterPlugin::DirFilterPlugin (TQObject* parent, const char* name,
m_searchWidget = new TDEIconViewSearchLine(hbox);
static_cast<TDEIconViewSearchLine*>(m_searchWidget)->setIconView(static_cast<TQIconView*>(m_part->scrollWidget()));
}
else
{
m_searchWidget=NULL;
}
if ( m_searchWidget )
{
@ -485,13 +488,111 @@ void DirFilterPlugin::slotItemRemoved (const KFileItem* item)
filters.remove(mimeType);
m_part->setMimeFilter(filters);
SessionManager::self()->save(m_part->url(), filters);
TQTimer::singleShot( 0, this, TQT_SLOT(slotTimeout()) );
// Use 1ms delay to avoid possible race conditions
TQTimer::singleShot(1, this, TQT_SLOT(slotTimeout()));
}
m_pMimeInfo.remove(mimeType);
}
}
}
void DirFilterPlugin::slotItemsRefresh(const KFileItemList &list)
{
if (list.count() == 0 || !m_part || !m_part->nameFilter().isEmpty())
{
m_pFilterMenu->setEnabled (m_part->nameFilter().isEmpty());
return;
}
if ( ::tqqt_cast<TDEListView*>(m_part->scrollWidget()) )
{
static_cast<TDEListViewSearchLine*>(m_searchWidget)->updateSearch();
}
else if ( ::tqqt_cast<TQIconView*>(m_part->scrollWidget()) )
{
static_cast<TDEIconViewSearchLine*>(m_searchWidget)->updateSearch();
}
TQMap<TQString,bool> itemsMap;
if (::tqqt_cast<TDEListView*>(m_part->scrollWidget()))
{
TQListView *listview = ::tqqt_cast<TDEListView*>(m_part->scrollWidget());
for (TQListViewItemIterator lv_it(listview); lv_it.current(); ++lv_it)
{
itemsMap.insert(lv_it.current()->text(0), false);
}
}
else if ( ::tqqt_cast<TQIconView*>(m_part->scrollWidget()) )
{
TQIconView *iconview = ::tqqt_cast<TQIconView*>(m_part->scrollWidget());
for (TQIconViewItem *item = iconview->firstItem(); item; item = item->nextItem())
{
itemsMap.insert(item->text(), false);
}
}
MimeInfoIterator it;
for (it = m_pMimeInfo.begin(); it != m_pMimeInfo.end(); /*empty*/)
{
TQMap<TQString,bool>::iterator file_it;
for ( file_it = it.data().filenames.begin(); file_it != it.data().filenames.end(); /*empty*/)
{
if (!itemsMap.contains(file_it.key()))
{
// Remove mimeInfo for this file (the file was problably renamed)
TQMap<TQString,bool>::iterator del_fit = file_it;
++file_it;
it.data().filenames.remove(del_fit);
}
else
++file_it;
}
if (it.data().filenames.size() == 0)
{
if (it.data().useAsFilter) {
TQStringList filters = m_part->mimeFilter();
filters.remove(it.key());
m_part->setMimeFilter(filters);
SessionManager::self()->save(m_part->url(), filters);
// Use 1ms delay to avoid possible race conditions
TQTimer::singleShot(1, this, TQT_SLOT(slotTimeout()));
}
MimeInfoIterator del_mit = it;
++it;
m_pMimeInfo.remove(del_mit);
}
else
++it;
}
for (KFileItemListIterator fi_it(list); fi_it.current (); ++fi_it)
{
TQString name = fi_it.current()->name();
KMimeType::Ptr mime = fi_it.current()->mimeTypePtr(); // don't resolve mimetype if unknown
if (!mime)
continue;
TQString mimeType = mime->name();
if (!m_pMimeInfo.contains(mimeType))
{
MimeInfo &mimeInfo = m_pMimeInfo[mimeType];
TQStringList filters = m_part->mimeFilter();
mimeInfo.useAsFilter = (!filters.isEmpty () && filters.contains (mimeType));
mimeInfo.mimeComment = mime->comment();
mimeInfo.iconName = mime->icon(KURL(), false);
mimeInfo.filenames.insert(name, false);
}
else
{
MimeInfo &mimeInfo = m_pMimeInfo[mimeType];
if (!mimeInfo.filenames.contains(name))
{
mimeInfo.filenames.insert(name, false);
}
}
}
}
void DirFilterPlugin::activateSearch()
{
// FIXME: If any of the files change while they are hidden in iconview mode, they will

@ -121,6 +121,7 @@ private slots:
void slotItemSelected(int);
void slotItemRemoved(const KFileItem *);
void slotItemsAdded(const KFileItemList &);
void slotItemsRefresh(const KFileItemList &);
void activateSearch();
void searchTextChanged(const TQString& newtext);
void reactivateRefreshTimer();

Loading…
Cancel
Save