talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 3247d40c29e3983a7148c76484efb718ab76b02f
parent 91d81ffad8fb6c3273131723778936bc0e19c95b
Author: Colin Leroy <colin@colino.net>
Date:   Sat,  5 Jul 2008 13:55:03 +0000

2008-07-05 [colin]	3.5.0cvs11

	* src/news.c
	* src/news_gtk.c
		Provide ability to rename newsgroups. Closes
		bug 1444, 'Add GUI option for renaming
		newsgroups'. Patch by Pawel Pekala

Diffstat:
MChangeLog | 8++++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/news.c | 25++++++++++++++++++++++++-
Msrc/news_gtk.c | 67++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
5 files changed, 100 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,11 @@ +2008-07-05 [colin] 3.5.0cvs11 + + * src/news.c + * src/news_gtk.c + Provide ability to rename newsgroups. Closes + bug 1444, 'Add GUI option for renaming + newsgroups'. Patch by Pawel Pekala + 2008-07-05 [colin] 3.5.0cvs10 * src/plugins/pgpcore/passphrase.c diff --git a/PATCHSETS b/PATCHSETS @@ -3422,3 +3422,4 @@ ( cvs diff -u -r 1.105.2.136 -r 1.105.2.137 src/prefs_account.c; cvs diff -u -r 1.8.2.12 -r 1.8.2.13 src/common/session.h; cvs diff -u -r 1.9.2.30 -r 1.9.2.31 src/common/ssl.c; ) > 3.5.0cvs8.patchset ( cvs diff -u -r 1.1.2.69 -r 1.1.2.70 src/wizard.c; ) > 3.5.0cvs9.patchset ( cvs diff -u -r 1.1.2.29 -r 1.1.2.30 src/plugins/pgpcore/passphrase.c; cvs diff -u -r 1.1.2.28 -r 1.1.2.29 src/plugins/pgpcore/prefs_gpg.c; cvs diff -u -r 1.1.2.19 -r 1.1.2.20 src/plugins/pgpcore/select-keys.c; ) > 3.5.0cvs10.patchset +( cvs diff -u -r 1.101.2.51 -r 1.101.2.52 src/news.c; cvs diff -u -r 1.2.2.25 -r 1.2.2.26 src/news_gtk.c; ) > 3.5.0cvs11.patchset diff --git a/configure.ac b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=5 MICRO_VERSION=0 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=10 +EXTRA_VERSION=11 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/news.c b/src/news.c @@ -37,7 +37,6 @@ #include "nntp-thread.h" #include "news.h" -#include "news.h" #include "news_gtk.h" #include "socket.h" #include "recv.h" @@ -147,6 +146,9 @@ static void news_synchronise (FolderItem *item, gint days); static int news_remove_msg (Folder *folder, FolderItem *item, gint msgnum); +static gint news_rename_folder (Folder *folder, + FolderItem *item, + const gchar *name); static gint news_remove_folder (Folder *folder, FolderItem *item); static FolderClass news_class; @@ -166,6 +168,7 @@ FolderClass *news_get_class(void) news_class.item_get_path = news_item_get_path; news_class.get_num_list = news_get_num_list; news_class.scan_required = news_scan_required; + news_class.rename_folder = news_rename_folder; news_class.remove_folder = news_remove_folder; /* Message functions */ @@ -1212,6 +1215,26 @@ void news_synchronise(FolderItem *item, gint days) news_gtk_synchronise(item, days); } +static gint news_rename_folder(Folder *folder, FolderItem *item, + const gchar *name) +{ + gchar *path; + + g_return_val_if_fail(folder != NULL, -1); + g_return_val_if_fail(item != NULL, -1); + g_return_val_if_fail(item->path != NULL, -1); + g_return_val_if_fail(name != NULL, -1); + + path = folder_item_get_path(item); + if (!is_dir_exist(path)) + make_dir_hier(path); + + g_free(item->name); + item->name = g_strdup(name); + + return 0; +} + static gint news_remove_folder(Folder *folder, FolderItem *item) { gchar *path; diff --git a/src/news_gtk.c b/src/news_gtk.c @@ -41,9 +41,11 @@ #include "inc.h" #include "news.h" #include "statusbar.h" +#include "inputdialog.h" static void subscribe_newsgroup_cb(FolderView *folderview, guint action, GtkWidget *widget); static void unsubscribe_newsgroup_cb(FolderView *folderview, guint action, GtkWidget *widget); +static void rename_newsgroup_cb(FolderView *folderview, guint action, GtkWidget *widget); static void update_tree_cb(FolderView *folderview, guint action, GtkWidget *widget); static void download_cb(FolderView *folderview, guint action, GtkWidget *widget); static void sync_cb(FolderView *folderview, guint action, GtkWidget *widget); @@ -55,6 +57,7 @@ static GtkItemFactoryEntry news_popup_entries[] = {"/---", NULL, NULL, 0, "<Separator>"}, {N_("/Synchronise"), NULL, sync_cb, 0, NULL}, {N_("/Down_load messages"), NULL, download_cb, 0, NULL}, + {N_("/_Rename folder..."), NULL, rename_newsgroup_cb, 0, NULL}, {"/---", NULL, NULL, 0, "<Separator>"}, {N_("/_Check for new messages"), NULL, update_tree_cb, 0, NULL}, {"/---", NULL, NULL, 0, "<Separator>"}, @@ -104,7 +107,10 @@ static void set_sensitivity(GtkItemFactory *factory, FolderItem *item) SET_SENS("/Synchronise", item ? (folder_item_parent(item) != NULL && folder_want_synchronise(item->folder)) : FALSE); - + SET_SENS("/Rename folder...", + folder_item_parent(item) != NULL + && mainwin->lock_count == 0 + && news_folder_locked(item->folder) == 0); #undef SET_SENS } @@ -250,6 +256,65 @@ static void unsubscribe_newsgroup_cb(FolderView *folderview, guint action, g_free(old_id); } +static FolderItem *find_child_by_name(FolderItem *item, const gchar *name) +{ + GNode *node; + FolderItem *child; + + for (node = item->node->children; node != NULL; node = node->next) { + child = FOLDER_ITEM(node->data); + if (strcmp2(child->name, name) == 0) { + return child; + } + } + + return NULL; +} + +static void rename_newsgroup_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + FolderItem *item; + gchar *new_folder; + gchar *name; + gchar *message; + + item = folderview_get_selected_item(folderview); + g_return_if_fail(item != NULL); + g_return_if_fail(item->path != NULL); + g_return_if_fail(item->folder != NULL); + + name = trim_string(item->name, 32); + message = g_strdup_printf(_("Input new name for '%s':"), name); + new_folder = input_dialog(_("Rename newsgroup folder"), message, item->name); + g_free(message); + g_free(name); + + if (!new_folder) return; + AUTORELEASE_STR(new_folder, {g_free(new_folder); return;}); + + if (strchr(new_folder, G_DIR_SEPARATOR) != NULL) { + alertpanel_error(_("'%c' can't be included in folder name."), + G_DIR_SEPARATOR); + return; + } + + if (find_child_by_name(folder_item_parent(item), new_folder)) { + name = trim_string(new_folder, 32); + alertpanel_error(_("The folder '%s' already exists."), name); + g_free(name); + return; + } + + if (folder_item_rename(item, new_folder) < 0) { + alertpanel_error(_("The folder could not be renamed.\n" + "The new folder name is not allowed.")); + return; + } + + folder_write_list(); +} + static void update_tree_cb(FolderView *folderview, guint action, GtkWidget *widget) {