*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
+ * the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
*/
#ifdef HAVE_CONFIG_H
PrefsAccount *cur_account;
static GList *account_list = NULL;
+static gboolean account_list_dirty = FALSE;
static struct EditAccount {
GtkWidget *window;
static GdkPixbuf *mark_pixbuf;
static void account_edit_create (void);
+static void account_destroy (PrefsAccount *ac_prefs);
+static void account_set_as_default (PrefsAccount *ac_prefs);
+static void account_set_menu (void);
static void account_edit_prefs (GtkWidget *widget, gpointer data);
static void account_delete (GtkWidget *widget, gpointer data);
static void account_create_list_view_columns (GtkWidget *list_view);
static gint account_list_view_get_selected_account_id (GtkWidget *list_view);
-GtkTreePath *account_list_view_get_selected_account_path (GtkWidget *list_view);
-PrefsAccount *account_list_view_get_selected_account (GtkWidget *list_view);
-gboolean account_list_view_select_account (GtkWidget *list_view,
+static GtkTreePath *account_list_view_get_selected_account_path (GtkWidget *list_view);
+static PrefsAccount *account_list_view_get_selected_account (GtkWidget *list_view);
+static gboolean account_list_view_select_account (GtkWidget *list_view,
gint account_id);
static void account_list_view_set_default_by_id(GtkWidget *list_view,
gpointer arg3,
GtkTreeView *list_view);
+void account_flush_state(void)
+{
+ account_set_menu();
+ main_window_reflect_prefs_all();
+
+ account_list_dirty = FALSE;
+}
+
void account_read_config_all(void)
{
GSList *ac_label_list = NULL, *cur;
return ac;
}
-void account_set_menu(void)
+static void account_set_menu(void)
{
main_window_set_account_menu(account_list);
}
main_window_set_account_menu_only_toolbar(account_list);
}
-void account_foreach(AccountFunc func, gpointer user_data)
-{
- GList *cur;
-
- for (cur = account_list; cur != NULL; cur = cur->next)
- if (func((PrefsAccount *)cur->data, user_data) != 0)
- return;
-}
-
GList *account_get_list(void)
{
return account_list;
{
inc_lock();
+ account_list_dirty = FALSE;
+
if (compose_get_compose_list()) {
alertpanel_error(_("Some composing windows are open.\n"
"Please close all the composing "
{
PrefsAccount *ac_prefs;
- ac_prefs = prefs_account_open(NULL);
+ ac_prefs = prefs_account_open(NULL, &account_list_dirty);
if (!ac_prefs) return;
if (ac_prefs->protocol == A_IMAP4)
folder->klass->create_tree(folder);
folderview_set_all();
+ folder_write_list();
}
}
{
gboolean prev_default;
gchar *ac_name;
+ gboolean account_dirty = FALSE;
g_return_if_fail(ac_prefs != NULL);
Xstrdup_a(ac_name, ac_prefs->account_name ? ac_prefs->account_name : "",
return);
- prefs_account_open(ac_prefs);
+ prefs_account_open(ac_prefs, &account_dirty);
- if (!prev_default && ac_prefs->is_default)
- account_set_as_default(ac_prefs);
+ if (account_dirty) {
+ if (!prev_default && ac_prefs->is_default)
+ account_set_as_default(ac_prefs);
- if (ac_prefs->folder && strcmp2(ac_name, ac_prefs->account_name) != 0) {
- folder_set_name(FOLDER(ac_prefs->folder),
- ac_prefs->account_name);
- folderview_set_all();
- }
+ if (ac_prefs->folder && strcmp2(ac_name, ac_prefs->account_name) != 0) {
+ folder_set_name(FOLDER(ac_prefs->folder),
+ ac_prefs->account_name);
+ folderview_set_all();
+ }
- account_write_config_all();
- account_set_menu();
- main_window_reflect_prefs_all();
+ account_write_config_all();
+
+ account_flush_state();
+ }
}
-void account_set_as_default(PrefsAccount *ac_prefs)
+static void account_set_as_default(PrefsAccount *ac_prefs)
{
PrefsAccount *ap;
GList *cur;
folder_add(folder);
if (ap->protocol == A_IMAP4)
folder->klass->create_tree(folder);
+ folder_write_list();
+
}
}
}
if (!item) {
if (ac_prefs->folder)
item = FOLDER(ac_prefs->folder)->outbox;
+ if (!item)
+ item = folder_get_default_outbox_for_class(F_MH);
if (!item)
item = folder_get_default_outbox();
}
if (!item) {
if (ac_prefs->folder)
item = FOLDER(ac_prefs->folder)->draft;
+ if (!item)
+ item = folder_get_default_draft_for_class(F_MH);
if (!item)
item = folder_get_default_draft();
}
if (!item) {
if (ac_prefs->folder)
item = FOLDER(ac_prefs->folder)->queue;
+ if (!item)
+ item = folder_get_default_queue_for_class(F_MH);
if (!item)
item = folder_get_default_queue();
}
if (!item) {
if (ac_prefs->folder)
item = FOLDER(ac_prefs->folder)->trash;
+ if (!item)
+ item = folder_get_default_trash_for_class(F_MH);
if (!item)
item = folder_get_default_trash();
}
GtkWidget *default_btn;
- GtkWidget *hbbox;
+ GtkWidget *confirm_area;
GtkWidget *help_btn;
GtkWidget *close_btn;
debug_print("Creating account edit window...\n");
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ window = gtkut_window_new(GTK_WINDOW_TOPLEVEL, "account");
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);
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (account_delete_event), NULL);
+#ifdef MAEMO
+ maemo_connect_key_press_to_mainwindow(GTK_WINDOW(window));
+#else
g_signal_connect (G_OBJECT (window), "key_press_event",
G_CALLBACK (account_key_pressed), NULL);
+#endif
MANAGE_WINDOW_SIGNALS_CONNECT (window);
gtk_widget_realize(window);
"in the order given, the checkbox in the 'G' column indicates "
"which accounts will be included."));
gtk_widget_show (label);
+ gtk_widget_set_size_request(GTK_WIDGET(label),
+ prefs_common.accountswin_width-8, -1);
gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 4);
gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT);
gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
gtk_widget_show (hbox);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
- vbox2 = gtk_vbox_new(FALSE, 0);
- gtk_widget_show (vbox2);
- gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0);
-
default_btn = gtk_button_new_with_mnemonic
(_(" _Set as default account "));
gtk_widget_show (default_btn);
- gtk_box_pack_start (GTK_BOX (vbox2), default_btn, TRUE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX (hbox), default_btn, FALSE, FALSE, 0);
g_signal_connect (G_OBJECT(default_btn), "clicked",
G_CALLBACK (account_set_default), NULL);
- hbbox = gtk_hbutton_box_new();
- gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox), GTK_BUTTONBOX_END);
- gtk_box_set_spacing(GTK_BOX(hbbox), 5);
-
- gtkut_stock_button_set_create_with_help(&hbbox, &help_btn,
+ gtkut_stock_button_set_create_with_help(&confirm_area, &help_btn,
&close_btn, GTK_STOCK_CLOSE,
NULL, NULL, NULL, NULL);
- gtk_widget_show(hbbox);
+ gtk_widget_show(confirm_area);
- gtk_box_pack_end (GTK_BOX (hbox), hbbox, FALSE, FALSE, 0);
+ gtk_box_pack_end (GTK_BOX (hbox), confirm_area, FALSE, FALSE, 0);
gtk_widget_grab_default (close_btn);
g_signal_connect (G_OBJECT (close_btn), "clicked",
if (!geometry.min_height) {
geometry.min_width = 500;
- geometry.min_height = 350;
+ geometry.min_height = 380;
}
gtk_window_set_geometry_hints(GTK_WINDOW(window), NULL, &geometry,
edit_account.window = window;
edit_account.list_view = list_view;
edit_account.close_btn = close_btn;
+#ifdef MAEMO
+ maemo_window_full_screen_if_needed(GTK_WINDOW(edit_account.window));
+#endif
}
static void account_edit_prefs(GtkWidget *widget, gpointer data)
alertpanel_error(_("Accounts with remote folders cannot be copied."));
return;
}
+ account_list_dirty = TRUE;
ac_clon = prefs_account_new();
/* copy fields */
ACP_FASSIGN(use_mail_command);
ACP_FDUP(mail_command);
-#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(use_apop_auth);
ACP_FASSIGN(rmmail);
ACP_FASSIGN(msg_leave_time);
- ACP_FASSIGN(getall);
ACP_FASSIGN(recv_at_getall);
ACP_FASSIGN(sd_rmmail_on_download);
- ACP_FASSIGN(sd_filter_on_recv);
ACP_FASSIGN(enable_size_limit);
ACP_FASSIGN(size_limit);
ACP_FASSIGN(filter_on_recv);
+ ACP_FASSIGN(filterhook_on_recv);
ACP_FDUP(inbox);
+ ACP_FDUP(local_inbox);
ACP_FASSIGN(max_articles);
ACP_FASSIGN(imap_auth_type);
/* send */
- ACP_FASSIGN(gen_msgid);
ACP_FASSIGN(add_customhdr);
ACP_FASSIGN(use_smtp_auth);
ACP_FASSIGN(smtp_auth_type);
ACP_FDUP(auto_bcc);
ACP_FASSIGN(set_autoreplyto);
ACP_FDUP(auto_replyto);
+ ACP_FASSIGN(enable_default_dictionary);
+ ACP_FDUP(default_dictionary);
+ ACP_FASSIGN(enable_default_alt_dictionary);
+ ACP_FDUP(default_alt_dictionary);
+ ACP_FASSIGN(compose_with_format);
+ ACP_FDUP(compose_subject_format);
+ ACP_FDUP(compose_body_format);
+ ACP_FASSIGN(reply_with_format);
+ ACP_FDUP(reply_quotemark);
+ ACP_FDUP(reply_body_format);
+ ACP_FASSIGN(forward_with_format);
+ ACP_FDUP(forward_quotemark);
+ ACP_FDUP(forward_body_format);
/* privacy */
+ ACP_FDUP(default_privacy_system);
ACP_FASSIGN(default_encrypt);
+ ACP_FASSIGN(default_encrypt_reply);
ACP_FASSIGN(default_sign);
+ ACP_FASSIGN(save_encrypted_as_clear_text);
+ ACP_FASSIGN(encrypt_to_self);
/* advanced */
ACP_FASSIGN(set_smtpport);
ACP_FDUP(tunnelcmd);
ACP_FDUP(imap_dir);
+ ACP_FASSIGN(imap_subsonly);
+ ACP_FASSIGN(low_bandwidth);
ACP_FASSIGN(set_sent_folder);
ACP_FDUP(sent_folder);
+ ACP_FASSIGN(set_queue_folder);
+ ACP_FDUP(queue_folder);
ACP_FASSIGN(set_draft_folder);
ACP_FDUP(draft_folder);
ACP_FASSIGN(set_trash_folder);
GTK_STOCK_CANCEL, GTK_STOCK_DELETE, NULL, FALSE,
NULL, ALERT_WARNING, G_ALERTDEFAULT) != G_ALERTALTERNATE)
return;
+ account_list_dirty = TRUE;
if (ac_prefs->folder) {
FolderItem *item;
cur = g_slist_next(cur);
}
}
+ folder_write_list();
}
static void account_up(GtkWidget *widget, gpointer data)
if (!sel)
return;
+ account_list_dirty = TRUE;
up = gtk_tree_path_copy(sel);
if (!up) {
if (!sel)
return;
+ account_list_dirty = TRUE;
dn = gtk_tree_path_copy(sel);
if (!dn) {
account_list_view_set();
cur_account = ac_prefs;
- account_set_menu();
- main_window_reflect_prefs_all();
+ account_flush_state();
}
static void account_edit_close(GtkWidget *widget, gpointer data)
cur_account = ac_prefs;
}
- account_set_menu();
- main_window_reflect_prefs_all();
+ if (account_list_dirty)
+ account_flush_state();
gtk_widget_hide(edit_account.window);
ac_prefs->protocol == A_NNTP ?
(ac_prefs->ssl_nntp == SSL_TUNNEL ?
"NNTP (SSL)" : "NNTP") :
- "";
+ ac_prefs->protocol == A_LOCAL ? "Local" :
+ ac_prefs->protocol == A_NONE ? "SMTP" : "-";
#else
protocol = ac_prefs->protocol == A_POP3 ? "POP3" :
ac_prefs->protocol == A_IMAP4 ? "IMAP4" :
ac_prefs->protocol == A_LOCAL ? "Local" :
- ac_prefs->protocol == A_NNTP ? "NNTP" : "";
+ ac_prefs->protocol == A_NNTP ? "NNTP" :
+ ac_prefs->protocol == A_NONE ? "SMTP" : "-";
#endif
- server= ac_prefs->protocol == A_NNTP
- ? ac_prefs->nntp_server : ac_prefs->recv_server;
+ server= ac_prefs->protocol == A_NNTP ? ac_prefs->nntp_server :
+ ac_prefs->protocol == A_LOCAL ? "-" :
+ ac_prefs->protocol == A_NONE ? ac_prefs->smtp_server :
+ ac_prefs->recv_server;
has_getallbox = (ac_prefs->protocol == A_POP3 ||
ac_prefs->protocol == A_IMAP4 ||
/*!
*\brief Get the tree path of the currently selected account
*/
-GtkTreePath *account_list_view_get_selected_account_path(GtkWidget *list_view)
+static GtkTreePath *account_list_view_get_selected_account_path(GtkWidget *list_view)
{
GtkTreeSelection *selector;
GtkTreeModel *model;
/*!
*\brief Get the account data of the currently selected account
*/
-PrefsAccount *account_list_view_get_selected_account(GtkWidget *list_view)
+static PrefsAccount *account_list_view_get_selected_account(GtkWidget *list_view)
{
GtkTreeSelection *selector;
GtkTreeModel *model;
*
*\return gboolean TRUE if found and selected, FALSE if not.
*/
-gboolean account_list_view_select_account(GtkWidget *list_view, gint account_id)
+static gboolean account_list_view_select_account(GtkWidget *list_view, gint account_id)
{
FindAccountInStore fis;
GtkTreeModel *model;