summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGilles Dartiguelongue <eva@gentoo.org>2009-01-26 22:53:53 +0000
committerGilles Dartiguelongue <eva@gentoo.org>2009-01-26 22:53:53 +0000
commit284f1982d47d2450b59809314b3bb464d527537e (patch)
treeae8bb04c1b64a92c3ee3fb8e9c81b862e9ed6262 /gnome-base
parentfix broken atom (diff)
downloadhistorical-284f1982d47d2450b59809314b3bb464d527537e.tar.gz
historical-284f1982d47d2450b59809314b3bb464d527537e.tar.bz2
historical-284f1982d47d2450b59809314b3bb464d527537e.zip
Add patch for bluez-4, bug #250615.
Package-Manager: portage-2.2_rc22/cvs/Linux 2.6.24-gentoo-r8-mactel x86_64
Diffstat (limited to 'gnome-base')
-rw-r--r--gnome-base/gvfs/ChangeLog8
-rw-r--r--gnome-base/gvfs/Manifest14
-rw-r--r--gnome-base/gvfs/files/gvfs-1.0.3-bluez4.patch475
-rw-r--r--gnome-base/gvfs/gvfs-1.0.3-r10.ebuild81
4 files changed, 576 insertions, 2 deletions
diff --git a/gnome-base/gvfs/ChangeLog b/gnome-base/gvfs/ChangeLog
index c7a85fa73d18..b423566977e6 100644
--- a/gnome-base/gvfs/ChangeLog
+++ b/gnome-base/gvfs/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for gnome-base/gvfs
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/gnome-base/gvfs/ChangeLog,v 1.42 2009/01/20 11:13:56 armin76 Exp $
+# $Header: /var/cvsroot/gentoo-x86/gnome-base/gvfs/ChangeLog,v 1.43 2009/01/26 22:53:53 eva Exp $
+
+*gvfs-1.0.3-r10 (26 Jan 2009)
+
+ 26 Jan 2009; Gilles Dartiguelongue <eva@gentoo.org>
+ +files/gvfs-1.0.3-bluez4.patch, +gvfs-1.0.3-r10.ebuild:
+ Add patch for bluez-4, bug #250615.
20 Jan 2009; Raúl Porcel <armin76@gentoo.org> gvfs-0.2.5-r3.ebuild,
gvfs-1.0.3.ebuild:
diff --git a/gnome-base/gvfs/Manifest b/gnome-base/gvfs/Manifest
index f042231cfa0a..ed2b0f7980dc 100644
--- a/gnome-base/gvfs/Manifest
+++ b/gnome-base/gvfs/Manifest
@@ -1,5 +1,9 @@
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
AUX gvfs-0.2.5-bash-completion.patch 2002 RMD160 4be918587bf2e5ed0a05c8aaaca86e38fcc63cd6 SHA1 620b3e22d6b2e0558f632cc1962d95695458ff1a SHA256 04b247915f396734b29398a611d078a972b33a085c53766a56d0053797961fc4
AUX gvfs-0.2.5-dbus-crash.patch 678 RMD160 01832303f17c260ef4032ee5e17ba9accc8fc688 SHA1 50f1c096b65061586f651cbdfcb24ce2610f3ead SHA256 81d34b013e48bd4ae27e40cf8b699a0e0d1d45ae23c87cee8d153b7b62aad139
+AUX gvfs-1.0.3-bluez4.patch 15992 RMD160 ce019597f52e3f58bea23e098ffab70ac1f1ed83 SHA1 3734c27032184c956013c46b3915e05d84dd5009 SHA256 e9eb881f06b1b404e0c362c6e66975cdef2e5956b103720364a8fd6db7c9a4ce
DIST gvfs-0.2.5.tar.bz2 826404 RMD160 f1b403c859ce91a5620ca16067d225f8a733857f SHA1 b92b27792fe711319f9f0bba678dc9c074cb5b97 SHA256 f8bb3d32b1fe797190b9d8f2a6b0cdf91e897326a26cf8d9583e41f0d3aae86b
DIST gvfs-1.0.1.tar.bz2 898295 RMD160 a22d08085e1b6f55aa455e3a6d3ab1128d53a9fe SHA1 691f543a294899e582c912c2ad500e67966dfd6f SHA256 67e7dd1dca32a99eb1102a853d2df1bac782d50a4361511409572cfe8ea51147
DIST gvfs-1.0.2.tar.bz2 918268 RMD160 b8f6a107923fae1c0752ee7eb4a1c27c50e3c93d SHA1 7f005cc579532b82072268ad399a2bc5ec353000 SHA256 f3606dc28b1fa140c7d0191478097a89f7ef7a3183a811a1410a230052b71eb4
@@ -9,6 +13,14 @@ EBUILD gvfs-0.2.5-r3.ebuild 2105 RMD160 e68bbb0df96a8b4a2878c9b6b2cd912e8ce358c5
EBUILD gvfs-0.2.5.ebuild 1617 RMD160 0d42c19eae4d464502fa11f7daa91795ef110b10 SHA1 d5ac0328257d6d16d865d5fd0fbcfd06864a2f89 SHA256 9198321bcf88b471bf6553c6953b757dd6aaaacecc00c74afbd6a475855449c3
EBUILD gvfs-1.0.1.ebuild 2061 RMD160 09c628095179467703a7174dbda969df26c5c2f4 SHA1 f310692fbd758343fdeac1f25a25d286150ecac3 SHA256 404eac5b9a31bbfc6f7f3503c81dab185581c03d45721319bedc98b7d8d32846
EBUILD gvfs-1.0.2.ebuild 2061 RMD160 50f181ad457750013105becceb5c0615f6566cc2 SHA1 aa733236e5e2a03a5260aeb7639cfdc64c0deba0 SHA256 0646a412b91c5ae01684b09ae802f14c1b75b36f30dd896b37b9e2f9fbfbaaee
+EBUILD gvfs-1.0.3-r10.ebuild 2112 RMD160 75d220f546fb05ab11be593bce200ae5e1d0be7f SHA1 85116e8f97108fbd5f7603e74beb735746dba5f6 SHA256 cd6f94f01153a8af69099ec264906bca346bd318b0d7b49aad4399f4e07c2897
EBUILD gvfs-1.0.3.ebuild 2074 RMD160 cf2e052a9ac6a68aaa6c263b7adc8e9cd89ed580 SHA1 1b979503bf6f3d12320332be68e4e0c4a7f7cd78 SHA256 b5ca8620a91aec6c9953477898ece953c81f1c009cd54f878da1c8332009b67a
-MISC ChangeLog 5805 RMD160 5eb0ee99f1a634d058b7b25ed4e8d27c39a90577 SHA1 f25b1bb7bbb7a45815d7a22fc17f42d829b4c465 SHA256 c4284b5f899a2580aa91a5871767a586f08cddb6072520e6775d597bf2a72b4e
+MISC ChangeLog 5983 RMD160 52d328b9f33901c9b2376fc98acd4e417938571b SHA1 a13607f0937c583e341663b840c087eb8d3779c2 SHA256 91f24f53f8a3d9815fcc52010ca06b3ac8f9f79702a90f35f97142f6c3adf90d
MISC metadata.xml 864 RMD160 71f72e397643a884a5df4613040bd7a711ffc8f4 SHA1 2b83f7169d29d389e6aba00812b2dfb25d7f1a77 SHA256 7122d3aa2f01e10a870560059bf8b3a2bec93730d3451e73f9d7e145acce3783
+-----BEGIN PGP SIGNATURE-----
+Version: GnuPG v2.0.9 (GNU/Linux)
+
+iEYEARECAAYFAkl+TRUACgkQ1fmVwcYIWAaVUQCaA9Kg4ZG4aTF0rNdf83yTE9hD
+JhoAn0k1rWsONeB3IdpR+3aF93ZXTPd8
+=yvpg
+-----END PGP SIGNATURE-----
diff --git a/gnome-base/gvfs/files/gvfs-1.0.3-bluez4.patch b/gnome-base/gvfs/files/gvfs-1.0.3-bluez4.patch
new file mode 100644
index 000000000000..6e9ca84bcab5
--- /dev/null
+++ b/gnome-base/gvfs/files/gvfs-1.0.3-bluez4.patch
@@ -0,0 +1,475 @@
+---
+ daemon-main.c | 6 +
+ gvfsbackendobexftp.c | 292 ++++++++++++++++++++++-----------------------------
+ obexftp-marshal.list | 2
+ 3 files changed, 138 insertions(+), 162 deletions(-)
+Index: b/daemon/obexftp-marshal.list
+===================================================================
+--- a/daemon/obexftp-marshal.list (revision 2022)
++++ b/daemon/obexftp-marshal.list (working copy)
+@@ -1,2 +1,4 @@
++VOID:STRING
+ VOID:STRING,STRING
++VOID:STRING,STRING,STRING
+ VOID:STRING,STRING,UINT64
+Index: b/daemon/daemon-main.c
+===================================================================
+--- a/daemon/daemon-main.c (revision 2022)
++++ b/daemon/daemon-main.c (working copy)
+@@ -65,6 +65,12 @@
+ dbus_error_free (&derror);
+ exit (1);
+ }
++
++ GLogLevelFlags fatal_mask;
++
++ fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
++ fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
++ g_log_set_always_fatal (fatal_mask);
+ }
+
+ void
+Index: b/daemon/gvfsbackendobexftp.c
+===================================================================
+--- a/daemon/gvfsbackendobexftp.c (revision 2022)
++++ b/daemon/gvfsbackendobexftp.c (working copy)
+@@ -69,7 +69,7 @@
+
+ char *display_name;
+ char *bdaddr;
+- guint type;
++ char *icon_name;
+
+ DBusGConnection *connection;
+ DBusGProxy *manager_proxy;
+@@ -96,177 +96,106 @@
+
+ G_DEFINE_TYPE (GVfsBackendObexftp, g_vfs_backend_obexftp, G_VFS_TYPE_BACKEND);
+
+-/* This should all live in bluez-gnome, and we
+- * should depend on it */
+-enum {
+- BLUETOOTH_TYPE_ANY = 1,
+- BLUETOOTH_TYPE_PHONE = 1 << 1,
+- BLUETOOTH_TYPE_MODEM = 1 << 2,
+- BLUETOOTH_TYPE_COMPUTER = 1 << 3,
+- BLUETOOTH_TYPE_NETWORK = 1 << 4,
+- BLUETOOTH_TYPE_HEADSET = 1 << 5,
+- BLUETOOTH_TYPE_KEYBOARD = 1 << 6,
+- BLUETOOTH_TYPE_MOUSE = 1 << 7,
+- BLUETOOTH_TYPE_CAMERA = 1 << 8,
+- BLUETOOTH_TYPE_PRINTER = 1 << 9
+-};
++static void session_connect_error_cb (DBusGProxy *proxy,
++ const char *session_object,
++ const gchar *error_name,
++ const gchar *error_message,
++ gpointer user_data);
++static void session_connected_cb (DBusGProxy *proxy,
++ const char *session_object,
++ gpointer user_data);
+
+-static const char *
+-_get_icon_from_type (guint type)
++/* Used to detect broken listings from
++ * old Nokia 3650s */
++static gboolean
++_is_nokia_3650 (const char *bdaddr)
+ {
+- switch (type)
+- {
+- case BLUETOOTH_TYPE_PHONE:
+- return "phone";
+- break;
+- case BLUETOOTH_TYPE_MODEM:
+- return "modem";
+- break;
+- case BLUETOOTH_TYPE_COMPUTER:
+- return "network-server";
+- break;
+- case BLUETOOTH_TYPE_NETWORK:
+- return "network-wireless";
+- break;
+- case BLUETOOTH_TYPE_HEADSET:
+- return "stock_headphones";
+- break;
+- case BLUETOOTH_TYPE_KEYBOARD:
+- return "input-keyboard";
+- break;
+- case BLUETOOTH_TYPE_MOUSE:
+- return "input-mouse";
+- break;
+- case BLUETOOTH_TYPE_CAMERA:
+- return "camera-photo";
+- break;
+- case BLUETOOTH_TYPE_PRINTER:
+- return "printer";
+- break;
+- default:
+- return "bluetooth";
+- break;
+- }
++ /* Don't ask, Nokia seem to use a Bluetooth
++ * HCI from Murata */
++ return g_str_has_prefix(bdaddr, "00:60:57");
+ }
+
+-static int
+-_get_type_from_class (guint class)
++static char *
++get_name_and_icon (DBusGProxy *device, char **icon_name)
+ {
+- switch ((class & 0x1f00) >> 8)
++ GHashTable *hash;
++
++ if (dbus_g_proxy_call (device, "GetProperties", NULL,
++ G_TYPE_INVALID, dbus_g_type_get_map ("GHashTable", G_TYPE_STRING, G_TYPE_VALUE),
++ &hash, G_TYPE_INVALID) != FALSE)
+ {
+- case 0x01:
+- return BLUETOOTH_TYPE_COMPUTER;
+- case 0x02:
+- switch ((class & 0xfc) >> 2)
++ GValue *value;
++ char *name;
++
++ value = g_hash_table_lookup (hash, "Name");
++ name = value ? g_value_dup_string(value) : NULL;
++
++ value = g_hash_table_lookup (hash, "Icon");
++ if (value)
+ {
+- case 0x01:
+- case 0x02:
+- case 0x03:
+- case 0x05:
+- return BLUETOOTH_TYPE_PHONE;
+- case 0x04:
+- return BLUETOOTH_TYPE_MODEM;
++ *icon_name = g_value_dup_string (value);
+ }
+- break;
+- case 0x03:
+- return BLUETOOTH_TYPE_NETWORK;
+- case 0x04:
+- switch ((class & 0xfc) >> 2)
++ else
+ {
+- case 0x01:
+- return BLUETOOTH_TYPE_HEADSET;
++ *icon_name = g_strdup ("bluetooth");
+ }
+- break;
+- case 0x05:
+- switch ((class & 0xc0) >> 6)
+- {
+- case 0x01:
+- return BLUETOOTH_TYPE_KEYBOARD;
+- case 0x02:
+- return BLUETOOTH_TYPE_MOUSE;
+- }
+- break;
+- case 0x06:
+- if (class & 0x80)
+- return BLUETOOTH_TYPE_PRINTER;
+- if (class & 0x20)
+- return BLUETOOTH_TYPE_CAMERA;
+- break;
++ g_hash_table_destroy (hash);
++ return name;
+ }
+
+- return BLUETOOTH_TYPE_ANY;
++ return NULL;
+ }
+
+-/* Used to detect broken listings from
+- * old Nokia 3650s */
+-static gboolean
+-_is_nokia_3650 (const char *bdaddr)
+-{
+- /* Don't ask, Nokia seem to use a Bluetooth
+- * HCI from Murata */
+- return g_str_has_prefix(bdaddr, "00:60:57");
+-}
+-
+ static gchar *
+-_get_device_properties (const char *bdaddr, guint32 *type)
++_get_device_properties (const char *bdaddr, char **icon_name)
+ {
+ DBusGConnection *connection;
+ DBusGProxy *manager;
+- gchar *name, **adapters;
++ GPtrArray *adapters;
++ gchar *name;
+ guint i;
+
+ name = NULL;
+
+ connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, NULL);
+ if (connection == NULL)
+- return NULL;
++ return name;
+
+ manager = dbus_g_proxy_new_for_name (connection, "org.bluez",
+- "/org/bluez", "org.bluez.Manager");
++ "/", "org.bluez.Manager");
+ if (manager == NULL)
+ {
+ dbus_g_connection_unref (connection);
+- return NULL;
++ return name;
+ }
+
+- if (dbus_g_proxy_call (manager, "ListAdapters", NULL, G_TYPE_INVALID, G_TYPE_STRV, &adapters, G_TYPE_INVALID) == FALSE)
++ if (dbus_g_proxy_call (manager, "ListAdapters", NULL, G_TYPE_INVALID, dbus_g_type_get_collection ("GPtrArray", DBUS_TYPE_G_OBJECT_PATH), &adapters, G_TYPE_INVALID) == FALSE)
+ {
+ g_object_unref (manager);
+ dbus_g_connection_unref (connection);
+- return NULL;
++ return name;
+ }
+
+- for (i = 0; adapters[i] != NULL; i++)
++ for (i = 0; i < adapters->len && name == NULL; i++)
+ {
+ DBusGProxy *adapter;
++ char *device_path;
+
+ adapter = dbus_g_proxy_new_for_name (connection, "org.bluez",
+- adapters[i], "org.bluez.Adapter");
+- if (dbus_g_proxy_call (adapter, "GetRemoteName", NULL,
++ g_ptr_array_index (adapters, i), "org.bluez.Adapter");
++ if (dbus_g_proxy_call (adapter, "FindDevice", NULL,
+ G_TYPE_STRING, bdaddr, G_TYPE_INVALID,
+- G_TYPE_STRING, &name, G_TYPE_INVALID) != FALSE)
++ DBUS_TYPE_G_OBJECT_PATH, &device_path, G_TYPE_INVALID) != FALSE)
+ {
+- if (name != NULL && name[0] != '\0')
+- {
+- guint32 class;
+-
+- if (dbus_g_proxy_call(adapter, "GetRemoteClass", NULL,
+- G_TYPE_STRING, bdaddr, G_TYPE_INVALID,
+- G_TYPE_UINT, &class, G_TYPE_INVALID) != FALSE)
+- {
+- *type = _get_type_from_class (class);
+- }
+- else
+- {
+- *type = BLUETOOTH_TYPE_ANY;
+- }
+- g_object_unref (adapter);
+- break;
+- }
++ DBusGProxy *device;
++ device = dbus_g_proxy_new_for_name (connection, "org.bluez", device_path, "org.bluez.Device");
++ name = get_name_and_icon (device, icon_name);
++ g_object_unref (device);
+ }
+ g_object_unref (adapter);
+ }
+
++ g_ptr_array_free (adapters, TRUE);
+ g_object_unref (manager);
+ dbus_g_connection_unref (connection);
+
+@@ -282,6 +211,7 @@
+
+ g_free (backend->display_name);
+ g_free (backend->bdaddr);
++ g_free (backend->icon_name);
+ g_free (backend->files_listing);
+ g_free (backend->directory);
+
+@@ -312,6 +242,15 @@
+ "org.openobex",
+ "/org/openobex",
+ "org.openobex.Manager");
++
++ dbus_g_proxy_add_signal(backend->manager_proxy, "SessionConnectError",
++ DBUS_TYPE_G_OBJECT_PATH, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
++ dbus_g_proxy_connect_signal(backend->manager_proxy, "SessionConnectError",
++ G_CALLBACK(session_connect_error_cb), backend, NULL);
++ dbus_g_proxy_add_signal(backend->manager_proxy, "SessionConnected",
++ DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
++ dbus_g_proxy_connect_signal(backend->manager_proxy, "SessionConnected",
++ G_CALLBACK(session_connected_cb), backend, NULL);
+ }
+
+ static gboolean
+@@ -437,8 +376,7 @@
+ g_file_info_set_file_type (info, G_FILE_TYPE_DIRECTORY);
+ g_file_info_set_content_type (info, "inode/directory");
+ g_file_info_set_name (info, "/");
+- g_vfs_backend_set_icon_name (backend,
+- _get_icon_from_type (op_backend->type));
++ g_vfs_backend_set_icon_name (backend, op_backend->icon_name);
+ display = g_strdup_printf (_("%s on %s"), "/", op_backend->display_name);
+ g_file_info_set_display_name (info, display);
+ g_free (display);
+@@ -531,6 +469,37 @@
+ }
+
+ static void
++session_connect_error_cb (DBusGProxy *proxy,
++ const char *session_object,
++ const gchar *error_name,
++ const gchar *error_message,
++ gpointer user_data)
++{
++ GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (user_data);
++
++ g_mutex_lock (op_backend->mutex);
++ op_backend->status = ASYNC_ERROR;
++ op_backend->error = g_error_new_literal (DBUS_GERROR,
++ DBUS_GERROR_REMOTE_EXCEPTION,
++ error_message);
++ g_cond_signal (op_backend->cond);
++ g_mutex_unlock (op_backend->mutex);
++}
++
++static void
++session_connected_cb (DBusGProxy *proxy,
++ const char *session_object,
++ gpointer user_data)
++{
++ GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (user_data);
++
++ g_mutex_lock (op_backend->mutex);
++ op_backend->status = ASYNC_SUCCESS;
++ g_cond_signal (op_backend->cond);
++ g_mutex_unlock (op_backend->mutex);
++}
++
++static void
+ cancelled_cb (DBusGProxy *proxy, gpointer user_data)
+ {
+ GVfsBackendObexftp *op_backend = G_VFS_BACKEND_OBEXFTP (user_data);
+@@ -559,24 +528,6 @@
+ _exit (1);
+ }
+
+-static int
+-is_connected (DBusGProxy *session_proxy, GVfsJob *job)
+-{
+- GError *error = NULL;
+- gboolean connected;
+-
+- if (dbus_g_proxy_call (session_proxy, "IsConnected", &error,
+- G_TYPE_INVALID,
+- G_TYPE_BOOLEAN, &connected, G_TYPE_INVALID) == FALSE)
+- {
+- g_vfs_job_failed_from_error (job, error);
+- g_error_free (error);
+- return -1;
+- }
+-
+- return connected;
+-}
+-
+ static void
+ do_mount (GVfsBackend *backend,
+ GVfsJobMount *job,
+@@ -590,7 +541,7 @@
+ const gchar *path = NULL;
+ char *server;
+ GMountSpec *obexftp_mount_spec;
+- gboolean connected;
++ guint count;
+
+ g_print ("+ do_mount\n");
+
+@@ -616,10 +567,11 @@
+ }
+
+ /* FIXME, Have a way for the mount to be cancelled, see:
+- * http://bugs.muiline.com/view.php?id=51 */
++ * Use CancelSessionConnect */
++ op_backend->status = ASYNC_PENDING;
+
+ if (dbus_g_proxy_call (op_backend->manager_proxy, "CreateBluetoothSession", &error,
+- G_TYPE_STRING, op_backend->bdaddr, G_TYPE_STRING, "ftp", G_TYPE_INVALID,
++ G_TYPE_STRING, op_backend->bdaddr, G_TYPE_STRING, "00:00:00:00:00:00", G_TYPE_STRING, "ftp", G_TYPE_INVALID,
+ DBUS_TYPE_G_OBJECT_PATH, &path, G_TYPE_INVALID) == FALSE)
+ {
+ g_free (op_backend->bdaddr);
+@@ -636,14 +588,13 @@
+ path,
+ "org.openobex.Session");
+
+- op_backend->display_name = _get_device_properties (op_backend->bdaddr, &op_backend->type);
++ op_backend->display_name = _get_device_properties (op_backend->bdaddr, &op_backend->icon_name);
+ if (!op_backend->display_name)
+ op_backend->display_name = g_strdup (op_backend->bdaddr);
+
+ g_vfs_backend_set_display_name (G_VFS_BACKEND (op_backend),
+ op_backend->display_name);
+- g_vfs_backend_set_icon_name (G_VFS_BACKEND (op_backend),
+- _get_icon_from_type (op_backend->type));
++ g_vfs_backend_set_icon_name (G_VFS_BACKEND (op_backend), op_backend->icon_name);
+
+ obexftp_mount_spec = g_mount_spec_new ("obex");
+ server = g_strdup_printf ("[%s]", op_backend->bdaddr);
+@@ -676,14 +627,20 @@
+ G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID);
+
+ /* Now wait until the device is connected */
+- connected = is_connected (op_backend->session_proxy, G_VFS_JOB (job));
+- while (connected == FALSE)
+- {
+- g_usleep (G_USEC_PER_SEC / 100);
+- connected = is_connected (op_backend->session_proxy, G_VFS_JOB (job));
+- }
++ count = 0;
++ g_mutex_lock (op_backend->mutex);
+
+- if (connected < 0)
++ while (op_backend->status == ASYNC_PENDING && count < 100) {
++ GTimeVal val;
++ g_get_current_time (&val);
++ g_time_val_add (&val, 100000);
++ count++;
++ if (g_cond_timed_wait (op_backend->cond, op_backend->mutex, &val) != FALSE)
++ break;
++ }
++ g_mutex_unlock (op_backend->mutex);
++
++ if (op_backend->status == ASYNC_ERROR || op_backend->status == ASYNC_PENDING)
+ {
+ g_message ("mount failed, didn't connect");
+
+@@ -694,12 +651,17 @@
+ g_object_unref (op_backend->session_proxy);
+ op_backend->session_proxy = NULL;
+
+- g_vfs_job_failed (G_VFS_JOB (job),
+- G_IO_ERROR, G_IO_ERROR_BUSY,
+- _("Connection to the device lost"));
++ if (op_backend->status != ASYNC_PENDING)
++ g_vfs_job_failed_from_error (G_VFS_JOB (job), op_backend->error);
++ else
++ g_vfs_job_failed (G_VFS_JOB (job),
++ G_IO_ERROR, G_IO_ERROR_BUSY,
++ _("Connection to the device lost"));
+ return;
+ }
+
++ op_backend->status = ASYNC_PENDING;
++
+ g_vfs_job_succeeded (G_VFS_JOB (job));
+
+ g_print ("- do_mount\n");
+@@ -1482,6 +1444,12 @@
+ /* TransferStarted */
+ dbus_g_object_register_marshaller(obexftp_marshal_VOID__STRING_STRING_UINT64,
+ G_TYPE_NONE, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT64, G_TYPE_INVALID);
++ /* SessionConnected */
++ dbus_g_object_register_marshaller(obexftp_marshal_VOID__STRING,
++ G_TYPE_NONE, DBUS_TYPE_G_OBJECT_PATH, G_TYPE_INVALID);
++ /* SessionConnectError */
++ dbus_g_object_register_marshaller (obexftp_marshal_VOID__STRING_STRING_STRING,
++ G_TYPE_NONE, DBUS_TYPE_G_OBJECT_PATH, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INVALID);
+ }
+
+ /*
diff --git a/gnome-base/gvfs/gvfs-1.0.3-r10.ebuild b/gnome-base/gvfs/gvfs-1.0.3-r10.ebuild
new file mode 100644
index 000000000000..7305e52c4436
--- /dev/null
+++ b/gnome-base/gvfs/gvfs-1.0.3-r10.ebuild
@@ -0,0 +1,81 @@
+# Copyright 1999-2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/gnome-base/gvfs/gvfs-1.0.3-r10.ebuild,v 1.1 2009/01/26 22:53:53 eva Exp $
+
+inherit bash-completion gnome2 eutils
+
+DESCRIPTION="GNOME Virtual Filesystem Layer"
+HOMEPAGE="http://www.gnome.org"
+
+LICENSE="LGPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~x86"
+IUSE="archive avahi bluetooth cdda doc fuse gnome gphoto2 hal gnome-keyring samba"
+
+RDEPEND=">=dev-libs/glib-2.17.6
+ >=sys-apps/dbus-1.0
+ >=net-libs/libsoup-2.23.91
+ dev-libs/libxml2
+ net-misc/openssh
+ archive? ( app-arch/libarchive )
+ avahi? ( >=net-dns/avahi-0.6 )
+ cdda? (
+ >=sys-apps/hal-0.5.10
+ >=dev-libs/libcdio-0.78.2 )
+ fuse? ( sys-fs/fuse )
+ gnome? ( >=gnome-base/gconf-2.0 )
+ hal? ( >=sys-apps/hal-0.5.10 )
+ bluetooth? (
+ dev-libs/dbus-glib
+ net-wireless/bluez
+ dev-libs/expat )
+ gphoto2? ( >=media-libs/libgphoto2-2.4 )
+ gnome-keyring? ( >=gnome-base/gnome-keyring-1.0 )
+ samba? ( >=net-fs/samba-3 )"
+DEPEND="${RDEPEND}
+ >=dev-util/intltool-0.40
+ >=dev-util/pkgconfig-0.19
+ doc? ( >=dev-util/gtk-doc-1 )"
+
+DOCS="AUTHORS ChangeLog NEWS README TODO"
+
+pkg_setup() {
+ G2CONF="${G2CONF}
+ --enable-http
+ --disable-bash-completion
+ $(use_enable archive)
+ $(use_enable avahi)
+ $(use_enable bluetooth obexftp)
+ $(use_enable cdda)
+ $(use_enable fuse)
+ $(use_enable gnome gconf)
+ $(use_enable gphoto2)
+ $(use_enable hal)
+ $(use_enable gnome-keyring keyring)
+ $(use_enable samba)"
+
+ if use cdda && built_with_use dev-libs/libcdio minimal; then
+ ewarn
+ ewarn "CDDA support in gvfs requires dev-libs/libcdio to be built"
+ ewarn "without the minimal USE flag."
+ die "Please re-emerge dev-libs/libcdio without the minimal USE flag"
+ fi
+}
+
+src_unpack() {
+ gnome2_src_unpack
+
+ # Add support for bluez 4, bug #250615
+ epatch "${FILESDIR}/${P}-bluez4.patch"
+}
+
+src_install() {
+ gnome2_src_install
+ use bash-completion && \
+ dobashcompletion programs/gvfs-bash-completion.sh ${PN}
+}
+
+pkg_postinst() {
+ gnome2_pkg_postinst
+ use bash-completion && bash-completion_pkg_postinst
+}