#include "wx/tokenzr.h"
#include "wx/iconloc.h"
#include "wx/filename.h"
-#include "wx/fileconf.h"
#include "wx/unix/mimetype.h"
else if (sTmp.Contains( wxT("icon_filename=") ) )
{
curIconFile = sTmp.AfterFirst(wxT('='));
-
+
if (!wxFileExists(curIconFile))
{
size_t nDirs = dirs.GetCount();
for (size_t nDir = 0; nDir < nDirs; nDir++)
{
wxFileName newFile( curIconFile );
- newFile.SetPath( dirs[nDir] );
- newFile.AppendDir( wxT("pixmaps") );
- newFile.AppendDir( wxT("document-icons") );
- newFile.SetExt( wxT("png") );
+ newFile.SetPath( dirs[nDir] );
+ newFile.AppendDir( wxT("pixmaps") );
+ newFile.AppendDir( wxT("document-icons") );
+ newFile.SetExt( wxT("png") );
if (newFile.FileExists())
curIconFile = newFile.GetFullPath();
}
wxLogTrace(TRACE_MIME,
wxT("--- At end of Gnome file finding mimetype %s ---"),
curMimeType.c_str());
-
+
AddMimeTypeInfo(curMimeType, curExtList, wxEmptyString);
}
wxString strDesc;
if ( !wxDir::Exists(dirname) )
- return;
+ {
+ // Jst test for default GPE dir also
+ dirname = wxT("/usr/share/gpe/pixmaps/default/filemanager/document-icons");
+
+ if ( !wxDir::Exists(dirname) )
+ return;
+ }
wxDir dir2( dirname );
cont = dir2.GetFirst(&filename, wxT("gnome-*.png"), wxDIR_FILES);
while ( cont )
{
- wxString mimeType = filename;
- mimeType.Remove( 0, 6 ); // remove "gnome-"
- mimeType.Remove( mimeType.Len()-4, 4 ); // remove ".png"
- int pos = mimeType.Find( wxT("-") );
- if (pos != wxNOT_FOUND)
- {
- mimeType.SetChar( pos, wxT('/') );
- wxString iconFile = dirname;
- iconFile << wxT("/");
- iconFile << filename;
+ wxString mimeType = filename;
+ mimeType.Remove( 0, 6 ); // remove "gnome-"
+ mimeType.Remove( mimeType.Len()-4, 4 ); // remove ".png"
+ int pos = mimeType.Find( wxT("-") );
+ if (pos != wxNOT_FOUND)
+ {
+ mimeType.SetChar( pos, wxT('/') );
+ wxString iconFile = dirname;
+ iconFile << wxT("/");
+ iconFile << filename;
AddToMimeData ( mimeType, iconFile, NULL, strExtensions, strDesc, TRUE );
- }
+ }
cont = dir2.GetNext(&filename);
}
void wxMimeTypesManagerImpl::GetGnomeMimeInfo(const wxString& sExtraDir)
{
wxArrayString dirs;
- dirs.Add(wxT("/opt/gnome/share"));
+
+ wxString gnomedir = wxGetenv( wxT("GNOMEDIR") );;
+ if (!gnomedir.empty())
+ {
+ gnomedir << wxT("/share");
+ dirs.Add( gnomedir );
+ }
+
dirs.Add(wxT("/usr/share"));
dirs.Add(wxT("/usr/local/share"));
-
- wxString gnomedir;
- wxGetHomeDir( &gnomedir );
- gnomedir += wxT("/.gnome");
+
+ gnomedir = wxGetHomeDir();
+ gnomedir << wxT("/.gnome");
dirs.Add( gnomedir );
+
if (!sExtraDir.empty()) dirs.Add( sExtraDir );
size_t nDirs = dirs.GetCount();
// kde writing; see http://webcvs.kde.org/cgi-bin/cvsweb.cgi/~checkout~/kdelibs/kio/DESKTOP_ENTRY_STANDARD
// for now write to .kdelnk but should eventually do .desktop instead (in preference??)
-bool wxMimeTypesManagerImpl::CheckKDEDirsExist ( const wxString & sOK, const wxString & sTest )
-
- {
+bool wxMimeTypesManagerImpl::CheckKDEDirsExist ( const wxString &sOK, const wxString &sTest )
+{
if (sTest.empty())
- {
- if (wxDir::Exists(sOK)) return TRUE;
- else return FALSE;
- }
+ {
+ if (wxDir::Exists(sOK))
+ return TRUE;
+ else
+ return FALSE;
+ }
else
- {
- wxString sStart = sOK + wxT("/") + sTest.BeforeFirst(wxT('/'));
- if (!wxDir::Exists(sStart)) wxMkdir(sStart);
- wxString sEnd = sTest.AfterFirst(wxT('/'));
- return CheckKDEDirsExist(sStart, sEnd);
+ {
+ wxString sStart = sOK + wxT("/") + sTest.BeforeFirst(wxT('/'));
+ if (!wxDir::Exists(sStart)) wxMkdir(sStart);
+ wxString sEnd = sTest.AfterFirst(wxT('/'));
+ return CheckKDEDirsExist(sStart, sEnd);
}
}
appoutfile.Close ();
return bTemp;
-
-
}
void wxMimeTypesManagerImpl::LoadKDELinksForMimeSubtype(const wxString& dirbase,
}
sExts.Add(mime_extension);
-
// ok, now we can take care of icon:
nIndex = file.pIndexOf(_T("Icon="));
strIcon = file.GetCmd(nIndex);
wxLogTrace(TRACE_MIME, wxT(" icon %s"), strIcon.c_str());
//it could be the real path, but more often a short name
-
-
+
+
if (!wxFileExists(strIcon))
{
// icon is just the short name
// in many locations, at least ~/.kde and $KDEDIR
size_t nDir, nDirs = icondirs.GetCount();
for ( nDir = 0; nDir < nDirs; nDir++ )
- {
- wxFileName fname( icondirs[nDir], strIcon );
- fname.SetExt( wxT("png") );
+ {
+ wxFileName fnameIcon( strIcon );
+ wxFileName fname( icondirs[nDir], fnameIcon.GetName() );
+ fname.SetExt( wxT("png") );
if (fname.FileExists())
{
strIcon = fname.GetFullPath();
wxLogTrace(TRACE_MIME, wxT(" iconfile %s"), strIcon.c_str());
break;
}
- }
+ }
}
}
}
{
wxArrayString dirs;
wxArrayString icondirs;
+
+ // FIXME: This code is heavily broken. There are three bugs in it:
+ // 1) it uses only KDEDIR, which is deprecated, instead of using
+ // list of paths from KDEDIRS and using KDEDIR only if KDEDIRS
+ // is not set
+ // 2) it doesn't look into ~/.kde/share/config/kdeglobals where
+ // user's settings are stored and thus *ignores* user's settings
+ // instead of respecting them
+ // 3) it "tries to guess KDEDIR" and "tries a few likely theme
+ // names", both of which is completely arbitrary; instead, the
+ // code should give up if KDEDIR(S) is not set and/or the icon
+ // theme cannot be determined, because it means that the user is
+ // not using KDE (and thus is not interested in KDE icons anyway)
- // the variable KDEDIR is set when KDE is running
- const wxChar *kdedir = wxGetenv( wxT("KDEDIR") );
+ // the variable $KDEDIR is set when KDE is running
+ wxString kdedir = wxGetenv( wxT("KDEDIR") );
- if (kdedir)
- {
- wxFileName configFile( kdedir, wxEmptyString );
- configFile.AppendDir( wxT("share") );
-#if 0
- configFile.AppendDir( wxT("config") );
- configFile.SetName( wxT("kdeglobals") );
-
- wxFileConfig config( wxEmptyString, wxEmptyString, configFile.GetFullPath() );
- wxString theme;
- config.SetPath( wxT("Icons") );
- config.Read( wxT("Theme"), theme );
-
- configFile.RemoveDir( configFile.GetDirCount()-1 );
- configFile.AppendDir( wxT("icons") );
- configFile.AppendDir( theme );
-#else
- configFile.AppendDir( wxT("icons") );
- configFile.AppendDir( wxT("crystalsvg") );
-#endif
-
- if (!wxDir::Exists(configFile.GetPath()))
- {
- configFile.RemoveDir( configFile.GetDirCount()-1 );
- configFile.AppendDir( wxT("crystal") );
- }
-
- if (!wxDir::Exists(configFile.GetPath()))
- {
- configFile.RemoveDir( configFile.GetDirCount()-1 );
- configFile.AppendDir( wxT("default.kde") );
- }
-
- if (wxDir::Exists(configFile.GetPath()))
- {
- configFile.AppendDir( wxT("32x32") );
- configFile.AppendDir( wxT("mimetypes") );
- icondirs.Add( configFile.GetFullPath() );
- }
+ if (!kdedir.empty())
+ {
+ // $(KDEDIR)/share/config/kdeglobals holds info
+ // the current icons theme
+ wxFileName configFile( kdedir, wxEmptyString );
+ configFile.AppendDir( wxT("share") );
+ configFile.AppendDir( wxT("config") );
+ configFile.SetName( wxT("kdeglobals") );
+
+ wxTextFile config;
+ if (configFile.FileExists() && config.Open(configFile.GetFullPath()))
+ {
+ // $(KDEDIR)/share/config -> $(KDEDIR)/share
+ configFile.RemoveDir( configFile.GetDirCount()-1 );
+ // $(KDEDIR)/share/ -> $(KDEDIR)/share/icons
+ configFile.AppendDir( wxT("icons") );
+
+ // Check for entry
+ wxString theme(wxT("default.kde"));
+ size_t cnt = config.GetLineCount();
+ for (size_t i = 0; i < cnt; i++)
+ {
+ if (config[i].StartsWith(wxT("Theme="), &theme/*rest*/))
+ break;
+ }
+ configFile.AppendDir(theme);
+ }
+ else
+ {
+ // $(KDEDIR)/share/config -> $(KDEDIR)/share
+ configFile.RemoveDir( configFile.GetDirCount()-1 );
+ // $(KDEDIR)/share/ -> $(KDEDIR)/share/icons
+ configFile.AppendDir( wxT("icons") );
+ // $(KDEDIR)/share/icons -> $(KDEDIR)/share/icons/default.kde
+ configFile.AppendDir( wxT("default.kde") );
+ }
+
+ configFile.SetName( wxEmptyString );
+ configFile.AppendDir( wxT("32x32") );
+ configFile.AppendDir( wxT("mimetypes") );
+
+ // Just try a few likely icons theme names
+
+ int pos = configFile.GetDirCount()-3;
+
+ if (!wxDir::Exists(configFile.GetPath()))
+ {
+ configFile.RemoveDir( pos );
+ configFile.InsertDir( pos, wxT("default.kde") );
+ }
+
+ if (!wxDir::Exists(configFile.GetPath()))
+ {
+ configFile.RemoveDir( pos );
+ configFile.InsertDir( pos, wxT("default") );
+ }
+
+ if (!wxDir::Exists(configFile.GetPath()))
+ {
+ configFile.RemoveDir( pos );
+ configFile.InsertDir( pos, wxT("crystalsvg") );
+ }
+
+ if (!wxDir::Exists(configFile.GetPath()))
+ {
+ configFile.RemoveDir( pos );
+ configFile.InsertDir( pos, wxT("crystal") );
+ }
+
+ if (wxDir::Exists(configFile.GetPath()))
+ icondirs.Add( configFile.GetFullPath() );
}
// settings in ~/.kde have maximal priority
dirs.Add(wxGetHomeDir() + wxT("/.kde/share"));
icondirs.Add(wxGetHomeDir() + wxT("/.kde/share/icons/"));
- if ( kdedir )
+ if (kdedir)
{
dirs.Add( wxString(kdedir) + wxT("/share") );
icondirs.Add( wxString(kdedir) + wxT("/share/icons/") );
{
// set the flag first to prevent recursion
m_initialized = TRUE;
-
+
#if 0
- wxString wm = wxGetenv( wxT("WINDOWMANAGER") );
-
- if (wm.Find( wxT("kde") ) != wxNOT_FOUND)
- Initialize( wxMAILCAP_KDE|wxMAILCAP_STANDARD );
- else if (wm.Find( wxT("gnome") ) != wxNOT_FOUND)
- Initialize( wxMAILCAP_GNOME|wxMAILCAP_STANDARD );
- else
+ wxString wm = wxGetenv( wxT("WINDOWMANAGER") );
+
+ if (wm.Find( wxT("kde") ) != wxNOT_FOUND)
+ Initialize( wxMAILCAP_KDE|wxMAILCAP_STANDARD );
+ else if (wm.Find( wxT("gnome") ) != wxNOT_FOUND)
+ Initialize( wxMAILCAP_GNOME|wxMAILCAP_STANDARD );
+ else
#endif
- Initialize();
+ Initialize();
}
}
// the string is quoted and ends at the matching quote
pEnd = wxStrchr(++pc, wxT('"'));
if ( pEnd == NULL ) {
- wxLogWarning(_("Mime.types file %s, line %d: unterminated "
- "quoted string."),
+ wxLogWarning(_("Mime.types file %s, line %d: unterminated quoted string."),
strFileName.c_str(), nLine + 1);
}
}
// something is wrong, bail out
cont = FALSE;
- wxLogDebug(wxT("Mailcap file %s, line %lu: "
- "'\\' on the end of the last line "
- "ignored."),
+ wxLogDebug(wxT("Mailcap file %s, line %lu: '\\' on the end of the last line ignored."),
strFileName.c_str(),
(unsigned long)nLine + 1);
}
// this might be useful for the programmer
wxLogDebug
(
- wxT("Mailcap file %s, line %lu: "
- "unknown field '%s' for the "
- "MIME type '%s' ignored."),
+ wxT("Mailcap file %s, line %lu: unknown field '%s' for the MIME type '%s' ignored."),
strFileName.c_str(),
(unsigned long)nLine + 1,
curField.c_str(),
// check that we really read something reasonable
if ( currentToken < Field_Other )
{
- wxLogWarning(_("Mailcap file %s, line %d: incomplete entry "
- "ignored."),
+ wxLogWarning(_("Mailcap file %s, line %d: incomplete entry ignored."),
strFileName.c_str(), nLine + 1);
continue;
// have we seen this one before?
int nIndex = m_aTypes.Index(data.type);
- // and if we have, was it in this file?
+ // and if we have, was it in this file? if not, we should
+ // overwrite the previously seen one
overwrite = nIndex == wxNOT_FOUND ||
- aIndicesSeenHere.Index(nIndex) != wxNOT_FOUND;
+ aIndicesSeenHere.Index(nIndex) == wxNOT_FOUND;
}
wxLogTrace(TRACE_MIME, _T("mailcap %s: %s [%s]"),