diff options
Diffstat (limited to 'sendto/caja-nste.c')
-rw-r--r-- | sendto/caja-nste.c | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/sendto/caja-nste.c b/sendto/caja-nste.c new file mode 100644 index 0000000..62b62b4 --- /dev/null +++ b/sendto/caja-nste.c @@ -0,0 +1,162 @@ +/* + * Caja-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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Author: Roberto Majadas <[email protected]> + * + */ + +#include <config.h> +#include <string.h> +#include <glib/gi18n-lib.h> +#include <libcaja-extension/caja-extension-types.h> +#include <libcaja-extension/caja-file-info.h> +#include <libcaja-extension/caja-menu-provider.h> +#include "caja-nste.h" + + +static GObjectClass *parent_class; + +static void +sendto_callback (CajaMenuItem *item, + gpointer user_data) +{ + GList *files, *scan; + CajaFileInfo *file; + gchar *uri; + GString *cmd; + + files = g_object_get_data (G_OBJECT (item), "files"); + file = files->data; + + cmd = g_string_new ("caja-sendto"); + + for (scan = files; scan; scan = scan->next) { + CajaFileInfo *file = scan->data; + + uri = caja_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 * +caja_nste_get_file_items (CajaMenuProvider *provider, + GtkWidget *window, + GList *files) +{ + GList *items = NULL; + gboolean one_item; + CajaMenuItem *item; + + if (files == NULL) + return NULL; + + one_item = (files != NULL) && (files->next == NULL); + if (one_item && + !caja_file_info_is_directory ((CajaFileInfo *)files->data)) { + item = caja_menu_item_new ("CajaNste::sendto", + _("Send To..."), + _("Send file by mail, instant message..."), + "document-send"); + } else { + item = caja_menu_item_new ("CajaNste::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", + caja_file_info_list_copy (files), + (GDestroyNotify) caja_file_info_list_free); + + items = g_list_append (items, item); + + return items; +} + + +static void +caja_nste_menu_provider_iface_init (CajaMenuProviderIface *iface) +{ + iface->get_file_items = caja_nste_get_file_items; +} + + +static void +caja_nste_instance_init (CajaNste *nste) +{ +} + + +static void +caja_nste_class_init (CajaNsteClass *class) +{ + parent_class = g_type_class_peek_parent (class); +} + + +static GType nste_type = 0; + + +GType +caja_nste_get_type (void) +{ + return nste_type; +} + + +void +caja_nste_register_type (GTypeModule *module) +{ + static const GTypeInfo info = { + sizeof (CajaNsteClass), + (GBaseInitFunc) NULL, + (GBaseFinalizeFunc) NULL, + (GClassInitFunc) caja_nste_class_init, + NULL, + NULL, + sizeof (CajaNste), + 0, + (GInstanceInitFunc) caja_nste_instance_init, + }; + + static const GInterfaceInfo menu_provider_iface_info = { + (GInterfaceInitFunc) caja_nste_menu_provider_iface_init, + NULL, + NULL + }; + + nste_type = g_type_module_register_type (module, + G_TYPE_OBJECT, + "CajaNste", + &info, 0); + + g_type_module_add_interface (module, + nste_type, + CAJA_TYPE_MENU_PROVIDER, + &menu_provider_iface_info); +} |