[Xfce4-commits] <thunar:jannis/new-shortcuts-pane> Further work on mount/unmonut/disconnect context menu actions.
Jannis Pohlmann
noreply at xfce.org
Mon Jun 13 22:28:02 CEST 2011
Updating branch refs/heads/jannis/new-shortcuts-pane
to 9fe85de5970b0e7f3852b5a3dced2cb6a439ba8a (commit)
from 1fe553082e87442099f2750a90fa6d10b6e3d8c4 (commit)
commit 9fe85de5970b0e7f3852b5a3dced2cb6a439ba8a
Author: Jannis Pohlmann <jannis at xfce.org>
Date: Mon Jun 13 00:07:03 2011 +0200
Further work on mount/unmonut/disconnect context menu actions.
thunar/thunar-shortcut-row.c | 323 +++++++++++++++++++++++-----------------
thunar/thunar-shortcut-row.h | 4 +-
thunar/thunar-shortcuts-view.c | 49 ++++++-
3 files changed, 233 insertions(+), 143 deletions(-)
diff --git a/thunar/thunar-shortcut-row.c b/thunar/thunar-shortcut-row.c
index 504d861..ae98671 100644
--- a/thunar/thunar-shortcut-row.c
+++ b/thunar/thunar-shortcut-row.c
@@ -873,10 +873,6 @@ static void
thunar_shortcut_row_button_clicked (ThunarShortcutRow *row,
GtkButton *button)
{
- GMountOperation *mount_operation;
- GtkWidget *toplevel;
- GMount *mount;
-
_thunar_return_if_fail (THUNAR_IS_SHORTCUT_ROW (row));
/* check if we are currently mounting/ejecting something */
@@ -889,109 +885,8 @@ thunar_shortcut_row_button_clicked (ThunarShortcutRow *row,
return;
}
- /* create a mount operation */
- toplevel = gtk_widget_get_toplevel (GTK_WIDGET (row));
- mount_operation = gtk_mount_operation_new (GTK_WINDOW (toplevel));
- gtk_mount_operation_set_screen (GTK_MOUNT_OPERATION (mount_operation),
- gtk_widget_get_screen (GTK_WIDGET (row)));
-
- if (row->shortcut_type == THUNAR_SHORTCUT_STANDALONE_MOUNT)
- {
- /* if this fails there is something out of sync with the model */
- g_assert (row->mount != NULL);
-
- if (g_mount_can_unmount (row->mount))
- {
- /* start spinning */
- thunar_shortcut_row_set_spinning (row, TRUE, THUNAR_SHORTCUT_ROW_EJECTING);
-
- /* try unmounting the mount */
- g_mount_unmount_with_operation (row->mount,
- G_MOUNT_UNMOUNT_NONE,
- mount_operation,
- row->cancellable,
- thunar_shortcut_row_mount_unmount_finish,
- row);
- }
- else if (g_mount_can_eject (row->mount))
- {
- g_debug ("need to eject the mount");
-
- /* start spinning */
- thunar_shortcut_row_set_spinning (row, TRUE, THUNAR_SHORTCUT_ROW_EJECTING);
-
- /* try ejecting the mount */
- g_mount_eject_with_operation (row->mount,
- G_MOUNT_UNMOUNT_NONE,
- mount_operation,
- row->cancellable,
- thunar_shortcut_row_mount_eject_finish,
- row);
- }
- else
- {
- /* something is out of sync... */
- }
- }
- else if (row->shortcut_type == THUNAR_SHORTCUT_REGULAR_VOLUME
- || row->shortcut_type == THUNAR_SHORTCUT_EJECTABLE_VOLUME)
- {
- /* if this fails there is something out of sync with the model */
- g_assert (row->volume != NULL);
-
- /* check if the volume is mounted */
- mount = g_volume_get_mount (row->volume);
- if (mount != NULL)
- {
- g_debug ("have mount");
-
- /* check if we can unmount the mount */
- if (g_mount_can_unmount (mount))
- {
- g_debug (" trying to unmount the mount");
-
- /* start spinning */
- thunar_shortcut_row_set_spinning (row, TRUE, THUNAR_SHORTCUT_ROW_EJECTING);
-
- /* try unmounting the mount */
- g_mount_unmount_with_operation (mount,
- G_MOUNT_UNMOUNT_NONE,
- mount_operation,
- row->cancellable,
- thunar_shortcut_row_mount_unmount_finish,
- row);
- }
- else if (g_mount_can_eject (mount))
- {
- g_debug (" trying to eject the mount");
-
- /* start spinning */
- thunar_shortcut_row_set_spinning (row, TRUE, THUNAR_SHORTCUT_ROW_EJECTING);
-
- /* try ejecting the mount */
- g_mount_eject_with_operation (mount,
- G_MOUNT_UNMOUNT_NONE,
- mount_operation,
- row->cancellable,
- thunar_shortcut_row_mount_eject_finish,
- row);
- }
-
- g_object_unref (mount);
- }
- else if (g_volume_can_eject (row->volume))
- {
- /* TODO try ejecting the volume */
- g_debug ("trying to eject the volume");
- }
- else
- {
- /* something is out of sync... */
- }
- }
-
- /* release the mount operation */
- g_object_unref (mount_operation);
+ /* disconnect the shortcut */
+ thunar_shortcut_row_disconnect (row);
}
@@ -1122,6 +1017,14 @@ thunar_shortcut_row_resolve_and_activate (ThunarShortcutRow *row,
_thunar_return_if_fail (THUNAR_IS_SHORTCUT_ROW (row));
+ /* check if we are currently mounting/ejecting something */
+ if (row->state != THUNAR_SHORTCUT_ROW_NORMAL)
+ {
+ /* abort the current mount/eject process */
+ g_cancellable_cancel (row->cancellable);
+ g_cancellable_reset (row->cancellable);
+ }
+
if (row->volume != NULL)
{
/* activate the spinner */
@@ -1666,21 +1569,110 @@ thunar_shortcut_row_set_icon_size (ThunarShortcutRow *row,
void
-thunar_shortcut_row_disconnect_mount (ThunarShortcutRow *row)
+thunar_shortcut_row_mount (ThunarShortcutRow *row)
+{
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUT_ROW (row));
+
+ thunar_shortcut_row_resolve_and_activate (row, FALSE);
+}
+
+
+
+void
+thunar_shortcut_row_unmount (ThunarShortcutRow *row)
{
GMountOperation *mount_operation;
GtkWidget *toplevel;
+ GMount *mount;
_thunar_return_if_fail (THUNAR_IS_SHORTCUT_ROW (row));
- _thunar_return_if_fail (row->shortcut_type == THUNAR_SHORTCUT_STANDALONE_MOUNT);
- if (row->shortcut_type != THUNAR_SHORTCUT_STANDALONE_MOUNT)
- return;
+ /* check if we are currently mounting/ejecting something */
+ if (row->state != THUNAR_SHORTCUT_ROW_NORMAL)
+ {
+ /* abort the current mount/eject process */
+ g_cancellable_cancel (row->cancellable);
+ g_cancellable_reset (row->cancellable);
+ }
- if (row->mount == NULL)
+ /* create a mount operation */
+ toplevel = gtk_widget_get_toplevel (GTK_WIDGET (row));
+ mount_operation = gtk_mount_operation_new (GTK_WINDOW (toplevel));
+ gtk_mount_operation_set_screen (GTK_MOUNT_OPERATION (mount_operation),
+ gtk_widget_get_screen (GTK_WIDGET (row)));
+
+ if (row->mount != NULL)
{
- /* something is out of sync */
- return;
+ /* only handle mounts that can be unmounted here */
+ if (g_mount_can_unmount (row->mount))
+ {
+ /* start spinning */
+ thunar_shortcut_row_set_spinning (row, TRUE, THUNAR_SHORTCUT_ROW_EJECTING);
+
+ /* try unmounting the mount */
+ g_mount_unmount_with_operation (row->mount,
+ G_MOUNT_UNMOUNT_NONE,
+ mount_operation,
+ row->cancellable,
+ thunar_shortcut_row_mount_unmount_finish,
+ row);
+ }
+ }
+ else if (row->volume != NULL)
+ {
+ mount = g_volume_get_mount (row->volume);
+ if (mount != NULL)
+ {
+ g_debug ("have mount");
+ /* only handle mounts that can be unmounted here */
+ if (g_mount_can_unmount(mount))
+ {
+ g_debug ("can unmount");
+ /* start spinning */
+ thunar_shortcut_row_set_spinning (row, TRUE,
+ THUNAR_SHORTCUT_ROW_EJECTING);
+
+ /* try unmounting the mount */
+ g_mount_unmount_with_operation (mount,
+ G_MOUNT_UNMOUNT_NONE,
+ mount_operation,
+ row->cancellable,
+ thunar_shortcut_row_mount_unmount_finish,
+ row);
+ }
+
+ /* release the mount */
+ g_object_unref (mount);
+ }
+
+ }
+ else
+ {
+ /* this method was called despite no mount or volume being available
+ * for this shortcut... that should not happen */
+ }
+
+ /* release the mount operation */
+ g_object_unref (mount_operation);
+}
+
+
+
+void
+thunar_shortcut_row_disconnect (ThunarShortcutRow *row)
+{
+ GMountOperation *mount_operation;
+ GtkWidget *toplevel;
+ GMount *mount;
+
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUT_ROW (row));
+
+ /* check if we are currently mounting/ejecting something */
+ if (row->state != THUNAR_SHORTCUT_ROW_NORMAL)
+ {
+ /* abort the current mount/eject process */
+ g_cancellable_cancel (row->cancellable);
+ g_cancellable_reset (row->cancellable);
}
/* create a mount operation */
@@ -1689,36 +1681,91 @@ thunar_shortcut_row_disconnect_mount (ThunarShortcutRow *row)
gtk_mount_operation_set_screen (GTK_MOUNT_OPERATION (mount_operation),
gtk_widget_get_screen (GTK_WIDGET (row)));
- /* distinguish between mountable and ejectable mounts */
- if (g_mount_can_unmount (row->mount))
+ if (row->mount != NULL)
{
- /* start spinning */
- thunar_shortcut_row_set_spinning (row, TRUE, THUNAR_SHORTCUT_ROW_EJECTING);
-
- /* try unmounting the mount */
- g_mount_unmount_with_operation (row->mount,
- G_MOUNT_UNMOUNT_NONE,
- mount_operation,
- row->cancellable,
- thunar_shortcut_row_mount_unmount_finish,
- row);
+ /* distinguish between ejectable and unmountable mounts */
+ if (g_mount_can_eject (row->mount))
+ {
+ /* start spinning */
+ thunar_shortcut_row_set_spinning (row, TRUE, THUNAR_SHORTCUT_ROW_EJECTING);
+
+ /* try ejecting the mount */
+ g_mount_eject_with_operation (row->mount,
+ G_MOUNT_UNMOUNT_NONE,
+ mount_operation,
+ row->cancellable,
+ thunar_shortcut_row_mount_eject_finish,
+ row);
+ }
+ else if (g_mount_can_unmount (row->mount))
+ {
+ /* start spinning */
+ thunar_shortcut_row_set_spinning (row, TRUE, THUNAR_SHORTCUT_ROW_EJECTING);
+
+ /* try unmounting the mount */
+ g_mount_unmount_with_operation (row->mount,
+ G_MOUNT_UNMOUNT_NONE,
+ mount_operation,
+ row->cancellable,
+ thunar_shortcut_row_mount_unmount_finish,
+ row);
+ }
+ else
+ {
+ /* something is out of sync... */
+ }
}
- else if (g_mount_can_eject (row->mount))
+ else if (row->volume != NULL)
{
- /* start spinning */
- thunar_shortcut_row_set_spinning (row, TRUE, THUNAR_SHORTCUT_ROW_EJECTING);
-
- /* try ejecting the mount */
- g_mount_eject_with_operation (row->mount,
- G_MOUNT_UNMOUNT_NONE,
- mount_operation,
- row->cancellable,
- thunar_shortcut_row_mount_eject_finish,
- row);
+ if (g_volume_can_eject (row->volume))
+ {
+ /* try to eject the volume */
+ g_debug ("trying to eject the volume");
+ }
+ else
+ {
+ mount = g_volume_get_mount (row->volume);
+ if (mount != NULL)
+ {
+ /* distinguish between ejectable and unmountable mounts */
+ if (g_mount_can_eject (mount))
+ {
+ /* start spinning */
+ thunar_shortcut_row_set_spinning (row, TRUE,
+ THUNAR_SHORTCUT_ROW_EJECTING);
+
+ /* try unmounting the mount */
+ g_mount_unmount_with_operation (mount,
+ G_MOUNT_UNMOUNT_NONE,
+ mount_operation,
+ row->cancellable,
+ thunar_shortcut_row_mount_unmount_finish,
+ row);
+ }
+ else if (g_mount_can_unmount (mount))
+ {
+ /* start spinning */
+ thunar_shortcut_row_set_spinning (row, TRUE,
+ THUNAR_SHORTCUT_ROW_EJECTING);
+
+ /* try unmounting the mount */
+ g_mount_unmount_with_operation (mount,
+ G_MOUNT_UNMOUNT_NONE,
+ mount_operation,
+ row->cancellable,
+ thunar_shortcut_row_mount_unmount_finish,
+ row);
+ }
+
+ /* release the mount */
+ g_object_unref (mount);
+ }
+ }
}
else
{
- /* something is out of sync... */
+ /* this method was called despite no mount or volume being available
+ * for this shortcut... that should not happen */
}
/* release the mount operation */
diff --git a/thunar/thunar-shortcut-row.h b/thunar/thunar-shortcut-row.h
index e114fec..effddfa 100644
--- a/thunar/thunar-shortcut-row.h
+++ b/thunar/thunar-shortcut-row.h
@@ -64,7 +64,9 @@ void thunar_shortcut_row_set_icon_size (ThunarShortcutRow *
ThunarIconSize icon_size);
void thunar_shortcut_row_resolve_and_activate (ThunarShortcutRow *row,
gboolean open_in_new_window);
-void thunar_shortcut_row_disconnect_mount (ThunarShortcutRow *row);
+void thunar_shortcut_row_mount (ThunarShortcutRow *row);
+void thunar_shortcut_row_unmount (ThunarShortcutRow *row);
+void thunar_shortcut_row_disconnect (ThunarShortcutRow *row);
G_END_DECLS
diff --git a/thunar/thunar-shortcuts-view.c b/thunar/thunar-shortcuts-view.c
index bf2b7a9..e34859b 100644
--- a/thunar/thunar-shortcuts-view.c
+++ b/thunar/thunar-shortcuts-view.c
@@ -108,7 +108,9 @@ static gboolean thunar_shortcuts_view_row_context_menu (Thunar
GtkWidget *widget);
static void thunar_shortcuts_view_row_open (ThunarShortcutsView *view);
static void thunar_shortcuts_view_row_open_new_window (ThunarShortcutsView *view);
-static void thunar_shortcuts_view_row_disconnect_mount (ThunarShortcutsView *view);
+static void thunar_shortcuts_view_row_disconnect (ThunarShortcutsView *view);
+static void thunar_shortcuts_view_row_mount (ThunarShortcutsView *view);
+static void thunar_shortcuts_view_row_unmount (ThunarShortcutsView *view);
static void thunar_shortcuts_view_open (ThunarShortcutsView *view,
ThunarFile *file,
gboolean new_window);
@@ -731,7 +733,7 @@ thunar_shortcuts_view_row_context_menu (ThunarShortcutsView *view,
/* append the "Disconnect" item */
item = gtk_image_menu_item_new_with_mnemonic (_("Disconn_ect"));
g_signal_connect_swapped (item, "activate",
- G_CALLBACK (thunar_shortcuts_view_row_disconnect_mount),
+ G_CALLBACK (thunar_shortcuts_view_row_disconnect),
view);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show (item);
@@ -753,6 +755,9 @@ thunar_shortcuts_view_row_context_menu (ThunarShortcutsView *view,
/* append the "Mount" item */
item = gtk_image_menu_item_new_with_mnemonic (_("_Mount"));
gtk_widget_set_sensitive (item, !thunar_g_volume_is_mounted (volume));
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (thunar_shortcuts_view_row_mount),
+ view);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show (item);
@@ -761,6 +766,9 @@ thunar_shortcuts_view_row_context_menu (ThunarShortcutsView *view,
/* append the "Unmount" item */
item = gtk_image_menu_item_new_with_mnemonic (_("_Unmount"));
gtk_widget_set_sensitive (item, thunar_g_volume_is_mounted (volume));
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (thunar_shortcuts_view_row_unmount),
+ view);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show (item);
}
@@ -768,6 +776,9 @@ thunar_shortcuts_view_row_context_menu (ThunarShortcutsView *view,
/* append the "Disconnect" (eject + safely remove drive) item */
item = gtk_image_menu_item_new_with_mnemonic (_("Disconn_ect"));
gtk_widget_set_sensitive (item, thunar_g_volume_is_mounted (volume));
+ g_signal_connect_swapped (item, "activate",
+ G_CALLBACK (thunar_shortcuts_view_row_disconnect),
+ view);
gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
gtk_widget_show (item);
}
@@ -902,7 +913,37 @@ thunar_shortcuts_view_row_open_new_window (ThunarShortcutsView *view)
static void
-thunar_shortcuts_view_row_disconnect_mount (ThunarShortcutsView *view)
+thunar_shortcuts_view_row_disconnect (ThunarShortcutsView *view)
+{
+ ThunarShortcutRow *row;
+
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUTS_VIEW (view));
+
+ row = thunar_shortcuts_view_get_selected_row (view);
+
+ if (row != NULL)
+ thunar_shortcut_row_disconnect (row);
+}
+
+
+
+static void
+thunar_shortcuts_view_row_mount (ThunarShortcutsView *view)
+{
+ ThunarShortcutRow *row;
+
+ _thunar_return_if_fail (THUNAR_IS_SHORTCUTS_VIEW (view));
+
+ row = thunar_shortcuts_view_get_selected_row (view);
+
+ if (row != NULL)
+ thunar_shortcut_row_mount (row);
+}
+
+
+
+static void
+thunar_shortcuts_view_row_unmount (ThunarShortcutsView *view)
{
ThunarShortcutRow *row;
@@ -911,7 +952,7 @@ thunar_shortcuts_view_row_disconnect_mount (ThunarShortcutsView *view)
row = thunar_shortcuts_view_get_selected_row (view);
if (row != NULL)
- thunar_shortcut_row_disconnect_mount (row);
+ thunar_shortcut_row_unmount (row);
}
More information about the Xfce4-commits
mailing list