Commit 0e85a1ca authored by David Zeuthen's avatar David Zeuthen Committed by David Zeuthen

Fix how autorunning works. Instead of inhibiting autorunning every time we

2008-04-29  David Zeuthen  <davidz@redhat.com>

        * libnautilus-private/nautilus-autorun.c:
        * libnautilus-private/nautilus-autorun.h:
        * libnautilus-private/nautilus-file-operations.c:
        (volume_mount_cb), (nautilus_file_operations_mount_volume):
        * libnautilus-private/nautilus-file-operations.h:
        * libnautilus-private/nautilus-mime-actions.c:
        (activation_mount_not_mounted_callback):
        * libnautilus-private/nautilus-vfs-file.c:
        (vfs_file_mount_callback):
        * src/nautilus-application.c: (startup_volume_mount_cb),
        (volume_added_callback):
        * src/nautilus-places-sidebar.c: (open_selected_bookmark),
        (mount_shortcut_cb):
        * src/nautilus-window-manage-views.c: (mount_not_mounted_callback):
        Fix how autorunning works. Instead of inhibiting autorunning
        every time we run something, we turn things around and instead
        allow automounting only in the instance where Nautilus automounted
        something itself. So in essence this patch is s/inhibit/allow/.
        This fixes an annoying problem where Nautilus would do autorun
        everytime something was mounted even from the command line. A
        consequence of this are windows popping up and other annoyances.
        This patch fixes that problem.

        * src/nautilus-x-content-bar.c: (nautilus_x_content_bar_init):
        Make sure the label is ellipsized.


svn path=/trunk/; revision=14112
parent fe93322d
2008-04-29 David Zeuthen <davidz@redhat.com>
* libnautilus-private/nautilus-autorun.c:
* libnautilus-private/nautilus-autorun.h:
* libnautilus-private/nautilus-file-operations.c:
(volume_mount_cb), (nautilus_file_operations_mount_volume):
* libnautilus-private/nautilus-file-operations.h:
* libnautilus-private/nautilus-mime-actions.c:
(activation_mount_not_mounted_callback):
* libnautilus-private/nautilus-vfs-file.c:
(vfs_file_mount_callback):
* src/nautilus-application.c: (startup_volume_mount_cb),
(volume_added_callback):
* src/nautilus-places-sidebar.c: (open_selected_bookmark),
(mount_shortcut_cb):
* src/nautilus-window-manage-views.c: (mount_not_mounted_callback):
Fix how autorunning works. Instead of inhibiting autorunning
every time we run something, we turn things around and instead
allow automounting only in the instance where Nautilus automounted
something itself. So in essence this patch is s/inhibit/allow/.
This fixes an annoying problem where Nautilus would do autorun
everytime something was mounted even from the command line. A
consequence of this are windows popping up and other annoyances.
This patch fixes that problem.
* src/nautilus-x-content-bar.c: (nautilus_x_content_bar_init):
Make sure the label is ellipsized.
2008-04-27 Cosimo Cecchi <cosimoc@gnome.org>
* libnautilus-private/nautilus-file-operations.c: (delete_files),
......
......@@ -1353,54 +1353,31 @@ nautilus_autorun_get_cached_x_content_types_for_mount (GMount *mount)
return NULL;
}
static GList *inhibit_mount_handling_for = NULL;
static gboolean
remove_inhibit_file_cb (gpointer data)
remove_allow_volume (gpointer data)
{
GFile *file = data;
GList *l;
GVolume *volume = data;
l = g_list_find (inhibit_mount_handling_for, file);
if (l != NULL) {
inhibit_mount_handling_for = g_list_delete_link (inhibit_mount_handling_for, l);
g_object_unref (file);
}
g_object_set_data (G_OBJECT (volume), "nautilus-allow-autorun", NULL);
return FALSE;
}
void
nautilus_inhibit_autorun_for_file (GFile *file)
nautilus_allow_autorun_for_volume (GVolume *volume)
{
inhibit_mount_handling_for = g_list_prepend (inhibit_mount_handling_for, g_object_ref (file));
g_timeout_add_full (0,
5000,
remove_inhibit_file_cb,
g_object_ref (file),
g_object_unref);
}
static gboolean
remove_inhibit_volume (gpointer data)
{
GVolume *volume = data;
g_object_set_data (G_OBJECT (volume), "nautilus-inhibit-autorun", NULL);
return FALSE;
g_object_set_data (G_OBJECT (volume), "nautilus-allow-autorun", GINT_TO_POINTER (1));
}
void
nautilus_inhibit_autorun_for_volume (GVolume *volume)
nautilus_allow_autorun_for_volume_finish (GVolume *volume)
{
g_object_set_data (G_OBJECT (volume), "nautilus-inhibit-autorun", GINT_TO_POINTER (1));
g_timeout_add_full (0,
5000,
remove_inhibit_volume,
g_object_ref (volume),
g_object_unref);
if (g_object_get_data (G_OBJECT (volume), "nautilus-allow-autorun") != NULL) {
g_timeout_add_full (0,
5000,
remove_allow_volume,
g_object_ref (volume),
g_object_unref);
}
}
static gboolean
......@@ -1420,17 +1397,16 @@ should_skip_native_mount_root (GFile *root)
static gboolean
should_autorun_mount (GMount *mount)
{
GFile *root, *file;
GList *l;
GFile *root;
GVolume *enclosing_volume;
gboolean ignore_autorun;
ignore_autorun = FALSE;
ignore_autorun = TRUE;
enclosing_volume = g_mount_get_volume (mount);
if (enclosing_volume != NULL) {
if (g_object_get_data (G_OBJECT (enclosing_volume), "nautilus-inhibit-autorun") != NULL) {
ignore_autorun = TRUE;
g_object_set_data (G_OBJECT (enclosing_volume), "nautilus-inhibit-autorun", NULL);
if (g_object_get_data (G_OBJECT (enclosing_volume), "nautilus-allow-autorun") != NULL) {
ignore_autorun = FALSE;
g_object_set_data (G_OBJECT (enclosing_volume), "nautilus-allow-autorun", NULL);
}
}
......@@ -1443,18 +1419,6 @@ should_autorun_mount (GMount *mount)
root = g_mount_get_root (mount);
for (l = inhibit_mount_handling_for; l != NULL; l = l->next) {
file = l->data;
if (g_file_has_prefix (file, root)) {
ignore_autorun = TRUE;
inhibit_mount_handling_for = g_list_delete_link (inhibit_mount_handling_for, l);
g_object_unref (file);
break;
}
}
/* only do autorun on local files or files where g_volume_should_automount() returns TRUE */
ignore_autorun = TRUE;
if ((g_file_is_native (root) && !should_skip_native_mount_root (root)) ||
......
......@@ -89,7 +89,7 @@ void nautilus_autorun_get_x_content_types_for_mount_async (GMount *mount,
void nautilus_autorun_launch_for_mount (GMount *mount, GAppInfo *app_info);
void nautilus_inhibit_autorun_for_volume (GVolume *volume);
void nautilus_inhibit_autorun_for_file (GFile *file);
void nautilus_allow_autorun_for_volume (GVolume *volume);
void nautilus_allow_autorun_for_volume_finish (GVolume *volume);
#endif /* NAUTILUS_AUTORUN_H */
......@@ -2030,11 +2030,9 @@ volume_mount_cb (GObject *source_object,
GError *error;
char *primary;
char *name;
gboolean inhibit_autorun;
inhibit_autorun = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (mount_op), "inhibit-autorun"));
error = NULL;
nautilus_allow_autorun_for_volume_finish (G_VOLUME (source_object));
if (!g_volume_mount_finish (G_VOLUME (source_object), res, &error)) {
if (error->code != G_IO_ERROR_FAILED_HANDLED) {
name = g_volume_get_name (G_VOLUME (source_object));
......@@ -2046,12 +2044,8 @@ volume_mount_cb (GObject *source_object,
g_free (primary);
}
g_error_free (error);
} else {
if (inhibit_autorun) {
nautilus_inhibit_autorun_for_volume (G_VOLUME (source_object));
}
}
g_object_unref (mount_op);
}
......@@ -2059,12 +2053,13 @@ volume_mount_cb (GObject *source_object,
void
nautilus_file_operations_mount_volume (GtkWindow *parent_window,
GVolume *volume,
gboolean inhibit_autorun)
gboolean allow_autorun)
{
GMountOperation *mount_op;
mount_op = eel_mount_operation_new (parent_window);
g_object_set_data (G_OBJECT (mount_op), "inhibit-autorun", GINT_TO_POINTER (inhibit_autorun));
if (allow_autorun)
nautilus_allow_autorun_for_volume (volume);
g_volume_mount (volume, 0, mount_op, NULL, volume_mount_cb, mount_op);
}
......
......@@ -93,7 +93,7 @@ void nautilus_file_operations_unmount_mount (GtkWindow *par
gboolean check_trash);
void nautilus_file_operations_mount_volume (GtkWindow *parent_window,
GVolume *volume,
gboolean inhibit_autorun);
gboolean allow_autorun);
void nautilus_file_operations_copy (GList *files,
......
......@@ -1258,7 +1258,6 @@ activation_mount_not_mounted_callback (GObject *source_object,
g_error_free (error);
} else {
location = nautilus_file_get_location (file);
nautilus_inhibit_autorun_for_file (location);
g_object_unref (G_OBJECT (location));
}
......
......@@ -239,7 +239,6 @@ vfs_file_mount_callback (GObject *source_object,
res, &error);
nautilus_file_operation_complete (op, mounted_on, error);
if (mounted_on) {
nautilus_inhibit_autorun_for_file (mounted_on);
g_object_unref (mounted_on);
}
if (error) {
......
......@@ -171,9 +171,7 @@ startup_volume_mount_cb (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
if (g_volume_mount_finish (G_VOLUME (source_object), res, NULL)) {
nautilus_inhibit_autorun_for_volume (G_VOLUME (source_object));
}
g_volume_mount_finish (G_VOLUME (source_object), res, NULL);
}
static void
......@@ -1344,7 +1342,7 @@ volume_added_callback (GVolumeMonitor *monitor,
if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_MEDIA_AUTOMOUNT) &&
g_volume_should_automount (volume) &&
g_volume_can_mount (volume)) {
nautilus_file_operations_mount_volume (NULL, volume, FALSE);
nautilus_file_operations_mount_volume (NULL, volume, TRUE);
}
}
......
......@@ -1304,7 +1304,7 @@ open_selected_bookmark (NautilusPlacesSidebar *sidebar,
GVolume *volume;
gtk_tree_model_get (model, &iter, PLACES_SIDEBAR_COLUMN_VOLUME, &volume, -1);
if (volume != NULL) {
nautilus_file_operations_mount_volume (NULL, volume, TRUE);
nautilus_file_operations_mount_volume (NULL, volume, FALSE);
g_object_unref (volume);
}
}
......@@ -1419,7 +1419,7 @@ mount_shortcut_cb (GtkMenuItem *item,
-1);
if (volume != NULL) {
nautilus_file_operations_mount_volume (NULL, volume, TRUE);
nautilus_file_operations_mount_volume (NULL, volume, FALSE);
g_object_unref (volume);
}
}
......
......@@ -913,7 +913,6 @@ mount_not_mounted_callback (GObject *source_object,
window->details->mount_error = NULL;
g_error_free (error);
} else {
nautilus_inhibit_autorun_for_file (G_FILE (source_object));
nautilus_file_invalidate_all_attributes (window->details->determine_view_file);
nautilus_file_call_when_ready (window->details->determine_view_file,
NAUTILUS_FILE_ATTRIBUTE_INFO |
......
......@@ -271,7 +271,9 @@ nautilus_x_content_bar_init (NautilusXContentBar *bar)
hbox = GTK_WIDGET (bar);
bar->priv->label = gtk_label_new (NULL);
gtk_box_pack_start (GTK_BOX (bar), bar->priv->label, FALSE, FALSE, 0);
gtk_label_set_ellipsize (GTK_LABEL (bar->priv->label), PANGO_ELLIPSIZE_END);
gtk_misc_set_alignment (GTK_MISC (bar->priv->label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (bar), bar->priv->label, TRUE, TRUE, 0);
bar->priv->button = gtk_button_new ();
gtk_box_pack_end (GTK_BOX (hbox), bar->priv->button, FALSE, FALSE, 0);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment