Merge branch 0.8.0 into trunk (18:19)
git-svn-id: https://svn.outlyer.net/svn/pub/nautilus-follow-symlink/trunk@20 da2faf11-d50b-4b07-92cd-6070d1bd8887
This commit is contained in:
commit
35d59c36ce
16
ChangeLog
16
ChangeLog
|
@ -2,17 +2,27 @@ Iterim milestones
|
|||
These private versions, the version numbering bumps just denote
|
||||
that a development milestone is achieved
|
||||
|
||||
0.8.0 (25 oct 2006):
|
||||
* INTERNAL: Changed the use of lstat() and realpath() to GnomeVFS versions
|
||||
* BUGFIX: Resolve realpaths correctly for paths with non-ascii characters
|
||||
or spaces
|
||||
* FEATURE: Support for multiple file selections, entries for the symbolic
|
||||
links in the selected set are added to the context menu
|
||||
* BUGFIX: Don't use urlencoded urls for the working dir of the spawned
|
||||
nautilus
|
||||
* INTERNAL: Use '.' as cwd of the spawned nautilus
|
||||
|
||||
0.7.9 (24 oct 2006):
|
||||
* Show the symbolic link's name (unresolved) in context menu and
|
||||
* FEATURE: Show the symbolic link's name (unresolved) in context menu and
|
||||
description
|
||||
|
||||
0.7.0 (24 oct 2006):
|
||||
* Added support for background items (context menu on opened symlinks)
|
||||
* FEATURE: Added support for background items (context menu on opened symlinks)
|
||||
* BUGFIX: Corrected translation typos
|
||||
* BUGFIX: Corrected includes only working in DEBUG/NON-DEBUG mode
|
||||
|
||||
0.6.0 (24 oct 2006):
|
||||
* Added support for i18n, updated build-dependancies accordingly
|
||||
* FEATURE: Added support for i18n, updated build-dependancies accordingly
|
||||
|
||||
0.5.2 (24 oct 2006):
|
||||
* INTERNAL: Corrected includes and function declarations
|
||||
|
|
|
@ -4,7 +4,7 @@ SUBDIRS = po src
|
|||
# This doesn't work as expected
|
||||
libdir = @libdir@/nautilus/extensions-1.0
|
||||
|
||||
#EXTRA_DIST = dist
|
||||
EXTRA_DIST = dist po/nautilus-follow-symlink.pot
|
||||
|
||||
# Extra files to get rid of when distcleaning
|
||||
DISTCLEANFILES = \
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
AC_INIT(src/follow-symlink.c)
|
||||
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.7.9")
|
||||
AM_INIT_AUTOMAKE(libnautilus-follow-symlink, "0.8.0")
|
||||
AC_CONFIG_HEADER(src/config.h)
|
||||
|
||||
dnl default FLAGS
|
||||
|
@ -28,7 +28,7 @@ AM_GLIB_GNU_GETTEXT
|
|||
dnl defines STDC_HEADERS if ANSI-compliant headers are present
|
||||
AC_HEADER_STDC
|
||||
dnl Xref: http://www.seul.org/docs/autotut/#libtool
|
||||
AC_CHECK_HEADERS(sys/stat.h,,AC_MSG_ERROR([required header file missing]))
|
||||
#AC_CHECK_HEADERS(sys/stat.h,,AC_MSG_ERROR([required header file missing]))
|
||||
|
||||
# glib-2.0: ensure it's present
|
||||
dnl and set GLIB_CFLAGS and GLIB_LIBS
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
nautilus-follow-symlink (0.8.0-out.1) unstable; urgency=low
|
||||
|
||||
* New upstream release
|
||||
|
||||
-- Toni Corvera <outlyer@outlyer.net> Wed, 25 Oct 2006 05:03:23 +0200
|
||||
|
||||
nautilus-follow-symlink (0.7.9-out.1) unstable; urgency=low
|
||||
|
||||
* New upstream release
|
||||
|
|
19
dist
19
dist
|
@ -16,6 +16,25 @@ gen:
|
|||
autoheader
|
||||
automake --add-missing --foreign
|
||||
|
||||
help:
|
||||
@echo "This file is used to aid in the setup of the build"
|
||||
@echo "environment, there are the following available targets"
|
||||
@echo "(use ./dist TARGET):"
|
||||
@echo " gen (default) Create the required structure"
|
||||
@echo " clean Remove the files created by gen and by the build process"
|
||||
@echo " update-po Update the language files with new translation or moved "
|
||||
@echo " string locations (note it also updates the meta-timestamp)"
|
||||
@echo " so it can get funny issuing this command when using CVS/SVN"
|
||||
@echo " regen 'clean' then 'gen'"
|
||||
@echo " help This very message"
|
||||
|
||||
|
||||
update-po:
|
||||
cd po && intltool-update -p
|
||||
cd po && for file in *.po ; do \
|
||||
intltool-update --dist `basename $$file .po` ; \
|
||||
done
|
||||
|
||||
regen: clean gen
|
||||
|
||||
clean:
|
||||
|
|
10
po/ca.po
10
po/ca.po
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: libnautilus-follow-symlink\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-10-24 22:55+0200\n"
|
||||
"POT-Creation-Date: 2006-10-25 05:22+0200\n"
|
||||
"PO-Revision-Date: 2006-10-24 22:59+0200\n"
|
||||
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n"
|
||||
"Language-Team: Catalan <outlyer@outlyer.net>\n"
|
||||
|
@ -15,22 +15,22 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../src/follow-symlink.c:159
|
||||
#: ../src/follow-symlink.c:188
|
||||
#, c-format
|
||||
msgid "Follow symbolic _link '%s'"
|
||||
msgstr "Segueix l'en_llaç simbòlic '%s'"
|
||||
|
||||
#: ../src/follow-symlink.c:160
|
||||
#: ../src/follow-symlink.c:189
|
||||
#, c-format
|
||||
msgid "Open the directory pointed by the symbolic link '%s'"
|
||||
msgstr "Obre el directori apuntat per l'enllaç simbòlic '%s'"
|
||||
|
||||
#: ../src/follow-symlink.c:169
|
||||
#: ../src/follow-symlink.c:198
|
||||
#, c-format
|
||||
msgid "Open real path of '%s'"
|
||||
msgstr "Obre la ruta real de '%s'"
|
||||
|
||||
#: ../src/follow-symlink.c:170
|
||||
#: ../src/follow-symlink.c:199
|
||||
#, c-format
|
||||
msgid "Open the real path of the folder pointed by '%s'"
|
||||
msgstr "Obre el directori apuntat per '%s'"
|
||||
|
|
13
po/es.po
13
po/es.po
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: libnautilus-follow-symlink\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-10-24 22:55+0200\n"
|
||||
"POT-Creation-Date: 2006-10-25 05:22+0200\n"
|
||||
"PO-Revision-Date: 2006-10-24 23:00+0200\n"
|
||||
"Last-Translator: Toni Corvera <outlyer@outlyer.net>\n"
|
||||
"Language-Team: Spanish <outlyer@outlyer.net>\n"
|
||||
|
@ -17,23 +17,22 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: ../src/follow-symlink.c:159
|
||||
#: ../src/follow-symlink.c:188
|
||||
#, c-format
|
||||
msgid "Follow symbolic _link '%s'"
|
||||
msgstr "Seguir en_lace simbólico '%s'"
|
||||
|
||||
#: ../src/follow-symlink.c:160
|
||||
#: ../src/follow-symlink.c:189
|
||||
#, c-format
|
||||
msgid "Open the directory pointed by the symbolic link '%s'"
|
||||
msgstr ""
|
||||
"Abrir el directorio apuntado por el enlace simbólico '%s'"
|
||||
msgstr "Abrir el directorio apuntado por el enlace simbólico '%s'"
|
||||
|
||||
#: ../src/follow-symlink.c:169
|
||||
#: ../src/follow-symlink.c:198
|
||||
#, c-format
|
||||
msgid "Open real path of '%s'"
|
||||
msgstr "Abrir la ruta real de '%s'"
|
||||
|
||||
#: ../src/follow-symlink.c:170
|
||||
#: ../src/follow-symlink.c:199
|
||||
#, c-format
|
||||
msgid "Open the real path of the folder pointed by '%s'"
|
||||
msgstr "Abrir el directoro apuntado por '%s'"
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2006-10-24 21:27+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: ../src/follow-symlink.c:156
|
||||
msgid "Follow symbolic _link"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/follow-symlink.c:157
|
||||
msgid "Open the directory pointed by the currently selected symbolic link"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/follow-symlink.c:160
|
||||
msgid "Open real path"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/follow-symlink.c:161
|
||||
msgid "Open the real path of the folder pointed by this symbolic link"
|
||||
msgstr ""
|
16
src/common.h
16
src/common.h
|
@ -19,8 +19,20 @@
|
|||
#include "config.h"
|
||||
#endif // HAVE_CONFIG_H
|
||||
|
||||
#ifndef __inline__
|
||||
#if !defined(__inline)
|
||||
#define __inline
|
||||
#elif defined(_DEBUG)
|
||||
#undef __inline
|
||||
#define __inline
|
||||
#endif
|
||||
|
||||
#if !defined(__fsl_unused)
|
||||
// Xref: http://rlove.org/log/2005102601
|
||||
#if __GNUC__ >= 3
|
||||
#define __fsl_unused __attribute__ ((unused))
|
||||
#else
|
||||
#define __fsl_unused
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
|
@ -49,12 +61,14 @@
|
|||
#define FSL_LOG(str) if (DEBUG_ON_()) g_printf("%s\n", (str));
|
||||
/* Display a formatted message with one string argument */
|
||||
#define FSL_LOG1(str1, str2) if (DEBUG_ON_()) g_printf("%s %s\n", (str1), (str2));
|
||||
#define FSL_LOG_SPRINTF1(s1, s2) if (DEBUG_ON_()) g_printf((s1), (s2));
|
||||
#else
|
||||
/* Debugging facilities disabled */
|
||||
#define TRACE()
|
||||
#define FSL_LOG(a)
|
||||
#define FSL_LOG1(a,b)
|
||||
#define FSL_DEBUG_INIT()
|
||||
#define FSL_LOG_SPRINTF1(a,b)
|
||||
#endif
|
||||
|
||||
#endif /* FOLLOW_SYMLINK_COMMON_H */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "follow-symlink.h"
|
||||
|
||||
// Offset at char 7 to remove file://
|
||||
static const unsigned short URI_OFFSET = 7 * sizeof(gchar);
|
||||
//static const unsigned short URI_OFFSET = 7 * sizeof(gchar);
|
||||
static const size_t PATH_LENGTH_BYTES = sizeof(gchar) * (PATH_MAX + 1);
|
||||
|
||||
extern int errno;
|
||||
|
@ -21,7 +21,8 @@ void fsl_extension_menu_provider_iface_init(NautilusMenuProviderIface *iface)
|
|||
*/
|
||||
GList * fsl_get_items_impl(GtkWidget * window,
|
||||
NautilusFileInfo * file_info,
|
||||
gboolean is_file_item)
|
||||
gboolean is_file_item,
|
||||
GList * input)
|
||||
{
|
||||
TRACE();
|
||||
|
||||
|
@ -29,6 +30,7 @@ GList * fsl_get_items_impl(GtkWidget * window,
|
|||
|
||||
// Only file uris
|
||||
{
|
||||
// TODO: what about GnomeVFSFileInfo's is_local ?
|
||||
gchar * uri_scheme = nautilus_file_info_get_uri_scheme(file_info);
|
||||
if (strcmp(uri_scheme, "file") != 0) {
|
||||
FSL_LOG( "Not file scheme" );
|
||||
|
@ -39,24 +41,24 @@ GList * fsl_get_items_impl(GtkWidget * window,
|
|||
|
||||
// We know the file is either a directory or a symlink to a directory
|
||||
// TODO: Has glib/gnome any better/faster alternatives?
|
||||
{
|
||||
struct stat file_stat;
|
||||
// Note ..._get_name doesn't give the full path
|
||||
const gchar * const file_name = nautilus_file_info_get_uri(file_info) + URI_OFFSET;
|
||||
lstat(file_name, &file_stat);
|
||||
if (! S_ISLNK(file_stat.st_mode)) {
|
||||
FSL_LOG1( "Not S_ISLNK:", file_name );
|
||||
return NULL;
|
||||
}
|
||||
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(file_info);
|
||||
|
||||
/* TODO: In which situations might the flags field be invalid?
|
||||
* Hence, can the older stat version be dumped safely?
|
||||
*/
|
||||
g_assert( (gfi->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_FLAGS) > 0 );
|
||||
|
||||
if ( (gfi->flags & GNOME_VFS_FILE_FLAGS_SYMLINK) == 0 ) {
|
||||
FSL_LOG1("GnomeVFS Flags: ! SYMLINK: ", nautilus_file_info_get_uri(file_info));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
item = fsl_menu_item_new(gtk_widget_get_screen(window),
|
||||
is_file_item,
|
||||
nautilus_file_info_get_name(file_info));
|
||||
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback),
|
||||
file_info);
|
||||
g_signal_connect(item, "activate", G_CALLBACK(fsl_callback), file_info);
|
||||
|
||||
return g_list_append(NULL, item);
|
||||
return g_list_append(input, item);
|
||||
}
|
||||
|
||||
GList *
|
||||
|
@ -69,7 +71,20 @@ fsl_get_background_items(NautilusMenuProvider * provider,
|
|||
if (NULL == current_folder) { // XXX: Does this ever happen?
|
||||
FSL_LOG( "No folder selected" );
|
||||
}
|
||||
return fsl_get_items_impl(window, current_folder, FALSE);
|
||||
return fsl_get_items_impl(window, current_folder, FALSE, NULL);
|
||||
}
|
||||
|
||||
|
||||
gboolean file_is_directory (gpointer file_data)
|
||||
{
|
||||
TRACE();
|
||||
|
||||
/*
|
||||
* Apparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks
|
||||
* are resolved to the target type
|
||||
*/
|
||||
const GnomeVFSFileInfo * const gfi = nautilus_file_info_get_vfs_file_info(file_data);
|
||||
return gfi->type == GNOME_VFS_FILE_TYPE_DIRECTORY;
|
||||
}
|
||||
|
||||
/* Bind to menu if needed */
|
||||
|
@ -82,24 +97,46 @@ fsl_get_file_items (NautilusMenuProvider * provider,
|
|||
|
||||
// Number of files = g_list_length(files)
|
||||
// Directory = nautilus_file_info_is_directory(files->data)
|
||||
|
||||
if (NULL==files || g_list_length(files) != 1) {
|
||||
FSL_LOG( (NULL==files) ? "No file" : "More than one file" );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(files->data);
|
||||
/*
|
||||
* Aparently type is never GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK and symlinks
|
||||
* are resolved to the target type
|
||||
*/
|
||||
if (gfi->type != GNOME_VFS_FILE_TYPE_DIRECTORY) {
|
||||
FSL_LOG( "Not directory" );
|
||||
if (NULL == files) {
|
||||
FSL_LOG("No file selected");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
return fsl_get_items_impl(window, files->data, TRUE);
|
||||
if (g_list_length(files) == 1) {
|
||||
if (!file_is_directory(files->data)) {
|
||||
FSL_LOG("File is not a directory");
|
||||
return NULL;
|
||||
}
|
||||
return fsl_get_items_impl(window, files->data, TRUE, NULL);
|
||||
}
|
||||
|
||||
// More than one selected file
|
||||
assert( g_list_length(files) > 1 );
|
||||
|
||||
FSL_LOG( "More than one file selected" );
|
||||
|
||||
GList * items = NULL;
|
||||
|
||||
for (int i=0; i<g_list_length(files); ++i) {
|
||||
const gpointer file_info = g_list_nth_data(files, i);
|
||||
if (!file_is_directory(file_info)) {
|
||||
FSL_LOG_SPRINTF1 ( "File %s is not a directory, discarded\n",
|
||||
nautilus_file_info_get_name(file_info) );
|
||||
continue;
|
||||
}
|
||||
FSL_LOG_SPRINTF1( "%s is a directory\n", nautilus_file_info_get_name(file_info) );
|
||||
// TODO: Am I loosing memory?
|
||||
GList * ret = fsl_get_items_impl(window, file_info, TRUE, items);
|
||||
if (NULL != ret) {
|
||||
items = ret;
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Although items might contain more than one item only the last one is displayed
|
||||
// why?
|
||||
|
||||
return items;
|
||||
}
|
||||
|
||||
void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info)
|
||||
|
@ -107,17 +144,10 @@ void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info)
|
|||
TRACE();
|
||||
|
||||
gchar ** argv;
|
||||
const gchar * link_name = nautilus_file_info_get_uri(file_info) + URI_OFFSET;
|
||||
gchar * target = g_malloc(PATH_LENGTH_BYTES);
|
||||
|
||||
/* unlike readlink(man 2), realpath(man 3) resolves the symlink, while
|
||||
* readlink returns the pointed file, which might be a relative path
|
||||
* Xref: <http://www.gnu.org/software/libc/manual/html_node/Symbolic-Links.html>
|
||||
*/
|
||||
if (NULL == realpath(link_name, target)) {
|
||||
g_printf("ERROR in realpath(): %s\n", strerror(errno));
|
||||
g_assert( FALSE );
|
||||
}
|
||||
const GnomeVFSFileInfo * gfi = nautilus_file_info_get_vfs_file_info(file_info);
|
||||
// See /usr/include/gnome-vfs-2.0/libgnomevfs/gnome-vfs-file-info.h,
|
||||
// this one is the "realpath()" (3), also it isn0t urlencoded
|
||||
const gchar const * target = gfi->symlink_name;
|
||||
|
||||
const gchar const * BASE_CMD = "nautilus --no-desktop --no-default-window '%s'";
|
||||
gchar * command_line = g_malloc( sizeof(gchar) * ( strlen(BASE_CMD) + strlen(target) + 1 ) );
|
||||
|
@ -129,7 +159,12 @@ void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info)
|
|||
|
||||
g_printf("nautilus-follow-symlink: Spawning nautilus with\n '%s'\n", command_line);
|
||||
|
||||
g_spawn_async( nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET,
|
||||
const gchar * cwd = ".";
|
||||
// FIXME: const gchar * cwd = nautilus_file_info_get_parent_uri(file_info) + URI_OFFSET;
|
||||
// TODO: does the cwd used for spawn have any side-effect ?
|
||||
FSL_LOG_SPRINTF1 ("\tusing pwd=%s\n", cwd );
|
||||
|
||||
g_spawn_async( cwd,
|
||||
argv,
|
||||
NULL,
|
||||
G_SPAWN_SEARCH_PATH,
|
||||
|
@ -138,7 +173,6 @@ void fsl_callback (NautilusMenuItem * item, NautilusFileInfo * file_info)
|
|||
g_free(command_line);
|
||||
g_strfreev(argv);
|
||||
}
|
||||
|
||||
/* Create the new menu item */
|
||||
NautilusMenuItem *
|
||||
fsl_menu_item_new(GdkScreen *screen, gboolean is_file_item, const gchar * base_name)
|
||||
|
@ -171,8 +205,16 @@ fsl_menu_item_new(GdkScreen *screen, gboolean is_file_item, const gchar * base_n
|
|||
g_sprintf(tooltip, fmt_tooltip, base_name);
|
||||
}
|
||||
|
||||
// Trial and error shows that the menu item name must be different
|
||||
// when various are to be shown, and also that the name should always be
|
||||
// the same for a given file
|
||||
static const gchar * ITEM_NAME_FMT = "FsymlinkExtension::follow_symlink_%s";
|
||||
// TODO: Check g_alloca() error conditions
|
||||
gchar * unique_name = g_alloca(strlen(ITEM_NAME_FMT) + strlen(base_name)); // 10 = strlen("4294967296"));
|
||||
g_sprintf(unique_name, ITEM_NAME_FMT, base_name);
|
||||
// (name, label, tip, icon)
|
||||
ret = nautilus_menu_item_new("FsymlinkExtension::follow_symlink",
|
||||
ret = nautilus_menu_item_new(//"FsymlinkExtension::follow_symlink",
|
||||
unique_name,
|
||||
name, tooltip, NULL);
|
||||
g_free(name);
|
||||
g_free(tooltip);
|
||||
|
|
|
@ -11,10 +11,9 @@
|
|||
#include <libnautilus-extension/nautilus-menu-provider.h>
|
||||
|
||||
#include <glib/gprintf.h>
|
||||
#include <sys/stat.h>
|
||||
#include <errno.h> /* errno (3) */
|
||||
#include <stdlib.h> /* realpath() (3) */
|
||||
#include <string.h> /* strlen(), strerror() (3) */
|
||||
#include <assert.h>
|
||||
|
||||
/* Static Prototypes */
|
||||
|
||||
|
@ -24,10 +23,12 @@ static GList * fsl_get_file_items(NautilusMenuProvider *, GtkWidget *, GList *);
|
|||
|
||||
static GList * fsl_get_background_items(NautilusMenuProvider *, GtkWidget *, NautilusFileInfo *);
|
||||
|
||||
static GList * fsl_get_items_impl(GtkWidget *, NautilusFileInfo *, gboolean);
|
||||
static __inline GList * fsl_get_items_impl(GtkWidget *, NautilusFileInfo *, gboolean,GList*);
|
||||
|
||||
static NautilusMenuItem * fsl_menu_item_new(GdkScreen *, gboolean, const gchar *);
|
||||
|
||||
static __inline gboolean file_is_directory(gpointer);
|
||||
|
||||
/* Exported Prototypes
|
||||
* Here the namespace is a bit more explicit just in case
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue