mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-19 07:41:26 +00:00
52d960542b
And make the style of Nautilus the same for all files. Hopefully we can fix all the style issues we can find in the next days, so expect a little of movement on this. https://bugzilla.gnome.org/show_bug.cgi?id=770564
195 lines
5 KiB
C
195 lines
5 KiB
C
/*
|
|
* 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, see <http://www.gnu.org/licenses/>.
|
|
*
|
|
* 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;
|
|
gchar *uri;
|
|
GString *cmd;
|
|
|
|
files = g_object_get_data (G_OBJECT (item), "files");
|
|
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 gboolean
|
|
check_available_mailer ()
|
|
{
|
|
GAppInfo *app_info;
|
|
|
|
app_info = g_app_info_get_default_for_uri_scheme ("mailto");
|
|
if (app_info)
|
|
{
|
|
g_clear_object (&app_info);
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
if (!check_available_mailer ())
|
|
{
|
|
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…"),
|
|
"document-send");
|
|
}
|
|
else
|
|
{
|
|
item = nautilus_menu_item_new ("NautilusNste::sendto",
|
|
_("Send to…"),
|
|
_("Send files by mail…"),
|
|
"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);
|
|
}
|