[Xfce4-commits] <midori:master> Provide gui dialog for adding addons to user directories
Christian Dywan
noreply at xfce.org
Sat Aug 28 03:04:03 CEST 2010
Updating branch refs/heads/master
to dc90ad18e9c1c5c5588ad6da7225848a16855418 (commit)
from eee7cbcff92e9120b66ece3772610d89ebd2256f (commit)
commit dc90ad18e9c1c5c5588ad6da7225848a16855418
Author: Paweł Forysiuk <tuxator at o2.pl>
Date: Fri Aug 27 03:22:49 2010 +0200
Provide gui dialog for adding addons to user directories
extensions/addons.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 87 insertions(+), 5 deletions(-)
diff --git a/extensions/addons.c b/extensions/addons.c
index 50da1ab..50a0cdf 100644
--- a/extensions/addons.c
+++ b/extensions/addons.c
@@ -99,6 +99,7 @@ midori_addons_button_add_clicked_cb (GtkToolItem* toolitem,
gchar* addons_type;
gchar* path;
GtkWidget* dialog;
+ GtkFileFilter* filter;
if (addons->kind == ADDONS_USER_SCRIPTS)
{
@@ -115,14 +116,95 @@ midori_addons_button_add_clicked_cb (GtkToolItem* toolitem,
else
g_assert_not_reached ();
- dialog = gtk_message_dialog_new (
+ dialog = gtk_file_chooser_dialog_new (_("Choose file"),
GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (addons))),
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
- _("Copy %s to the folder %s."), addons_type, path);
+ GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL,
+ GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL);
+
+ gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dialog), TRUE);
+
+ filter = gtk_file_filter_new ();
+
+ if (addons->kind == ADDONS_USER_SCRIPTS)
+ {
+ gtk_file_filter_set_name (filter, _("Userscripts"));
+ gtk_file_filter_add_pattern (filter, "*.js");
+ }
+ else if (addons->kind == ADDONS_USER_STYLES)
+ {
+ gtk_file_filter_set_name (filter, _("Userstyles"));
+ gtk_file_filter_add_pattern (filter, "*.css");
+ }
+ else
+ g_assert_not_reached ();
+
+ gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter);
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+ {
+ GSList* files;
+
+ if (!g_file_test (path, G_FILE_TEST_EXISTS))
+ katze_mkdir_with_parents (path, 0700);
+
+ #if !GTK_CHECK_VERSION (2, 14, 0)
+ files = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (dialog));
+ #else
+ files = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (dialog));
+ #endif
+
+ while (files)
+ {
+ GFile* src_file;
+ GError* error = NULL;
+
+ #if !GTK_CHECK_VERSION (2, 14, 0)
+ src_file = g_file_new_for_path (files);
+ #else
+ src_file = files->data;
+ #endif
+
+ if (G_IS_FILE (src_file))
+ {
+ GFile* dest_file;
+ gchar* dest_file_path;
+
+ dest_file_path = g_build_path (G_DIR_SEPARATOR_S, path,
+ g_file_get_basename (src_file), NULL);
+
+ dest_file = g_file_new_for_path (dest_file_path);
+
+ g_file_copy (src_file, dest_file,
+ G_FILE_COPY_OVERWRITE | G_FILE_COPY_BACKUP,
+ NULL, NULL, NULL, &error);
+
+ if (error)
+ {
+ GtkWidget* msg_box;
+ msg_box = gtk_message_dialog_new (
+ GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (addons))),
+ GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ "%s", error->message);
+
+ gtk_window_set_title (GTK_WINDOW (msg_box), _("Error"));
+ gtk_dialog_run (GTK_DIALOG (msg_box));
+ gtk_widget_destroy (msg_box);
+ g_error_free (error);
+ }
+
+ g_object_unref (src_file);
+ g_object_unref (dest_file);
+ g_free (dest_file_path);
+ }
+ files = g_slist_next (files);
+ }
+ g_slist_free (files);
+ }
+
g_free (addons_type);
g_free (path);
- gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
}
More information about the Xfce4-commits
mailing list