Rearrange code to make adding wxMimeTypesManagerFactory

at runtim possible.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38172 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 2006-03-17 14:13:02 +00:00
parent 1d115baf4b
commit 2b850ae1a5
9 changed files with 1104 additions and 691 deletions

View File

@ -938,6 +938,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/gtk/frame.cpp
src/gtk/gauge.cpp
src/gtk/gnome/gprint.cpp
src/gtk/gnome/gvfs.cpp
src/gtk/listbox.cpp
src/gtk/mdi.cpp
src/gtk/menu.cpp
@ -982,6 +983,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/gtk/frame.h
wx/gtk/gauge.h
wx/gtk/gnome/gprint.h
wx/gtk/gnome/gvfs.h
wx/gtk/listbox.h
wx/gtk/mdi.h
wx/gtk/menu.h

1231
configure vendored

File diff suppressed because one or more lines are too long

View File

@ -401,6 +401,7 @@ if test $DEBUG_CONFIGURE = 1; then
DEFAULT_wxUSE_LIBMSPACK=no
DEFAULT_wxUSE_LIBSDL=no
DEFAULT_wxUSE_LIBGNOMEPRINT=no
DEFAULT_wxUSE_LIBGNOMEVFS=no
DEFAULT_wxUSE_LIBHILDON=no
DEFAULT_wxUSE_ODBC=no
DEFAULT_wxUSE_OPENGL=no
@ -604,6 +605,7 @@ else
DEFAULT_wxUSE_LIBMSPACK=yes
DEFAULT_wxUSE_LIBSDL=no
DEFAULT_wxUSE_LIBGNOMEPRINT=no
DEFAULT_wxUSE_LIBGNOMEVFS=no
DEFAULT_wxUSE_LIBHILDON=no
DEFAULT_wxUSE_ODBC=no
DEFAULT_wxUSE_OPENGL=no
@ -830,7 +832,8 @@ WX_ARG_SYS_WITH(libtiff, [ --with-libtiff use libtiff (TIFF file for
WX_ARG_SYS_WITH(libxpm, [ --with-libxpm use libxpm (XPM file format)], wxUSE_LIBXPM)
WX_ARG_WITH(libmspack, [ --with-libmspack use libmspack (CHM help files loading)], wxUSE_LIBMSPACK)
WX_ARG_WITH(sdl, [ --with-sdl use SDL for audio on Unix], wxUSE_LIBSDL)
WX_ARG_WITH(gnomeprint, [ --with-gnomeprint use GNOME print for printing under Unix], wxUSE_LIBGNOMEPRINT)
WX_ARG_WITH(gnomeprint, [ --with-gnomeprint use GNOME print for printing under GNOME], wxUSE_LIBGNOMEPRINT)
WX_ARG_WITH(gnomevfs, [ --with-gnomevfs use GNOME VFS for associating MIME types], wxUSE_LIBGNOMEVFS)
WX_ARG_WITH(hildon, [ --with-hildon use Hildon framework for Nokia 770], wxUSE_LIBHILDON)
WX_ARG_WITH(opengl, [ --with-opengl use OpenGL (or Mesa)], wxUSE_OPENGL)
@ -5400,6 +5403,26 @@ dnl EXTRALIBS_GNOMEPRINT="$LIBGNOMEPRINTUI_LIBS"
fi
fi
if test "$WXGTK20" = 1; then
if test "$wxUSE_MIMETYPE" = "yes" ; then
if test "$wxUSE_LIBGNOMEVFS" = "yes" ; then
PKG_CHECK_MODULES(GNOMEVFS,
[gnome-vfs-2.0 >= 2.0],
[
dnl EXTRALIBS_GNOMEVFS="$LIBGNOMEVFS_LIBS"
CXXFLAGS="$GNOMEVFS_CFLAGS $CXXFLAGS"
AC_DEFINE(wxUSE_LIBGNOMEVFS)
],
[
AC_MSG_WARN([libgnomevfs not found, library won't be able to associate MIME type])
wxUSE_LIBGNOMEVFS="no"
]
)
fi
fi
fi
if test "$WXGTK20" = 1; then
if test "$wxUSE_LIBHILDON" = "yes" ; then
PKG_CHECK_MODULES(HILDON,
@ -7083,7 +7106,7 @@ EXTRALIBS_XML="$EXPAT_LINK"
EXTRALIBS_HTML="$MSPACK_LINK"
EXTRALIBS_ODBC="$ODBC_LINK"
if test "$wxUSE_GUI" = "yes"; then
EXTRALIBS_GUI=`echo $GUI_TK_LIBRARY $PNG_LINK $JPEG_LINK $TIFF_LINK $WEBKIT_LINK $EXTRALIBS_HILDON $EXTRALIBS_GNOMEPRINT`
EXTRALIBS_GUI=`echo $GUI_TK_LIBRARY $PNG_LINK $JPEG_LINK $TIFF_LINK $WEBKIT_LINK $EXTRALIBS_HILDON $EXTRALIBS_GNOMEVFS $EXTRALIBS_GNOMEPRINT`
fi
if test "$wxUSE_OPENGL" = "yes"; then
EXTRALIBS_OPENGL="$LDFLAGS_GL $OPENGL_LIBS"
@ -7183,6 +7206,7 @@ AC_SUBST(EXTRALIBS_OPENGL)
AC_SUBST(EXTRALIBS_SDL)
AC_SUBST(WITH_PLUGIN_SDL)
AC_SUBST(EXTRALIBS_GNOMEPRINT)
AC_SUBST(EXTRALIBS_GNOMEVFS)
AC_SUBST(EXTRALIBS_HILDON)
AC_SUBST(UNICODE)
AC_SUBST(BUILD)
@ -7528,6 +7552,7 @@ echo " expat ${wxUSE_EXPAT}"
echo " libmspack ${wxUSE_LIBMSPACK}"
echo " sdl ${wxUSE_LIBSDL}"
echo " gnomeprint ${wxUSE_LIBGNOMEPRINT-none}"
echo " gnomevfs ${wxUSE_LIBGNOMEVFS-none}"
echo " hildon ${wxUSE_LIBHILDON-none}"
echo ""

View File

@ -24,6 +24,7 @@
// the things we really need
#include "wx/string.h"
#include "wx/dynarray.h"
#include "wx/arrstr.h"
// fwd decls
class WXDLLIMPEXP_BASE wxIconLocation;
@ -66,6 +67,80 @@ public:
*/
// wxMimeTypeCommands stores the verbs defined for the given MIME type with
// their values
class WXDLLIMPEXP_BASE wxMimeTypeCommands
{
public:
wxMimeTypeCommands() {}
wxMimeTypeCommands(const wxArrayString& verbs,
const wxArrayString& commands)
: m_verbs(verbs),
m_commands(commands)
{
}
// add a new verb with the command or replace the old value
void AddOrReplaceVerb(const wxString& verb, const wxString& cmd)
{
int n = m_verbs.Index(verb, false /* ignore case */);
if ( n == wxNOT_FOUND )
{
m_verbs.Add(verb);
m_commands.Add(cmd);
}
else
{
m_commands[n] = cmd;
}
}
void Add(const wxString& s)
{
m_verbs.Add(s.BeforeFirst(wxT('=')));
m_commands.Add(s.AfterFirst(wxT('=')));
}
// access the commands
size_t GetCount() const { return m_verbs.GetCount(); }
const wxString& GetVerb(size_t n) const { return m_verbs[n]; }
const wxString& GetCmd(size_t n) const { return m_commands[n]; }
bool HasVerb(const wxString& verb) const
{ return m_verbs.Index(verb) != wxNOT_FOUND; }
wxString GetCommandForVerb(const wxString& verb, size_t *idx = NULL) const
{
wxString s;
int n = m_verbs.Index(verb);
if ( n != wxNOT_FOUND )
{
s = m_commands[(size_t)n];
if ( idx )
*idx = n;
}
else if ( idx )
{
// different from any valid index
*idx = (size_t)-1;
}
return s;
}
// get a "verb=command" string
wxString GetVerbCmd(size_t n) const
{
return m_verbs[n] + wxT('=') + m_commands[n];
}
private:
wxArrayString m_verbs;
wxArrayString m_commands;
};
// ----------------------------------------------------------------------------
// wxFileTypeInfo: static container of information accessed via wxFileType.
//
@ -269,6 +344,25 @@ private:
wxFileTypeImpl *m_impl;
};
//----------------------------------------------------------------------------
// wxMimeTypesManagerFactory
//----------------------------------------------------------------------------
class WXDLLIMPEXP_BASE wxMimeTypesManagerFactory
{
public:
wxMimeTypesManagerFactory() {}
virtual ~wxMimeTypesManagerFactory() {}
virtual wxMimeTypesManagerImpl *CreateMimeTypesManagerImpl();
static void SetFactory( wxMimeTypesManagerFactory *factory );
static wxMimeTypesManagerFactory *GetFactory();
private:
static wxMimeTypesManagerFactory *m_factory;
};
// ----------------------------------------------------------------------------
// wxMimeTypesManager: interface to system MIME database.
//

View File

@ -26,7 +26,7 @@ class WXDLLEXPORT wxMimeTypesManagerImpl
public:
// ctor and dtor
wxMimeTypesManagerImpl();
~wxMimeTypesManagerImpl();
virtual ~wxMimeTypesManagerImpl();
// load all data into memory - done when it is needed for the first time
void Initialize(int mailcapStyles = wxMAILCAP_ALL,
@ -66,7 +66,7 @@ public:
// file type
wxString GetExtension(size_t index) { return m_aExtensions[index]; }
private:
protected:
void InitIfNeeded();
wxArrayString m_aTypes, // MIME types
@ -94,11 +94,6 @@ private:
const wxArrayString& dirs);
void GetGnomeMimeInfo(const wxString& sExtraDir);
// write gnome files
bool CheckGnomeDirsExist();
bool WriteGnomeKeyFile(int index, bool delete_index);
bool WriteGnomeMimeFile(int index, bool delete_index);
// read KDE
void LoadKDELinksForMimeSubtype(const wxString& dirbase,
const wxString& subdir,
@ -127,20 +122,20 @@ private:
// functions used to do associations
int AddToMimeData(const wxString& strType,
virtual int AddToMimeData(const wxString& strType,
const wxString& strIcon,
wxMimeTypeCommands *entry,
const wxArrayString& strExtensions,
const wxString& strDesc,
bool replaceExisting = TRUE);
bool DoAssociation(const wxString& strType,
virtual bool DoAssociation(const wxString& strType,
const wxString& strIcon,
wxMimeTypeCommands *entry,
const wxArrayString& strExtensions,
const wxString& strDesc);
bool WriteMimeInfo(int nIndex, bool delete_mime );
virtual bool WriteMimeInfo(int nIndex, bool delete_mime );
// give it access to m_aXXX variables
friend class WXDLLEXPORT wxFileTypeImpl;

View File

@ -602,6 +602,10 @@
* Use GNOME print for printing under GTK+ 2.0
*/
#define wxUSE_LIBGNOMEPRINT 0
/*
* Use GNOME VFS for MIME types
*/
#define wxUSE_LIBGNOMEVFS 0
/*
* Use the Hildon framework
*/

View File

@ -453,6 +453,34 @@ bool wxFileType::SetDefaultIcon(const wxString& cmd, int index)
#endif
}
//----------------------------------------------------------------------------
// wxMimeTypesManagerFactory
//----------------------------------------------------------------------------
wxMimeTypesManagerFactory *wxMimeTypesManagerFactory::m_factory = NULL;
/* static */
void wxMimeTypesManagerFactory::SetFactory( wxMimeTypesManagerFactory *factory )
{
if (wxMimeTypesManagerFactory::m_factory)
delete wxMimeTypesManagerFactory::m_factory;
wxMimeTypesManagerFactory::m_factory = factory;
}
/* static */
wxMimeTypesManagerFactory *wxMimeTypesManagerFactory::GetFactory()
{
if (!wxMimeTypesManagerFactory::m_factory)
wxMimeTypesManagerFactory::m_factory = new wxMimeTypesManagerFactory;
return wxMimeTypesManagerFactory::m_factory;
}
wxMimeTypesManagerImpl *wxMimeTypesManagerFactory::CreateMimeTypesManagerImpl()
{
return new wxMimeTypesManagerImpl;
}
// ----------------------------------------------------------------------------
// wxMimeTypesManager
@ -461,7 +489,7 @@ bool wxFileType::SetDefaultIcon(const wxString& cmd, int index)
void wxMimeTypesManager::EnsureImpl()
{
if ( !m_impl )
m_impl = new wxMimeTypesManagerImpl;
m_impl = wxMimeTypesManagerFactory::GetFactory()->CreateMimeTypesManagerImpl();
}
bool wxMimeTypesManager::IsOfType(const wxString& mimeType,

View File

@ -78,6 +78,15 @@
#include <gtk/gtk.h>
//-----------------------------------------------------------------------------
// link GnomeVFS
//-----------------------------------------------------------------------------
#if wxUSE_LIBGNOMEVFS
#include "wx/html/forcelnk.h"
FORCE_LINK(gnome_vfs)
#endif
//-----------------------------------------------------------------------------
// global data
//-----------------------------------------------------------------------------

View File

@ -62,6 +62,9 @@
#include "wx/unix/mimetype.h"
// Not GUI dependent
#include "wx/gtk/gnome/gvfs.h"
// other standard headers
#include <ctype.h>
@ -70,80 +73,6 @@
# pragma message disable unscomzer
#endif
// wxMimeTypeCommands stores the verbs defined for the given MIME type with
// their values
class wxMimeTypeCommands
{
public:
wxMimeTypeCommands() {}
wxMimeTypeCommands(const wxArrayString& verbs,
const wxArrayString& commands)
: m_verbs(verbs),
m_commands(commands)
{
}
// add a new verb with the command or replace the old value
void AddOrReplaceVerb(const wxString& verb, const wxString& cmd)
{
int n = m_verbs.Index(verb, false /* ignore case */);
if ( n == wxNOT_FOUND )
{
m_verbs.Add(verb);
m_commands.Add(cmd);
}
else
{
m_commands[n] = cmd;
}
}
void Add(const wxString& s)
{
m_verbs.Add(s.BeforeFirst(wxT('=')));
m_commands.Add(s.AfterFirst(wxT('=')));
}
// access the commands
size_t GetCount() const { return m_verbs.GetCount(); }
const wxString& GetVerb(size_t n) const { return m_verbs[n]; }
const wxString& GetCmd(size_t n) const { return m_commands[n]; }
bool HasVerb(const wxString& verb) const
{ return m_verbs.Index(verb) != wxNOT_FOUND; }
wxString GetCommandForVerb(const wxString& verb, size_t *idx = NULL) const
{
wxString s;
int n = m_verbs.Index(verb);
if ( n != wxNOT_FOUND )
{
s = m_commands[(size_t)n];
if ( idx )
*idx = n;
}
else if ( idx )
{
// different from any valid index
*idx = (size_t)-1;
}
return s;
}
// get a "verb=command" string
wxString GetVerbCmd(size_t n) const
{
return m_verbs[n] + wxT('=') + m_commands[n];
}
private:
wxArrayString m_verbs;
wxArrayString m_commands;
};
// this class extends wxTextFile
//
// VZ: ???
@ -349,200 +278,10 @@ static bool IsKnownUnimportantField(const wxString& field);
// 1. xxx.keys files under /usr/share/mime-info
// 2. xxx.keys files under ~/.gnome/mime-info
//
// The format of xxx.keys file is the following:
//
// mimetype/subtype:
// field=value
//
// with blank lines separating the entries and indented lines starting with
// TABs. We're interested in the field icon-filename whose value is the path
// containing the icon.
//
// Update (Chris Elliott): apparently there may be an optional "[lang]" prefix
// just before the field name.
bool wxMimeTypesManagerImpl::CheckGnomeDirsExist()
{
wxString gnomedir;
wxGetHomeDir( &gnomedir );
wxString sTmp = gnomedir;
sTmp = sTmp + wxT("/.gnome");
if (! wxDir::Exists( sTmp ) )
{
if (!wxMkdir( sTmp ))
{
wxLogError(wxT("Failed to create directory %s/.gnome."), sTmp.c_str());
return false;
}
}
sTmp = sTmp + wxT("/mime-info");
if (! wxDir::Exists( sTmp ) )
{
if (!wxMkdir( sTmp ))
{
wxLogError(wxT("Failed to create directory %s/mime-info."), sTmp.c_str());
return false;
}
}
return true;
}
bool wxMimeTypesManagerImpl::WriteGnomeKeyFile(int index, bool delete_index)
{
wxString gnomedir;
wxGetHomeDir( &gnomedir );
wxMimeTextFile outfile( gnomedir + wxT("/.gnome/mime-info/user.keys"));
// if this fails probably Gnome is not installed ??
// create it anyway as a private mime store
#if defined(__WXGTK20__) && wxUSE_UNICODE
if (! outfile.Open( wxConvUTF8) )
#else
if (! outfile.Open() )
#endif
{
if (delete_index)
return false;
if (!CheckGnomeDirsExist() )
return false;
outfile.Create();
}
wxString sTmp, strType = m_aTypes[index];
int nIndex = outfile.pIndexOf(strType);
if ( nIndex == wxNOT_FOUND )
{
outfile.AddLine( strType + wxT(':') );
// see file:/usr/doc/gnome-libs-devel-1.0.40/devel-docs/mime-type-handling.txt
// as this does not deal with internationalisation
// wxT( "\t[en_US]") + verb + wxT ('=') + cmd + wxT(" %f");
wxMimeTypeCommands * entries = m_aEntries[index];
size_t count = entries->GetCount();
for ( size_t i = 0; i < count; i++ )
{
sTmp = entries->GetVerbCmd( i );
sTmp.Replace( wxT("%s"), wxT("%f") );
sTmp = wxT( "\t") + sTmp;
outfile.AddLine( sTmp );
}
//for international use do something like this
//outfile.AddLine( wxString( "\t[en_US]icon-filename=") + cmd );
outfile.AddLine( wxT( "\ticon-filename=") + m_aIcons[index] );
}
else
{
if (delete_index)
outfile.CommentLine(nIndex);
wxMimeTypeCommands sOld;
size_t nOld = nIndex + 1;
bool oldEntryEnd = false;
while ( (nOld < outfile.GetLineCount() ) && !oldEntryEnd)
{
sTmp = outfile.GetLine(nOld);
if ( (sTmp[0u] == wxT('\t')) || (sTmp[0u] == wxT('#')) )
{
// we have another line to deal with
outfile.CommentLine(nOld);
nOld++;
// add the line to our store
if ((!delete_index) && (sTmp[0u] == wxT('\t')))
sOld.Add(sTmp);
}
// next mimetpye ?? or blank line
else
oldEntryEnd = true;
}
// list of entries in our data; these should all be in sOld,
// though sOld may also contain other entries , eg flags
if (!delete_index)
{
wxMimeTypeCommands * entries = m_aEntries[index];
size_t i;
for (i=0; i < entries->GetCount(); i++)
{
// replace any entries in sold that match verbs we know
sOld.AddOrReplaceVerb( entries->GetVerb(i), entries->GetCmd(i) );
}
//sOld should also contain the icon
if ( !m_aIcons[index].empty() )
sOld.AddOrReplaceVerb( wxT("icon-filename"), m_aIcons[index] );
for (i=0; i < sOld.GetCount(); i++)
{
sTmp = sOld.GetVerbCmd( i );
sTmp.Replace( wxT("%s"), wxT("%f") );
sTmp = wxT("\t") + sTmp;
nIndex++;
outfile.InsertLine( sTmp, nIndex );
}
}
}
bool bTmp = outfile.Write();
return bTmp;
}
bool wxMimeTypesManagerImpl::WriteGnomeMimeFile(int index, bool delete_index)
{
wxString gnomedir;
wxGetHomeDir( &gnomedir );
wxMimeTextFile outfile( gnomedir + wxT("/.gnome/mime-info/user.mime") );
// if this fails probably Gnome is not installed ??
// create it anyway as a private mime store
if (! outfile.Open() )
{
if (delete_index)
return false;
if (!CheckGnomeDirsExist() )
return false;
outfile.Create();
}
wxString strType = m_aTypes[index];
int nIndex = outfile.pIndexOf(strType);
if ( nIndex == wxNOT_FOUND )
{
outfile.AddLine( strType );
outfile.AddLine( wxT("\text:") + m_aExtensions.Item(index) );
}
else
{
if (delete_index)
{
outfile.CommentLine(nIndex);
outfile.CommentLine(nIndex + 1);
}
else
{
// check for next line being the right one to replace ??
wxString sOld = outfile.GetLine(nIndex + 1);
if (sOld.Contains( wxT("\text: ") ))
{
outfile.GetLine(nIndex + 1) = wxT("\text: ") + m_aExtensions.Item(index);
}
else
{
outfile.InsertLine( wxT("\text: ") + m_aExtensions.Item(index), nIndex + 1 );
}
}
}
bool bTmp = outfile.Write();
return bTmp;
}
void wxMimeTypesManagerImpl::LoadGnomeDataFromKeyFile(const wxString& filename,
const wxArrayString& dirs)
{
@ -557,11 +296,12 @@ void wxMimeTypesManagerImpl::LoadGnomeDataFromKeyFile(const wxString& filename,
wxLogTrace(TRACE_MIME, wxT("--- Opened Gnome file %s ---"),
filename.c_str());
wxArrayString search_dirs( dirs );
// values for the entry being parsed
wxString curMimeType, curIconFile;
wxMimeTypeCommands * entry = new wxMimeTypeCommands;
// these are always empty in this file
wxArrayString strExtensions;
wxString strDesc;
@ -576,53 +316,83 @@ void wxMimeTypesManagerImpl::LoadGnomeDataFromKeyFile(const wxString& filename,
wxLogTrace(TRACE_MIME, wxT("--- Reading from Gnome file %s '%s' ---"),
filename.c_str(), pc);
// trim trailing space and tab
while ((*pc == wxT(' ')) || (*pc == wxT('\t')))
pc++;
wxString sTmp(pc);
if (sTmp.Contains(wxT("=")) )
int equal_pos = sTmp.Find( wxT('=') );
if (equal_pos > 0)
{
if (sTmp.Contains( wxT("icon-filename=") ) )
{
// GNOME 1:
curIconFile = sTmp.AfterFirst(wxT('='));
}
else if (sTmp.Contains( wxT("icon_filename=") ) )
wxString left_of_equal = sTmp.Left( equal_pos );
const wxChar *right_of_equal = pc;
right_of_equal += equal_pos+1;
if (left_of_equal == wxT("icon_filename"))
{
// GNOME 2:
curIconFile = sTmp.AfterFirst(wxT('='));
if (!wxFileExists(curIconFile))
curIconFile = right_of_equal;
wxFileName newFile( curIconFile );
if (newFile.IsRelative() || newFile.FileExists())
{
size_t nDirs = dirs.GetCount();
size_t nDirs = search_dirs.GetCount();
for (size_t nDir = 0; nDir < nDirs; nDir++)
{
wxFileName newFile( curIconFile );
newFile.SetPath( dirs[nDir] );
newFile.SetPath( search_dirs[nDir] );
newFile.AppendDir( wxT("pixmaps") );
newFile.AppendDir( wxT("document-icons") );
newFile.SetExt( wxT("png") );
if (newFile.FileExists())
{
curIconFile = newFile.GetFullPath();
// reorder search_dirs for speedup (fewer
// calls to FileExist() required)
if (nDir != 0)
{
wxString tmp = search_dirs[nDir];
search_dirs.RemoveAt( nDir );
search_dirs.Insert( tmp, 0 );
}
break;
}
}
}
}
else //: some other field,
else if (left_of_equal == wxT("open"))
{
//may contain lines like this (RH7)
// \t[lang]open.tex."TeX this file"=tex %f
// \tflags.tex.flags=needsterminal
// \topen.latex."LaTeX this file"=latex %f
// \tflags.latex.flags=needsterminal
// \topen=xdvi %f
// \tview=xdvi %f
// \topen.convert.Convert file to Postscript=dvips %f -o `basename %f .dvi`.ps
// for now ignore lines with flags in...FIX
sTmp = sTmp.AfterLast(wxT(']'));
sTmp = sTmp.AfterLast(wxT('\t'));
sTmp.Trim(false).Trim();
if (0 == sTmp.Replace( wxT("%f"), wxT("%s") ))
sTmp = sTmp + wxT(" %s");
sTmp = right_of_equal;
sTmp.Replace( wxT("%f"), wxT("%s") );
sTmp.Prepend( wxT("open=") );
entry->Add(sTmp);
}
else if (left_of_equal == wxT("view"))
{
sTmp = right_of_equal;
sTmp.Replace( wxT("%f"), wxT("%s") );
sTmp.Prepend( wxT("view=") );
entry->Add(sTmp);
}
else if (left_of_equal == wxT("print"))
{
sTmp = right_of_equal;
sTmp.Replace( wxT("%f"), wxT("%s") );
sTmp.Prepend( wxT("print=") );
entry->Add(sTmp);
}
else if (left_of_equal == wxT("description"))
{
strDesc = right_of_equal;
}
else if (left_of_equal == wxT("short_list_application_ids_for_novice_user_level"))
{
sTmp = right_of_equal;
if (sTmp.Contains( wxT(",") ))
sTmp = sTmp.BeforeFirst( wxT(',') );
sTmp.Prepend( wxT("open=") );
sTmp.Append( wxT(" %s") );
entry->Add(sTmp);
}
@ -1544,19 +1314,15 @@ void wxMimeTypesManagerImpl::InitIfNeeded()
{
// set the flag first to prevent recursion
m_initialized = true;
#if 1
Initialize();
#else
wxString wm = wxGetenv( wxT("WINDOWMANAGER") );
if (wm.Find( wxT("kde") ) != wxNOT_FOUND)
Initialize( wxMAILCAP_KDE | wxMAILCAP_STANDARD );
Initialize( wxMAILCAP_KDE );
else if (wm.Find( wxT("gnome") ) != wxNOT_FOUND)
Initialize( wxMAILCAP_GNOME | wxMAILCAP_STANDARD );
Initialize( wxMAILCAP_GNOME );
else
Initialize();
#endif
}
}
@ -2003,7 +1769,7 @@ bool wxMimeTypesManagerImpl::DoAssociation(const wxString& strType,
const wxString& strDesc)
{
int nIndex = AddToMimeData(strType, strIcon, entry, strExtensions, strDesc, true);
if ( nIndex == wxNOT_FOUND )
return false;
@ -2030,13 +1796,8 @@ bool wxMimeTypesManagerImpl::WriteMimeInfo(int nIndex, bool delete_mime )
ok = false;
}
if (m_mailcapStylesInited & wxMAILCAP_GNOME)
{
// write in Gnome format;
if (WriteGnomeMimeFile(nIndex, delete_mime) )
if (WriteGnomeKeyFile(nIndex, delete_mime) )
ok = false;
}
// Don't write GNOME files here as this is not
// allowed and simply doesn't work
if (m_mailcapStylesInited & wxMAILCAP_KDE)
{