src/compose.[ch]
authorMelvin Hadasht <melvin.hadasht@free.fr>
Sun, 12 May 2002 15:47:48 +0000 (15:47 +0000)
committerMelvin Hadasht <melvin.hadasht@free.fr>
Sun, 12 May 2002 15:47:48 +0000 (15:47 +0000)
Added possibility to set message's priority.
src/procmsg.[ch]
Added possibility to set message's priority.
Added missing headers.

ChangeLog.claws
configure.in
src/compose.c
src/compose.h
src/procmsg.c
src/procmsg.h

index 6335748..fbcbc46 100644 (file)
@@ -1,3 +1,11 @@
+2002-05-12 [melvin]    0.7.5claws21
+
+       * src/compose.[ch]
+               Added possibility to set message's priority.
+       *  src/procmsg.[ch]
+               Added possibility to set message's priority.
+               Added missing headers
+
 2002-05-12 [melvin]    0.7.5claws20
 
        * src/prefs_actions.c
index 963e601..a048eb2 100644 (file)
@@ -8,7 +8,7 @@ MINOR_VERSION=7
 MICRO_VERSION=5
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=claws20
+EXTRA_VERSION=claws21
 VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION
 
 dnl set $target
index eac2f8c..59a3528 100644 (file)
@@ -138,6 +138,15 @@ typedef enum
        COMPOSE_CALL_GTK_STEXT_DELETE_TO_LINE_END
 } ComposeCallGtkSTextAction;
 
+typedef enum
+{
+       PRIORITY_HIGHEST = 1,
+       PRIORITY_HIGH,
+       PRIORITY_NORMAL,
+       PRIORITY_LOW,
+       PRIORITY_LOWEST
+} PriorityLevel;
+
 #define B64_LINE_SIZE          57
 #define B64_BUFFSIZE           77
 
@@ -268,6 +277,7 @@ static gint calc_cursor_xpos        (GtkSText       *text,
 
 static void compose_create_header_entry        (Compose *compose);
 static void compose_add_header_entry   (Compose *compose, gchar *header, gchar *text);
+static void compose_update_priority_menu_item(Compose * compose);
 
 /* callback functions */
 
@@ -407,6 +417,9 @@ static void compose_toggle_encrypt_cb       (gpointer        data,
 #endif
 static void compose_toggle_return_receipt_cb(gpointer data, guint action,
                                             GtkWidget *widget);
+static void compose_set_priority_cb    (gpointer        data,
+                                        guint           action,
+                                        GtkWidget      *widget);
 
 static void compose_attach_drag_received_cb (GtkWidget         *widget,
                                             GdkDragContext     *drag_context,
@@ -628,6 +641,13 @@ static GtkItemFactoryEntry compose_entries[] =
        {N_("/_Message/Si_gn"),         NULL, compose_toggle_sign_cb   , 0, "<ToggleItem>"},
        {N_("/_Message/_Encrypt"),      NULL, compose_toggle_encrypt_cb, 0, "<ToggleItem>"},
 #endif /* USE_GPGME */
+       {N_("/_Message/---"),           NULL,           NULL,   0, "<Separator>"},
+       {N_("/_Message/Priority"),      NULL,           NULL,   0, "<Branch>"},
+       {N_("/_Message/Priority/Highest"), NULL, compose_set_priority_cb, PRIORITY_HIGHEST, "<RadioItem>"},
+       {N_("/_Message/Priority/High"),    NULL, compose_set_priority_cb, PRIORITY_HIGH, "/Message/Priority/Highest"},
+       {N_("/_Message/Priority/Normal"),  NULL, compose_set_priority_cb, PRIORITY_NORMAL, "/Message/Priority/Highest"},
+       {N_("/_Message/Priority/Low"),     NULL, compose_set_priority_cb, PRIORITY_LOW, "/Message/Priority/Highest"},
+       {N_("/_Message/Priority/Lowest"),  NULL, compose_set_priority_cb, PRIORITY_LOWEST, "/Message/Priority/Highest"},
        {N_("/_Message/---"),           NULL,           NULL,   0, "<Separator>"},
        {N_("/_Message/_Request Return Receipt"),       NULL, compose_toggle_return_receipt_cb, 0, "<ToggleItem>"},
        {N_("/_Tools"),                 NULL, NULL, 0, "<Branch>"},
@@ -1400,6 +1420,7 @@ static gint compose_parse_header(Compose *compose, MsgInfo *msginfo)
                                       {"Followup-To:",    NULL, FALSE},
                                       {"X-Mailing-List:", NULL, FALSE},
                                       {"X-BeenThere:",    NULL, FALSE},
+                                      {"X-Priority:",     NULL, FALSE},
                                       {NULL,              NULL, FALSE}};
 
        enum
@@ -1411,7 +1432,8 @@ static gint compose_parse_header(Compose *compose, MsgInfo *msginfo)
                H_NEWSGROUPS     = 4,
                H_FOLLOWUP_TO    = 5,
                H_X_MAILING_LIST = 6,
-               H_X_BEENTHERE    = 7
+               H_X_BEENTHERE    = 7,
+               H_X_PRIORITY     = 8
        };
 
        FILE *fp;
@@ -1480,6 +1502,22 @@ static gint compose_parse_header(Compose *compose, MsgInfo *msginfo)
                hentry[H_FOLLOWUP_TO].body = NULL;
        }
 
+       if (compose->mode == COMPOSE_REEDIT)
+               if (hentry[H_X_PRIORITY].body != NULL) {
+                       gint priority;
+                       
+                       priority = atoi(hentry[H_X_PRIORITY].body);
+                       g_free(hentry[H_X_PRIORITY].body);
+                       
+                       hentry[H_X_PRIORITY].body = NULL;
+                       
+                       if (priority < PRIORITY_HIGHEST || 
+                           priority > PRIORITY_LOWEST)
+                               priority = PRIORITY_NORMAL;
+                       
+                       compose->priority =  priority;
+               }
        if (compose->mode == COMPOSE_REEDIT && msginfo->inreplyto)
                compose->inreplyto = g_strdup(msginfo->inreplyto);
        else if (compose->mode != COMPOSE_REEDIT &&
@@ -1731,6 +1769,8 @@ static void compose_reedit_set_entry(Compose *compose, MsgInfo *msginfo)
        SET_ADDRESS(COMPOSE_BCC, compose->bcc);
        SET_ADDRESS(COMPOSE_REPLYTO, compose->replyto);
 
+       compose_update_priority_menu_item(compose);
+
        compose_show_first_last_header(compose, TRUE);
 
 #if 0 /* NEW COMPOSE GUI */
@@ -3803,6 +3843,25 @@ static gint compose_write_headers(Compose *compose, FILE *fp,
                        procmime_get_encoding_str(encoding));
        }
 
+       /* PRIORITY */
+       switch (compose->priority) {
+               case PRIORITY_HIGHEST: fprintf(fp, "Importance: high\n"
+                                                  "X-Priority: 1 (Highest)\n");
+                       break;
+               case PRIORITY_HIGH: fprintf(fp, "Importance: high\n"
+                                               "X-Priority: 2 (High)\n");
+                       break;
+               case PRIORITY_NORMAL: break;
+               case PRIORITY_LOW: fprintf(fp, "Importance: low\n"
+                                              "X-Priority: 4 (Low)\n");
+                       break;
+               case PRIORITY_LOWEST: fprintf(fp, "Importance: low\n"
+                                                 "X-Priority: 5 (Lowest)\n");
+                       break;
+               default: debug_print(_("compose: priority unknown : %d\n"),
+                                    compose->priority);
+       }
+
        /* Request Return Receipt */
        if (!IS_IN_CUSTOM_HEADER("Disposition-Notification-To")) {
                if (compose->return_receipt) {
@@ -4733,6 +4792,10 @@ static Compose *compose_create(PrefsAccount *account, ComposeMode mode)
        if (!prefs_common.show_ruler)
                gtk_widget_hide(ruler_hbox);
 
+       /* Priority */
+       compose->priority = PRIORITY_NORMAL;
+       compose_update_priority_menu_item(compose);
+
        select_account(compose, account);
        set_toolbar_style(compose);
 
@@ -4893,6 +4956,46 @@ static GtkWidget *compose_account_option_menu_create(Compose *compose)
        return hbox;
 }
 
+static void compose_set_priority_cb(gpointer data,
+                                   guint action,
+                                   GtkWidget *widget)
+{
+       Compose *compose = (Compose *) data;
+       compose->priority = action;
+}
+
+static void compose_update_priority_menu_item(Compose * compose)
+{
+       GtkItemFactory *ifactory;
+       GtkWidget *menuitem;
+
+       ifactory = gtk_item_factory_from_widget(compose->menubar);
+       
+       switch (compose->priority) {
+               case PRIORITY_HIGHEST:
+                       menuitem = gtk_item_factory_get_item
+                               (ifactory, "/Message/Priority/Highest");
+                       break;
+               case PRIORITY_HIGH:
+                       menuitem = gtk_item_factory_get_item
+                               (ifactory, "/Message/Priority/High");
+                       break;
+               case PRIORITY_NORMAL:
+                       menuitem = gtk_item_factory_get_item
+                               (ifactory, "/Message/Priority/Normal");
+                       break;
+               case PRIORITY_LOW:
+                       menuitem = gtk_item_factory_get_item
+                               (ifactory, "/Message/Priority/Low");
+                       break;
+               case PRIORITY_LOWEST:
+                       menuitem = gtk_item_factory_get_item
+                               (ifactory, "/Message/Priority/Lowest");
+                       break;
+       }
+       gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
+}      
 static void compose_set_template_menu(Compose *compose)
 {
        GSList *tmpl_list, *cur;
index 186979d..89a3022 100644 (file)
@@ -196,6 +196,9 @@ struct _Compose
         GtkPspell *gtkpspell;
 #endif
 
+       /* Priority */
+       gint priority;
+
        gchar *bounce_filename;
 };
 
index 2f57feb..42a153a 100644 (file)
@@ -37,6 +37,8 @@
 #if USE_GPGME
 #  include "rfc2015.h"
 #endif
+#include "alertpanel.h"
+#include "news.h"
 
 typedef struct _FlagInfo       FlagInfo;
 
@@ -244,6 +246,7 @@ GSList *procmsg_read_cache(FolderItem *item, gboolean scan_file)
                READ_CACHE_DATA(msginfo->references, fp);
                 READ_CACHE_DATA(msginfo->xref, fp);
 
+               READ_CACHE_DATA_INT(msginfo->priority, fp);
 
                MSG_SET_PERM_FLAGS(msginfo->flags, default_flags.perm_flags);
                MSG_SET_TMP_FLAGS(msginfo->flags, default_flags.tmp_flags);
@@ -390,6 +393,7 @@ void procmsg_write_cache(MsgInfo *msginfo, FILE *fp)
        WRITE_CACHE_DATA(msginfo->references, fp);
        WRITE_CACHE_DATA(msginfo->xref, fp);
 
+       WRITE_CACHE_DATA_INT(msginfo->priority, fp);
 }
 
 void procmsg_write_flags(MsgInfo *msginfo, FILE *fp)
@@ -1073,6 +1077,8 @@ MsgInfo *procmsg_msginfo_copy(MsgInfo *msginfo)
        MEMBCOPY(score);
        MEMBCOPY(threadscore);
 
+       MEMBCOPY(priority);
+
        return newmsginfo;
 }
 
index f0e4b21..b40978e 100644 (file)
@@ -200,6 +200,8 @@ struct _MsgInfo
        /* used only for encrypted messages */
        gchar *plaintext_file;
        guint decryption_failed : 1;
+
+       gint priority;
 };
 
 GHashTable *procmsg_msg_hash_table_create      (GSList         *mlist);