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
This commit is contained in:
David Zeuthen 2008-04-30 01:09:55 +00:00 committed by David Zeuthen
parent fe93322d03
commit 0e85a1cae0
11 changed files with 64 additions and 80 deletions

View file

@ -1,3 +1,31 @@
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),

View file

@ -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)
{
GFile *file = data;
GList *l;
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);
}
return FALSE;
}
void
nautilus_inhibit_autorun_for_file (GFile *file)
{
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)
remove_allow_volume (gpointer data)
{
GVolume *volume = data;
g_object_set_data (G_OBJECT (volume), "nautilus-inhibit-autorun", NULL);
g_object_set_data (G_OBJECT (volume), "nautilus-allow-autorun", NULL);
return FALSE;
}
void
nautilus_inhibit_autorun_for_volume (GVolume *volume)
nautilus_allow_autorun_for_volume (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);
g_object_set_data (G_OBJECT (volume), "nautilus-allow-autorun", GINT_TO_POINTER (1));
}
void
nautilus_allow_autorun_for_volume_finish (GVolume *volume)
{
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)) ||

View file

@ -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 */

View file

@ -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);
}

View file

@ -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,

View file

@ -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));
}

View file

@ -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) {

View file

@ -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);
}
}

View file

@ -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);
}
}

View file

@ -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 |

View file

@ -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);