mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-19 15:51:40 +00:00
Fixed bug with "Disks" submenu in desktop context menu where
the volume-mounting behavior would sometimes run when the context menu appeared. * libnautilus-extensions/nautilus-volume-monitor.h: * libnautilus-extensions/nautilus-volume-monitor.c: (nautilus_volume_monitor_mount_unmount_removable): Added boolean parameter to specify whether to mount or unmount; previously it always toggled the current state. * src/file-manager/fm-desktop-icon-view.c: (mount_parameters_new), (mount_parameters_free), (mount_parameters_free_wrapper): New little helper functions for dealing with the parameters to the mount_or_unmount callback. (mount_or_unmount_removable_volume): Now specifies whether to mount or unmount based on command state, rather than always toggling; also updates the menu state after the mount/unmount. (update_disks_menu): Pass view as well as mount_path for callback data, using mount_parameters_new & _free.
This commit is contained in:
parent
9e7f5397c3
commit
a930796519
22
ChangeLog
22
ChangeLog
|
@ -1,3 +1,25 @@
|
|||
2000-11-17 John Sullivan <sullivan@eazel.com>
|
||||
|
||||
Fixed bug with "Disks" submenu in desktop context menu where
|
||||
the volume-mounting behavior would sometimes run when the
|
||||
context menu appeared.
|
||||
|
||||
* libnautilus-extensions/nautilus-volume-monitor.h:
|
||||
* libnautilus-extensions/nautilus-volume-monitor.c:
|
||||
(nautilus_volume_monitor_mount_unmount_removable):
|
||||
Added boolean parameter to specify whether to mount or
|
||||
unmount; previously it always toggled the current state.
|
||||
|
||||
* src/file-manager/fm-desktop-icon-view.c:
|
||||
(mount_parameters_new), (mount_parameters_free),
|
||||
(mount_parameters_free_wrapper): New little helper functions
|
||||
for dealing with the parameters to the mount_or_unmount callback.
|
||||
(mount_or_unmount_removable_volume): Now specifies whether to
|
||||
mount or unmount based on command state, rather than always
|
||||
toggling; also updates the menu state after the mount/unmount.
|
||||
(update_disks_menu): Pass view as well as mount_path for
|
||||
callback data, using mount_parameters_new & _free.
|
||||
|
||||
2000-11-16 Pavel Cisler <pavel@eazel.com>
|
||||
|
||||
reviewed by: Mathieu Lacage <mathieu@eazel.com>
|
||||
|
|
|
@ -1105,7 +1105,8 @@ nautilus_volume_monitor_each_mounted_volume (NautilusVolumeMonitor *monitor,
|
|||
|
||||
gboolean
|
||||
nautilus_volume_monitor_mount_unmount_removable (NautilusVolumeMonitor *monitor,
|
||||
const char *mount_point)
|
||||
const char *mount_point,
|
||||
gboolean should_mount)
|
||||
{
|
||||
gboolean is_mounted, found_volume;
|
||||
char *argv[3];
|
||||
|
@ -1130,14 +1131,15 @@ nautilus_volume_monitor_mount_unmount_removable (NautilusVolumeMonitor *monitor,
|
|||
/* Get mount state and then decide to mount/unmount the volume */
|
||||
if (found_volume) {
|
||||
is_mounted = nautilus_volume_monitor_volume_is_mounted (volume);
|
||||
if (should_mount != is_mounted) {
|
||||
argv[0] = is_mounted ? "/bin/umount" : "/bin/mount";
|
||||
argv[1] = (char *) mount_point;
|
||||
argv[2] = NULL;
|
||||
|
||||
argv[0] = is_mounted ? "/bin/umount" : "/bin/mount";
|
||||
argv[1] = (char *) mount_point;
|
||||
argv[2] = NULL;
|
||||
|
||||
exec_err = gnome_execute_async (g_get_home_dir(), 2, argv);
|
||||
if (exec_err == -1) {
|
||||
is_mounted = !is_mounted;
|
||||
exec_err = gnome_execute_async (g_get_home_dir(), 2, argv);
|
||||
if (exec_err == -1) {
|
||||
is_mounted = !is_mounted;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -103,7 +103,8 @@ char *nautilus_volume_monitor_get_volume_name (const NautilusVolume *volu
|
|||
|
||||
gboolean nautilus_volume_monitor_volume_is_mounted (const NautilusVolume *volume);
|
||||
gboolean nautilus_volume_monitor_mount_unmount_removable (NautilusVolumeMonitor *monitor,
|
||||
const char *mount_point);
|
||||
const char *mount_point,
|
||||
gboolean should_mount);
|
||||
gboolean nautilus_volume_monitor_volume_is_removable (NautilusVolume *volume);
|
||||
gboolean nautilus_volume_monitor_is_volume_link (const char *path);
|
||||
void nautilus_volume_monitor_each_volume (NautilusVolumeMonitor *monitor,
|
||||
|
|
|
@ -1105,7 +1105,8 @@ nautilus_volume_monitor_each_mounted_volume (NautilusVolumeMonitor *monitor,
|
|||
|
||||
gboolean
|
||||
nautilus_volume_monitor_mount_unmount_removable (NautilusVolumeMonitor *monitor,
|
||||
const char *mount_point)
|
||||
const char *mount_point,
|
||||
gboolean should_mount)
|
||||
{
|
||||
gboolean is_mounted, found_volume;
|
||||
char *argv[3];
|
||||
|
@ -1130,14 +1131,15 @@ nautilus_volume_monitor_mount_unmount_removable (NautilusVolumeMonitor *monitor,
|
|||
/* Get mount state and then decide to mount/unmount the volume */
|
||||
if (found_volume) {
|
||||
is_mounted = nautilus_volume_monitor_volume_is_mounted (volume);
|
||||
if (should_mount != is_mounted) {
|
||||
argv[0] = is_mounted ? "/bin/umount" : "/bin/mount";
|
||||
argv[1] = (char *) mount_point;
|
||||
argv[2] = NULL;
|
||||
|
||||
argv[0] = is_mounted ? "/bin/umount" : "/bin/mount";
|
||||
argv[1] = (char *) mount_point;
|
||||
argv[2] = NULL;
|
||||
|
||||
exec_err = gnome_execute_async (g_get_home_dir(), 2, argv);
|
||||
if (exec_err == -1) {
|
||||
is_mounted = !is_mounted;
|
||||
exec_err = gnome_execute_async (g_get_home_dir(), 2, argv);
|
||||
if (exec_err == -1) {
|
||||
is_mounted = !is_mounted;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -103,7 +103,8 @@ char *nautilus_volume_monitor_get_volume_name (const NautilusVolume *volu
|
|||
|
||||
gboolean nautilus_volume_monitor_volume_is_mounted (const NautilusVolume *volume);
|
||||
gboolean nautilus_volume_monitor_mount_unmount_removable (NautilusVolumeMonitor *monitor,
|
||||
const char *mount_point);
|
||||
const char *mount_point,
|
||||
gboolean should_mount);
|
||||
gboolean nautilus_volume_monitor_volume_is_removable (NautilusVolume *volume);
|
||||
gboolean nautilus_volume_monitor_is_volume_link (const char *path);
|
||||
void nautilus_volume_monitor_each_volume (NautilusVolumeMonitor *monitor,
|
||||
|
|
|
@ -51,6 +51,7 @@
|
|||
#include <libnautilus-extensions/nautilus-link.h>
|
||||
#include <libnautilus-extensions/nautilus-metadata.h>
|
||||
#include <libnautilus-extensions/nautilus-program-choosing.h>
|
||||
#include <libnautilus-extensions/nautilus-string.h>
|
||||
#include <libnautilus-extensions/nautilus-volume-monitor.h>
|
||||
#include <src/nautilus-application.h>
|
||||
#include <limits.h>
|
||||
|
@ -80,6 +81,10 @@ typedef struct {
|
|||
GnomeDesktopEntry *entry;
|
||||
} CallbackData;
|
||||
|
||||
typedef struct {
|
||||
FMDesktopIconView *view;
|
||||
char *mount_path;
|
||||
} MountParameters;
|
||||
|
||||
static void fm_desktop_icon_view_initialize (FMDesktopIconView *desktop_icon_view);
|
||||
static void fm_desktop_icon_view_initialize_class (FMDesktopIconViewClass *klass);
|
||||
|
@ -109,6 +114,7 @@ static gboolean real_supports_auto_layout (FMIconView *view);
|
|||
static void real_merge_menus (FMDirectoryView *view);
|
||||
static void real_update_menus (FMDirectoryView *view);
|
||||
static gboolean real_supports_zooming (FMDirectoryView *view);
|
||||
static void update_disks_menu (FMDesktopIconView *view);
|
||||
|
||||
|
||||
NAUTILUS_DEFINE_CLASS_BOILERPLATE (FMDesktopIconView,
|
||||
|
@ -929,6 +935,38 @@ desktop_icons_compare_callback (NautilusIconContainer *container,
|
|||
}
|
||||
}
|
||||
|
||||
static MountParameters *
|
||||
mount_parameters_new (FMDesktopIconView *view, const char *mount_path)
|
||||
{
|
||||
MountParameters *new_parameters;
|
||||
|
||||
g_assert (FM_IS_DESKTOP_ICON_VIEW (view));
|
||||
g_assert (!nautilus_str_is_empty (mount_path));
|
||||
|
||||
new_parameters = g_new (MountParameters, 1);
|
||||
gtk_object_ref (GTK_OBJECT (view));
|
||||
new_parameters->view = view;
|
||||
new_parameters->mount_path = g_strdup (mount_path);
|
||||
|
||||
return new_parameters;
|
||||
}
|
||||
|
||||
static void
|
||||
mount_parameters_free (MountParameters *parameters)
|
||||
{
|
||||
g_assert (parameters != NULL);
|
||||
|
||||
gtk_object_unref (GTK_OBJECT (parameters->view));
|
||||
g_free (parameters->mount_path);
|
||||
g_free (parameters);
|
||||
}
|
||||
|
||||
static void
|
||||
mount_parameters_free_wrapper (gpointer user_data)
|
||||
{
|
||||
mount_parameters_free ((MountParameters *)user_data);
|
||||
}
|
||||
|
||||
static void
|
||||
mount_or_unmount_removable_volume (BonoboUIComponent *component,
|
||||
const char *path,
|
||||
|
@ -936,6 +974,8 @@ mount_or_unmount_removable_volume (BonoboUIComponent *component,
|
|||
const char *state,
|
||||
gpointer user_data)
|
||||
{
|
||||
MountParameters *parameters;
|
||||
|
||||
g_assert (BONOBO_IS_UI_COMPONENT (component));
|
||||
|
||||
if (strcmp (state, "") == 0) {
|
||||
|
@ -943,8 +983,10 @@ mount_or_unmount_removable_volume (BonoboUIComponent *component,
|
|||
return;
|
||||
}
|
||||
|
||||
parameters = (MountParameters *)user_data;
|
||||
nautilus_volume_monitor_mount_unmount_removable
|
||||
(nautilus_volume_monitor_get (), (char *)user_data);
|
||||
(nautilus_volume_monitor_get (), parameters->mount_path, strcmp (state, "1") == 0);
|
||||
update_disks_menu (parameters->view);
|
||||
}
|
||||
|
||||
/* Fill in the context menu with an item for each disk that is or could be mounted */
|
||||
|
@ -1002,8 +1044,8 @@ update_disks_menu (FMDesktopIconView *view)
|
|||
(view->details->ui,
|
||||
command_name,
|
||||
mount_or_unmount_removable_volume,
|
||||
g_strdup (volume->mount_path),
|
||||
g_free);
|
||||
mount_parameters_new (view, volume->mount_path),
|
||||
mount_parameters_free_wrapper);
|
||||
|
||||
g_free (command_name);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue