2009-10-17 [paul] 3.7.3cvs1
[claws.git] / src / prefs_receive.c
index 184caf00a771e966bfd6c5528a3b8e7045099d9a..b7c534fc4bd89d158523e1752130d7dc18ef755b 100644 (file)
@@ -1,10 +1,10 @@
 /*
  * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 2005-2006 Colin Leroy <colin@colino.net> & The Sylpheed-Claws Team
+ * Copyright (C) 2005-2009 Colin Leroy <colin@colino.net> & 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
- * 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,
@@ -13,8 +13,8 @@
  * 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
@@ -40,6 +40,7 @@
 #include "gtk/menu.h"
 
 #include "manage_window.h"
+#include "combobox.h"
 
 typedef struct _ReceivePage
 {
@@ -54,17 +55,24 @@ typedef struct _ReceivePage
        GtkWidget *checkbtn_chkonstartup;
        GtkWidget *checkbtn_openinbox;
        GtkWidget *checkbtn_scan_after_inc;
+#ifndef MAEMO
        GtkWidget *checkbtn_newmail_auto;
        GtkWidget *checkbtn_newmail_manu;
        GtkWidget *entry_newmail_notify_cmd;
+       GtkWidget *hbox_newmail_notify;
+#else
+       GtkWidget *checkbtn_maemo_show_led;
+       GtkWidget *checkbtn_maemo_play_sound;
+       GtkWidget *checkbtn_maemo_show_banner;
+#endif
        GtkWidget *optmenu_recvdialog;
        GtkWidget *checkbtn_no_recv_err_panel;
        GtkWidget *checkbtn_close_recv_dialog;
-       GtkWidget *hbox_newmail_notify;
 } ReceivePage;
 
 ReceivePage *prefs_receive;
 
+#ifndef MAEMO
 static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpointer data)
 {
        gboolean toggled;
@@ -75,9 +83,10 @@ static void prefs_common_recv_dialog_newmail_notify_toggle_cb(GtkWidget *w, gpoi
                        (GTK_TOGGLE_BUTTON(prefs_receive->checkbtn_newmail_auto));
        gtk_widget_set_sensitive(prefs_receive->hbox_newmail_notify, toggled);
 }
+#endif
 
 
-void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window, 
+static void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window, 
                                  gpointer data)
 {
        ReceivePage *prefs_receive = (ReceivePage *) _page;
@@ -91,7 +100,6 @@ void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window,
 
        GtkWidget *hbox_autochk;
        GtkWidget *checkbtn_autochk;
-       GtkWidget *label_autochk1;
        GtkObject *spinbtn_autochk_adj;
        GtkWidget *spinbtn_autochk;
        GtkWidget *label_autochk2;
@@ -100,15 +108,22 @@ void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window,
        GtkWidget *checkbtn_scan_after_inc;
 
        GtkWidget *frame;
+#ifndef MAEMO
+       GtkWidget *vbox3;
        GtkWidget *hbox_newmail_notify;
        GtkWidget *checkbtn_newmail_auto;
        GtkWidget *checkbtn_newmail_manu;
        GtkWidget *entry_newmail_notify_cmd;
        GtkWidget *label_newmail_notify_cmd;
-
+#else
+       GtkWidget *checkbtn_maemo_show_led;
+       GtkWidget *checkbtn_maemo_play_sound;
+       GtkWidget *checkbtn_maemo_show_banner;
+#endif
+       
        GtkWidget *label_recvdialog;
-       GtkWidget *menu;
-       GtkWidget *menuitem;
+       GtkListStore *menu;
+       GtkTreeIter iter;
        GtkWidget *optmenu_recvdialog;
        GtkWidget *checkbtn_no_recv_err_panel;
        GtkWidget *checkbtn_close_recv_dialog;
@@ -118,11 +133,7 @@ void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window,
        gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
 
        /* Use of external incorporation program */
-       PACK_FRAME(vbox1, frame, _("External incorporation program"));
-       vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
-       gtk_widget_show (vbox2);
-       gtk_container_add(GTK_CONTAINER(frame), vbox2);
-       gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);
+       vbox2 = gtkut_get_options_frame(vbox1, &frame, _("External incorporation program"));
 
        PACK_CHECK_BUTTON (vbox2, checkbtn_incext,
                           _("Use external program for receiving mail"));
@@ -141,24 +152,16 @@ void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window,
        gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0);
 
        /* Auto-checking */
-       PACK_FRAME(vbox1, frame, _("Automatic checking"));      
-       vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
-       gtk_widget_show (vbox2);
-       gtk_container_add(GTK_CONTAINER(frame), vbox2);
-       gtk_container_set_border_width(GTK_CONTAINER(vbox2), 8);
+       vbox2 = gtkut_get_options_frame(vbox1, &frame, _("Automatic checking"));        
        
        hbox_autochk = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox_autochk);
        gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0);
 
        PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk,
-                          _("Automatically check for new mail"));
-
-       label_autochk1 = gtk_label_new (_("every"));
-       gtk_widget_show (label_autochk1);
-       gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0);
+                          _("Check for new mail every"));
 
-       spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10);
+       spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 0);
        spinbtn_autochk = gtk_spin_button_new
                (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0);
        gtk_widget_show (spinbtn_autochk);
@@ -170,34 +173,27 @@ void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window,
        gtk_widget_show (label_autochk2);
        gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0);
 
-       SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1);
        SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk);
        SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2);
 
        PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup,
-                          _("Check for new mail on startup"));
+                          _("Check for new mail on start-up"));
 
        /* receive dialog */
-       PACK_FRAME(vbox1, frame, _("Dialogs"));
-       vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
-       gtk_widget_show (vbox2);
-       gtk_container_add (GTK_CONTAINER (frame), vbox2);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+       vbox2 = gtkut_get_options_frame(vbox1, &frame, _("Dialogs"));
        
        label_recvdialog = gtk_label_new (_("Show receive dialog"));
        gtk_misc_set_alignment(GTK_MISC(label_recvdialog), 0, 0.5);
        gtk_widget_show (label_recvdialog);
 
-       optmenu_recvdialog = gtk_option_menu_new ();
+       optmenu_recvdialog = gtkut_sc_combobox_create(NULL, FALSE);
        gtk_widget_show (optmenu_recvdialog);
 
-       menu = gtk_menu_new ();
-       MENUITEM_ADD (menu, menuitem, _("Always"), RECV_DIALOG_ALWAYS);
-       MENUITEM_ADD (menu, menuitem, _("Only on manual receiving"),
-                     RECV_DIALOG_MANUAL);
-       MENUITEM_ADD (menu, menuitem, _("Never"), RECV_DIALOG_NEVER);
-
-       gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_recvdialog), menu);
+       menu = GTK_LIST_STORE(gtk_combo_box_get_model(
+                               GTK_COMBO_BOX(optmenu_recvdialog)));
+       COMBOBOX_ADD (menu, _("Always"), RECV_DIALOG_ALWAYS);
+       COMBOBOX_ADD (menu, _("Only on manual receiving"), RECV_DIALOG_MANUAL);
+       COMBOBOX_ADD (menu, _("Never"), RECV_DIALOG_NEVER);
 
        hbox = gtk_hbox_new(FALSE, 20);
        gtk_widget_show(hbox);
@@ -212,24 +208,27 @@ void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window,
        PACK_CHECK_BUTTON (vbox2, checkbtn_no_recv_err_panel,
                           _("Don't popup error dialog on receive error"));
 
-       PACK_FRAME(vbox1, frame, _("Run command when new mail "
-                                          "arrives"));
-       vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
-       gtk_widget_show (vbox2);
-       gtk_container_add (GTK_CONTAINER (frame), vbox2);
-       gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8);
+       vbox2 = gtkut_get_options_frame(vbox1, &frame, 
+                                       _("After checking for new mail"));
+
+       PACK_CHECK_BUTTON (vbox2, checkbtn_openinbox, _("Go to Inbox"));
+       PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
+                          _("Update all local folders"));
 
+#ifndef MAEMO 
+       vbox3 = gtkut_get_options_frame(vbox2, &frame, _("Run command"));
+       
        hbox = gtk_hbox_new (TRUE, 8);
        gtk_widget_show (hbox);
        PACK_CHECK_BUTTON (hbox, checkbtn_newmail_auto,
                           _("after automatic check"));
        PACK_CHECK_BUTTON (hbox, checkbtn_newmail_manu,
                           _("after manual check"));
-       gtk_box_pack_start (GTK_BOX(vbox2), hbox, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX(vbox3), hbox, FALSE, FALSE, 0);
 
        hbox_newmail_notify = gtk_hbox_new (FALSE, 8);
        gtk_widget_show (hbox_newmail_notify);
-       gtk_box_pack_start (GTK_BOX (vbox2), hbox_newmail_notify, FALSE, 
+       gtk_box_pack_start (GTK_BOX (vbox3), hbox_newmail_notify, FALSE, 
                            FALSE, 0);
 
        label_newmail_notify_cmd = gtk_label_new (_("Command to execute:\n"
@@ -250,15 +249,28 @@ void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window,
                                 prefs_common.newmail_notify_auto || 
                                 prefs_common.newmail_notify_manu);
 
-       vbox2 = gtk_vbox_new (FALSE, 0);
-       gtk_widget_show (vbox2);
-       gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmail_auto),
+               prefs_common.newmail_notify_auto);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmail_manu),
+               prefs_common.newmail_notify_manu);
+       gtk_entry_set_text(GTK_ENTRY(entry_newmail_notify_cmd), 
+               prefs_common.newmail_notify_cmd);
+#else
+       PACK_CHECK_BUTTON (vbox2, checkbtn_maemo_show_led, _("Blink LED"));
+       PACK_CHECK_BUTTON (vbox2, checkbtn_maemo_play_sound, _("Play sound"));
+       PACK_CHECK_BUTTON (vbox2, checkbtn_maemo_show_banner,
+                          _("Show info banner"));
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_maemo_show_led),
+               prefs_common.maemo_show_led);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_maemo_play_sound),
+               prefs_common.maemo_play_sound);
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_maemo_show_banner),
+               prefs_common.maemo_show_banner);
+
+#endif
 
-       PACK_CHECK_BUTTON (vbox2, checkbtn_openinbox,
-                          _("Go to inbox after receiving new mail"));
-       PACK_CHECK_BUTTON (vbox2, checkbtn_scan_after_inc,
-                          _("Update all local folders after receiving mail"));
-                          
+       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_autochk),
+               prefs_common.autochk_newmail);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_incext),
                prefs_common.use_extinc);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_no_recv_err_panel),
@@ -271,20 +283,12 @@ void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window,
                prefs_common.open_inbox_on_inc);
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_scan_after_inc),
                prefs_common.scan_all_after_inc);
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmail_auto),
-               prefs_common.newmail_notify_auto);
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_newmail_manu),
-               prefs_common.newmail_notify_manu);
-       gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_autochk),
-               prefs_common.autochk_newmail);
 
        gtk_entry_set_text(GTK_ENTRY(entry_incext), 
                prefs_common.extinc_cmd);
-       gtk_entry_set_text(GTK_ENTRY(entry_newmail_notify_cmd), 
-               prefs_common.newmail_notify_cmd);
        gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinbtn_autochk), 
                prefs_common.autochk_itv);
-       gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu_recvdialog),
+       combobox_select_by_data(GTK_COMBO_BOX(optmenu_recvdialog),
                prefs_common.recv_dialog_mode);
 
        prefs_receive->window = GTK_WIDGET(window);
@@ -295,30 +299,37 @@ void prefs_receive_create_widget(PrefsPage *_page, GtkWindow *window,
        prefs_receive->checkbtn_chkonstartup = checkbtn_chkonstartup;
        prefs_receive->checkbtn_openinbox = checkbtn_openinbox;
        prefs_receive->checkbtn_scan_after_inc = checkbtn_scan_after_inc;
+
+#ifndef MAEMO 
        prefs_receive->checkbtn_newmail_auto = checkbtn_newmail_auto;
        prefs_receive->checkbtn_newmail_manu = checkbtn_newmail_manu;
        prefs_receive->entry_newmail_notify_cmd = entry_newmail_notify_cmd;
+       prefs_receive->hbox_newmail_notify = hbox_newmail_notify;
+#else
+       prefs_receive->checkbtn_maemo_show_led = checkbtn_maemo_show_led;
+       prefs_receive->checkbtn_maemo_play_sound = checkbtn_maemo_play_sound;
+       prefs_receive->checkbtn_maemo_show_banner = checkbtn_maemo_show_banner;
+#endif
+
        prefs_receive->optmenu_recvdialog = optmenu_recvdialog;
        prefs_receive->checkbtn_no_recv_err_panel = checkbtn_no_recv_err_panel;
        prefs_receive->checkbtn_close_recv_dialog = checkbtn_close_recv_dialog;
-       prefs_receive->hbox_newmail_notify = hbox_newmail_notify;
        prefs_receive->page.widget = vbox1;
 
+#ifndef MAEMO 
        g_signal_connect(G_OBJECT(checkbtn_newmail_auto), "toggled",
                         G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
                         NULL);
        g_signal_connect(G_OBJECT(checkbtn_newmail_manu), "toggled",
                         G_CALLBACK(prefs_common_recv_dialog_newmail_notify_toggle_cb),
                         NULL);
-
+#endif
 }
 
-void prefs_receive_save(PrefsPage *_page)
+static void prefs_receive_save(PrefsPage *_page)
 {
        ReceivePage *page = (ReceivePage *) _page;
        gchar *tmp;
-       GtkWidget *menu;
-       GtkWidget *menuitem;
 
        prefs_common.use_extinc = gtk_toggle_button_get_active(
                GTK_TOGGLE_BUTTON(page->checkbtn_incext));
@@ -332,10 +343,24 @@ void prefs_receive_save(PrefsPage *_page)
                GTK_TOGGLE_BUTTON(page->checkbtn_openinbox));
        prefs_common.scan_all_after_inc = gtk_toggle_button_get_active(
                GTK_TOGGLE_BUTTON(page->checkbtn_scan_after_inc));
+
+#ifndef MAEMO
        prefs_common.newmail_notify_auto = gtk_toggle_button_get_active(
                GTK_TOGGLE_BUTTON(page->checkbtn_newmail_auto));
        prefs_common.newmail_notify_manu = gtk_toggle_button_get_active(
                GTK_TOGGLE_BUTTON(page->checkbtn_newmail_manu));
+#else
+       prefs_common.maemo_show_led = TRUE;
+       if (!gtk_toggle_button_get_active(
+               GTK_TOGGLE_BUTTON(page->checkbtn_maemo_show_led))) {
+               mainwindow_maemo_led_set(FALSE);
+               prefs_common.maemo_show_led = FALSE;
+       }
+       prefs_common.maemo_play_sound = gtk_toggle_button_get_active(
+               GTK_TOGGLE_BUTTON(page->checkbtn_maemo_play_sound));
+       prefs_common.maemo_show_banner = gtk_toggle_button_get_active(
+               GTK_TOGGLE_BUTTON(page->checkbtn_maemo_show_banner));
+#endif
        prefs_common.autochk_newmail = gtk_toggle_button_get_active(
                GTK_TOGGLE_BUTTON(page->checkbtn_autochk));
        prefs_common.autochk_itv = gtk_spin_button_get_value_as_int(
@@ -345,14 +370,15 @@ void prefs_receive_save(PrefsPage *_page)
        g_free(prefs_common.extinc_cmd);
        prefs_common.extinc_cmd = tmp;
        
+#ifndef MAEMO
        tmp = gtk_editable_get_chars(GTK_EDITABLE(page->entry_newmail_notify_cmd), 0, -1);
        g_free(prefs_common.newmail_notify_cmd);
        prefs_common.newmail_notify_cmd = tmp;
+#endif
        
-       menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(page->optmenu_recvdialog));
-       menuitem = gtk_menu_get_active(GTK_MENU(menu));
-       prefs_common.recv_dialog_mode = GPOINTER_TO_INT
-               (g_object_get_data(G_OBJECT(menuitem), MENU_VAL_ID));
+       prefs_common.recv_dialog_mode =
+               combobox_get_active_data(GTK_COMBO_BOX(page->optmenu_recvdialog));
+
        inc_autocheck_timer_remove();
        inc_autocheck_timer_set();
 
@@ -368,7 +394,7 @@ void prefs_receive_init(void)
        static gchar *path[3];
 
        path[0] = _("Mail Handling");
-       path[1] = _("Receive");
+       path[1] = _("Receiving");
        path[2] = NULL;
 
        page = g_new0(ReceivePage, 1);