summaryrefslogtreecommitdiff
path: root/libcaja-private/caja-dbus-manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcaja-private/caja-dbus-manager.c')
-rw-r--r--libcaja-private/caja-dbus-manager.c81
1 files changed, 64 insertions, 17 deletions
diff --git a/libcaja-private/caja-dbus-manager.c b/libcaja-private/caja-dbus-manager.c
index 1c683dff..4f0b1b73 100644
--- a/libcaja-private/caja-dbus-manager.c
+++ b/libcaja-private/caja-dbus-manager.c
@@ -1,12 +1,37 @@
+/*
+ * caja-dbus-manager: caja DBus interface
+ *
+ * Copyright (C) 2010, Red Hat, Inc.
+ *
+ * Caja 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.
+ *
+ * Caja 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ * Author: Cosimo Cecchi <[email protected]>
+ *
+ */
+
#include <config.h>
#include "caja-dbus-manager.h"
+#include "caja-file-operations.h"
+
#include <gio/gio.h>
static const gchar introspection_xml[] =
"<node>"
- " <interface name='org.mate.caja.FileOperations'>"
+ " <interface name='org.mate.Caja.FileOperations'>"
" <method name='CopyURIs'>"
" <arg type='as' name='URIList' direction='in'/>"
" <arg type='s' name='Destination' direction='in'/>"
@@ -66,6 +91,34 @@ caja_dbus_manager_class_init (CajaDBusManagerClass *klass)
}
static void
+trigger_copy_file_operation (const gchar **sources,
+ const gchar *destination)
+{
+ GList *source_files = NULL;
+ GFile *dest_dir;
+ gint idx;
+
+ if (sources == NULL || sources[0] == NULL || destination == NULL)
+ {
+ g_debug ("Called 'CopyURIs' with NULL arguments, discarding");
+ return;
+ }
+
+ dest_dir = g_file_new_for_uri (destination);
+
+ for (idx = 0; sources[idx] != NULL; idx++)
+ source_files = g_list_prepend (source_files,
+ g_file_new_for_uri (sources[idx]));
+
+ caja_file_operations_copy (source_files, NULL,
+ dest_dir,
+ NULL, NULL, NULL);
+
+ g_list_free_full (source_files, g_object_unref);
+ g_object_unref (dest_dir);
+}
+
+static void
handle_method_call (GDBusConnection *connection,
const gchar *sender,
const gchar *object_path,
@@ -82,7 +135,9 @@ handle_method_call (GDBusConnection *connection,
{
g_variant_get (parameters, "(^a&s&s)", &uris, &destination_uri);
- g_print ("Called CopyURIs with dest %s and uri %s\n", destination_uri, uris[0]);
+ trigger_copy_file_operation (uris, destination_uri);
+
+ g_debug ("Called CopyURIs with dest %s and uri %s\n", destination_uri, uris[0]);
}
g_dbus_method_invocation_return_value (invocation, NULL);
@@ -96,9 +151,9 @@ static const GDBusInterfaceVTable interface_vtable =
};
static void
-name_acquired_cb (GDBusConnection *conn,
- const gchar *name,
- gpointer user_data)
+bus_acquired_handler_cb (GDBusConnection *conn,
+ const gchar *name,
+ gpointer user_data)
{
CajaDBusManager *self = user_data;
GDBusNodeInfo *introspection_data;
@@ -119,7 +174,7 @@ name_acquired_cb (GDBusConnection *conn,
}
self->registration_id = g_dbus_connection_register_object (conn,
- "/org/mate/caja",
+ "/org/mate/Caja",
introspection_data->interfaces[0],
&interface_vtable,
self,
@@ -137,22 +192,14 @@ name_acquired_cb (GDBusConnection *conn,
}
static void
-name_lost_cb (GDBusConnection *conn,
- const gchar *name,
- gpointer user_data)
-{
-
-}
-
-static void
caja_dbus_manager_init (CajaDBusManager *self)
{
self->owner_id = g_bus_own_name (G_BUS_TYPE_SESSION,
- "org.mate.caja",
+ "org.mate.Caja",
G_BUS_NAME_OWNER_FLAGS_NONE,
+ bus_acquired_handler_cb,
+ NULL,
NULL,
- name_acquired_cb,
- name_lost_cb,
self,
NULL);
}