[gthumb] use gth_request_dialog for folder creation as well
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] use gth_request_dialog for folder creation as well
- Date: Thu, 14 Jul 2011 19:19:17 +0000 (UTC)
commit f1c04321522345512bd96106027e213495cf95c0
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Jul 14 21:17:43 2011 +0200
use gth_request_dialog for folder creation as well
extensions/file_manager/actions.c | 114 +++++++++++++++++++++++++++++--------
1 files changed, 90 insertions(+), 24 deletions(-)
---
diff --git a/extensions/file_manager/actions.c b/extensions/file_manager/actions.c
index 305b607..06a907b 100644
--- a/extensions/file_manager/actions.c
+++ b/extensions/file_manager/actions.c
@@ -29,48 +29,114 @@
#include "preferences.h"
+typedef struct {
+ GthBrowser *browser;
+ GFile *parent;
+} NewFolderData;
+
+
static void
-_gth_browser_create_new_folder (GthBrowser *browser,
- GFile *parent)
+new_fodler_data_free (NewFolderData *data)
{
- char *folder_name;
- GError *error = NULL;
- GFile *new_folder;
-
- folder_name = _gtk_request_dialog_run (GTK_WINDOW (browser),
- GTK_DIALOG_MODAL,
- _("Enter the folder name: "),
- "",
- 1024,
- GTK_STOCK_CANCEL,
- _("C_reate"));
- if (folder_name == NULL)
+ g_object_unref (data->parent);
+ g_free (data);
+}
+
+
+static void
+new_folder_dialog_response_cb (GtkWidget *dialog,
+ int response_id,
+ gpointer user_data)
+{
+ NewFolderData *data = user_data;
+ char *name;
+ GFile *folder;
+ GError *error = NULL;
+
+ if (response_id != GTK_RESPONSE_OK) {
+ new_fodler_data_free (data);
+ gtk_widget_destroy (dialog);
+ return;
+ }
+
+ name = gth_request_dialog_get_normalized_text (GTH_REQUEST_DIALOG (dialog));
+ if (_g_utf8_all_spaces (name)) {
+ g_free (name);
+ gth_request_dialog_set_info_text (GTH_REQUEST_DIALOG (dialog), GTK_MESSAGE_ERROR, _("No name specified"));
return;
+ }
+
+ if (g_regex_match_simple ("/", name, 0, 0)) {
+ char *message;
+
+ message = g_strdup_printf (_("Invalid name. The following characters are not allowed: %s"), "/");
+ gth_request_dialog_set_info_text (GTH_REQUEST_DIALOG (dialog), GTK_MESSAGE_ERROR, message);
+
+ g_free (message);
+ g_free (name);
- new_folder = g_file_get_child_for_display_name (parent, folder_name, &error);
- if ((new_folder != NULL) && (g_file_make_directory (new_folder, NULL, &error))) {
+ return;
+ }
+
+ folder = g_file_get_child_for_display_name (data->parent, name, &error);
+ if ((folder != NULL) && g_file_make_directory (folder, NULL, &error)) {
GList *list;
GtkWidget *folder_tree;
GtkTreePath *path;
- list = g_list_prepend (NULL, new_folder);
+ list = g_list_prepend (NULL, folder);
gth_monitor_folder_changed (gth_main_get_default_monitor (),
- parent,
+ data->parent,
list,
GTH_MONITOR_EVENT_CREATED);
- folder_tree = gth_browser_get_folder_tree (browser);
- path = gth_folder_tree_get_path (GTH_FOLDER_TREE (folder_tree), parent);
+ folder_tree = gth_browser_get_folder_tree (data->browser);
+ path = gth_folder_tree_get_path (GTH_FOLDER_TREE (folder_tree), data->parent);
gth_folder_tree_expand_row (GTH_FOLDER_TREE (folder_tree), path, FALSE);
gtk_tree_path_free (path);
g_list_free (list);
}
- else
- _gtk_error_dialog_from_gerror_show (GTK_WINDOW (browser), _("Could not create the folder"), &error);
- _g_object_unref (new_folder);
- g_free (folder_name);
+ if (error != NULL) {
+ if (g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
+ gth_request_dialog_set_info_text (GTH_REQUEST_DIALOG (dialog), GTK_MESSAGE_ERROR, _("Name already used"));
+ else
+ gth_request_dialog_set_info_text (GTH_REQUEST_DIALOG (dialog), GTK_MESSAGE_ERROR, error->message);
+ g_clear_error (&error);
+ }
+ else {
+ new_fodler_data_free (data);
+ gtk_widget_destroy (dialog);
+ }
+
+ g_object_unref (folder);
+}
+
+
+static void
+_gth_browser_create_new_folder (GthBrowser *browser,
+ GFile *parent)
+{
+ NewFolderData *data;
+ GtkWidget *dialog;
+
+ data = g_new0 (NewFolderData, 1);
+ data->browser = browser;
+ data->parent = g_object_ref (parent);
+
+ dialog = gth_request_dialog_new (GTK_WINDOW (browser),
+ GTK_DIALOG_MODAL,
+ _("New folder"),
+ _("Enter the folder name:"),
+ GTK_STOCK_CANCEL,
+ _("C_reate"));
+ g_signal_connect (dialog,
+ "response",
+ G_CALLBACK (new_folder_dialog_response_cb),
+ data);
+
+ gtk_widget_show (dialog);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]