[file-roller] fixed installer dialog



commit 0d5f3548fdadc0cd9353c0295356640f218ced30
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sun Oct 25 09:41:43 2009 +0100

    fixed installer dialog

 src/dlg-package-installer.c |   26 +++++++++++++++-----------
 src/file-utils.c            |   30 +++++++++++++++++++++---------
 src/file-utils.h            |    2 ++
 src/fr-archive.c            |   15 +++++++++++----
 4 files changed, 49 insertions(+), 24 deletions(-)
---
diff --git a/src/dlg-package-installer.c b/src/dlg-package-installer.c
index 42618dd..eef2644 100644
--- a/src/dlg-package-installer.c
+++ b/src/dlg-package-installer.c
@@ -27,6 +27,7 @@
 #include <gtk/gtk.h>
 #include <dbus/dbus-glib.h>
 #include "dlg-package-installer.h"
+#include "gtk-utils.h"
 #include "main.h"
 
 
@@ -175,6 +176,7 @@ dbus_name_has_owner_call_notify_cb (DBusGProxy     *proxy,
 	GError        *error = NULL;
 	gboolean       success;
 	gboolean       present;
+	char          *secondary_text;
 	GtkWidget     *dialog;
 
 	success = dbus_g_proxy_end_call (proxy, call, &error, G_TYPE_BOOLEAN, &present, G_TYPE_INVALID);
@@ -189,18 +191,20 @@ dbus_name_has_owner_call_notify_cb (DBusGProxy     *proxy,
 		return;
 	}
 
-	dialog = gtk_message_dialog_new (GTK_WINDOW (idata->window),
-					 GTK_DIALOG_MODAL,
-					 GTK_MESSAGE_ERROR,
-					 GTK_BUTTONS_YES_NO,
-					 "%s", "error");
-	gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
-						  _("There is no command installed for %s files.\nDo you want to search for an command to open this file?"),
-						  g_content_type_get_description (idata->archive->content_type));
-	gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-
+	secondary_text = g_strdup_printf (_("There is no command installed for %s files.\nDo you want to search for a command to open this file?"),
+					  g_content_type_get_description (idata->archive->content_type));
+	dialog = _gtk_message_dialog_new (GTK_WINDOW (idata->window),
+					  GTK_DIALOG_MODAL,
+					  GTK_STOCK_DIALOG_ERROR,
+					  _("Could not open this file type"),
+					  secondary_text,
+					  GTK_STOCK_CANCEL, GTK_RESPONSE_NO,
+					  _("_Search Command"), GTK_RESPONSE_YES,
+					  NULL);
 	g_signal_connect (dialog, "response", G_CALLBACK (confirm_search_dialog_response_cb), idata);
-	gtk_widget_show_all (dialog);
+	gtk_widget_show (dialog);
+
+	g_free (secondary_text);
 }
 
 
diff --git a/src/file-utils.c b/src/file-utils.c
index 018d6a4..e152ca0 100644
--- a/src/file-utils.c
+++ b/src/file-utils.c
@@ -1108,16 +1108,29 @@ gboolean
 check_permissions (const char *uri,
 		   int         mode)
 {
+	GFile    *file;
+	gboolean  result;
+
+	file = g_file_new_for_uri (uri);
+	result = check_file_permissions (file, mode);
+
+	g_object_unref (file);
+
+	return result;
+}
+
+
+gboolean
+check_file_permissions (GFile *file,
+		        int    mode)
+{
 	gboolean   result = TRUE;
-	GFile     *file;
 	GFileInfo *info;
 	GError    *err = NULL;
 	gboolean   default_permission_when_unknown = TRUE;
 
-	file = g_file_new_for_uri (uri);
 	info = g_file_query_info (file, "access::*", 0, NULL, &err);
 	if (err != NULL) {
-		g_warning ("Failed to get access permissions: %s", err->message);
 		g_clear_error (&err);
 		result = FALSE;
 	}
@@ -1128,24 +1141,23 @@ check_permissions (const char *uri,
 			else
 				result = (result && default_permission_when_unknown);
 		}
-		
+
 		if ((mode & W_OK) == W_OK) {
 			if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))
 				result = (result && g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE));
 			else
 				result = (result && default_permission_when_unknown);
 		}
-		
+
 		if ((mode & X_OK) == X_OK) {
 			if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE))
 				result = (result && g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE));
 			else
 				result = (result && default_permission_when_unknown);
 		}
-	}		
-	
-	g_object_unref (info);
-	g_object_unref (file);
+
+		g_object_unref (info);
+	}
 
 	return result;
 }
diff --git a/src/file-utils.h b/src/file-utils.h
index 18511fe..160af8a 100644
--- a/src/file-utils.h
+++ b/src/file-utils.h
@@ -98,6 +98,8 @@ char*               file_list__get_prev_field    (const char *line,
 						  int         field_n);
 gboolean            check_permissions            (const char *path,
 						  int         mode);
+gboolean            check_file_permissions       (GFile      *file,
+						  int         mode);
 gboolean 	    is_program_in_path		 (const char *filename);
 gboolean 	    is_program_available	 (const char *filename,
 						  gboolean    check);
diff --git a/src/fr-archive.c b/src/fr-archive.c
index bce77ee..be4c29b 100644
--- a/src/fr-archive.c
+++ b/src/fr-archive.c
@@ -859,13 +859,20 @@ fr_archive_fake_load (FrArchive *archive)
 
 static void
 load_local_archive (FrArchive  *archive,
-		    const char *uri,
 		    const char *password)
 {
 	FrCommand  *tmp_command;
 	const char *mime_type;
 
-	archive->have_permissions = check_permissions (uri, W_OK);
+	if (! g_file_query_exists (archive->file, NULL)) {
+		fr_archive_action_completed (archive,
+					     FR_ACTION_LOADING_ARCHIVE,
+					     FR_PROC_ERROR_GENERIC,
+					     _("File not found."));
+		return;
+	}
+
+	archive->have_permissions = check_file_permissions (archive->file, W_OK);
 	archive->read_only = ! archive->have_permissions;
 
 	tmp_command = archive->command;
@@ -926,7 +933,7 @@ fr_archive_load (FrArchive  *archive,
 		       FR_ACTION_LOADING_ARCHIVE);
 
 	fr_archive_set_uri (archive, uri);
-	load_local_archive (archive, uri, password);
+	load_local_archive (archive, password);
 
 	return TRUE;
 }
@@ -945,7 +952,7 @@ fr_archive_load_local (FrArchive  *archive,
 		       FR_ACTION_LOADING_ARCHIVE);
 
 	fr_archive_set_uri (archive, uri);
-	load_local_archive (archive, uri, password);
+	load_local_archive (archive, password);
 
 	return TRUE;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]