[nautilus-actions/file-manager-actions] Automatically generates plugins for available file-managers
- From: Pierre Wieser <pwieser src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus-actions/file-manager-actions] Automatically generates plugins for available file-managers
- Date: Thu, 10 Sep 2015 10:24:33 +0000 (UTC)
commit f2b81595d7a9a764972bf57ebd89f57d2093346a
Author: Pierre Wieser <pwieser trychlos org>
Date: Wed Sep 9 17:52:12 2015 +0200
Automatically generates plugins for available file-managers
- configure.ac: adapt output summary for several file-managers
- m4/fma-file-manager.m4: identify candidate file-managers
- maintainer/run-autogen.sh: set Nemo option
- src/api/fma-fm-defines.h: gather file-manager differences
- src/api/Makefile.am: updated accordingly
- src/core/fma-selected-info.c, src/core/fma-selected-info.h: move file-manager dedicated functions to
the plugins
- src/plugin-menu/Makefile.am: generate the plugin for all available file-managers
- src/plugin-menu/fma-menu-module.c: updated accordingly
- src/plugin-menu/fma-menu-plugin.c: update accordingly.
configure.ac | 13 +-
m4/fma-file-manager.m4 | 59 ++++++--
maintainer/run-autogen.sh | 1 +
src/api/Makefile.am | 1 +
src/api/fma-fm-defines.h | 92 +++++++++++
src/core/fma-selected-info.c | 64 +--------
src/core/fma-selected-info.h | 16 +-
src/plugin-menu/Makefile.am | 34 ++++-
src/plugin-menu/fma-menu-module.c | 29 +++-
src/plugin-menu/fma-menu-plugin.c | 310 ++++++++++++++++++++++---------------
10 files changed, 390 insertions(+), 229 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 6398c75..91605c8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -188,13 +188,14 @@ $as_echo "
Build system type ${ac_cv_build}
Gtk+ version ${GTK3_msg_version}
GLib version ${GLIB_msg_version}
- Default I/O provider ${with_default_io_provider}
- Targeted file-manager ${enable_file_manager}"
-if test "${enable_file_manager}" = "nautilus"; then
- $as_echo " Nautilus extensions directory ${with_nautilus_extdir}"
+ Default I/O provider ${with_default_io_provider}"
+if test "${with_nautilus_ok}" = "yes"; then
+ $as_echo " Targeting Nautilus
+ installing extensions in ${with_nautilus_extdir}"
fi
-if test "${enable_file_manager}" = "nemmo"; then
- $as_echo " Nemo extensions directory ${with_nemo_extdir}"
+if test "${with_nemo_ok}" = "yes"; then
+ $as_echo " Targeting Nemo
+ installing extensions in ${with_nemo_extdir}"
fi
$as_echo " GConf enabled ${enable_gconf}"
if test "${enable_gconf}" = "yes"; then
diff --git a/m4/fma-file-manager.m4 b/m4/fma-file-manager.m4
index 06a3531..3fb5353 100644
--- a/m4/fma-file-manager.m4
+++ b/m4/fma-file-manager.m4
@@ -25,6 +25,25 @@
# Pierre Wieser <pwieser trychlos org>
# ... and many others (see AUTHORS)
+dnl
+dnl Managing an other file manager begins here.
+dnl ===========================================
+dnl 1. update fma_required_versions with the minimal version of the
+dnl file manager
+dnl 2. in macro FMA_TARGET_FILE_MANAGER, add a line to call a (new)
+dnl macro _AC_FMA_WITH_<filemanager>
+dnl 3. define the new macro _AC_FMA_WITH_<filemanager> below in this
+dnl file
+dnl 4. define a new m4/fma-fm-<filemanager>.m4 macro file to check for
+dnl the presence of the extension library/api
+dnl 5. update configure.ac for the final output summary
+dnl 6. update src/api/fma-fm-defines.h with the adhoc variable types
+dnl and the function names
+dnl 7. update src/plugin-menu/Makefile.am
+dnl 8. update src/plugin-tracker/Makefile.am
+dnl 9. thoroughly test!
+dnl
+
# serial 3 renamed as FMA_TARGET_FILE_MANAGER
dnl Usage: FMA_TARGET_FILE_MANAGER
@@ -39,16 +58,29 @@ dnl configured via relative macros.
dnl
AC_DEFUN([FMA_TARGET_FILE_MANAGER],[
+ let fma_fm_candidate=0
let fma_fm_count=0
- AC_REQUIRE([_AC_FMA_WITH_NAUTILUS])
- AC_REQUIRE([_AC_FMA_WITH_NEMO])
+ _AC_FMA_WITH_NAUTILUS
+ _AC_FMA_WITH_NEMO
if test ${fma_fm_count} -eq 0; then
_FMA_CHECK_MODULE_MSG([yes],[No suitable target file manager found])
fi
])
+# define a --with<file-manager> option
+# (E): 1: name of the option (full lower-case, eg: 'nautilus')
+# 2: name of the file manager (may be funny capitalized, eg: 'Nautilus')
+# this macro is successively called for Nautilus and Nemo
+AC_DEFUN([_AC_FMA_WITHAFM],[
+ AC_ARG_WITH([$1],
+ [AS_HELP_STRING([--with-$1],
+ [compile plugins for $2 @<:@default=auto@:>@])],
+ [],
+ [with_$1=auto])
+])
+
# targeting file manager: nautilus
# user may specify --with[out]-nautilus; default is to rely on the
# availability of the extensions libraries/apis
@@ -56,18 +88,18 @@ AC_DEFUN([FMA_TARGET_FILE_MANAGER],[
# supplementary options: --with-nautilus-extdir
AC_DEFUN([_AC_FMA_WITH_NAUTILUS],[
- AC_ARG_WITH([nautilus],
- [AS_HELP_STRING([--with-nautilus],
- [compile plugins for Nautilus @<:@default=auto@:>@])],
- [],
- [with_nautilus=auto])
+ _AC_FMA_WITHAFM([nautilus],[Nautilus])
+
+ let fma_fm_candidate+=1
+ AC_SUBST([NAUTILUS_ID],[${fma_fm_candidate}])
+ AC_SUBST([NAUTILUS_LABEL],[Nautilus])
+ AC_DEFINE_UNQUOTED([NAUTILUS_ID],[${fma_fm_candidate}],[Identify the candidate file manager])
AS_IF([test "$with_nautilus" != "no"],[FMA_CHECK_FOR_NAUTILUS])
dnl AS_ECHO([with_nautilus_ok=${with_nautilus_ok}])
if test "${with_nautilus_ok}" = "yes"; then
let fma_fm_count+=1
- dnl AS_ECHO([fma_fm_count=${fma_fm_count}])
fi
AM_CONDITIONAL([HAVE_NAUTILUS], [test "${with_nautilus_ok}" = "yes"])
@@ -80,11 +112,12 @@ AC_DEFUN([_AC_FMA_WITH_NAUTILUS],[
# supplementary options: --with-nemo-extdir
AC_DEFUN([_AC_FMA_WITH_NEMO],[
- AC_ARG_WITH([nemo],
- [AS_HELP_STRING([--with-nemo],
- [compile plugins for Nemo @<:@default=auto@:>@])],
- [],
- [with_nemo=auto])
+ _AC_FMA_WITHAFM([nemo],[Nemo])
+
+ let fma_fm_candidate+=1
+ AC_SUBST([NEMO_ID],[${fma_fm_candidate}])
+ AC_SUBST([NEMO_LABEL],[Nemo])
+ AC_DEFINE_UNQUOTED([NEMO_ID],[${fma_fm_candidate}],[Identify the candidate file manager])
AS_IF([test "$with_nemo" != "no"],[FMA_CHECK_FOR_NEMO])
diff --git a/maintainer/run-autogen.sh b/maintainer/run-autogen.sh
index 65d2261..ef49db9 100755
--- a/maintainer/run-autogen.sh
+++ b/maintainer/run-autogen.sh
@@ -144,6 +144,7 @@ conf_args="${conf_args}"
conf_args="\${conf_args} --prefix=\${heredir}/_install"
conf_args="\${conf_args} --sysconfdir=/etc"
conf_args="\${conf_args} --with-nautilus-extdir=\${heredir}/_install/lib/nautilus"
+conf_args="\${conf_args} --with-nemo-extdir=\${heredir}/_install/lib/nemo"
conf_args="\${conf_args} --enable-maintainer-mode"
conf_args="\${conf_args} $*"
conf_args="\${conf_args} \$*"
diff --git a/src/api/Makefile.am b/src/api/Makefile.am
index 50a30b6..54d4baa 100644
--- a/src/api/Makefile.am
+++ b/src/api/Makefile.am
@@ -42,6 +42,7 @@ api_include_HEADERS = \
fma-data-boxed.h \
fma-data-def.h \
fma-data-types.h \
+ fma-fm-defines.h \
fma-gconf-monitor.h \
fma-gconf-utils.h \
fma-icontext.h \
diff --git a/src/api/fma-fm-defines.h b/src/api/fma-fm-defines.h
new file mode 100644
index 0000000..fe66ebd
--- /dev/null
+++ b/src/api/fma-fm-defines.h
@@ -0,0 +1,92 @@
+/*
+ * FileManager-Actions
+ * A file-manager extension which offers configurable context menu pivots.
+ *
+ * Copyright (C) 2005 The GNOME Foundation
+ * Copyright (C) 2006-2008 Frederic Ruaudel and others (see AUTHORS)
+ * Copyright (C) 2009-2015 Pierre Wieser and others (see AUTHORS)
+ *
+ * FileManager-Actions is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * FileManager-Actions is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with FileManager-Actions; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Frederic Ruaudel <grumz grumz net>
+ * Rodrigo Moya <rodrigo gnome-db org>
+ * Pierre Wieser <pwieser trychlos org>
+ * ... and many others (see AUTHORS)
+ */
+
+#ifndef __FILEMANAGER_ACTIONS_API_FM_DEFINES_H__
+#define __FILEMANAGER_ACTIONS_API_FM_DEFINES_H__
+
+/* @title: FMDefines
+ * @short_description: Definitions suitable for file-managers
+ * @include: filemanager-actions/fma-fm-defines.h
+ */
+
+#if FMA_TARGET_ID == NAUTILUS_ID
+#include <libnautilus-extension/nautilus-extension-types.h>
+#include <libnautilus-extension/nautilus-menu-provider.h>
+#include <libnautilus-extension/nautilus-file-info.h>
+#elif FMA_TARGET_ID == NEMO_ID
+#include <libnemo-extension/nemo-extension-types.h>
+#include <libnemo-extension/nemo-menu-provider.h>
+#include <libnemo-extension/nemo-file-info.h>
+#endif
+
+G_BEGIN_DECLS
+
+#if FMA_TARGET_ID == NAUTILUS_ID
+#define FILE_MANAGER_TYPE_MENU_PROVIDER NAUTILUS_TYPE_MENU_PROVIDER
+#define FILE_MANAGER_MENU_PROVIDER NAUTILUS_MENU_PROVIDER
+#define FILE_MANAGER_IS_MENU NAUTILUS_IS_MENU
+#define FILE_MANAGER_MENU_ITEM NAUTILUS_MENU_ITEM
+#define FILE_MANAGER_FILE_INFO NAUTILUS_FILE_INFO
+#define FileManagerMenuProviderIface NautilusMenuProviderIface
+#define FileManagerMenuProvider NautilusMenuProvider
+#define FileManagerMenuItem NautilusMenuItem
+#define FileManagerMenu NautilusMenu
+#define FileManagerFileInfo NautilusFileInfo
+#define file_manager_menu_new nautilus_menu_new
+#define file_manager_menu_append_item nautilus_menu_append_item
+#define file_manager_menu_item_new nautilus_menu_item_new
+#define file_manager_menu_item_set_submenu nautilus_menu_item_set_submenu
+#define file_manager_menu_item_list_free nautilus_menu_item_list_free
+#define file_manager_file_info_get_uri nautilus_file_info_get_uri
+#define file_manager_file_info_get_mime_type nautilus_file_info_get_mime_type
+#define file_manager_menu_provider_emit_items_updated_signal
nautilus_menu_provider_emit_items_updated_signal
+#elif FMA_TARGET_ID == NEMO_ID
+#define FILE_MANAGER_TYPE_MENU_PROVIDER NEMO_TYPE_MENU_PROVIDER
+#define FILE_MANAGER_MENU_PROVIDER NEMO_MENU_PROVIDER
+#define FILE_MANAGER_IS_MENU NEMO_IS_MENU
+#define FILE_MANAGER_MENU_ITEM NEMO_MENU_ITEM
+#define FILE_MANAGER_FILE_INFO NEMO_FILE_INFO
+#define FileManagerMenuProviderIface NemoMenuProviderIface
+#define FileManagerMenuProvider NemoMenuProvider
+#define FileManagerMenuItem NemoMenuItem
+#define FileManagerMenu NemoMenu
+#define FileManagerFileInfo NemoFileInfo
+#define file_manager_menu_new nemo_menu_new
+#define file_manager_menu_append_item nemo_menu_append_item
+#define file_manager_menu_item_new nemo_menu_item_new
+#define file_manager_menu_item_set_submenu nemo_menu_item_set_submenu
+#define file_manager_menu_item_list_free nemo_menu_item_list_free
+#define file_manager_file_info_get_uri nemo_file_info_get_uri
+#define file_manager_file_info_get_mime_type nemo_file_info_get_mime_type
+#define file_manager_menu_provider_emit_items_updated_signal nemo_menu_provider_emit_items_updated_signal
+#endif
+
+G_END_DECLS
+
+#endif /* __FILEMANAGER_ACTIONS_API_FM_DEFINES_H__ */
diff --git a/src/core/fma-selected-info.c b/src/core/fma-selected-info.c
index feec8bf..2ffcf49 100644
--- a/src/core/fma-selected-info.c
+++ b/src/core/fma-selected-info.c
@@ -31,6 +31,7 @@
#include <config.h>
#endif
+#include <gio/gio.h>
#include <glib/gi18n.h>
#include <string.h>
@@ -75,7 +76,6 @@ static void instance_finalize( GObject *object );
static void dump( const FMASelectedInfo *nsi );
static const char *dump_file_type( GFileType type );
-static FMASelectedInfo *new_from_nautilus_file_info( NautilusFileInfo *item );
static FMASelectedInfo *new_from_uri( const gchar *uri, const gchar *mimetype, gchar **errmsg );
static void query_file_attributes( FMASelectedInfo *info, GFile *location, gchar **errmsg );
@@ -204,54 +204,6 @@ instance_finalize( GObject *object )
}
/*
- * fma_selected_info_get_list_from_item:
- * @item: a #NautilusFileInfo item
- *
- * Returns: a #GList list which contains a #FMASelectedInfo item with the
- * same URI that the @item.
- */
-GList *
-fma_selected_info_get_list_from_item( NautilusFileInfo *item )
-{
- GList *selected;
-
- selected = NULL;
- FMASelectedInfo *info = new_from_nautilus_file_info( item );
-
- if( info ){
- selected = g_list_prepend( NULL, info );
- }
-
- return( selected );
-}
-
-/*
- * fma_selected_info_get_list_from_list:
- * @nautilus_selection: a #GList list of #NautilusFileInfo items.
- *
- * Returns: a #GList list of #FMASelectedInfo items whose URI correspond
- * to those of @nautilus_selection.
- */
-GList *
-fma_selected_info_get_list_from_list( GList *nautilus_selection )
-{
- GList *selected;
- GList *it;
-
- selected = NULL;
-
- for( it = nautilus_selection ; it ; it = it->next ){
- FMASelectedInfo *info = new_from_nautilus_file_info( NAUTILUS_FILE_INFO( it->data ));
-
- if( info ){
- selected = g_list_prepend( selected, info );
- }
- }
-
- return( selected ? g_list_reverse( selected ) : NULL );
-}
-
-/*
* fma_selected_info_copy_list:
* @files: a #GList list of #FMASelectedInfo items.
*
@@ -672,7 +624,7 @@ fma_selected_info_is_writable( const FMASelectedInfo *nsi )
/*
* fma_selected_info_create_for_uri:
* @uri: an URI.
- * @mimetype: the corresponding Nautilus mime type, or %NULL.
+ * @mimetype: the corresponding mime type, or %NULL.
* @errmsg: a pointer to a string which will contain an error message on
* return.
*
@@ -734,18 +686,6 @@ dump_file_type( GFileType type )
return( "unknown" );
}
-static FMASelectedInfo *
-new_from_nautilus_file_info( NautilusFileInfo *item )
-{
- gchar *uri = nautilus_file_info_get_uri( item );
- gchar *mimetype = nautilus_file_info_get_mime_type( item );
- FMASelectedInfo *info = new_from_uri( uri, mimetype, NULL );
- g_free( mimetype );
- g_free( uri );
-
- return( info );
-}
-
/*
* Nautilus uses to address the desktop via the 'x-nautilus-desktop:///' URI.
* g_filename_from_uri() complains that
diff --git a/src/core/fma-selected-info.h b/src/core/fma-selected-info.h
index dc6fda2..a3f7ba8 100644
--- a/src/core/fma-selected-info.h
+++ b/src/core/fma-selected-info.h
@@ -34,16 +34,16 @@
* @short_description: The #FMASelectedInfo Class Definition
* @include: core/fma-selected-info.h
*
- * An object is instantiated for each Nautilus selected item, in order
- * to gather some common properties for the selected item, mainly its
- * mime type for example.
+ * An object is instantiated for each Nautilus/Nemo selected item, in
+ * order to gather some common properties for the selected item, mainly
+ * its mime type for example.
*
- * This class should be replaced by NautilusFileInfo class, as soon as
- * the required Nautilus version will have the
- * nautilus_file_info_create_for_uri() API (after 2.28)
+ * This class should be replaced by Nautilus/NemoFileInfo class, as soon
+ * as the required Nautilus/Nemo version will have the
+ * nautilus/nemo_file_info_create_for_uri() API (2.28 for Nautilus)
*/
-#include <libnautilus-extension/nautilus-file-info.h>
+#include <glib-object.h>
G_BEGIN_DECLS
@@ -74,8 +74,6 @@ typedef struct {
GType fma_selected_info_get_type ( void );
-GList *fma_selected_info_get_list_from_item( NautilusFileInfo *item );
-GList *fma_selected_info_get_list_from_list( GList *nautilus_selection );
GList *fma_selected_info_copy_list ( GList *files );
void fma_selected_info_free_list ( GList *files );
diff --git a/src/plugin-menu/Makefile.am b/src/plugin-menu/Makefile.am
index f6d7122..a23eae0 100644
--- a/src/plugin-menu/Makefile.am
+++ b/src/plugin-menu/Makefile.am
@@ -32,23 +32,43 @@ AM_CPPFLAGS += \
$(NAUTILUS_ACTIONS_CFLAGS) \
$(NULL)
-nautilus_extensiondir = $(NAUTILUS_EXTENSIONS_DIR)
-
-nautilus_extension_LTLIBRARIES = libfma-menu.la
-
-libfma_menu_la_SOURCES = \
+lib_sources = \
fma-menu-module.c
\
fma-menu-plugin.c
\
fma-menu-plugin.h
\
$(NULL)
-libfma_menu_la_LIBADD = \
+lib_libadd = \
$(top_builddir)/src/core/libfma-core.la \
$(NAUTILUS_ACTIONS_LIBS) \
$(NULL)
-libfma_menu_la_LDFLAGS = \
+lib_ldflags = \
-module
\
-no-undefined
\
-avoid-version
\
$(NULL)
+
+if HAVE_NAUTILUS
+nautilus_extensiondir = $(NAUTILUS_EXTENSIONS_DIR)
+nautilus_extension_LTLIBRARIES = libfma-nautilus-menu.la
+libfma_nautilus_menu_la_SOURCES = $(lib_sources)
+libfma_nautilus_menu_la_LIBADD = $(lib_libadd)
+libfma_nautilus_menu_la_LDFLAGS = $(lib_ldflags)
+libfma_nautilus_menu_la_CPPFLAGS = $(AM_CPPFLAGS) \
+ -DFMA_TARGET_ID=$(NAUTILUS_ID) \
+ -DFMA_TARGET_LABEL=\"$(NAUTILUS_LABEL)\" \
+ $(NULL)
+endif
+
+if HAVE_NEMO
+nemo_extensiondir = $(NEMO_EXTENSIONS_DIR)
+nemo_extension_LTLIBRARIES = libfma-nemo-menu.la
+libfma_nemo_menu_la_SOURCES = $(lib_sources)
+libfma_nemo_menu_la_LIBADD = $(lib_libadd)
+libfma_nemo_menu_la_LDFLAGS = $(lib_ldflags)
+libfma_nemo_menu_la_CPPFLAGS = $(AM_CPPFLAGS) \
+ -DFMA_TARGET_ID=$(NEMO_ID) \
+ -DFMA_TARGET_LABEL=\"$(NEMO_LABEL)\" \
+ $(NULL)
+endif
diff --git a/src/plugin-menu/fma-menu-module.c b/src/plugin-menu/fma-menu-module.c
index 89db6af..d218d99 100644
--- a/src/plugin-menu/fma-menu-module.c
+++ b/src/plugin-menu/fma-menu-module.c
@@ -35,7 +35,7 @@
#include <syslog.h>
#include <unistd.h>
-#include <libnautilus-extension/nautilus-extension-types.h>
+#include <api/fma-fm-defines.h>
#include <core/fma-gconf-migration.h>
#include <core/fma-settings.h>
@@ -48,21 +48,24 @@ static void log_handler( const gchar *log_domain, GLogLevelFlags log_level, cons
static GLogFunc st_default_log_func = NULL;
/*
- * A nautilus extension must implement three functions :
+ * A nautilus/nemo extension must implement three functions :
*
- * - fma_menu_module_initialize
- * - fma_menu_module_list_types
- * - fma_menu_module_shutdown
+ * - xxx_module_initialize
+ * - xxx_module_list_types
+ * - xxx_module_shutdown
*
* The first two functions are called at nautilus startup.
*
* The prototypes for these functions are defined in nautilus-extension-types.h
*/
-
void
+#if FMA_TARGET_ID == NAUTILUS_ID
nautilus_module_initialize( GTypeModule *module )
+#elif FMA_TARGET_ID == NEMO_ID
+nemo_module_initialize( GTypeModule *module )
+#endif
{
- static const gchar *thisfn = "fma_menu_module_nautilus_module_initialize";
+ static const gchar *thisfn = "fma_menu_module_" FMA_TARGET_LABEL "_module_initialize";
syslog( LOG_USER | LOG_INFO, "[FMA] %s Menu Extender %s initializing...", PACKAGE_NAME,
PACKAGE_VERSION );
@@ -82,9 +85,13 @@ nautilus_module_initialize( GTypeModule *module )
}
void
+#if FMA_TARGET_ID == NAUTILUS_ID
nautilus_module_list_types( const GType **types, int *num_types )
+#elif FMA_TARGET_ID == NEMO_ID
+nemo_module_list_types( const GType **types, int *num_types )
+#endif
{
- static const gchar *thisfn = "fma_menu_module_nautilus_module_list_types";
+ static const gchar *thisfn = "fma_menu_module_" FMA_TARGET_LABEL "_module_list_types";
static GType type_list[1];
g_debug( "%s: types=%p, num_types=%p", thisfn, ( void * ) types, ( void * ) num_types );
@@ -98,9 +105,13 @@ nautilus_module_list_types( const GType **types, int *num_types )
}
void
+#if FMA_TARGET_ID == NAUTILUS_ID
nautilus_module_shutdown( void )
+#elif FMA_TARGET_ID == NEMO_ID
+nemo_module_shutdown( void )
+#endif
{
- static const gchar *thisfn = "fma_menu_module_nautilus_module_shutdown";
+ static const gchar *thisfn = "fma_menu_module_" FMA_TARGET_LABEL "_module_shutdown";
g_debug( "%s", thisfn );
diff --git a/src/plugin-menu/fma-menu-plugin.c b/src/plugin-menu/fma-menu-plugin.c
index 308a8cb..81996e4 100644
--- a/src/plugin-menu/fma-menu-plugin.c
+++ b/src/plugin-menu/fma-menu-plugin.c
@@ -32,14 +32,10 @@
#endif
#include <string.h>
-
#include <glib/gi18n.h>
-#include <libnautilus-extension/nautilus-extension-types.h>
-#include <libnautilus-extension/nautilus-file-info.h>
-#include <libnautilus-extension/nautilus-menu-provider.h>
-
#include <api/fma-core-utils.h>
+#include <api/fma-fm-defines.h>
#include <api/fma-object-api.h>
#include <api/fma-timeout.h>
@@ -59,10 +55,10 @@ struct _FMAMenuPluginClassPrivate {
/* private instance data
*/
struct _FMAMenuPluginPrivate {
- gboolean dispose_has_run;
+ gboolean dispose_has_run;
FMAPivot *pivot;
- gulong items_changed_handler;
- gulong settings_changed_handler;
+ gulong items_changed_handler;
+ gulong settings_changed_handler;
FMATimeout change_timeout;
};
@@ -70,41 +66,39 @@ static GObjectClass *st_parent_class = NULL;
static GType st_actions_type = 0;
static gint st_burst_timeout = 100; /* burst timeout in msec */
-static void class_init( FMAMenuPluginClass *klass );
-static void instance_init( GTypeInstance *instance, gpointer klass );
-static void instance_constructed( GObject *object );
-static void instance_dispose( GObject *object );
-static void instance_finalize( GObject *object );
-
-static void menu_provider_iface_init( NautilusMenuProviderIface *iface );
-static GList *menu_provider_get_background_items( NautilusMenuProvider *provider, GtkWidget
*window, NautilusFileInfo *current_folder );
-static GList *menu_provider_get_file_items( NautilusMenuProvider *provider, GtkWidget *window,
GList *files );
-
-#ifdef HAVE_NAUTILUS_MENU_PROVIDER_GET_TOOLBAR_ITEMS
-static GList *menu_provider_get_toolbar_items( NautilusMenuProvider *provider, GtkWidget *window,
NautilusFileInfo *current_folder );
+static void class_init( FMAMenuPluginClass *klass );
+static void instance_init( GTypeInstance *instance, gpointer klass );
+static void instance_constructed( GObject *object );
+static void instance_dispose( GObject *object );
+static void instance_finalize( GObject *object );
+static void menu_provider_iface_init( FileManagerMenuProviderIface *iface );
+static GList *menu_provider_get_background_items( FileManagerMenuProvider *provider, GtkWidget
*window, FileManagerFileInfo *current_folder );
+static GList *menu_provider_get_file_items( FileManagerMenuProvider *provider, GtkWidget
*window, GList *files );
+#if defined( HAVE_NAUTILUS_MENU_PROVIDER_GET_TOOLBAR_ITEMS ) || \
+ defined( HAVE_NEMO_MENU_PROVIDER_GET_TOOLBAR_ITEMS )
+static GList *menu_provider_get_toolbar_items( FileManagerMenuProvider *provider, GtkWidget
*window, FileManagerFileInfo *current_folder );
#endif
-
-static GList *build_nautilus_menu( FMAMenuPlugin *plugin, guint target, GList *selection );
-static GList *build_nautilus_menu_rec( GList *tree, guint target, GList *selection, FMATokens
*tokens );
-static FMAObjectItem *expand_tokens_item( const FMAObjectItem *item, FMATokens *tokens );
-static void expand_tokens_context( FMAIContext *context, FMATokens *tokens );
-static FMAObjectProfile *get_candidate_profile( FMAObjectAction *action, guint target, GList *files );
-static NautilusMenuItem *create_item_from_profile( FMAObjectProfile *profile, guint target, GList *files,
FMATokens *tokens );
-static NautilusMenuItem *create_item_from_menu( FMAObjectMenu *menu, GList *subitems, guint target );
-static NautilusMenuItem *create_menu_item( const FMAObjectItem *item, guint target );
-static void weak_notify_menu_item( void *user_data /* =NULL */, NautilusMenuItem *item );
-static void attach_submenu_to_item( NautilusMenuItem *item, GList *subitems );
-static void weak_notify_profile( FMAObjectProfile *profile, NautilusMenuItem *item );
-
-static void execute_action( NautilusMenuItem *item, FMAObjectProfile *profile );
-
-static GList *create_root_menu( FMAMenuPlugin *plugin, GList *nautilus_menu );
-static GList *add_about_item( FMAMenuPlugin *plugin, GList *nautilus_menu );
-static void execute_about( NautilusMenuItem *item, FMAMenuPlugin *plugin );
-
-static void on_pivot_items_changed_handler( FMAPivot *pivot, FMAMenuPlugin *plugin );
-static void on_settings_key_changed_handler( const gchar *group, const gchar *key,
gconstpointer new_value, gboolean mandatory, FMAMenuPlugin *plugin );
-static void on_change_event_timeout( FMAMenuPlugin *plugin );
+static GList *selected_info_get_list_from_item( FileManagerFileInfo *item );
+static GList *selected_info_get_list_from_list( GList *selection );
+static FMASelectedInfo *new_from_file_manager_file_info( FileManagerFileInfo *item );
+static GList *build_filemanager_menu( FMAMenuPlugin *plugin, guint target, GList *selection );
+static GList *build_filemanager_menu_rec( GList *tree, guint target, GList *selection,
FMATokens *tokens );
+static void attach_submenu_to_item( FileManagerMenuItem *item, GList *subitems );
+static void weak_notify_profile( FMAObjectProfile *profile, FileManagerMenuItem *item );
+static void execute_action( FileManagerMenuItem *item, FMAObjectProfile *profile );
+static void execute_about( FileManagerMenuItem *item, FMAMenuPlugin *plugin );
+static FileManagerMenuItem *create_item_from_profile( FMAObjectProfile *profile, guint target, GList *files,
FMATokens *tokens );
+static FileManagerMenuItem *create_item_from_menu( FMAObjectMenu *menu, GList *subitems, guint target );
+static FileManagerMenuItem *create_menu_item( const FMAObjectItem *item, guint target );
+static FMAObjectItem *expand_tokens_item( const FMAObjectItem *item, FMATokens *tokens );
+static void expand_tokens_context( FMAIContext *context, FMATokens *tokens );
+static FMAObjectProfile *get_candidate_profile( FMAObjectAction *action, guint target, GList *files );
+static GList *create_root_menu( FMAMenuPlugin *plugin, GList *filemanager_menu );
+static void weak_notify_menu_item( void *user_data /* =NULL */, FileManagerMenuItem *item );
+static GList *add_about_item( FMAMenuPlugin *plugin, GList *filemanager_menu );
+static void on_pivot_items_changed_handler( FMAPivot *pivot, FMAMenuPlugin *plugin );
+static void on_settings_key_changed_handler( const gchar *group, const gchar *key,
gconstpointer new_value, gboolean mandatory, FMAMenuPlugin *plugin );
+static void on_change_event_timeout( FMAMenuPlugin *plugin );
GType
fma_menu_plugin_get_type( void )
@@ -140,9 +134,11 @@ fma_menu_plugin_register_type( GTypeModule *module )
g_debug( "%s: module=%p", thisfn, ( void * ) module );
- st_actions_type = g_type_module_register_type( module, G_TYPE_OBJECT, "FMAMenuPlugin", &info, 0 );
+ st_actions_type = g_type_module_register_type(
+ module, G_TYPE_OBJECT, "FMAMenuPlugin", &info, 0 );
- g_type_module_add_interface( module, st_actions_type, NAUTILUS_TYPE_MENU_PROVIDER,
&menu_provider_iface_info );
+ g_type_module_add_interface(
+ module, st_actions_type, FILE_MANAGER_TYPE_MENU_PROVIDER, &menu_provider_iface_info );
}
static void
@@ -307,7 +303,7 @@ instance_finalize( GObject *object )
}
static void
-menu_provider_iface_init( NautilusMenuProviderIface *iface )
+menu_provider_iface_init( FileManagerMenuProviderIface *iface )
{
static const gchar *thisfn = "fma_menu_plugin_menu_provider_iface_init";
@@ -316,7 +312,8 @@ menu_provider_iface_init( NautilusMenuProviderIface *iface )
iface->get_file_items = menu_provider_get_file_items;
iface->get_background_items = menu_provider_get_background_items;
-#ifdef HAVE_NAUTILUS_MENU_PROVIDER_GET_TOOLBAR_ITEMS
+#if defined( HAVE_NAUTILUS_MENU_PROVIDER_GET_TOOLBAR_ITEMS ) || \
+ defined( HAVE_NEMO_MENU_PROVIDER_GET_TOOLBAR_ITEMS )
iface->get_toolbar_items = menu_provider_get_toolbar_items;
#endif
}
@@ -339,10 +336,11 @@ menu_provider_iface_init( NautilusMenuProviderIface *iface )
* to the display of actions.
*/
static GList *
-menu_provider_get_background_items( NautilusMenuProvider *provider, GtkWidget *window, NautilusFileInfo
*current_folder )
+menu_provider_get_background_items(
+ FileManagerMenuProvider *provider, GtkWidget *window, FileManagerFileInfo *current_folder )
{
static const gchar *thisfn = "fma_menu_plugin_menu_provider_get_background_items";
- GList *nautilus_menus_list = NULL;
+ GList *filemanager_menus_list = NULL;
gchar *uri;
GList *selected;
@@ -350,10 +348,10 @@ menu_provider_get_background_items( NautilusMenuProvider *provider, GtkWidget *w
if( !FMA_MENU_PLUGIN( provider )->private->dispose_has_run ){
- selected = fma_selected_info_get_list_from_item( current_folder );
+ selected = selected_info_get_list_from_item( current_folder );
if( selected ){
- uri = nautilus_file_info_get_uri( current_folder );
+ uri = file_manager_file_info_get_uri( current_folder );
g_debug( "%s: provider=%p, window=%p, current_folder=%p (%s)",
thisfn,
( void * ) provider,
@@ -361,7 +359,7 @@ menu_provider_get_background_items( NautilusMenuProvider *provider, GtkWidget *w
( void * ) current_folder, uri );
g_free( uri );
- nautilus_menus_list = build_nautilus_menu(
+ filemanager_menus_list = build_filemanager_menu(
FMA_MENU_PLUGIN( provider ),
ITEM_TARGET_LOCATION,
selected );
@@ -370,7 +368,7 @@ menu_provider_get_background_items( NautilusMenuProvider *provider, GtkWidget *w
}
}
- return( nautilus_menus_list );
+ return( filemanager_menus_list );
}
/*
@@ -380,10 +378,10 @@ menu_provider_get_background_items( NautilusMenuProvider *provider, GtkWidget *w
* b) in contextual menu while the selection stays unchanged
*/
static GList *
-menu_provider_get_file_items( NautilusMenuProvider *provider, GtkWidget *window, GList *files )
+menu_provider_get_file_items( FileManagerMenuProvider *provider, GtkWidget *window, GList *files )
{
static const gchar *thisfn = "fma_menu_plugin_menu_provider_get_file_items";
- GList *nautilus_menus_list = NULL;
+ GList *filemanager_menus_list = NULL;
GList *selected;
g_return_val_if_fail( FMA_IS_MENU_PLUGIN( provider ), NULL );
@@ -395,7 +393,7 @@ menu_provider_get_file_items( NautilusMenuProvider *provider, GtkWidget *window,
return(( GList * ) NULL );
}
- selected = fma_selected_info_get_list_from_list(( GList * ) files );
+ selected = selected_info_get_list_from_list(( GList * ) files );
if( selected ){
g_debug( "%s: provider=%p, window=%p, files=%p, count=%d",
@@ -407,15 +405,15 @@ menu_provider_get_file_items( NautilusMenuProvider *provider, GtkWidget *window,
#ifdef NA_MAINTAINER_MODE
GList *im;
for( im = files ; im ; im = im->next ){
- gchar *uri = nautilus_file_info_get_uri( NAUTILUS_FILE_INFO( im->data ));
- gchar *mimetype = nautilus_file_info_get_mime_type( NAUTILUS_FILE_INFO(
im->data ));
+ gchar *uri = file_manager_file_info_get_uri( FILE_MANAGER_FILE_INFO( im->data
));
+ gchar *mimetype = file_manager_file_info_get_mime_type(
FILE_MANAGER_FILE_INFO( im->data ));
g_debug( "%s: uri='%s', mimetype='%s'", thisfn, uri, mimetype );
g_free( mimetype );
g_free( uri );
}
#endif
- nautilus_menus_list = build_nautilus_menu(
+ filemanager_menus_list = build_filemanager_menu(
FMA_MENU_PLUGIN( provider ),
ITEM_TARGET_SELECTION,
selected );
@@ -424,22 +422,24 @@ menu_provider_get_file_items( NautilusMenuProvider *provider, GtkWidget *window,
}
}
- return( nautilus_menus_list );
+ return( filemanager_menus_list );
}
-#ifdef HAVE_NAUTILUS_MENU_PROVIDER_GET_TOOLBAR_ITEMS
+#if defined( HAVE_NAUTILUS_MENU_PROVIDER_GET_TOOLBAR_ITEMS ) || \
+ defined( HAVE_NEMO_MENU_PROVIDER_GET_TOOLBAR_ITEMS )
/*
* as of 2.26, this function is only called for folders, but for the
* desktop (x-nautilus-desktop:///) which seems to be only called by
* get_background_items ; also, only actions (not menus) are displayed
*
* the API is removed starting with Nautilus 2.91.90
+ * the API is not present as of Nemo 2.6.7
*/
static GList *
-menu_provider_get_toolbar_items( NautilusMenuProvider *provider, GtkWidget *window, NautilusFileInfo
*current_folder )
+menu_provider_get_toolbar_items( FileManagerMenuProvider *provider, GtkWidget *window, FileManagerFileInfo
*current_folder )
{
static const gchar *thisfn = "fma_menu_plugin_menu_provider_get_toolbar_items";
- GList *nautilus_menus_list = NULL;
+ GList *filemanager_menus_list = NULL;
gchar *uri;
GList *selected;
@@ -447,10 +447,10 @@ menu_provider_get_toolbar_items( NautilusMenuProvider *provider, GtkWidget *wind
if( !FMA_MENU_PLUGIN( provider )->private->dispose_has_run ){
- selected = fma_selected_info_get_list_from_item( current_folder );
+ selected = selected_info_get_list_from_item( current_folder );
if( selected ){
- uri = nautilus_file_info_get_uri( current_folder );
+ uri = file_manager_file_info_get_uri( current_folder );
g_debug( "%s: provider=%p, window=%p, current_folder=%p (%s)",
thisfn,
( void * ) provider,
@@ -458,7 +458,7 @@ menu_provider_get_toolbar_items( NautilusMenuProvider *provider, GtkWidget *wind
( void * ) current_folder, uri );
g_free( uri );
- nautilus_menus_list = build_nautilus_menu(
+ filemanager_menus_list = build_filemanager_menu(
FMA_MENU_PLUGIN( provider ),
ITEM_TARGET_TOOLBAR,
selected );
@@ -467,12 +467,72 @@ menu_provider_get_toolbar_items( NautilusMenuProvider *provider, GtkWidget *wind
}
}
- return( nautilus_menus_list );
+ return( filemanager_menus_list );
}
#endif
/*
- * build_nautilus_menu:
+ * selected_info_get_list_from_item:
+ * @item: a #NautilusFileInfo item
+ *
+ * Returns: a #GList list which contains a #FMASelectedInfo item with the
+ * same URI that the @item.
+ */
+static GList *
+selected_info_get_list_from_item( FileManagerFileInfo *item )
+{
+ GList *selected;
+
+ selected = NULL;
+ FMASelectedInfo *info = new_from_file_manager_file_info( item );
+
+ if( info ){
+ selected = g_list_prepend( NULL, info );
+ }
+
+ return( selected );
+}
+
+/*
+ * selected_info_get_list_from_list:
+ * @nautilus_selection: a #GList list of #NautilusFileInfo items.
+ *
+ * Returns: a #GList list of #FMASelectedInfo items whose URI correspond
+ * to those of @nautilus_selection.
+ */
+static GList *
+selected_info_get_list_from_list( GList *selection )
+{
+ GList *selected;
+ GList *it;
+
+ selected = NULL;
+
+ for( it = selection ; it ; it = it->next ){
+ FMASelectedInfo *info = new_from_file_manager_file_info( FILE_MANAGER_FILE_INFO( it->data ));
+
+ if( info ){
+ selected = g_list_prepend( selected, info );
+ }
+ }
+
+ return( selected ? g_list_reverse( selected ) : NULL );
+}
+
+static FMASelectedInfo *
+new_from_file_manager_file_info( FileManagerFileInfo *item )
+{
+ gchar *uri = file_manager_file_info_get_uri( item );
+ gchar *mimetype = file_manager_file_info_get_mime_type( item );
+ FMASelectedInfo *info = fma_selected_info_create_for_uri( uri, mimetype, NULL );
+ g_free( mimetype );
+ g_free( uri );
+
+ return( info );
+}
+
+/*
+ * build_filemanager_menu:
* @target: whether the menu targets a location (a folder) or a selection
* (the list of currently selected items in the file manager)
* @selection: a list of FMASelectedInfo, with:
@@ -481,15 +541,15 @@ menu_provider_get_toolbar_items( NautilusMenuProvider *provider, GtkWidget *wind
* Note: a FMASelectedInfo is just a sort of NautilusFileInfo, with
* some added APIs.
*
- * Build the Nautilus menu as a list of NautilusMenuItem items
+ * Build the Nautilus/Nemo menu as a list of Nautilus/NemoMenuItem items
*
- * Returns: the Nautilus menu
+ * Returns: the Nautilus/Nemo menu list
*/
static GList *
-build_nautilus_menu( FMAMenuPlugin *plugin, guint target, GList *selection )
+build_filemanager_menu( FMAMenuPlugin *plugin, guint target, GList *selection )
{
- static const gchar *thisfn = "fma_menu_plugin_build_nautilus_menu";
- GList *nautilus_menu;
+ static const gchar *thisfn = "fma_menu_plugin_build_filemanager_menu";
+ GList *filemanager_menu;
FMATokens *tokens;
GList *tree;
gboolean items_add_about_item;
@@ -502,7 +562,7 @@ build_nautilus_menu( FMAMenuPlugin *plugin, guint target, GList *selection )
tree = fma_pivot_get_items( plugin->private->pivot );
g_debug( "%s: tree=%p, count=%d", thisfn, ( void * ) tree, g_list_length( tree ));
- nautilus_menu = build_nautilus_menu_rec( tree, target, selection, tokens );
+ filemanager_menu = build_filemanager_menu_rec( tree, target, selection, tokens );
/* the FMATokens object has been attached (and reffed) by each found
* candidate profile, so it will be actually finalized only on actual
@@ -510,36 +570,36 @@ build_nautilus_menu( FMAMenuPlugin *plugin, guint target, GList *selection )
*/
g_object_unref( tokens );
- if( target != ITEM_TARGET_TOOLBAR && nautilus_menu && g_list_length( nautilus_menu )){
+ if( target != ITEM_TARGET_TOOLBAR && filemanager_menu && g_list_length( filemanager_menu )){
items_create_root_menu = fma_settings_get_boolean( IPREFS_ITEMS_CREATE_ROOT_MENU, NULL, NULL
);
if( items_create_root_menu ){
- nautilus_menu = create_root_menu( plugin, nautilus_menu );
+ filemanager_menu = create_root_menu( plugin, filemanager_menu );
items_add_about_item = fma_settings_get_boolean( IPREFS_ITEMS_ADD_ABOUT_ITEM, NULL,
NULL );
if( items_add_about_item ){
- nautilus_menu = add_about_item( plugin, nautilus_menu );
+ filemanager_menu = add_about_item( plugin, filemanager_menu );
}
}
}
- return( nautilus_menu );
+ return( filemanager_menu );
}
static GList *
-build_nautilus_menu_rec( GList *tree, guint target, GList *selection, FMATokens *tokens )
+build_filemanager_menu_rec( GList *tree, guint target, GList *selection, FMATokens *tokens )
{
- static const gchar *thisfn = "fma_menu_plugin_build_nautilus_menu_rec";
- GList *nautilus_menu;
+ static const gchar *thisfn = "fma_menu_plugin_build_filemanager_menu_rec";
+ GList *filemanager_menu;
GList *it;
GList *subitems;
FMAObjectItem *item;
GList *submenu;
FMAObjectProfile *profile;
- NautilusMenuItem *menu_item;
+ FileManagerMenuItem *menu_item;
gchar *label;
- nautilus_menu = NULL;
+ filemanager_menu = NULL;
for( it=tree ; it ; it=it->next ){
@@ -574,16 +634,16 @@ build_nautilus_menu_rec( GList *tree, guint target, GList *selection, FMATokens
subitems = fma_object_get_items( FMA_OBJECT( it->data ));
g_debug( "%s: menu has %d items", thisfn, g_list_length( subitems ));
- submenu = build_nautilus_menu_rec( subitems, target, selection, tokens );
+ submenu = build_filemanager_menu_rec( subitems, target, selection, tokens );
g_debug( "%s: submenu has %d items", thisfn, g_list_length( submenu ));
if( submenu ){
if( target == ITEM_TARGET_TOOLBAR ){
- nautilus_menu = g_list_concat( nautilus_menu, submenu );
+ filemanager_menu = g_list_concat( filemanager_menu, submenu );
} else {
menu_item = create_item_from_menu( FMA_OBJECT_MENU( item ), submenu,
target );
- nautilus_menu = g_list_append( nautilus_menu, menu_item );
+ filemanager_menu = g_list_append( filemanager_menu, menu_item );
}
}
g_object_unref( item );
@@ -598,7 +658,7 @@ build_nautilus_menu_rec( GList *tree, guint target, GList *selection, FMATokens
profile = get_candidate_profile( FMA_OBJECT_ACTION( item ), target, selection );
if( profile ){
menu_item = create_item_from_profile( profile, target, selection, tokens );
- nautilus_menu = g_list_append( nautilus_menu, menu_item );
+ filemanager_menu = g_list_append( filemanager_menu, menu_item );
} else {
g_debug( "%s: %s does not have any valid candidate profile", thisfn, label );
@@ -608,7 +668,7 @@ build_nautilus_menu_rec( GList *tree, guint target, GList *selection, FMATokens
g_free( label );
}
- return( nautilus_menu );
+ return( filemanager_menu );
}
/*
@@ -775,10 +835,10 @@ get_candidate_profile( FMAObjectAction *action, guint target, GList *files )
return( candidate );
}
-static NautilusMenuItem *
+static FileManagerMenuItem *
create_item_from_profile( FMAObjectProfile *profile, guint target, GList *files, FMATokens *tokens )
{
- NautilusMenuItem *item;
+ FileManagerMenuItem *item;
FMAObjectAction *action;
FMAObjectProfile *duplicate;
@@ -806,10 +866,10 @@ create_item_from_profile( FMAObjectProfile *profile, guint target, GList *files,
}
/*
- * called _after_ the NautilusMenuItem has been finalized
+ * called _after_ the Nautilus/NemoMenuItem has been finalized
*/
static void
-weak_notify_profile( FMAObjectProfile *profile, NautilusMenuItem *item )
+weak_notify_profile( FMAObjectProfile *profile, FileManagerMenuItem *item )
{
g_debug( "fma_menu_plugin_weak_notify_profile: profile=%p (ref_count=%d)",
( void * ) profile, G_OBJECT( profile )->ref_count );
@@ -822,32 +882,32 @@ weak_notify_profile( FMAObjectProfile *profile, NautilusMenuItem *item )
* we can so safely release our own ref on subitems after having attached
* the submenu
*/
-static NautilusMenuItem *
+static FileManagerMenuItem *
create_item_from_menu( FMAObjectMenu *menu, GList *subitems, guint target )
{
/*static const gchar *thisfn = "fma_menu_plugin_create_item_from_menu";*/
- NautilusMenuItem *item;
+ FileManagerMenuItem *item;
item = create_menu_item( FMA_OBJECT_ITEM( menu ), target );
attach_submenu_to_item( item, subitems );
- nautilus_menu_item_list_free( subitems );
+ file_manager_menu_item_list_free( subitems );
/*g_debug( "%s: returning item=%p", thisfn, ( void * ) item );*/
return( item );
}
/*
- * Creates a NautilusMenuItem
+ * Creates a Nautilus/NemoMenuItem
*
* We attach a weak notify function to the created item in order to be able
* to check for instanciation/finalization cycles
*/
-static NautilusMenuItem *
+static FileManagerMenuItem *
create_menu_item( const FMAObjectItem *item, guint target )
{
- NautilusMenuItem *menu_item;
+ FileManagerMenuItem *menu_item;
gchar *id, *name, *label, *tooltip, *icon;
id = fma_object_get_id( item );
@@ -856,7 +916,7 @@ create_menu_item( const FMAObjectItem *item, guint target )
tooltip = fma_object_get_tooltip( item );
icon = fma_object_get_icon( item );
- menu_item = nautilus_menu_item_new( name, label, tooltip, icon );
+ menu_item = file_manager_menu_item_new( name, label, tooltip, icon );
g_object_weak_ref( G_OBJECT( menu_item ), ( GWeakNotify ) weak_notify_menu_item, NULL );
@@ -870,25 +930,25 @@ create_menu_item( const FMAObjectItem *item, guint target )
}
/*
- * called _after_ the NautilusMenuItem has been finalized
+ * called _after_ the Nautilus/NemoMenuItem has been finalized
*/
static void
-weak_notify_menu_item( void *user_data /* =NULL */, NautilusMenuItem *item )
+weak_notify_menu_item( void *user_data /* =NULL */, FileManagerMenuItem *item )
{
g_debug( "fma_menu_plugin_weak_notify_menu_item: item=%p", ( void * ) item );
}
static void
-attach_submenu_to_item( NautilusMenuItem *item, GList *subitems )
+attach_submenu_to_item( FileManagerMenuItem *item, GList *subitems )
{
- NautilusMenu *submenu;
+ FileManagerMenu *submenu;
GList *it;
- submenu = nautilus_menu_new();
- nautilus_menu_item_set_submenu( item, submenu );
+ submenu = file_manager_menu_new();
+ file_manager_menu_item_set_submenu( item, submenu );
for( it = subitems ; it ; it = it->next ){
- nautilus_menu_append_item( submenu, NAUTILUS_MENU_ITEM( it->data ));
+ file_manager_menu_append_item( submenu, FILE_MANAGER_MENU_ITEM( it->data ));
}
}
@@ -901,7 +961,7 @@ attach_submenu_to_item( NautilusMenuItem *item, GList *subitems )
* the current item of the selection
*/
static void
-execute_action( NautilusMenuItem *item, FMAObjectProfile *profile )
+execute_action( FileManagerMenuItem *item, FMAObjectProfile *profile )
{
static const gchar *thisfn = "fma_menu_plugin_execute_action";
FMATokens *tokens;
@@ -919,8 +979,8 @@ static GList *
create_root_menu( FMAMenuPlugin *plugin, GList *menu )
{
static const gchar *thisfn = "fma_menu_plugin_create_root_menu";
- GList *nautilus_menu;
- NautilusMenuItem *root_item;
+ GList *filemanager_menu;
+ FileManagerMenuItem *root_item;
g_debug( "%s: plugin=%p, menu=%p (%d items)",
thisfn, ( void * ) plugin, ( void * ) menu, g_list_length( menu ));
@@ -929,7 +989,7 @@ create_root_menu( FMAMenuPlugin *plugin, GList *menu )
return( NULL );
}
- root_item = nautilus_menu_item_new(
+ root_item = file_manager_menu_item_new(
"FMAMenuPluginExtensions",
/* i18n: label of an automagic root submenu */
_( "FileManager-Actions actions" ),
@@ -937,9 +997,9 @@ create_root_menu( FMAMenuPlugin *plugin, GList *menu )
_( "A submenu which embeds the currently available FileManager-Actions actions and
menus" ),
fma_about_get_icon_name());
attach_submenu_to_item( root_item, menu );
- nautilus_menu = g_list_append( NULL, root_item );
+ filemanager_menu = g_list_append( NULL, root_item );
- return( nautilus_menu );
+ return( filemanager_menu );
}
/*
@@ -950,11 +1010,11 @@ static GList *
add_about_item( FMAMenuPlugin *plugin, GList *menu )
{
static const gchar *thisfn = "fma_menu_plugin_add_about_item";
- GList *nautilus_menu;
+ GList *filemanager_menu;
gboolean have_root_menu;
- NautilusMenuItem *root_item;
- NautilusMenuItem *about_item;
- NautilusMenu *first;
+ FileManagerMenuItem *root_item;
+ FileManagerMenuItem *about_item;
+ FileManagerMenu *first;
g_debug( "%s: plugin=%p, menu=%p (%d items)",
thisfn, ( void * ) plugin, ( void * ) menu, g_list_length( menu ));
@@ -964,19 +1024,19 @@ add_about_item( FMAMenuPlugin *plugin, GList *menu )
}
have_root_menu = FALSE;
- nautilus_menu = menu;
+ filemanager_menu = menu;
if( g_list_length( menu ) == 1 ){
- root_item = NAUTILUS_MENU_ITEM( menu->data );
+ root_item = FILE_MANAGER_MENU_ITEM( menu->data );
g_object_get( G_OBJECT( root_item ), "menu", &first, NULL );
if( first ){
- g_return_val_if_fail( NAUTILUS_IS_MENU( first ), NULL );
+ g_return_val_if_fail( FILE_MANAGER_IS_MENU( first ), NULL );
have_root_menu = TRUE;
}
}
if( have_root_menu ){
- about_item = nautilus_menu_item_new(
+ about_item = file_manager_menu_item_new(
"AboutFMAMenuPlugin",
_( "About FileManager-Actions" ),
_( "Display some information about FileManager-Actions" ),
@@ -990,14 +1050,14 @@ add_about_item( FMAMenuPlugin *plugin, GList *menu )
NULL,
0 );
- nautilus_menu_append_item( first, about_item );
+ file_manager_menu_append_item( first, about_item );
}
- return( nautilus_menu );
+ return( filemanager_menu );
}
static void
-execute_about( NautilusMenuItem *item, FMAMenuPlugin *plugin )
+execute_about( FileManagerMenuItem *item, FMAMenuPlugin *plugin )
{
g_return_if_fail( FMA_IS_MENU_PLUGIN( plugin ));
@@ -1055,5 +1115,9 @@ on_change_event_timeout( FMAMenuPlugin *plugin )
g_debug( "%s: timeout expired", thisfn );
fma_pivot_load_items( plugin->private->pivot );
- nautilus_menu_provider_emit_items_updated_signal( NAUTILUS_MENU_PROVIDER( plugin ));
+
+#if defined( HAVE_NAUTILUS_MENU_PROVIDER_EMIT_ITEMS_UPDATED_SIGNAL ) || \
+ defined( HAVE_NEMO_MENU_PROVIDER_EMIT_ITEMS_UPDATED_SIGNAL )
+ file_manager_menu_provider_emit_items_updated_signal( FILE_MANAGER_MENU_PROVIDER( plugin ));
+#endif
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]