diff options
| -rw-r--r-- | fiv.c | 29 | 
1 files changed, 23 insertions, 6 deletions
| @@ -913,27 +913,44 @@ on_item_activated(G_GNUC_UNUSED FivBrowser *browser, GFile *location,  static void open_any_file(GFile *file, gboolean force_browser);  static void -on_mounted_enclosing(GObject *source_object, GAsyncResult *res, -	G_GNUC_UNUSED gpointer user_data) +on_mounted_enclosing( +	GObject *source_object, GAsyncResult *res, gpointer user_data)  {  	GFile *file = G_FILE(source_object);  	GError *error = NULL; -	if (!g_file_mount_enclosing_volume_finish(file, res, &error)) +	if (g_file_mount_enclosing_volume_finish(file, res, &error)) +		goto retry; + +	if (!g_error_matches(error, G_IO_ERROR, G_IO_ERROR_ALREADY_MOUNTED)) {  		show_error_dialog(error); -	else -		open_any_file(file, FALSE); +		return; +	} + +	// The "http" scheme doesn't behave nicely, make a leap of faith. +	g_error_free(error); +	if (g_file_query_file_type(file, G_FILE_QUERY_INFO_NONE, NULL) == +		G_FILE_TYPE_UNKNOWN) { +		gchar *uri = g_file_get_uri(file); +		open_image(uri); +		g_free(uri); +		return; +	} + +retry: +	open_any_file(file, (gboolean) (gintptr) user_data);  }  static void  open_any_file(GFile *file, gboolean force_browser)  { +	// Various GVfs schemes may need mounting.  	GFileType type = g_file_query_file_type(file, G_FILE_QUERY_INFO_NONE, NULL);  	if (type == G_FILE_TYPE_UNKNOWN &&  		G_FILE_GET_IFACE(file)->mount_enclosing_volume) {  		// TODO(p): At least provide some kind of indication.  		GMountOperation *op = gtk_mount_operation_new(GTK_WINDOW(g.window));  		g_file_mount_enclosing_volume(file, G_MOUNT_MOUNT_NONE, op, NULL, -			on_mounted_enclosing, NULL); +			on_mounted_enclosing, (gpointer) (gintptr) force_browser);  		g_object_unref(op);  		return;  	} | 
