[prev in list] [next in list] [prev in thread] [next in thread]
List: sylpheed
Subject: [sylpheed:21831] NEW PATCH: Clone account
From: Sylpheed Patches <sylpheed () thewildbeast ! co ! uk>
Date: 2003-10-29 10:23:22
[Download RAW message or body]
ANNOUNCING THE RELEASE OF A NEW PATCH
Patch Author: Ricardo Mones Lastra <mones@trasgu.aic.uniovi.es>
Title: Clone account
Filename: clone_account.patch (5.8 kb)
Works with: 0.9.7
Description:
Adds a "clone" button to make a copy of the selected account
(Edit accounts dialog).
Notes:
Fixed custom header replication. Window resized to accommodate
new button.
Apply patch with -p0 in sylpheed directory.
--------------------------
This is an automated message from the Sylpheed Patch homepage.
<http://www.thewildbeast.co.uk/sylpheed>
If you have made a patch that you want included at the
Sylpheed Patch homepage, request details from
<sylpheed@thewildbeast.co.uk>.
["clone_account.patch" (text/plain)]
Index: src/account.c
===================================================================
RCS file: /cvsroot/sylpheed/sylpheed/src/account.c,v
retrieving revision 1.52
diff -u -r1.52 account.c
--- src/account.c 6 Oct 2003 09:13:02 -0000 1.52
+++ src/account.c 29 Oct 2003 10:07:00 -0000
@@ -46,6 +46,7 @@
#include "gtkutils.h"
#include "utils.h"
#include "alertpanel.h"
+#include "customheader.h"
typedef enum
{
@@ -81,6 +82,7 @@
static void account_edit_prefs (void);
static void account_delete (void);
+static void account_clone (void);
static void account_up (void);
static void account_down (void);
@@ -88,6 +90,10 @@
static void account_set_default (void);
static void account_edit_close (void);
+
+static gint account_clone_event (GtkWidget *widget,
+ GdkEventAny *event,
+ gpointer data);
static gint account_delete_event (GtkWidget *widget,
GdkEventAny *event,
gpointer data);
@@ -573,6 +579,7 @@
GtkWidget *add_btn;
GtkWidget *edit_btn;
GtkWidget *del_btn;
+ GtkWidget *clone_btn;
GtkWidget *up_btn;
GtkWidget *down_btn;
@@ -584,7 +591,7 @@
debug_print(_("Creating account edit window...\n"));
window = gtk_window_new (GTK_WINDOW_DIALOG);
- gtk_widget_set_usize (window, 500, 320);
+ gtk_widget_set_usize (window, 500, 350);
gtk_container_set_border_width (GTK_CONTAINER (window), 8);
gtk_window_set_title (GTK_WINDOW (window), _("Edit accounts"));
gtk_window_set_modal (GTK_WINDOW (window), TRUE);
@@ -673,6 +680,12 @@
gtk_signal_connect (GTK_OBJECT(del_btn), "clicked",
GTK_SIGNAL_FUNC (account_delete), NULL);
+ clone_btn = gtk_button_new_with_label (_(" Clone "));
+ gtk_widget_show (clone_btn);
+ gtk_box_pack_start (GTK_BOX (vbox2), clone_btn, FALSE, FALSE, 4);
+ gtk_signal_connect (GTK_OBJECT(clone_btn), "clicked",
+ GTK_SIGNAL_FUNC (account_clone), NULL);
+
down_btn = gtk_button_new_with_label (_("Down"));
gtk_widget_show (down_btn);
gtk_box_pack_end (GTK_BOX (vbox2), down_btn, FALSE, FALSE, 4);
@@ -735,6 +748,142 @@
account_clist_set();
}
+
+#define ACP_FDUP(fld) ac_clon->fld = ((ac_prefs->fld) != NULL)?\
+ g_strdup(ac_prefs->fld): NULL
+#define ACP_FASSIGN(fld) ac_clon->fld = ac_prefs->fld
+static void account_clone(void)
+{
+ GtkCList *clist = GTK_CLIST(edit_account.clist);
+ gint row;
+ PrefsAccount *ac_prefs, *ac_clon;
+ GSList *hdrs = NULL;
+ CustomHeader *cch = NULL, *ch = NULL;
+
+ if (!clist->selection) return;
+
+ row = GPOINTER_TO_INT(clist->selection->data);
+ ac_prefs = gtk_clist_get_row_data(clist, row);
+
+ ac_clon = prefs_account_new();
+ /* copy fields */
+ ac_clon->account_name = g_strdup_printf(_("Cloned %s"),
+ ac_prefs->account_name);
+ /* personal */
+ ACP_FDUP(name);
+ ACP_FDUP(address);
+ ACP_FDUP(organization);
+
+ /* server */
+ ACP_FASSIGN(protocol);
+ ACP_FDUP(recv_server);
+ ACP_FDUP(smtp_server);
+ ACP_FDUP(nntp_server);
+ ACP_FASSIGN(use_nntp_auth);
+ ACP_FDUP(userid);
+ ACP_FDUP(passwd);
+
+#if USE_OPENSSL
+ ACP_FASSIGN(ssl_pop);
+ ACP_FASSIGN(ssl_imap);
+ ACP_FASSIGN(ssl_nntp);
+ ACP_FASSIGN(ssl_smtp);
+ ACP_FASSIGN(use_nonblocking_ssl);
+#endif /* USE_OPENSSL */
+
+ ac_clon->tmp_pass = NULL;
+
+ /* receive */
+ ACP_FASSIGN(rmmail);
+ ACP_FASSIGN(msg_leave_time);
+ ACP_FASSIGN(getall);
+ ACP_FASSIGN(recv_at_getall);
+ ACP_FASSIGN(enable_size_limit);
+ ACP_FASSIGN(size_limit);
+ ACP_FASSIGN(filter_on_recv);
+ ACP_FDUP(inbox);
+
+ ACP_FASSIGN(imap_auth_type);
+
+ /* send */
+ ACP_FASSIGN(add_date);
+ ACP_FASSIGN(gen_msgid);
+ ACP_FASSIGN(add_customhdr);
+ ACP_FASSIGN(use_smtp_auth);
+ ACP_FASSIGN(smtp_auth_type);
+ ACP_FDUP(smtp_userid);
+ ACP_FDUP(smtp_passwd);
+
+ ac_clon->tmp_smtp_pass = NULL;
+
+ ACP_FASSIGN(pop_before_smtp);
+
+ ac_clon->customhdr_list = NULL;
+ hdrs = ac_prefs->customhdr_list;
+ while (hdrs != NULL) {
+ ch = (CustomHeader *)hdrs->data;
+
+ cch = g_new0(CustomHeader, 1);
+ cch->account_id = ac_clon->account_id;
+ cch->name = (ch->name != NULL) ? g_strdup(ch->name) : NULL;
+ cch->value = (ch->value != NULL) ? g_strdup(ch->value) : NULL;
+
+ ac_clon->customhdr_list = g_slist_append(ac_clon->customhdr_list, cch);
+
+ hdrs = g_slist_next(hdrs);
+ }
+
+ /* compose */
+ ACP_FASSIGN(sig_type);
+ ACP_FDUP(sig_path);
+
+ ACP_FASSIGN(set_autocc);
+ ACP_FDUP(auto_cc);
+ ACP_FASSIGN(set_autobcc);
+ ACP_FDUP(auto_bcc);
+ ACP_FASSIGN(set_autoreplyto);
+ ACP_FDUP(auto_replyto);
+
+#if USE_GPGME
+ /* privacy */
+ ACP_FASSIGN(default_encrypt);
+ ACP_FASSIGN(default_sign);
+ ACP_FASSIGN(ascii_armored);
+ ACP_FASSIGN(clearsign);
+ ACP_FASSIGN(sign_key);
+ ACP_FDUP(sign_key_id);
+#endif /* USE_GPGME */
+
+ /* advanced */
+ ACP_FASSIGN(set_smtpport);
+ ACP_FASSIGN(smtpport);
+ ACP_FASSIGN(set_popport);
+ ACP_FASSIGN(popport);
+ ACP_FASSIGN(set_imapport);
+ ACP_FASSIGN(imapport);
+ ACP_FASSIGN(set_nntpport);
+ ACP_FASSIGN(nntpport);
+ ACP_FASSIGN(set_domain);
+ ACP_FDUP(domain);
+
+ ACP_FDUP(imap_dir);
+
+ ACP_FASSIGN(set_sent_folder);
+ ACP_FDUP(sent_folder);
+ ACP_FASSIGN(set_draft_folder);
+ ACP_FDUP(draft_folder);
+ ACP_FASSIGN(set_trash_folder);
+ ACP_FDUP(trash_folder);
+ /* don't want two default accounts */
+ ac_clon->is_default = FALSE;
+ ACP_FASSIGN(folder);
+
+ account_list = g_list_append(account_list, ac_clon);
+ account_clist_set();
+}
+#undef ACP_FDUP
+#undef ACP_FASSGIN
+
static void account_delete(void)
{
GtkCList *clist = GTK_CLIST(edit_account.clist);
@@ -817,6 +966,13 @@
gtk_widget_hide(edit_account.window);
inc_unlock();
+}
+
+static gint account_clone_event(GtkWidget *widget, GdkEventAny *event,
+ gpointer data)
+{
+ account_clone();
+ return TRUE;
}
static gint account_delete_event(GtkWidget *widget, GdkEventAny *event,
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic