2005-10-09 [colin] 1.9.15cvs26
[claws.git] / src / messageview.c
index 2d10c63f1e9e51bd053fe7a9c3d79925658eb567..1df6444f42d010580106507b4ef9294f9be717c2 100644 (file)
@@ -14,7 +14,7 @@
  *
  * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  */
 
 #include "defs.h"
@@ -62,6 +62,7 @@
 #include "filtering.h"
 #include "partial_download.h"
 #include "gedit-print.h"
+#include "inc.h"
 
 static GList *messageview_list = NULL;
 
@@ -153,17 +154,17 @@ static GList *msgview_list = NULL;
 static GtkItemFactoryEntry msgview_entries[] =
 {
        {N_("/_File"),                  NULL, NULL, 0, "<Branch>"},
-       {N_("/_File/_Save as..."),      NULL, save_as_cb, 0, NULL},
-       {N_("/_File/_Print..."),        NULL, print_cb, 0, NULL},
+       {N_("/_File/_Save as..."),      "<control>S", save_as_cb, 0, NULL},
+       {N_("/_File/_Print..."),        "<control>P", print_cb, 0, NULL},
        {N_("/_File/---"),              NULL, NULL, 0, "<Separator>"},
-       {N_("/_File/_Close"),           NULL, close_cb, 0, NULL},
+       {N_("/_File/_Close"),           "<control>W", close_cb, 0, NULL},
 
        {N_("/_Edit"),                  NULL, NULL, 0, "<Branch>"},
-       {N_("/_Edit/_Copy"),            NULL, copy_cb, 0, NULL},
-       {N_("/_Edit/Select _all"),      NULL, allsel_cb, 0, NULL},
+       {N_("/_Edit/_Copy"),            "<control>C", copy_cb, 0, NULL},
+       {N_("/_Edit/Select _all"),      "<control>A", allsel_cb, 0, NULL},
        {N_("/_Edit/---"),              NULL, NULL, 0, "<Separator>"},
        {N_("/_Edit/_Find in current message..."),
-                                       NULL, search_cb, 0, NULL},
+                                       "<control>F", search_cb, 0, NULL},
 
        {N_("/_View"),                  NULL, NULL, 0, "<Branch>"},
 
@@ -265,22 +266,22 @@ static GtkItemFactoryEntry msgview_entries[] =
 #undef DEC_ACTION
 
        {N_("/_View/---"),              NULL, NULL, 0, "<Separator>"},
-       {N_("/_View/Mess_age source"),  NULL, view_source_cb, 0, NULL},
-       {N_("/_View/Show all _headers"),NULL, show_all_header_cb, 0, "<ToggleItem>"},
+       {N_("/_View/Mess_age source"),  "<control>U", view_source_cb, 0, NULL},
+       {N_("/_View/Show all _headers"),"<control>H", show_all_header_cb, 0, "<ToggleItem>"},
 
        {N_("/_Message"),               NULL, NULL, 0, "<Branch>"},
        {N_("/_Message/Compose _new message"),
-                                       NULL, compose_cb, 0, NULL},
+                                       "<control>M", compose_cb, 0, NULL},
        {N_("/_Message/---"),           NULL, NULL, 0, "<Separator>"},
-       {N_("/_Message/_Reply"),        NULL, reply_cb, COMPOSE_REPLY, NULL},
+       {N_("/_Message/_Reply"),        "<control>R", reply_cb, COMPOSE_REPLY, NULL},
        {N_("/_Message/Repl_y to/_all"),
-                                       NULL, reply_cb, COMPOSE_REPLY_TO_ALL, NULL},
+                                       "<control><shift>R", reply_cb, COMPOSE_REPLY_TO_ALL, NULL},
        {N_("/_Message/Repl_y to/_sender"),
                                        NULL, reply_cb, COMPOSE_REPLY_TO_SENDER, NULL},
        {N_("/_Message/Repl_y to/mailing _list"),
-                                       NULL, reply_cb, COMPOSE_REPLY_TO_LIST, NULL},
+                                       "<control>L", reply_cb, COMPOSE_REPLY_TO_LIST, NULL},
        {N_("/_Message/---"),           NULL, NULL, 0, "<Separator>"},
-       {N_("/_Message/_Forward"),      NULL, reply_cb, COMPOSE_FORWARD, NULL},
+       {N_("/_Message/_Forward"),      "<control><alt>F", reply_cb, COMPOSE_FORWARD_INLINE, NULL},
        {N_("/_Message/For_ward as attachment"),
                                        NULL, reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL},
        {N_("/_Message/Redirec_t"),     NULL, reply_cb, COMPOSE_REDIRECT, NULL},
@@ -288,7 +289,7 @@ static GtkItemFactoryEntry msgview_entries[] =
        {N_("/_Message/Re-_edit"),      NULL, reedit_cb, 0, NULL},
 
        {N_("/_Tools"),                 NULL, NULL, 0, "<Branch>"},
-       {N_("/_Tools/_Address book"),   NULL, addressbook_open_cb, 0, NULL},
+       {N_("/_Tools/_Address book"),   "<control><shift>A", addressbook_open_cb, 0, NULL},
        {N_("/_Tools/Add sender to address boo_k"),
                                        NULL, add_address_cb, 0, NULL},
        {N_("/_Tools/---"),             NULL, NULL, 0, "<Separator>"},
@@ -399,7 +400,11 @@ void messageview_add_toolbar(MessageView *msgview, GtkWidget *window)
        gtk_widget_show(menubar);
        gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0);
 
-       handlebox = gtk_handle_box_new();
+       if (prefs_common.toolbar_detachable) {
+               handlebox = gtk_handle_box_new();
+       } else {
+               handlebox = gtk_hbox_new(FALSE, 0);
+       }
        gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0);
        gtk_widget_realize(handlebox);
        msgview->toolbar = toolbar_create(TOOLBAR_MSGVIEW, handlebox,
@@ -543,15 +548,15 @@ static gint disposition_notification_send(MsgInfo *msginfo)
                AlertValue val;
                gchar *message;
                message = g_strdup_printf(
-                                _("The notification address to which the "
-                                  "return receipt is to be sent\n"
-                                  "does not correspond to the return path:\n"
-                                  "Notification address: %s\n"
-                                  "Return path: %s\n"
-                                  "It is advised to not to send the return "
-                                  "receipt."), to, buf);
-               val = alertpanel_with_type(_("Warning"), message, _("Send"),
-                               _("+Don't Send"), NULL, NULL, ALERT_WARNING);
+                 _("The notification address to which the return receipt is\n"
+                   "to be sent does not correspond to the return path:\n"
+                   "Notification address: %s\n"
+                   "Return path: %s\n"
+                   "It is advised to not to send the return receipt."),
+                 to, buf);
+               val = alertpanel_full(_("Warning"), message, _("_Send"),
+                                       _("+_Don't Send"), NULL, FALSE,
+                                       NULL, ALERT_WARNING, G_ALERTALTERNATE);
                g_free(message);                                
                if (val != G_ALERTDEFAULT)
                        return -1;
@@ -562,22 +567,21 @@ static gint disposition_notification_send(MsgInfo *msginfo)
 
        if (ac_list == NULL) {
                AlertValue val = 
-               alertpanel_with_type(_("Warning"),
-                               _("This message is asking for a return "
-                                  "receipt notification\n"
-                                  "but according to its 'To:' and 'CC:' "
-                                  "headers it was not\nofficially addressed "
-                                  "to you.\n"
-                                  "It is advised to not to send the return ."
-                                  "receipt."),
-                               _("Send"), _("+Don't Send"), NULL, 
-                               NULL, ALERT_WARNING);
+               alertpanel_full(_("Warning"),
+                 _("This message is asking for a return receipt notification\n"
+                   "but according to its 'To:' and 'CC:' headers it was not\n"
+                   "officially addressed to you.\n"
+                   "It is advised to not to send the return receipt."),
+                 _("_Send"), _("+_Don't Send"),NULL, FALSE,
+                 NULL, ALERT_WARNING, G_ALERTALTERNATE);
                if (val != G_ALERTDEFAULT)
                        return -1;
        }
 
-       if (g_list_length(ac_list) > 1)
-               account = select_account_from_list(ac_list);
+       if (g_list_length(ac_list) > 1) {
+               if ((account = select_account_from_list(ac_list)) == NULL)
+                       return -1;
+       }
        else if (ac_list != NULL)
                account = (PrefsAccount *) ac_list->data;
        g_list_free(ac_list);
@@ -594,7 +598,7 @@ static gint disposition_notification_send(MsgInfo *msginfo)
        g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg%d",
                   get_rc_dir(), G_DIR_SEPARATOR, (gint)msginfo);
 
-       if ((fp = fopen(tmp, "wb")) == NULL) {
+       if ((fp = g_fopen(tmp, "wb")) == NULL) {
                FILE_OP_ERROR(tmp, "fopen");
                return -1;
        }
@@ -669,7 +673,7 @@ static gint disposition_notification_send(MsgInfo *msginfo)
 
        if (fclose(fp) == EOF) {
                FILE_OP_ERROR(tmp, "fclose");
-               unlink(tmp);
+               g_unlink(tmp);
                return -1;
        }
 
@@ -678,21 +682,18 @@ static gint disposition_notification_send(MsgInfo *msginfo)
        if (!queue) queue = folder_get_default_queue();
        if (!queue) {
                g_warning("can't find queue folder\n");
-               unlink(tmp);
+               g_unlink(tmp);
                return -1;
        }
        folder_item_scan(queue);
        if ((num = folder_item_add_msg(queue, tmp, NULL, TRUE)) < 0) {
                g_warning("can't queue the message\n");
-               unlink(tmp);
+               g_unlink(tmp);
                return -1;
        }
                
-       if (prefs_common.work_offline)
-               if (alertpanel(_("Offline warning"), 
-                              _("You're working offline. Override?"),
-                              _("Yes"), _("No"), NULL) != G_ALERTDEFAULT)
-                       return 0;
+       if (prefs_common.work_offline && !inc_offline_should_override())
+               return 0;
 
        /* send it */
        path = folder_item_fetch_msg(queue, num);
@@ -736,7 +737,7 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
 {
        gchar *file;
        MimeInfo *mimeinfo, *encinfo;
-
+       gchar *subject = NULL;
        g_return_val_if_fail(msginfo != NULL, -1);
 
        mimeinfo = procmime_scan_message(msginfo);
@@ -771,6 +772,24 @@ gint messageview_show(MessageView *messageview, MsgInfo *msginfo,
                        messageview->all_headers);
 
        mimeview_show_message(messageview->mimeview, mimeinfo, file);
+       
+       if (messageview->window)
+               gtk_window_set_title(GTK_WINDOW(messageview->window), 
+                               _("Sylpheed - Message View"));
+       if (messageview->window && msginfo->subject) {
+               subject = g_strdup(msginfo->subject);
+               if (!g_utf8_validate(subject, -1, NULL)) {
+                       g_free(subject);
+                       subject = g_malloc(strlen(msginfo->subject)*2 +1);
+                       conv_localetodisp(subject, strlen(msginfo->subject)*2 +1, 
+                               msginfo->subject);
+               }
+               if (g_utf8_validate(subject, -1, NULL))
+                       gtk_window_set_title(GTK_WINDOW(messageview->window), 
+                               subject);
+               g_free(subject);
+       }
+
        messageview_set_position(messageview, 0);
 
        if (messageview->msginfo->partial_recv)
@@ -904,7 +923,8 @@ static void messageview_update(MessageView *msgview)
                GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
                MsgInfo *msginfo = gtk_ctree_node_get_row_data(ctree, 
                                                      summaryview->selected);
-               g_return_if_fail(msginfo != NULL);
+               if (msginfo == NULL)
+                       return;
 
                messageview_show(msgview, msginfo, 
                                 msgview->all_headers);
@@ -1249,7 +1269,7 @@ static PrefsAccount *select_account_from_list(GList *ac_list)
                                  "accounts.\n"
                                  "Please choose which account do you want to "
                                  "use for sending the receipt notification:"),
-                               _("Send Notification"), _("+Cancel"), NULL,
+                               _("_Send Notification"), _("+_Cancel"), NULL,
                                optmenu) != G_ALERTDEFAULT)
                return NULL;
        return account_find_from_id(account_id);
@@ -1458,9 +1478,10 @@ static void reedit_cb(gpointer data, guint action, GtkWidget *widget)
        if (!messageview->msginfo) return;
        msginfo = messageview->msginfo;
        if (!msginfo->folder) return;
-       if (msginfo->folder->stype != F_OUTBOX &&
-           msginfo->folder->stype != F_DRAFT &&
-           msginfo->folder->stype != F_QUEUE) return;
+       if (!folder_has_parent_of_type(msginfo->folder, F_DRAFT) &&
+           !folder_has_parent_of_type(msginfo->folder, F_OUTBOX) &&
+           !folder_has_parent_of_type(msginfo->folder, F_QUEUE)) 
+               return;
 
        compose_reedit(msginfo);
 }