2006-12-11 [colin] 2.6.1cvs16
[claws.git] / src / prefs_account.c
index c74d2522246336eb31e2958350a9524945b5a128..001ea408bc03d74d09bbe5ac4b5cd9b2262be79e 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2006 Hiroyuki Yamamoto and the Sylpheed-Claws team
+ * Copyright (C) 1999-2006 Hiroyuki Yamamoto and the Claws Mail team
  *
  * 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
@@ -74,6 +74,8 @@ struct BasicProtocol {
        GtkWidget *combobox;
        GtkWidget *label;
        GtkWidget *descrlabel;
+       GtkWidget *no_imap_warn_icon;
+       GtkWidget *no_imap_warn_label;
 };
 
 static struct Basic {
@@ -758,7 +760,7 @@ void prefs_account_init()
        static gchar *path[2];
 
        path[0] = _("Account");
-       path[2] = NULL;
+       path[1] = NULL;
         
        account_page.page.path = path;
        account_page.page.weight = 1000.0;
@@ -1060,6 +1062,8 @@ static void prefs_account_basic_create(void)
        GtkWidget *optmenubox;
        GtkWidget *optmenu;
        GtkWidget *optlabel;
+       GtkWidget *no_imap_warn_icon;
+       GtkWidget *no_imap_warn_label;
        GtkWidget *serv_table;
        GtkWidget *recvserv_label;
        GtkWidget *smtpserv_label;
@@ -1189,11 +1193,21 @@ static void prefs_account_basic_create(void)
        gtk_label_set_justify(GTK_LABEL(optlabel), GTK_JUSTIFY_CENTER);
        gtk_box_pack_start(GTK_BOX (optmenubox), optlabel, FALSE, FALSE, 0);
 
+       no_imap_warn_icon = gtk_image_new_from_stock
+                        (GTK_STOCK_DIALOG_WARNING, GTK_ICON_SIZE_SMALL_TOOLBAR);
+       no_imap_warn_label = gtk_label_new(_("<span weight=\"bold\">Warning: this version of Claws Mail\n"
+                         "has been built without IMAP support.</span>"));
+       gtk_label_set_use_markup(GTK_LABEL(no_imap_warn_label), TRUE);
+
+       gtk_box_pack_start(GTK_BOX (optmenubox), no_imap_warn_icon, FALSE, FALSE, 0);
+       gtk_box_pack_start(GTK_BOX (optmenubox), no_imap_warn_label, FALSE, FALSE, 0);
        /* Set up a struct to store pointers to necessary widgets */
        protocol_optmenu = g_new(struct BasicProtocol, 1);
        protocol_optmenu->combobox = optmenu;
        protocol_optmenu->label = optlabel;
        protocol_optmenu->descrlabel = label;
+       protocol_optmenu->no_imap_warn_icon = no_imap_warn_icon;
+       protocol_optmenu->no_imap_warn_label = no_imap_warn_label;
 
        serv_table = gtk_table_new (6, 4, FALSE);
        gtk_widget_show (serv_table);
@@ -1588,6 +1602,7 @@ static void prefs_account_receive_create(void)
        MENUITEM_ADD (optmenu_menu, menuitem, "LOGIN", IMAP_AUTH_LOGIN);
        MENUITEM_ADD (optmenu_menu, menuitem, "CRAM-MD5", IMAP_AUTH_CRAM_MD5);
        MENUITEM_ADD (optmenu_menu, menuitem, "ANONYMOUS", IMAP_AUTH_ANON);
+       MENUITEM_ADD (optmenu_menu, menuitem, "GSSAPI", IMAP_AUTH_GSSAPI);
 
        gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu);
 
@@ -1691,11 +1706,7 @@ static void prefs_account_send_create(void)
        PACK_CHECK_BUTTON (hbox, customhdr_chkbtn,
                           _("Add user-defined header"));
 
-#if GTK_CHECK_VERSION(2, 6, 0)
        customhdr_edit_btn = gtk_button_new_from_stock (GTK_STOCK_EDIT);
-#else
-       customhdr_edit_btn = gtk_button_new_with_label (_(" Edit... "));
-#endif
        gtk_widget_show (customhdr_edit_btn);
        gtk_box_pack_start (GTK_BOX (hbox), customhdr_edit_btn,
                            FALSE, FALSE, 0);
@@ -1934,11 +1945,7 @@ static void prefs_account_compose_create(void)
        g_signal_connect(G_OBJECT(signature_browse_button), "clicked",
                         G_CALLBACK(prefs_account_signature_browse_cb), NULL);
 
-#if GTK_CHECK_VERSION(2, 6, 0)
        signature_edit_button = gtk_button_new_from_stock (GTK_STOCK_EDIT);
-#else
-       signature_edit_button = gtk_button_new_with_label (_(" Edit... "));
-#endif
        gtk_widget_show (signature_edit_button);
        gtk_box_pack_start (GTK_BOX (hbox2), signature_edit_button, FALSE, FALSE, 0);
        g_signal_connect(G_OBJECT(signature_edit_button), "clicked",
@@ -2514,6 +2521,14 @@ static gint prefs_account_apply(void)
                alertpanel_error(_("POP3 server is not entered."));
                return -1;
        }
+       if (protocol == A_POP3 || protocol == A_LOCAL) {
+               const gchar *mailbox = gtk_entry_get_text(GTK_ENTRY(receive.inbox_entry));
+               FolderItem *inbox =  folder_find_item_from_identifier(mailbox);
+               if (inbox == NULL) {
+                       alertpanel_error(_("The default inbox folder doesn't exist."));
+                       return -1;
+               }
+       }
        if (protocol == A_IMAP4 &&
            *gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') {
                alertpanel_error(_("IMAP4 server is not entered."));
@@ -2697,6 +2712,15 @@ static void prefs_account_protocol_set_optmenu(PrefParam *pparam)
                g_free(label);
                gtk_widget_hide(optmenu);
                gtk_widget_show(optlabel);
+#ifndef HAVE_LIBETPAN
+               if (protocol == A_IMAP4) {
+                       gtk_widget_show(protocol_optmenu->no_imap_warn_icon);
+                       gtk_widget_show(protocol_optmenu->no_imap_warn_label);
+               } else {
+                       gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+                       gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
+               }
+#endif
        }
 }
 
@@ -2728,6 +2752,9 @@ static void prefs_account_imap_auth_type_set_optmenu(PrefParam *pparam)
        case IMAP_AUTH_ANON:
                gtk_option_menu_set_history(optmenu, 3);
                break;
+       case IMAP_AUTH_GSSAPI:
+               gtk_option_menu_set_history(optmenu, 4);
+               break;
        case 0:
        default:
                gtk_option_menu_set_history(optmenu, 0);
@@ -2823,6 +2850,7 @@ static void prefs_account_set_optmenu_from_string(PrefParam *pparam)
                if (id != NULL && strcmp(id, prefsid) == 0) {
                        found = TRUE;
                        gtk_option_menu_set_history(GTK_OPTION_MENU(optionmenu), i);
+                       privacy_system_activated(GTK_MENU_ITEM(item));
                }
                i++;
        }
@@ -2839,6 +2867,7 @@ static void prefs_account_set_optmenu_from_string(PrefParam *pparam)
                g_free(name);
 
                gtk_option_menu_set_history(GTK_OPTION_MENU(optionmenu), i);
+               privacy_system_activated(GTK_MENU_ITEM(menuitem));
        }
 
        g_list_free(children);
@@ -2847,11 +2876,16 @@ static void prefs_account_set_optmenu_from_string(PrefParam *pparam)
 static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data)
 {
        RecvProtocol protocol;
+       struct BasicProtocol *protocol_optmenu = (struct BasicProtocol *)basic.protocol_optmenu;
 
        protocol = combobox_get_active_data(combobox);
 
+       gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+       gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
        switch(protocol) {
        case A_NNTP:
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
                gtk_widget_show(basic.nntpserv_label);
                gtk_widget_show(basic.nntpserv_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
@@ -2938,6 +2972,8 @@ static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data)
                gtk_widget_hide(receive.imapdir_entry);
                break;
        case A_LOCAL:
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
                gtk_widget_hide(basic.nntpserv_label);
                gtk_widget_hide(basic.nntpserv_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
@@ -3020,6 +3056,10 @@ static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data)
                gtk_widget_hide(receive.imapdir_entry);
                break;
        case A_IMAP4:
+#ifndef HAVE_LIBETPAN
+               gtk_widget_show(protocol_optmenu->no_imap_warn_icon);
+               gtk_widget_show(protocol_optmenu->no_imap_warn_label);
+#endif
                gtk_widget_hide(basic.nntpserv_label);
                gtk_widget_hide(basic.nntpserv_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
@@ -3105,6 +3145,8 @@ static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data)
                gtk_widget_show(receive.imapdir_entry);
                break;
        case A_NONE:
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
                gtk_widget_hide(basic.nntpserv_label);
                gtk_widget_hide(basic.nntpserv_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),
@@ -3187,6 +3229,8 @@ static void prefs_account_protocol_changed(GtkComboBox *combobox, gpointer data)
                break;
        case A_POP3:
        default:
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_icon);
+               gtk_widget_hide(protocol_optmenu->no_imap_warn_label);
                gtk_widget_hide(basic.nntpserv_label);
                gtk_widget_hide(basic.nntpserv_entry);
                gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table),