[nautilus] Move nautilus-sendto extension to nautilus



commit b4aa3c083ab7616f321df4ade75e4d850142eff6
Author: Bastien Nocera <hadess hadess net>
Date:   Fri Oct 29 18:15:47 2010 +0100

    Move nautilus-sendto extension to nautilus
    
    And add a check for the presence of nautilus-sendto to the
    initialisation of the object.
    
    Building the extension is optional, though on by default.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=633485

 Makefile.am                                        |    9 +-
 configure.in                                       |   14 ++
 nautilus-sendto-extension/Makefile.am              |   21 +++
 nautilus-sendto-extension/nautilus-nste.c          |  167 ++++++++++++++++++++
 nautilus-sendto-extension/nautilus-nste.h          |   52 ++++++
 nautilus-sendto-extension/nautilus-sendto-module.c |   56 +++++++
 6 files changed, 318 insertions(+), 1 deletions(-)
---
diff --git a/Makefile.am b/Makefile.am
index 0ccb518..e333c37 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,6 +1,6 @@
 include $(top_srcdir)/Makefile.shared
 
-SUBDIRS =			\
+DIRS =				\
 	eel			\
 	libnautilus-extension	\
 	cut-n-paste-code 	\
@@ -13,6 +13,13 @@ SUBDIRS =			\
 	docs			\
 	$(NULL)
 
+DIST_SUBDIRS = $(DIRS) nautilus-sendto-extension
+
+SUBDIRS = $(DIRS)
+if ENABLE_NST_EXTENSION
+SUBDIRS += nautilus-sendto-extension
+endif
+
 EXTRA_DIST=					\
 	COPYING.LIB				\
 	COPYING.EXTENSIONS			\
diff --git a/configure.in b/configure.in
index 01c5dfb..4d8febb 100644
--- a/configure.in
+++ b/configure.in
@@ -90,6 +90,18 @@ dnl ==========================================================================
 AC_CHECK_PROGS(PERL, perl5 perl)
 AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
 
+
+dnl ==========================================================================
+dnl Check whether to build the nautilus-sendto extension
+
+AC_ARG_ENABLE(nst_extension,
+	AC_HELP_STRING([--disable-nst-extension],
+			[build without nautilus-sendto extension]))
+if test "x$enable_nst_extension" != "xno"; then
+	AM_CONDITIONAL(ENABLE_NST_EXTENSION, true)
+	enable_nst_extension=yes
+fi
+
 dnl ==========================================================================
 
 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/param.h malloc.h)
@@ -371,6 +383,7 @@ libnautilus-extension/libnautilus-extension-uninstalled.pc
 po/Makefile.in
 src/Makefile
 src/file-manager/Makefile
+nautilus-sendto-extension/Makefile
 test/Makefile
 ])
 
@@ -386,6 +399,7 @@ nautilus-$VERSION:
 	libexif support:	$msg_libexif
 	libexempi support:	$msg_xmp
 	PackageKit support:     $msg_packagekit
+	nautilus-sendto ext:	$enable_nst_extension
 
 	profiling support:      ${profiling_support}
 	nautilus-extension documentation: ${enable_gtk_doc}
diff --git a/nautilus-sendto-extension/Makefile.am b/nautilus-sendto-extension/Makefile.am
new file mode 100644
index 0000000..7f8300c
--- /dev/null
+++ b/nautilus-sendto-extension/Makefile.am
@@ -0,0 +1,21 @@
+include $(top_srcdir)/Makefile.shared
+
+INCLUDES=\
+	-I$(top_srcdir) \
+	-I$(top_builddir) \
+	$(BASE_CFLAGS) \
+	$(WARNING_CFLAGS) \
+	$(DISABLE_DEPRECATED_CFLAGS) \
+	-DDATADIR=\""$(datadir)"\" \
+	$(NULL)
+
+nautilus_extensiondir = $(libdir)/nautilus/extensions-2.0
+nautilus_extension_LTLIBRARIES = libnautilus-sendto.la
+libnautilus_sendto_la_SOURCES =		\
+	nautilus-nste.c			\
+	nautilus-nste.h			\
+	nautilus-sendto-module.c
+
+libnautilus_sendto_la_LDFLAGS = -module -avoid-version -no-undefined
+libnautilus_sendto_la_LIBADD  = $(top_builddir)/libnautilus-extension/libnautilus-extension.la
+
diff --git a/nautilus-sendto-extension/nautilus-nste.c b/nautilus-sendto-extension/nautilus-nste.c
new file mode 100644
index 0000000..59e042b
--- /dev/null
+++ b/nautilus-sendto-extension/nautilus-nste.c
@@ -0,0 +1,167 @@
+/*
+ *  Nautilus-sendto
+ *
+ *  Copyright (C) 2004 Free Software Foundation, Inc.
+ *
+ *  This library 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.
+ *
+ *  This library 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
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Author: Roberto Majadas <roberto majadas openshine com>
+ *
+ */
+
+#include <config.h>
+#include <string.h>
+#include <glib/gi18n-lib.h>
+#include <libnautilus-extension/nautilus-extension-types.h>
+#include <libnautilus-extension/nautilus-file-info.h>
+#include <libnautilus-extension/nautilus-menu-provider.h>
+#include "nautilus-nste.h"
+
+
+static GObjectClass *parent_class;
+
+static void
+sendto_callback (NautilusMenuItem *item,
+		 gpointer          user_data)
+{
+	GList            *files, *scan;
+	NautilusFileInfo *file;
+	gchar            *uri;
+	GString          *cmd;
+
+	files = g_object_get_data (G_OBJECT (item), "files");
+	file = files->data;
+
+	cmd = g_string_new ("nautilus-sendto");
+
+	for (scan = files; scan; scan = scan->next) {
+		NautilusFileInfo *file = scan->data;
+
+		uri = nautilus_file_info_get_uri (file);
+		g_string_append_printf (cmd, " \"%s\"", uri);
+		g_free (uri);
+	}
+
+	g_spawn_command_line_async (cmd->str, NULL);
+
+	g_string_free (cmd, TRUE);
+}
+
+static GList *
+nautilus_nste_get_file_items (NautilusMenuProvider *provider,
+			      GtkWidget            *window,
+			      GList                *files)
+{
+	GList    *items = NULL;
+	gboolean  one_item;
+	NautilusMenuItem *item;
+	NautilusNste *nste;
+
+	nste = NAUTILUS_NSTE (provider);
+	if (!nste->nst_present)
+		return NULL;
+
+	if (files == NULL)
+		return NULL;
+
+	one_item = (files != NULL) && (files->next == NULL);
+	if (one_item &&
+	    !nautilus_file_info_is_directory ((NautilusFileInfo *)files->data)) {
+		item = nautilus_menu_item_new ("NautilusNste::sendto",
+					       _("Send To..."),
+					       _("Send file by mail, instant message..."),
+					       "document-send");
+	} else {
+		item = nautilus_menu_item_new ("NautilusNste::sendto",
+					       _("Send To..."),
+					       _("Send files by mail, instant message..."),
+					       "document-send");
+	}
+	g_signal_connect (item,
+			  "activate",
+			  G_CALLBACK (sendto_callback),
+			  provider);
+	g_object_set_data_full (G_OBJECT (item),
+				"files",
+				nautilus_file_info_list_copy (files),
+				(GDestroyNotify) nautilus_file_info_list_free);
+
+	items = g_list_append (items, item);
+
+	return items;
+}
+
+static void
+nautilus_nste_menu_provider_iface_init (NautilusMenuProviderIface *iface)
+{
+	iface->get_file_items = nautilus_nste_get_file_items;
+}
+
+static void
+nautilus_nste_instance_init (NautilusNste *nste)
+{
+	char *path;
+
+	path = g_find_program_in_path ("nautilus-sendto");
+	nste->nst_present = (path != NULL);
+	g_free (path);
+}
+
+static void
+nautilus_nste_class_init (NautilusNsteClass *class)
+{
+	parent_class = g_type_class_peek_parent (class);
+}
+
+static GType nste_type = 0;
+
+GType
+nautilus_nste_get_type (void)
+{
+	return nste_type;
+}
+
+void
+nautilus_nste_register_type (GTypeModule *module)
+{
+	static const GTypeInfo info = {
+		sizeof (NautilusNsteClass),
+		(GBaseInitFunc) NULL,
+		(GBaseFinalizeFunc) NULL,
+		(GClassInitFunc) nautilus_nste_class_init,
+		NULL,
+		NULL,
+		sizeof (NautilusNste),
+		0,
+		(GInstanceInitFunc) nautilus_nste_instance_init,
+	};
+
+	static const GInterfaceInfo menu_provider_iface_info = {
+		(GInterfaceInitFunc) nautilus_nste_menu_provider_iface_init,
+		NULL,
+		NULL
+	};
+
+	nste_type = g_type_module_register_type (module,
+						 G_TYPE_OBJECT,
+						 "NautilusNste",
+						 &info, 0);
+
+	g_type_module_add_interface (module,
+				     nste_type,
+				     NAUTILUS_TYPE_MENU_PROVIDER,
+				     &menu_provider_iface_info);
+}
+
diff --git a/nautilus-sendto-extension/nautilus-nste.h b/nautilus-sendto-extension/nautilus-nste.h
new file mode 100644
index 0000000..9456560
--- /dev/null
+++ b/nautilus-sendto-extension/nautilus-nste.h
@@ -0,0 +1,52 @@
+/*
+ *  Nautilus SendTo extension
+ *
+ *  Copyright (C) 2005 Roberto Majadas
+ *
+ *  This library 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.
+ *
+ *  This library 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
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Author: Roberto Majadas <roberto majadas openshine com>
+ *
+ */
+
+#ifndef NAUTILUS_NSTE_H
+#define NAUTILUS_NSTE_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define NAUTILUS_TYPE_NSTE  (nautilus_nste_get_type ())
+#define NAUTILUS_NSTE(o)    (G_TYPE_CHECK_INSTANCE_CAST ((o), NAUTILUS_TYPE_NSTE, NautilusNste))
+#define NAUTILUS_IS_NSTE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), NAUTILUS_TYPE_NSTE))
+
+typedef struct _NautilusNste      NautilusNste;
+typedef struct _NautilusNsteClass NautilusNsteClass;
+
+struct _NautilusNste {
+	GObject  __parent;
+	gboolean nst_present;
+};
+
+struct _NautilusNsteClass {
+	GObjectClass __parent;
+};
+
+GType nautilus_nste_get_type      (void);
+void  nautilus_nste_register_type (GTypeModule *module);
+
+G_END_DECLS
+
+#endif /* NAUTILUS_NSTE_H */
diff --git a/nautilus-sendto-extension/nautilus-sendto-module.c b/nautilus-sendto-extension/nautilus-sendto-module.c
new file mode 100644
index 0000000..2faf79b
--- /dev/null
+++ b/nautilus-sendto-extension/nautilus-sendto-module.c
@@ -0,0 +1,56 @@
+/*
+ *  Nautilus SendTo
+ *
+ *  Copyright (C) 2005 Roberto Majadas
+ *
+ *  This library 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.
+ *
+ *  This library 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
+ *  Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public
+ *  License along with this library; if not, write to the Free
+ *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *  Author: Roberto Majadas <roberto majadas openshine com>
+ *
+ */
+
+#include <config.h>
+#include <libnautilus-extension/nautilus-extension-types.h>
+#include <libnautilus-extension/nautilus-column-provider.h>
+#include <glib/gi18n-lib.h>
+#include "nautilus-nste.h"
+
+
+void
+nautilus_module_initialize (GTypeModule*module)
+{
+	nautilus_nste_register_type (module);
+
+	bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
+	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+}
+
+void
+nautilus_module_shutdown (void)
+{
+}
+
+void
+nautilus_module_list_types (const GType **types,
+			    int          *num_types)
+{
+	static GType type_list[1];
+
+	type_list[0] = NAUTILUS_TYPE_NSTE;
+	*types = type_list;
+
+	*num_types = 1;
+}
+



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]