Merge branch 'cherry-pick-volume-mount-2-56' into 'glib-2-56'

Cherry pick GVolumeMonitor mount changes to glib-2-56 from issue #1458

See merge request GNOME/glib!224
This commit is contained in:
Ondrej Holy
2018-08-09 14:50:51 +00:00
4 changed files with 23 additions and 29 deletions

View File

@@ -39,6 +39,7 @@ typedef enum {
static int outstanding_mounts = 0; static int outstanding_mounts = 0;
static GMainLoop *main_loop; static GMainLoop *main_loop;
static GVolumeMonitor *volume_monitor;
static gboolean mount_mountable = FALSE; static gboolean mount_mountable = FALSE;
static gboolean mount_unmount = FALSE; static gboolean mount_unmount = FALSE;
@@ -813,11 +814,8 @@ list_drives (GList *drives,
static void static void
list_monitor_items (void) list_monitor_items (void)
{ {
GVolumeMonitor *volume_monitor;
GList *drives, *volumes, *mounts; GList *drives, *volumes, *mounts;
volume_monitor = g_volume_monitor_get();
/* populate gvfs network mounts */ /* populate gvfs network mounts */
iterate_gmain(); iterate_gmain();
@@ -832,19 +830,14 @@ list_monitor_items (void)
mounts = g_volume_monitor_get_mounts (volume_monitor); mounts = g_volume_monitor_get_mounts (volume_monitor);
list_mounts (mounts, 0, TRUE); list_mounts (mounts, 0, TRUE);
g_list_free_full (mounts, g_object_unref); g_list_free_full (mounts, g_object_unref);
g_object_unref (volume_monitor);
} }
static void static void
unmount_all_with_scheme (const char *scheme) unmount_all_with_scheme (const char *scheme)
{ {
GVolumeMonitor *volume_monitor;
GList *mounts; GList *mounts;
GList *l; GList *l;
volume_monitor = g_volume_monitor_get();
/* populate gvfs network mounts */ /* populate gvfs network mounts */
iterate_gmain(); iterate_gmain();
@@ -860,8 +853,6 @@ unmount_all_with_scheme (const char *scheme)
g_object_unref (root); g_object_unref (root);
} }
g_list_free_full (mounts, g_object_unref); g_list_free_full (mounts, g_object_unref);
g_object_unref (volume_monitor);
} }
static void static void
@@ -912,12 +903,9 @@ mount_with_device_file_cb (GObject *object,
static void static void
mount_with_device_file (const char *device_file) mount_with_device_file (const char *device_file)
{ {
GVolumeMonitor *volume_monitor;
GList *volumes; GList *volumes;
GList *l; GList *l;
volume_monitor = g_volume_monitor_get();
volumes = g_volume_monitor_get_volumes (volume_monitor); volumes = g_volume_monitor_get_volumes (volume_monitor);
for (l = volumes; l != NULL; l = l->next) for (l = volumes; l != NULL; l = l->next)
{ {
@@ -950,8 +938,6 @@ mount_with_device_file (const char *device_file)
print_error ("%s: %s", device_file, _("No volume for device file")); print_error ("%s: %s", device_file, _("No volume for device file"));
success = FALSE; success = FALSE;
} }
g_object_unref (volume_monitor);
} }
static void static void
@@ -1105,10 +1091,6 @@ monitor_drive_eject_button (GVolumeMonitor *volume_monitor, GDrive *drive)
static void static void
monitor (void) monitor (void)
{ {
GVolumeMonitor *volume_monitor;
volume_monitor = g_volume_monitor_get ();
g_signal_connect (volume_monitor, "mount-added", (GCallback) monitor_mount_added, NULL); g_signal_connect (volume_monitor, "mount-added", (GCallback) monitor_mount_added, NULL);
g_signal_connect (volume_monitor, "mount-removed", (GCallback) monitor_mount_removed, NULL); g_signal_connect (volume_monitor, "mount-removed", (GCallback) monitor_mount_removed, NULL);
g_signal_connect (volume_monitor, "mount-changed", (GCallback) monitor_mount_changed, NULL); g_signal_connect (volume_monitor, "mount-changed", (GCallback) monitor_mount_changed, NULL);
@@ -1163,6 +1145,7 @@ handle_mount (int argc, char *argv[], gboolean do_help)
g_option_context_free (context); g_option_context_free (context);
main_loop = g_main_loop_new (NULL, FALSE); main_loop = g_main_loop_new (NULL, FALSE);
volume_monitor = g_volume_monitor_get ();
if (mount_list) if (mount_list)
list_monitor_items (); list_monitor_items ();
@@ -1190,5 +1173,7 @@ handle_mount (int argc, char *argv[], gboolean do_help)
if (outstanding_mounts > 0) if (outstanding_mounts > 0)
g_main_loop_run (main_loop); g_main_loop_run (main_loop);
g_object_unref (volume_monitor);
return success ? 0 : 2; return success ? 0 : 2;
} }

View File

@@ -274,6 +274,7 @@ eject_mount_done (GObject *source,
GTask *task = user_data; GTask *task = user_data;
GError *error = NULL; GError *error = NULL;
gchar *stderr_str; gchar *stderr_str;
GUnixVolume *unix_volume;
if (!g_subprocess_communicate_utf8_finish (subprocess, result, NULL, &stderr_str, &error)) if (!g_subprocess_communicate_utf8_finish (subprocess, result, NULL, &stderr_str, &error))
{ {
@@ -286,8 +287,12 @@ eject_mount_done (GObject *source,
/* ...but bad exit code */ /* ...but bad exit code */
g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED, "%s", stderr_str); g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED, "%s", stderr_str);
else else
{
/* ...and successful exit code */ /* ...and successful exit code */
unix_volume = G_UNIX_VOLUME (g_task_get_source_object (task));
_g_unix_volume_monitor_update (G_UNIX_VOLUME_MONITOR (unix_volume->volume_monitor));
g_task_return_boolean (task, TRUE); g_task_return_boolean (task, TRUE);
}
g_free (stderr_str); g_free (stderr_str);
} }

View File

@@ -183,15 +183,21 @@ g_unix_volume_monitor_class_init (GUnixVolumeMonitorClass *klass)
native_class->get_mount_for_mount_path = get_mount_for_mount_path; native_class->get_mount_for_mount_path = get_mount_for_mount_path;
} }
void
_g_unix_volume_monitor_update (GUnixVolumeMonitor *unix_monitor)
{
/* Update both to make sure volumes are created before mounts */
update_volumes (unix_monitor);
update_mounts (unix_monitor);
}
static void static void
mountpoints_changed (GUnixMountMonitor *mount_monitor, mountpoints_changed (GUnixMountMonitor *mount_monitor,
gpointer user_data) gpointer user_data)
{ {
GUnixVolumeMonitor *unix_monitor = user_data; GUnixVolumeMonitor *unix_monitor = user_data;
/* Update both to make sure volumes are created before mounts */ _g_unix_volume_monitor_update (unix_monitor);
update_volumes (unix_monitor);
update_mounts (unix_monitor);
} }
static void static void
@@ -200,9 +206,7 @@ mounts_changed (GUnixMountMonitor *mount_monitor,
{ {
GUnixVolumeMonitor *unix_monitor = user_data; GUnixVolumeMonitor *unix_monitor = user_data;
/* Update both to make sure volumes are created before mounts */ _g_unix_volume_monitor_update (unix_monitor);
update_volumes (unix_monitor);
update_mounts (unix_monitor);
} }
static void static void
@@ -219,8 +223,7 @@ g_unix_volume_monitor_init (GUnixVolumeMonitor *unix_monitor)
"mountpoints-changed", G_CALLBACK (mountpoints_changed), "mountpoints-changed", G_CALLBACK (mountpoints_changed),
unix_monitor); unix_monitor);
update_volumes (unix_monitor); _g_unix_volume_monitor_update (unix_monitor);
update_mounts (unix_monitor);
} }
GVolumeMonitor * GVolumeMonitor *

View File

@@ -55,6 +55,7 @@ GType _g_unix_volume_monitor_get_type (void) G_GN
GVolumeMonitor * _g_unix_volume_monitor_new (void); GVolumeMonitor * _g_unix_volume_monitor_new (void);
GUnixVolume * _g_unix_volume_monitor_lookup_volume_for_mount_path (GUnixVolumeMonitor *monitor, GUnixVolume * _g_unix_volume_monitor_lookup_volume_for_mount_path (GUnixVolumeMonitor *monitor,
const char *mount_path); const char *mount_path);
void _g_unix_volume_monitor_update (GUnixVolumeMonitor *monitor);
G_END_DECLS G_END_DECLS