]> git.saurik.com Git - wxWidgets.git/blame_incremental - src/gtk/gnome/gvfs.cpp
Use wxGtkString here too
[wxWidgets.git] / src / gtk / gnome / gvfs.cpp
... / ...
CommitLineData
1/////////////////////////////////////////////////////////////////////////////
2// Name: src/gtk/gnome/gvfs.cpp
3// Author: Robert Roebling
4// Purpose: Implement GNOME VFS support
5// Created: 03/17/06
6// RCS-ID: $Id$
7// Copyright: Robert Roebling
8// Licence: wxWindows Licence
9/////////////////////////////////////////////////////////////////////////////
10
11// For compilers that support precompilation, includes "wx/wx.h".
12#include "wx/wxprec.h"
13
14#ifdef __BORLANDC__
15 #pragma hdrstop
16#endif
17
18#include "wx/gtk/gnome/gvfs.h"
19
20#if wxUSE_MIMETYPE && wxUSE_LIBGNOMEVFS
21
22#include "wx/mimetype.h"
23#include "wx/gtk/private.h"
24#include "wx/module.h"
25#include "wx/dynlib.h"
26#include "wx/log.h"
27
28#include <libgnomevfs/gnome-vfs-mime-handlers.h>
29
30#include "wx/html/forcelnk.h"
31FORCE_LINK_ME(gnome_vfs)
32
33//----------------------------------------------------------------------------
34// wxGnomeVFSLibrary
35//----------------------------------------------------------------------------
36
37#define wxDL_METHOD_DEFINE( rettype, name, args, shortargs, defret ) \
38 typedef rettype (* name ## Type) args ; \
39 name ## Type pfn_ ## name; \
40 rettype name args \
41 { if (m_ok) return pfn_ ## name shortargs ; return defret; }
42
43#define wxDL_METHOD_LOAD( lib, name, success ) \
44 pfn_ ## name = (name ## Type) lib->GetSymbol( wxT(#name), &success ); \
45 if (!success) return;
46
47class wxGnomeVFSLibrary
48{
49public:
50 wxGnomeVFSLibrary();
51 ~wxGnomeVFSLibrary();
52
53 bool IsOk();
54 void InitializeMethods();
55
56private:
57 bool m_ok;
58 wxDynamicLibrary *m_gnome_vfs_lib;
59
60public:
61 wxDL_METHOD_DEFINE( gboolean, gnome_vfs_init,
62 (), (), FALSE )
63 wxDL_METHOD_DEFINE( void, gnome_vfs_shutdown,
64 (), (), /**/ )
65
66 wxDL_METHOD_DEFINE( GnomeVFSResult, gnome_vfs_mime_set_icon,
67 (const char *mime_type, const char *filename), (mime_type, filename), GNOME_VFS_OK )
68};
69
70wxGnomeVFSLibrary::wxGnomeVFSLibrary()
71{
72 m_gnome_vfs_lib = NULL;
73
74 wxLogNull log;
75
76 m_gnome_vfs_lib = new wxDynamicLibrary( wxT("libgnomevfs-2.so.0") );
77 m_ok = m_gnome_vfs_lib->IsLoaded();
78 if (!m_ok) return;
79
80 InitializeMethods();
81}
82
83wxGnomeVFSLibrary::~wxGnomeVFSLibrary()
84{
85 if (m_gnome_vfs_lib)
86 delete m_gnome_vfs_lib;
87}
88
89bool wxGnomeVFSLibrary::IsOk()
90{
91 return m_ok;
92}
93
94void wxGnomeVFSLibrary::InitializeMethods()
95{
96 m_ok = false;
97 bool success;
98
99 wxDL_METHOD_LOAD( m_gnome_vfs_lib, gnome_vfs_init, success )
100 wxDL_METHOD_LOAD( m_gnome_vfs_lib, gnome_vfs_shutdown, success )
101
102 m_ok = true;
103}
104
105static wxGnomeVFSLibrary* gs_lgvfs = NULL;
106
107//----------------------------------------------------------------------------
108// wxGnomeVFSMimeTypesManagerFactory
109//----------------------------------------------------------------------------
110
111wxMimeTypesManagerImpl *wxGnomeVFSMimeTypesManagerFactory::CreateMimeTypesManagerImpl()
112{
113 return new wxGnomeVFSMimeTypesManagerImpl;
114}
115
116
117//----------------------------------------------------------------------------
118// wxGnomeVFSMimeTypesManagerImpl
119//----------------------------------------------------------------------------
120
121bool wxGnomeVFSMimeTypesManagerImpl::DoAssociation(const wxString& strType,
122 const wxString& strIcon,
123 wxMimeTypeCommands *entry,
124 const wxArrayString& strExtensions,
125 const wxString& strDesc)
126{
127 int nIndex = AddToMimeData(strType, strIcon, entry, strExtensions, strDesc, true);
128
129 if ( nIndex == wxNOT_FOUND )
130 return false;
131
132 if (m_mailcapStylesInited & wxMAILCAP_GNOME)
133 {
134 // User modificationt to the MIME database
135 // are not supported :-)
136 }
137
138 return false;
139}
140
141//----------------------------------------------------------------------------
142// wxGnomeVFSModule
143//----------------------------------------------------------------------------
144
145class wxGnomeVFSModule: public wxModule
146{
147public:
148 wxGnomeVFSModule() {}
149 bool OnInit();
150 void OnExit();
151
152private:
153 DECLARE_DYNAMIC_CLASS(wxGnomeVFSModule)
154};
155
156bool wxGnomeVFSModule::OnInit()
157{
158 gs_lgvfs = new wxGnomeVFSLibrary;
159 if (gs_lgvfs->IsOk())
160 {
161 if (gs_lgvfs->gnome_vfs_init())
162 wxMimeTypesManagerFactory::SetFactory( new wxGnomeVFSMimeTypesManagerFactory );
163 }
164 return true;
165}
166
167void wxGnomeVFSModule::OnExit()
168{
169 if (gs_lgvfs->IsOk())
170 gs_lgvfs->gnome_vfs_shutdown();
171
172 delete gs_lgvfs;
173}
174
175IMPLEMENT_DYNAMIC_CLASS(wxGnomeVFSModule, wxModule)
176
177#endif
178 // wxUSE_LIBGNOMEVS
179 // wxUSE_MIMETYPE