SOURCES: gnome-volume-manager-automount_enabled_hint.patch (NEW), ...
freetz
freetz at pld-linux.org
Thu Aug 4 20:22:38 CEST 2005
Author: freetz Date: Thu Aug 4 18:22:38 2005 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- misc fixes (thx ubuntu dudes)
---- Files affected:
SOURCES:
gnome-volume-manager-automount_enabled_hint.patch (NONE -> 1.1) (NEW), gnome-volume-manager-camera_detection.patch (NONE -> 1.1) (NEW), gnome-volume-manager-fix_nonmountable_media.patch (NONE -> 1.1) (NEW), gnome-volume-manager-mount_at_start.patch (NONE -> 1.1) (NEW), gnome-volume-manager-reconnect_on_dbus_exit.patch (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/gnome-volume-manager-automount_enabled_hint.patch
diff -u /dev/null SOURCES/gnome-volume-manager-automount_enabled_hint.patch:1.1
--- /dev/null Thu Aug 4 20:22:38 2005
+++ SOURCES/gnome-volume-manager-automount_enabled_hint.patch Thu Aug 4 20:22:33 2005
@@ -0,0 +1,47 @@
+diff -ruN gnome-volume-manager-1.3.2-old/src/manager.c gnome-volume-manager-1.3.2/src/manager.c
+--- gnome-volume-manager-1.3.2-old/src/manager.c 2005-07-04 16:51:55.233715000 +0200
++++ gnome-volume-manager-1.3.2/src/manager.c 2005-07-04 16:52:29.355527760 +0200
+@@ -1134,6 +1134,31 @@
+ libhal_free_string (media_type);
+ }
+
++/** Return the value of storage.automount_enabled_hint. First check the given
++ * volume's parent (which is the drive), then the volume itself. Default to
++ * true if the property is not set on either node.
++ */
++static gboolean
++gvm_get_automount_enabled_hint (const char* udi)
++{
++ gchar *parent;
++ gboolean ret = TRUE;
++
++ parent = libhal_device_get_property_string(hal_ctx, udi, "info.parent", NULL);
++ if (libhal_device_property_exists (hal_ctx, parent,
++ "storage.automount_enabled_hint", NULL)) {
++ ret = libhal_device_get_property_bool (hal_ctx, parent,
++ "storage.automount_enabled_hint", NULL);
++ }
++ if (libhal_device_property_exists (hal_ctx, udi,
++ "storage.automount_enabled_hint", NULL)) {
++ ret = libhal_device_get_property_bool (hal_ctx, udi,
++ "storage.automount_enabled_hint", NULL);
++ }
++ libhal_free_string (parent);
++ return ret;
++}
++
+ /** Invoked when a device is added to the Global Device List.
+ *
+ * @param ctx LibHal context
+@@ -1190,7 +1215,10 @@
+
+ #ifndef ASSUME_SUBMOUNT
+ if (config.automount_drives && mountable) {
+- gvm_device_mount (udi, device, NULL);
++ if (gvm_get_automount_enabled_hint (udi))
++ gvm_device_mount (udi, device, NULL);
++ else
++ dbg("%s has storage.automount_enabled_hint == false, not mounting\n", udi);
+ mounted_volumes_policy_queue = g_slist_append (mounted_volumes_policy_queue, g_strdup (udi));
+ }
+ #else
================================================================
Index: SOURCES/gnome-volume-manager-camera_detection.patch
diff -u /dev/null SOURCES/gnome-volume-manager-camera_detection.patch:1.1
--- /dev/null Thu Aug 4 20:22:38 2005
+++ SOURCES/gnome-volume-manager-camera_detection.patch Thu Aug 4 20:22:33 2005
@@ -0,0 +1,25 @@
+diff -ruN gnome-volume-manager-1.3.2-old/src/manager.c gnome-volume-manager-1.3.2/src/manager.c
+--- gnome-volume-manager-1.3.2-old/src/manager.c 2005-07-29 17:02:13.000000000 +0200
++++ gnome-volume-manager-1.3.2/src/manager.c 2005-07-29 17:02:13.000000000 +0200
+@@ -614,15 +614,13 @@
+ static gboolean
+ gvm_udi_is_camera (const char *udi, gboolean check_libgphoto2)
+ {
+- if (!libhal_device_query_capability (hal_ctx, udi, "camera", NULL))
+- return FALSE;
+-
+- if (check_libgphoto2 && !libhal_device_get_property_bool (hal_ctx, udi, "camera.libgphoto2_support", NULL))
+- return FALSE;
+-
+- dbg ("Camera detected: %s\n", udi);
++ if (libhal_device_query_capability (hal_ctx, udi, "camera", NULL) ||
++ (check_libgphoto2 && libhal_device_get_property_bool (hal_ctx, udi, "camera.libgphoto2_support", NULL))) {
++ dbg ("Camera detected: %s\n", udi);
++ return TRUE;
++ }
+
+- return TRUE;
++ return FALSE;
+ }
+
+ /*
================================================================
Index: SOURCES/gnome-volume-manager-fix_nonmountable_media.patch
diff -u /dev/null SOURCES/gnome-volume-manager-fix_nonmountable_media.patch:1.1
--- /dev/null Thu Aug 4 20:22:38 2005
+++ SOURCES/gnome-volume-manager-fix_nonmountable_media.patch Thu Aug 4 20:22:33 2005
@@ -0,0 +1,12 @@
+diff -ruN gnome-volume-manager-1.3.2-old/src/manager.c gnome-volume-manager-1.3.2/src/manager.c
+--- gnome-volume-manager-1.3.2-old/src/manager.c 2005-06-30 22:12:29.000000000 +0200
++++ gnome-volume-manager-1.3.2/src/manager.c 2005-07-04 17:11:08.779349472 +0200
+@@ -1180,7 +1180,7 @@
+ * Does this device support removable media? Note that we
+ * check storage_device and not our own UDI
+ */
+- if (mountable && libhal_device_get_property_bool (hal_ctx, storage_device, "storage.removable", NULL)) {
++ if (libhal_device_get_property_bool (hal_ctx, storage_device, "storage.removable", NULL)) {
+ /* we handle media change events separately */
+ dbg ("Changed: %s\n", device);
+ gvm_media_changed (udi, storage_device, device);
================================================================
Index: SOURCES/gnome-volume-manager-mount_at_start.patch
diff -u /dev/null SOURCES/gnome-volume-manager-mount_at_start.patch:1.1
--- /dev/null Thu Aug 4 20:22:38 2005
+++ SOURCES/gnome-volume-manager-mount_at_start.patch Thu Aug 4 20:22:33 2005
@@ -0,0 +1,24 @@
+diff -ruN gnome-volume-manager-1.3.2-old/src/manager.c gnome-volume-manager-1.3.2/src/manager.c
+--- gnome-volume-manager-1.3.2-old/src/manager.c 2005-07-04 14:44:53.636373000 +0200
++++ gnome-volume-manager-1.3.2/src/manager.c 2005-07-04 14:49:45.811956536 +0200
+@@ -1533,6 +1533,20 @@
+ continue;
+ }
+ libhal_free_string (prop);
++
++ /* Check if configured policy disables mounting */
++ gboolean do_mount = TRUE;
++ gchar* drive_udi = libhal_device_get_property_string(ctx, udi, "info.parent", NULL);
++ if (libhal_device_property_exists(ctx, drive_udi, "storage.hotpluggable", NULL) &&
++ libhal_device_get_property_bool(ctx, drive_udi, "storage.hotpluggable", NULL)) {
++ do_mount = config.automount_drives;
++ } else if (
++ libhal_device_property_exists(ctx, drive_udi, "storage.removable", NULL) &&
++ libhal_device_get_property_bool(ctx, drive_udi, "storage.removable", NULL)) {
++ do_mount = config.automount_media;
++ }
++ libhal_free_string(drive_udi);
++ if (!do_mount) continue;
+
+ /* mount the device */
+ if (!(dev = libhal_device_get_property_string (ctx, udi, "block.device", &error))) {
================================================================
Index: SOURCES/gnome-volume-manager-reconnect_on_dbus_exit.patch
diff -u /dev/null SOURCES/gnome-volume-manager-reconnect_on_dbus_exit.patch:1.1
--- /dev/null Thu Aug 4 20:22:38 2005
+++ SOURCES/gnome-volume-manager-reconnect_on_dbus_exit.patch Thu Aug 4 20:22:33 2005
@@ -0,0 +1,116 @@
+diff -ruN gnome-volume-manager-1.3.2-old/src/manager.c gnome-volume-manager-1.3.2/src/manager.c
+--- gnome-volume-manager-1.3.2-old/src/manager.c 2005-06-30 22:12:29.000000000 +0200
++++ gnome-volume-manager-1.3.2/src/manager.c 2005-07-04 14:43:15.822243984 +0200
+@@ -48,7 +48,8 @@
+ #define NAUTILUS_COMMAND BIN_NAUTILUS" -n --no-desktop %m"
+
+ static struct gvm_configuration config;
+-static LibHalContext *hal_ctx;
++static LibHalContext *hal_ctx = NULL;
++static DBusConnection *dbus_connection = NULL;
+
+ #ifndef ASSUME_SUBMOUNT
+ /** List of UDI's for volumes mounted by g-v-m that we need to apply policy to*/
+@@ -1332,6 +1333,73 @@
+ {
+ }
+
++static LibHalContext * gvm_do_hal_init ();
++
++/** Invoked by gvm_do_filter_dbus_msg in response to a D-BUS disconnect event.
++ *
++ * @param data Context pointer
++ * @return true if it should be tried again, false if success or failure.
++ */
++static gboolean
++gvm_reconnect_to_hal (gpointer data __attribute__((__unused__)))
++{
++ static unsigned int retries = 0;
++ DBusError error;
++
++ dbg ("Trying a reconnect ...\n");
++ hal_ctx = gvm_do_hal_init ();
++ if (hal_ctx != NULL) {
++ dbg ("Reconnected OK.\n");
++ retries = 0;
++ return FALSE;
++ } else if (dbus_connection){
++ /* shut down dbus connection to try it again */
++ dbus_connection_unref (dbus_connection);
++ dbus_connection = NULL;
++ }
++
++ /* Retry later if it failed. */
++ if (retries++ < 100)
++ return TRUE;
++
++ /* Too many retries; clean up and bail. */
++ warn("gvm_reconnect_to_hal: no reconnection after 100 retries, exiting\n");
++ libhal_ctx_shutdown (hal_ctx, &error);
++ libhal_ctx_free (hal_ctx);
++ hal_ctx = NULL;
++ gtk_main_quit ();
++ return FALSE;
++}
++
++/** Invoked by D-BUS to filter messages.
++ *
++ * @param connection D-BUS connection
++ * @param message D-BUS message
++ * @param user_data Context pointer
++ */
++static DBusHandlerResult
++gvm_do_filter_dbus_msg (DBusConnection *connection __attribute__((__unused__)),
++ DBusMessage *message,
++ void *user_data __attribute__((__unused__)))
++{
++ DBusError error;
++
++ if (dbus_message_is_signal (message,
++ DBUS_INTERFACE_LOCAL,
++ "Disconnected")) {
++ dbg("gvm_do_filter_dbus_msg: received Disconnected message\n");
++ g_timeout_add(500, gvm_reconnect_to_hal, NULL);
++ libhal_ctx_shutdown (hal_ctx, &error);
++ libhal_ctx_free (hal_ctx);
++ hal_ctx = NULL;
++ dbus_connection_unref (dbus_connection);
++ dbus_connection = NULL;
++ return DBUS_HANDLER_RESULT_HANDLED;
++ }
++ else
++ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
++}
++
+ /** Integrate a dbus mainloop.
+ *
+ * @param ctx LibHal context
+@@ -1342,14 +1410,15 @@
+ static dbus_bool_t
+ hal_mainloop_integration (LibHalContext *ctx, DBusError *error)
+ {
+- DBusConnection *dbus_connection;
+-
+ dbus_connection = dbus_bus_get (DBUS_BUS_SYSTEM, error);
+
+ if (dbus_error_is_set (error))
+ return FALSE;
++
++ dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
+
+ dbus_connection_setup_with_g_main (dbus_connection, NULL);
++ dbus_connection_add_filter (dbus_connection, gvm_do_filter_dbus_msg, NULL, NULL);
+
+ libhal_ctx_set_dbus_connection (ctx, dbus_connection);
+
+@@ -1492,6 +1561,10 @@
+ DBusError error;
+ GSList *l;
+
++ if (ctx == NULL) {
++ warn("unmount_all: No hal connection! can't unmount volumes\n");
++ return;
++ }
+ dbg ("unmounting all volumes that we saw mounted in our life\n");
+ dbus_error_init (&error);
+ for (l = all_mounted_volumes; l != NULL; l = g_slist_next (l)) {
================================================================
More information about the pld-cvs-commit
mailing list