###############################################################################
# Copyright (c) 2000, 2006 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################
org_eclipse_swt_internal_gnome_GNOME=
GNOME_GnomeVFSMimeApplication_sizeof=

GNOME__g_free=
GNOME__g_free_0=cast=gpointer

GNOME__g_list_append=
GNOME__g_list_append_0=cast=(GList *)
GNOME__g_list_append_1=cast=(gpointer)

GNOME__g_list_free=
GNOME__g_list_free_0=cast=(GList *)

GNOME__g_list_next=
GNOME__g_list_next_0=

GNOME__g_object_unref=
GNOME__g_object_unref_0=cast=gpointer

GNOME__gnome_icon_lookup=
GNOME__gnome_icon_lookup_0=cast=(GnomeIconTheme *)
GNOME__gnome_icon_lookup_1=cast=GnomeThumbnailFactory *
GNOME__gnome_icon_lookup_2=cast=const char *
GNOME__gnome_icon_lookup_3=cast=const char *
GNOME__gnome_icon_lookup_4=cast=GnomeVFSFileInfo *
GNOME__gnome_icon_lookup_5=cast=const char *
GNOME__gnome_icon_lookup_6=cast=GnomeIconLookupFlags
GNOME__gnome_icon_lookup_7=cast=GnomeIconLookupResultFlags *

GNOME__gnome_icon_theme_lookup_icon=
GNOME__gnome_icon_theme_lookup_icon_0=cast=GnomeIconTheme *
GNOME__gnome_icon_theme_lookup_icon_1=cast=const char *
GNOME__gnome_icon_theme_lookup_icon_2=
GNOME__gnome_icon_theme_lookup_icon_3=cast=(const GnomeIconData **)
GNOME__gnome_icon_theme_lookup_icon_4=

GNOME__gnome_icon_theme_new=

GNOME__gnome_vfs_get_registered_mime_types=

GNOME__gnome_vfs_init=

GNOME__gnome_vfs_make_uri_from_input=
GNOME__gnome_vfs_make_uri_from_input_0=cast=(const char *)

GNOME__gnome_vfs_make_uri_from_input_with_dirs=flags=dynamic
GNOME__gnome_vfs_make_uri_from_input_with_dirs_0=cast=(const char *)
GNOME__gnome_vfs_make_uri_from_input_with_dirs_1=

GNOME__gnome_vfs_mime_application_free=
GNOME__gnome_vfs_mime_application_free_0=cast=GnomeVFSMimeApplication *

GNOME__gnome_vfs_mime_application_launch=flags=dynamic
GNOME__gnome_vfs_mime_application_launch_0=cast=(GnomeVFSMimeApplication *)
GNOME__gnome_vfs_mime_application_launch_1=cast=(GList *)

GNOME__gnome_vfs_mime_extensions_list_free=
GNOME__gnome_vfs_mime_extensions_list_free_0=cast=GList *

GNOME__gnome_vfs_mime_get_default_application=
GNOME__gnome_vfs_mime_get_default_application_0=cast=(const char *)

GNOME__gnome_vfs_mime_get_extensions_list=
GNOME__gnome_vfs_mime_get_extensions_list_0=cast=const char *

GNOME__gnome_vfs_mime_registered_mime_type_list_free=
GNOME__gnome_vfs_mime_registered_mime_type_list_free_0=cast=GList *

GNOME__gnome_vfs_mime_type_from_name=
GNOME__gnome_vfs_mime_type_from_name_0=cast=(const char *)

GNOME__gnome_vfs_url_show=flags=dynamic
GNOME__gnome_vfs_url_show_0=cast=(const char *)

GNOME_memmove=
GNOME_memmove_0=cast=void *,flags=no_in
GNOME_memmove_1=cast=const void *
GNOME_memmove_2=cast=size_t


org_eclipse_swt_internal_gnome_GnomeVFSMimeApplication=
GnomeVFSMimeApplication_id=cast=char *
GnomeVFSMimeApplication_name=cast=char *
GnomeVFSMimeApplication_command=cast=char *
GnomeVFSMimeApplication_can_open_multiple_files=cast=gboolean
GnomeVFSMimeApplication_expects_uris=cast=GnomeVFSMimeApplicationArgumentType
GnomeVFSMimeApplication_supported_uri_schemes=cast=(GList *)
GnomeVFSMimeApplication_requires_terminal=cast=gboolean

