From: Robert Roebling Date: Fri, 17 Mar 2006 14:08:58 +0000 (+0000) Subject: Added files for GnomeVFS backend (currently useful X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/1d115baf4b55f601d34b6f7d8a30d0a905545418 Added files for GnomeVFS backend (currently useful for strictly nothing). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38171 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/gtk/gnome/gvfs.h b/include/wx/gtk/gnome/gvfs.h new file mode 100644 index 0000000000..cdfe38b16a --- /dev/null +++ b/include/wx/gtk/gnome/gvfs.h @@ -0,0 +1,54 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/gtk/gnome/gvfs.h +// Author: Robert Roebling +// Purpose: GNOME VFS support +// Created: 17/03/06 +// RCS-ID: $Id$ +// Copyright: Robert Roebling +// Licence: wxWindows Licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef __gvfs_H__ +#define __gvfs_H__ + +// Include wxWindows' headers + +#include "wx/defs.h" + +#if wxUSE_MIMETYPE && wxUSE_LIBGNOMEVFS + +#include "wx/string.h" +#include "wx/unix/mimetype.h" + +//---------------------------------------------------------------------------- +// wxGnomeVFSMimeTypesManagerImpl +//---------------------------------------------------------------------------- + +class wxGnomeVFSMimeTypesManagerImpl: public wxMimeTypesManagerImpl +{ +public: + wxGnomeVFSMimeTypesManagerImpl() { } + + virtual bool DoAssociation(const wxString& strType, + const wxString& strIcon, + wxMimeTypeCommands *entry, + const wxArrayString& strExtensions, + const wxString& strDesc); +}; + +//---------------------------------------------------------------------------- +// wxGnomeVFSMimeTypesManagerFactory +//---------------------------------------------------------------------------- + +class wxGnomeVFSMimeTypesManagerFactory: public wxMimeTypesManagerFactory +{ +public: + wxGnomeVFSMimeTypesManagerFactory() {} + + virtual wxMimeTypesManagerImpl *CreateMimeTypesManagerImpl(); +}; + +#endif + // wxUSE_MIMETYPE + +#endif diff --git a/src/gtk/gnome/gvfs.cpp b/src/gtk/gnome/gvfs.cpp new file mode 100644 index 0000000000..db197126e2 --- /dev/null +++ b/src/gtk/gnome/gvfs.cpp @@ -0,0 +1,179 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: src/gtk/gnome/gvfs.cpp +// Author: Robert Roebling +// Purpose: Implement GNOME VFS support +// Created: 03/17/06 +// RCS-ID: $Id$ +// Copyright: Robert Roebling +// Licence: wxWindows Licence +///////////////////////////////////////////////////////////////////////////// + +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#include "wx/gtk/gnome/gvfs.h" + +#if wxUSE_MIMETYPE && wxUSE_LIBGNOMEVFS + +#include "wx/mimetype.h" +#include "wx/gtk/private.h" +#include "wx/module.h" +#include "wx/dynlib.h" +#include "wx/log.h" + +#include + +#include "wx/html/forcelnk.h" +FORCE_LINK_ME(gnome_vfs) + +//---------------------------------------------------------------------------- +// wxGnomeVFSLibrary +//---------------------------------------------------------------------------- + +#define wxDL_METHOD_DEFINE( rettype, name, args, shortargs, defret ) \ + typedef rettype (* name ## Type) args ; \ + name ## Type pfn_ ## name; \ + rettype name args \ + { if (m_ok) return pfn_ ## name shortargs ; return defret; } + +#define wxDL_METHOD_LOAD( lib, name, success ) \ + pfn_ ## name = (name ## Type) lib->GetSymbol( wxT(#name), &success ); \ + if (!success) return; + +class wxGnomeVFSLibrary +{ +public: + wxGnomeVFSLibrary(); + ~wxGnomeVFSLibrary(); + + bool IsOk(); + void InitializeMethods(); + +private: + bool m_ok; + wxDynamicLibrary *m_gnome_vfs_lib; + +public: + wxDL_METHOD_DEFINE( gboolean, gnome_vfs_init, + (), (), FALSE ) + wxDL_METHOD_DEFINE( void, gnome_vfs_shutdown, + (), (), /**/ ) + + wxDL_METHOD_DEFINE( GnomeVFSResult, gnome_vfs_mime_set_icon, + (const char *mime_type, const char *filename), (mime_type, filename), GNOME_VFS_OK ) +}; + +wxGnomeVFSLibrary::wxGnomeVFSLibrary() +{ + m_gnome_vfs_lib = NULL; + + wxLogNull log; + + m_gnome_vfs_lib = new wxDynamicLibrary( wxT("libgnomevfs-2.so.0") ); + m_ok = m_gnome_vfs_lib->IsLoaded(); + if (!m_ok) return; + + InitializeMethods(); +} + +wxGnomeVFSLibrary::~wxGnomeVFSLibrary() +{ + if (m_gnome_vfs_lib) + delete m_gnome_vfs_lib; +} + +bool wxGnomeVFSLibrary::IsOk() +{ + return m_ok; +} + +void wxGnomeVFSLibrary::InitializeMethods() +{ + m_ok = false; + bool success; + + wxDL_METHOD_LOAD( m_gnome_vfs_lib, gnome_vfs_init, success ) + wxDL_METHOD_LOAD( m_gnome_vfs_lib, gnome_vfs_shutdown, success ) + + m_ok = true; +} + +static wxGnomeVFSLibrary* gs_lgvfs = NULL; + +//---------------------------------------------------------------------------- +// wxGnomeVFSMimeTypesManagerFactory +//---------------------------------------------------------------------------- + +wxMimeTypesManagerImpl *wxGnomeVFSMimeTypesManagerFactory::CreateMimeTypesManagerImpl() +{ + return new wxGnomeVFSMimeTypesManagerImpl; +} + + +//---------------------------------------------------------------------------- +// wxGnomeVFSMimeTypesManagerImpl +//---------------------------------------------------------------------------- + +bool wxGnomeVFSMimeTypesManagerImpl::DoAssociation(const wxString& strType, + const wxString& strIcon, + wxMimeTypeCommands *entry, + const wxArrayString& strExtensions, + const wxString& strDesc) +{ + int nIndex = AddToMimeData(strType, strIcon, entry, strExtensions, strDesc, true); + + if ( nIndex == wxNOT_FOUND ) + return false; + + if (m_mailcapStylesInited & wxMAILCAP_GNOME) + { + // User modificationt to the MIME database + // are not supported :-) + } + + return false; +} + +//---------------------------------------------------------------------------- +// wxGnomeVFSModule +//---------------------------------------------------------------------------- + +class wxGnomeVFSModule: public wxModule +{ +public: + wxGnomeVFSModule() {} + bool OnInit(); + void OnExit(); + +private: + DECLARE_DYNAMIC_CLASS(wxGnomeVFSModule) +}; + +bool wxGnomeVFSModule::OnInit() +{ + gs_lgvfs = new wxGnomeVFSLibrary; + if (gs_lgvfs->IsOk()) + { + if (gs_lgvfs->gnome_vfs_init()) + wxMimeTypesManagerFactory::SetFactory( new wxGnomeVFSMimeTypesManagerFactory ); + } + return true; +} + +void wxGnomeVFSModule::OnExit() +{ + if (gs_lgvfs->IsOk()) + gs_lgvfs->gnome_vfs_shutdown(); + + delete gs_lgvfs; +} + +IMPLEMENT_DYNAMIC_CLASS(wxGnomeVFSModule, wxModule) + +#endif + // wxUSE_LIBGNOMEVS + // wxUSE_MIMETYPE