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);
@ -161,12 +159,14 @@ DirFilterPlugin::DirFilterPlugin (TQObject* parent, const char* name,
connect (m_pFilterMenu->popupMenu(), TQT_SIGNAL (aboutToShow()),
TQT_SLOT (slotShowPopup()));
connect (m_part, TQT_SIGNAL (itemRemoved(const KFileItem*)),
connect (m_part, TQT_SIGNAL(itemRemoved(const KFileItem*)),
TQT_SLOT( slotItemRemoved (const KFileItem*)));
connect (m_part, TQT_SIGNAL (itemsAdded(const KFileItemList&)),
connect (m_part, TQT_SIGNAL(itemsAdded(const KFileItemList&)),
TQT_SLOT (slotItemsAdded(const KFileItemList&)));
connect (m_part, TQT_SIGNAL (itemsFilteredByMime(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 )
{
@ -407,7 +410,7 @@ void DirFilterPlugin::slotItemSelected (int id)
}
}
void DirFilterPlugin::slotItemsAdded (const KFileItemList& list)
void DirFilterPlugin::slotItemsAdded(const KFileItemList &list)
{
KURL url = m_part->url();
@ -438,10 +441,10 @@ void DirFilterPlugin::slotItemsAdded (const KFileItemList& list)
continue;
TQString mimeType = mime->name();
if (!m_pMimeInfo.contains (mimeType))
if (!m_pMimeInfo.contains(mimeType))
{
MimeInfo& mimeInfo = m_pMimeInfo[mimeType];
TQStringList filters = m_part->mimeFilter ();
TQStringList filters = m_part->mimeFilter();
mimeInfo.useAsFilter = (!filters.isEmpty () && filters.contains (mimeType));
mimeInfo.mimeComment = mime->comment();
mimeInfo.iconName = mime->icon(KURL(), false);
@ -454,7 +457,7 @@ void DirFilterPlugin::slotItemsAdded (const KFileItemList& list)
}
}
void DirFilterPlugin::slotItemRemoved (const KFileItem* item)
void DirFilterPlugin::slotItemRemoved(const KFileItem* item)
{
if (!item || !m_part)
return;
@ -474,24 +477,122 @@ void DirFilterPlugin::slotItemRemoved (const KFileItem* item)
TQString mimeType = item->mimetype().stripWhiteSpace();
if (m_pMimeInfo.contains (mimeType)) {
if (m_pMimeInfo.contains(mimeType)) {
MimeInfo info = m_pMimeInfo [mimeType];
if (info.filenames.size () > 1)
m_pMimeInfo [mimeType].filenames.remove (item->name ());
m_pMimeInfo [mimeType].filenames.remove(item->name());
else {
if (info.useAsFilter) {
TQStringList filters = m_part->mimeFilter ();
filters.remove (mimeType);
m_part->setMimeFilter (filters);
SessionManager::self()->save (m_part->url(), filters);
TQTimer::singleShot( 0, this, TQT_SLOT(slotTimeout()) );
filters.remove(mimeType);
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()));
}
m_pMimeInfo.remove (mimeType);
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