Blob Blame History Raw
diff -up gnome-panel-2.22.1.2/gnome-panel/panel-menu-items.c.launch-with-gio gnome-panel-2.22.1.2/gnome-panel/panel-menu-items.c
--- gnome-panel-2.22.1.2/gnome-panel/panel-menu-items.c.launch-with-gio	2008-04-20 23:54:37.000000000 -0400
+++ gnome-panel-2.22.1.2/gnome-panel/panel-menu-items.c	2008-04-20 23:54:37.000000000 -0400
@@ -41,6 +41,7 @@
 
 #include <libgnome/gnome-url.h>
 #include <libgnomeui/gnome-url.h>
+#include <libgnomeui/gnome-password-dialog.h>
 
 #include "menu.h"
 #include "panel-action-button.h"
@@ -96,6 +97,51 @@ struct _PanelDesktopMenuItemPrivate {
 	guint        append_lock_logout : 1;
 };
 
+typedef struct {
+	GMountOperation *mount_op;
+	GdkScreen *screen;
+} MountOperationHandle;
+
+static void
+mount_async_callback (GObject      *source_object,
+		      GAsyncResult *result,
+		      gpointer      user_data)
+{
+	GError *error = NULL;
+	GFile *file;
+	MountOperationHandle *handle = user_data;
+
+	file = G_FILE (source_object);
+	if (g_file_mount_enclosing_volume_finish (file, result, &error)) {
+		char *uri = g_file_get_uri (file);
+		// FIXME use an app launch context
+		g_app_info_launch_default_for_uri (uri, NULL, &error);
+		g_free (uri);
+	}
+	else {
+		if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED) &&
+		    !g_error_matches (error, G_IO_ERROR, G_IO_ERROR_FAILED_HANDLED)) {
+			char *primary, *escaped, *url;
+			url = g_file_get_uri (file);
+			escaped = g_markup_escape_text (url, -1);
+			g_free (url);
+			primary = g_strdup_printf (_("Could not open location '%s'"),
+						   escaped);
+			g_free (escaped);
+			panel_error_dialog (NULL, handle->screen,
+					    "cannot_show_url", TRUE,
+			primary, error->message);
+			g_free (primary);
+		}
+		g_error_free (error);
+	}
+
+	if (handle->mount_op)
+		g_object_unref (handle->mount_op);
+
+	g_free (handle);
+}
+
 static void
 activate_uri (GtkWidget  *menuitem,
 	      const char *path)
@@ -125,12 +171,28 @@ activate_uri (GtkWidget  *menuitem,
 
 		command = g_strdup_printf ("nautilus --no-desktop %s", url);
 		gdk_spawn_command_line_on_screen (screen, command, &error);
-	} else 
+	} else {
+		// FIXME use an app launch context
 		g_app_info_launch_default_for_uri (url, NULL, &error);
-		//gnome_url_show_on_screen (url, screen, &error);
+	}
 
 	if (error != NULL) {
-		if (error->code != GNOME_URL_ERROR_CANCELLED) {
+		if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED)) {
+			MountOperationHandle *handle;
+
+			handle = g_new (MountOperationHandle, 1);
+			file = g_file_new_for_uri (url);
+
+			/* If it's not mounted, try to mount it ourselves */
+			handle->mount_op = panel_mount_operation_new (NULL);
+			handle->screen = screen;
+
+			g_file_mount_enclosing_volume (file, G_MOUNT_MOUNT_NONE, handle->mount_op,
+						       NULL, mount_async_callback, handle);
+			g_object_unref (file);
+		
+		}
+		else {
 			char *primary;
 			escaped = g_markup_escape_text (url, -1);
 			primary = g_strdup_printf (_("Could not open location '%s'"),
diff -up gnome-panel-2.22.1.2/gnome-panel/panel-mount-operation.c.launch-with-gio gnome-panel-2.22.1.2/gnome-panel/panel-mount-operation.c
--- gnome-panel-2.22.1.2/gnome-panel/panel-mount-operation.c.launch-with-gio	2008-04-21 00:10:20.000000000 -0400
+++ gnome-panel-2.22.1.2/gnome-panel/panel-mount-operation.c	2008-04-21 00:13:35.000000000 -0400
@@ -102,6 +102,18 @@ password_dialog_button_clicked (GtkDialo
 		anon = gnome_password_dialog_anon_selected (gpd);
 		g_mount_operation_set_anonymous (op, anon);
 
+		switch (gnome_password_dialog_get_remember (gpd)) {
+		case GNOME_PASSWORD_DIALOG_REMEMBER_NOTHING:
+			g_mount_operation_set_password_save (op, G_PASSWORD_SAVE_NEVER);
+			break;
+		case GNOME_PASSWORD_DIALOG_REMEMBER_SESSION:
+			g_mount_operation_set_password_save (op, G_PASSWORD_SAVE_FOR_SESSION);
+			break;
+		case GNOME_PASSWORD_DIALOG_REMEMBER_FOREVER:
+			g_mount_operation_set_password_save (op, G_PASSWORD_SAVE_PERMANENTLY);
+			break;
+		}
+
 		g_mount_operation_reply (op, G_MOUNT_OPERATION_HANDLED);
 	} else {
 		g_mount_operation_reply (op, G_MOUNT_OPERATION_ABORTED);
@@ -136,6 +148,9 @@ ask_password (GMountOperation *op,
 					       flags & G_ASK_PASSWORD_NEED_DOMAIN);
 	gnome_password_dialog_set_show_userpass_buttons	(GNOME_PASSWORD_DIALOG (dialog),
 							 flags & G_ASK_PASSWORD_ANONYMOUS_SUPPORTED);
+	gnome_password_dialog_set_show_remember (GNOME_PASSWORD_DIALOG (dialog),
+						 flags & G_ASK_PASSWORD_SAVING_SUPPORTED);
+
 	if (default_domain) {
 		gnome_password_dialog_set_domain (GNOME_PASSWORD_DIALOG (dialog),
 						  default_domain);