[file-roller] fixed installer dialog
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [file-roller] fixed installer dialog
- Date: Sun, 25 Oct 2009 08:42:12 +0000 (UTC)
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]