1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/gtk/gnome/gvfs.cpp
3 // Author: Robert Roebling
4 // Purpose: Implement GNOME VFS support
7 // Copyright: Robert Roebling
8 // Licence: wxWindows Licence
9 /////////////////////////////////////////////////////////////////////////////
11 // For compilers that support precompilation, includes "wx/wx.h".
12 #include "wx/wxprec.h"
18 #if wxUSE_MIMETYPE && wxUSE_LIBGNOMEVFS
20 #include "wx/gtk/gnome/gvfs.h"
24 #include "wx/module.h"
27 #include "wx/mimetype.h"
28 #include "wx/dynlib.h"
30 #include <libgnomevfs/gnome-vfs-mime-handlers.h>
33 wxFORCE_LINK_THIS_MODULE(gnome_vfs
)
35 //----------------------------------------------------------------------------
37 //----------------------------------------------------------------------------
39 class wxGnomeVFSLibrary
47 bool InitializeMethods();
49 wxDynamicLibrary m_libGnomeVFS
;
51 // only true if we successfully loaded the library above
53 // don't rename this field, it's used by wxDL_XXX macros internally
57 wxDL_METHOD_DEFINE( gboolean
, gnome_vfs_init
,
59 wxDL_VOIDMETHOD_DEFINE( gnome_vfs_shutdown
,
62 wxDL_METHOD_DEFINE( GnomeVFSResult
, gnome_vfs_mime_set_icon
,
63 (const char *mime_type
, const char *filename
), (mime_type
, filename
), GNOME_VFS_OK
)
66 wxGnomeVFSLibrary::wxGnomeVFSLibrary()
70 m_libGnomeVFS
.Load("libgnomevfs-2.so.0");
71 m_ok
= m_libGnomeVFS
.IsLoaded() && InitializeMethods();
74 wxGnomeVFSLibrary::~wxGnomeVFSLibrary()
76 // we crash on exit later (i.e. after main() finishes) if we unload this
77 // library, apparently it inserts some hooks in other libraries to which we
78 // link implicitly (GTK+ itself?) which are not uninstalled when it's
79 // unloaded resulting in this crash, so just leave it in memory -- it's a
81 m_libGnomeVFS
.Detach();
84 bool wxGnomeVFSLibrary::IsOk()
89 bool wxGnomeVFSLibrary::InitializeMethods()
91 wxDL_METHOD_LOAD( m_libGnomeVFS
, gnome_vfs_init
);
92 wxDL_METHOD_LOAD( m_libGnomeVFS
, gnome_vfs_shutdown
);
97 static wxGnomeVFSLibrary
* gs_lgvfs
= NULL
;
99 //----------------------------------------------------------------------------
100 // wxGnomeVFSMimeTypesManagerFactory
101 //----------------------------------------------------------------------------
103 wxMimeTypesManagerImpl
*wxGnomeVFSMimeTypesManagerFactory::CreateMimeTypesManagerImpl()
105 return new wxGnomeVFSMimeTypesManagerImpl
;
109 //----------------------------------------------------------------------------
110 // wxGnomeVFSMimeTypesManagerImpl
111 //----------------------------------------------------------------------------
113 bool wxGnomeVFSMimeTypesManagerImpl::DoAssociation(const wxString
& strType
,
114 const wxString
& strIcon
,
115 wxMimeTypeCommands
*entry
,
116 const wxArrayString
& strExtensions
,
117 const wxString
& strDesc
)
119 int nIndex
= AddToMimeData(strType
, strIcon
, entry
, strExtensions
, strDesc
, true);
121 if ( nIndex
== wxNOT_FOUND
)
124 if (m_mailcapStylesInited
& wxMAILCAP_GNOME
)
126 // User modificationt to the MIME database
127 // are not supported :-)
133 //----------------------------------------------------------------------------
135 //----------------------------------------------------------------------------
137 class wxGnomeVFSModule
: public wxModule
140 wxGnomeVFSModule() {}
145 DECLARE_DYNAMIC_CLASS(wxGnomeVFSModule
)
148 bool wxGnomeVFSModule::OnInit()
150 gs_lgvfs
= new wxGnomeVFSLibrary
;
151 if (gs_lgvfs
->IsOk())
153 if (gs_lgvfs
->gnome_vfs_init())
154 wxMimeTypesManagerFactory::Set( new wxGnomeVFSMimeTypesManagerFactory
);
159 void wxGnomeVFSModule::OnExit()
161 if (gs_lgvfs
->IsOk())
162 gs_lgvfs
->gnome_vfs_shutdown();
167 IMPLEMENT_DYNAMIC_CLASS(wxGnomeVFSModule
, wxModule
)
169 #endif // wxUSE_LIBGNOMEVFS && wxUSE_MIMETYPE