Sync with hiro's cvs 10 to 17.
[claws.git] / src / mainwindow.c
index e9fd4c18199d2cd271630c13570817f91c56e4f0..c11ec38d5e53e3e6d3ec39242bee43d3ea811897 100644 (file)
@@ -52,6 +52,7 @@
 #include "message_search.h"
 #include "headerview.h"
 #include "menu.h"
+#include "stock_pixmap.h"
 #include "folder.h"
 #include "inc.h"
 #include "compose.h"
@@ -127,21 +128,29 @@ static void toolbar_reply_cb              (GtkWidget      *widget,
 static void toolbar_reply_popup_cb     (GtkWidget      *widget,
                                         GdkEventButton *event,
                                         gpointer        data);
+static void toolbar_reply_popup_closed_cb(GtkMenuShell *menu_shell,
+                                        gpointer        data);
 static void toolbar_reply_to_all_cb    (GtkWidget      *widget,
                                         gpointer        data);
 static void toolbar_reply_to_all_popup_cb(GtkWidget    *widget,
                                         GdkEventButton *event,
                                         gpointer        data);
+static void toolbar_reply_to_all_popup_closed_cb(GtkMenuShell  *menu_shell,
+                                        gpointer        data);
 static void toolbar_reply_to_sender_cb (GtkWidget      *widget,
                                         gpointer        data);
 static void toolbar_reply_to_sender_popup_cb(GtkWidget *widget,
                                         GdkEventButton *event,
                                         gpointer        data);
+static void toolbar_reply_to_sender_popup_closed_cb(GtkMenuShell       *menu_shell,
+                                        gpointer        data);
 static void toolbar_forward_cb         (GtkWidget      *widget,
                                         gpointer        data);
 static void toolbar_forward_popup_cb   (GtkWidget      *widget,
                                         GdkEventButton *event,
                                         gpointer        data);
+static void toolbar_forward_popup_closed_cb(GtkMenuShell       *menu_shell,
+                                        gpointer        data);
 
 static void toolbar_delete_cb          (GtkWidget      *widget,
                                         gpointer        data);
@@ -426,14 +435,15 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_File/_Save as..."),              NULL, save_as_cb, 0, NULL},
        {N_("/_File/_Print..."),                "<alt>P", print_cb, 0, NULL},
        {N_("/_File/---"),                      NULL, NULL, 0, "<Separator>"},
-/*     {N_("/_File/_Close"),                   "<alt>W", app_exit_cb, 0, NULL},*/
+       /* {N_("/_File/_Close"),                "<alt>W", app_exit_cb, 0, NULL}, */
        {N_("/_File/E_xit"),                    "<alt>Q", app_exit_cb, 0, NULL},
 
        {N_("/_Edit"),                          NULL, NULL, 0, "<Branch>"},
        {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"), "<control>F", search_cb, 0, NULL},
+       {N_("/_Edit/_Find in current message..."),
+                                               "<control>F", search_cb, 0, NULL},
        {N_("/_Edit/_Search folder..."),        "<control>S", search_cb, 1, NULL},
 
        {N_("/_View"),                          NULL, NULL, 0, "<Branch>"},
@@ -443,18 +453,61 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_View/_Toolbar/Icon _and text"),  NULL, toggle_toolbar_cb, TOOLBAR_BOTH, "<RadioItem>"},
        {N_("/_View/_Toolbar/_Icon"),           NULL, toggle_toolbar_cb, TOOLBAR_ICON, "/View/Toolbar/Icon and text"},
        {N_("/_View/_Toolbar/_Text"),           NULL, toggle_toolbar_cb, TOOLBAR_TEXT, "/View/Toolbar/Icon and text"},
-       {N_("/_View/_Toolbar/_None"),           NULL, toggle_toolbar_cb, TOOLBAR_NONE, "/View/Toolbar/Icon and text"},
-       {N_("/_View/_Status bar"),              NULL, toggle_statusbar_cb, 0, "<ToggleItem>"},
+       {N_("/_View/_Toolbar/_None"),           NULL, toggle_toolbar_cb, TOOLBAR_NONE, "/View/Toolbar/Icon and text"},
+       {N_("/_View/Status _bar"),              NULL, toggle_statusbar_cb, 0, "<ToggleItem>"},
        {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_View/Separate f_older tree"),    NULL, NULL, SEPARATE_ACTION + SEPARATE_FOLDER, "<ToggleItem>"},
        {N_("/_View/Separate m_essage view"),   NULL, NULL, SEPARATE_ACTION + SEPARATE_MESSAGE, "<ToggleItem>"},
        {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
-       {N_("/_View/View _source"),             "<control>U", view_source_cb, 0, NULL},
-       {N_("/_View/Show all _header"),         "<control>H", header_window_show_cb, 0, NULL},
+       {N_("/_View/_Sort"),                    NULL, NULL, 0, "<Branch>"},
+       {N_("/_View/_Sort/Sort by _number"),    NULL, sort_summary_cb, SORT_BY_NUMBER, NULL},
+       {N_("/_View/_Sort/Sort by s_ize"),      NULL, sort_summary_cb, SORT_BY_SIZE, NULL},
+       {N_("/_View/_Sort/Sort by _date"),      NULL, sort_summary_cb, SORT_BY_DATE, NULL},
+       {N_("/_View/_Sort/Sort by _from"),      NULL, sort_summary_cb, SORT_BY_FROM, NULL},
+       {N_("/_View/_Sort/Sort by _subject"),NULL, sort_summary_cb, SORT_BY_SUBJECT, NULL},
+       {N_("/_View/_Sort/Sort by _color label"),
+                                               NULL, sort_summary_cb, SORT_BY_LABEL, NULL},
+       {N_("/_View/_Sort/Sort by _mark"),      NULL, sort_summary_cb, SORT_BY_MARK, NULL},
+       {N_("/_View/_Sort/Sort by _unread"),    NULL, sort_summary_cb, SORT_BY_UNREAD, NULL},
+       {N_("/_View/_Sort/Sort by a_ttachment"),
+                                               NULL, sort_summary_cb, SORT_BY_MIME, NULL},
+       {N_("/_View/_Sort/---"),                NULL, NULL, 0, "<Separator>"},
+       {N_("/_View/_Sort/_Attract by subject"),
+                                               NULL, attract_by_subject_cb, 0, NULL},
+       {N_("/_View/Th_read view"),             "<control>T",        thread_cb, 0, NULL},
+       {N_("/_View/U_nthread view"),           "<shift><control>T", thread_cb, 1, NULL},
+       {N_("/_View/Set display _item..."),     NULL, set_display_item_cb, 0, NULL},
        {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_View/_Code set"),                NULL, NULL, 0, "<Branch>"},
        {N_("/_View/_Code set/_Auto detect"),
         NULL, set_charset_cb, C_AUTO, "<RadioItem>"},
+       {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
+       {N_("/_View/_Go to"),           NULL, NULL, 0, "<Branch>"},
+       {N_("/_View/_Go to/_Prev message"),     NULL, prev_cb, 0, NULL},
+       {N_("/_View/_Go to/_Next message"),     NULL, next_cb, 0, NULL},
+       {N_("/_View/_Go to/---"),               NULL, NULL, 0, "<Separator>"},
+       {N_("/_View/_Go to/P_rev unread message"),
+                                               NULL, prev_unread_cb, 0, NULL},
+       {N_("/_View/_Go to/N_ext unread message"),
+                                               NULL, next_unread_cb, 0, NULL},
+       {N_("/_View/_Go to/---"),               NULL, NULL, 0, "<Separator>"},
+       {N_("/_View/_Go to/Prev _marked message"),
+                                               NULL, prev_marked_cb, 0, NULL},
+       {N_("/_View/_Go to/Next m_arked message"),
+                                               NULL, next_marked_cb, 0, NULL},
+       {N_("/_View/_Go to/---"),               NULL, NULL, 0, "<Separator>"},
+       {N_("/_View/_Go to/Prev _labeled message"),
+                                               NULL, prev_labeled_cb, 0, NULL},
+       {N_("/_View/_Go to/Next la_beled message"),
+                                               NULL, next_labeled_cb, 0, NULL},
+       {N_("/_View/_Go to/---"),               NULL, NULL, 0, "<Separator>"},
+       {N_("/_View/_Go to/Other _folder..."),  "<alt>G", goto_folder_cb, 0, NULL},
+       {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
+       {N_("/_View/Open in new _window"),      "<shift><control>N", open_msg_cb, 0, NULL},
+       {N_("/_View/_View source"),             "<control>U", view_source_cb, 0, NULL},
+       {N_("/_View/Show all _header"),         "<control>H", header_window_show_cb, 0, NULL},
+       {N_("/_View/---"),                      NULL, NULL, 0, "<Separator>"},
+       {N_("/_View/_Update"),                  "<alt>U", update_summary_cb,  0, NULL},
 
 #define CODESET_SEPARATOR \
        {N_("/_View/_Code set/---"),            NULL, NULL, 0, "<Separator>"}
@@ -532,7 +585,7 @@ static GtkItemFactoryEntry mainwin_entries[] =
 #undef CODESET_ACTION
 
        {N_("/_Message"),                       NULL, NULL, 0, "<Branch>"},
-       {N_("/_Message/Get new ma_il"),         "<alt>I",       inc_mail_cb, 0, NULL},
+       {N_("/_Message/Get new ma_il"), "<alt>I",       inc_mail_cb, 0, NULL},
        {N_("/_Message/Get from _all accounts"),
                                                "<shift><alt>I", inc_all_account_mail_cb, 0, NULL},
        {N_("/_Message/---"),                   NULL, NULL, 0, "<Separator>"},
@@ -554,6 +607,9 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_Message/_Copy..."),              NULL, copy_to_cb, 0, NULL},
        {N_("/_Message/_Delete"),               "<alt>D", delete_cb,  0, NULL},
        {N_("/_Message/---"),                   NULL, NULL, 0, "<Separator>"},
+       {N_("/_Message/Delete du_plicated messages"),
+                                               NULL, delete_duplicated_cb,   0, NULL},
+       {N_("/_Message/---"),                   NULL, NULL, 0, "<Separator>"},
        {N_("/_Message/_Mark"),                 NULL, NULL, 0, "<Branch>"},
        {N_("/_Message/_Mark/_Mark"),           NULL, mark_cb,   0, NULL},
        {N_("/_Message/_Mark/_Unmark"),         NULL, unmark_cb, 0, NULL},
@@ -561,59 +617,17 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_Message/_Mark/Mark as unr_ead"), NULL, mark_as_unread_cb, 0, NULL},
        {N_("/_Message/_Mark/Mark as rea_d"),
                                                NULL, mark_as_read_cb, 0, NULL},
-       {N_("/_Message/_Mark/Mark all read"),   NULL, mark_all_read_cb, 0, NULL},                                                
-       {N_("/_Message/---"),                   NULL, NULL, 0, "<Separator>"},
-       {N_("/_Message/Open in new _window"),   "<shift><control>N", open_msg_cb, 0, NULL},
-
-       {N_("/_Summary"),                       NULL, NULL, 0, "<Branch>"},
-       {N_("/_Summary/_Hide read messages"),   NULL, hide_read_messages, 0, "<ToggleItem>"},
-       {N_("/_Summary/_Delete duplicated messages"),
-                                               NULL, delete_duplicated_cb,   0, NULL},
-       {N_("/_Summary/_Filter messages"),      NULL, filter_cb, 0, NULL},
-       {N_("/_Summary/E_xecute"),              "<alt>X", execute_summary_cb, 0, NULL},
-       {N_("/_Summary/_Update"),               "<alt>U", update_summary_cb,  0, NULL},
-       {N_("/_Summary/---"),                   NULL, NULL, 0, "<Separator>"},
-       {N_("/_Summary/Go _to"),                NULL, NULL, 0, "<Branch>"},
-       {N_("/_Summary/Go _to/_Prev message"),  NULL, prev_cb, 0, NULL},
-       {N_("/_Summary/Go _to/_Next message"),  NULL, next_cb, 0, NULL},
-       {N_("/_Summary/Go _to/---"),            NULL, NULL, 0, "<Separator>"},
-       {N_("/_Summary/Go _to/P_rev unread message"),
-                                               NULL, prev_unread_cb, 0, NULL},
-       {N_("/_Summary/Go _to/N_ext unread message"),
-                                               NULL, next_unread_cb, 0, NULL},
-       {N_("/_Summary/Go _to/---"),            NULL, NULL, 0, "<Separator>"},
-       {N_("/_Summary/Go _to/Prev _marked message"),
-                                               NULL, prev_marked_cb, 0, NULL},
-       {N_("/_Summary/Go _to/Next m_arked message"),
-                                               NULL, next_marked_cb, 0, NULL},
-       {N_("/_Summary/Go _to/---"),            NULL, NULL, 0, "<Separator>"},
-       {N_("/_Summary/Go _to/Prev _labeled message"),
-                                               NULL, prev_labeled_cb, 0, NULL},
-       {N_("/_Summary/Go _to/Next la_beled message"),
-                                               NULL, next_labeled_cb, 0, NULL},
-       {N_("/_Summary/_Go to other folder..."),"<alt>G", goto_folder_cb, 0, NULL},
-       {N_("/_Summary/---"),                   NULL, NULL, 0, "<Separator>"},
-       {N_("/_Summary/_Sort"),                 NULL, NULL, 0, "<Branch>"},
-       {N_("/_Summary/_Sort/Sort by _number"), NULL, sort_summary_cb, SORT_BY_NUMBER, NULL},
-       {N_("/_Summary/_Sort/Sort by s_ize"),   NULL, sort_summary_cb, SORT_BY_SIZE, NULL},
-       {N_("/_Summary/_Sort/Sort by _date"),   NULL, sort_summary_cb, SORT_BY_DATE, NULL},
-       {N_("/_Summary/_Sort/Sort by _from"),   NULL, sort_summary_cb, SORT_BY_FROM, NULL},
-       {N_("/_Summary/_Sort/Sort by _subject"),NULL, sort_summary_cb, SORT_BY_SUBJECT, NULL},
-       {N_("/_Summary/_Sort/Sort by _color label"),
-                                               NULL, sort_summary_cb, SORT_BY_LABEL, NULL},
-       {N_("/_Summary/_Sort/Sort by _mark"),   NULL, sort_summary_cb, SORT_BY_MARK, NULL},
-       {N_("/_Summary/_Sort/Sort by _unread"), NULL, sort_summary_cb, SORT_BY_UNREAD, NULL},
-       {N_("/_Summary/_Sort/Sort by a_ttachment"),
-                                               NULL, sort_summary_cb, SORT_BY_MIME, NULL},
-       {N_("/_Summary/_Sort/---"),             NULL, NULL, 0, "<Separator>"},
-       {N_("/_Summary/_Sort/_Attract by subject"),
-                                               NULL, attract_by_subject_cb, 0, NULL},
-       {N_("/_Summary/_Thread view"),          "<control>T",        thread_cb, 0, NULL},
-       {N_("/_Summary/Unt_hread view"),        "<shift><control>T", thread_cb, 1, NULL},
-       {N_("/_Summary/Set display _item..."),  NULL, set_display_item_cb, 0, NULL},
+       {N_("/_Message/_Mark/Mark all _read"),  NULL, mark_all_read_cb, 0, NULL},
 
        {N_("/_Tool"),                          NULL, NULL, 0, "<Branch>"},
        {N_("/_Tool/_Address book"),            "<alt>A", addressbook_open_cb, 0, NULL},
+       {N_("/_Tool/Add sender to address boo_k"),
+                                               NULL, add_address_cb, 0, NULL},
+       {N_("/_Tool/---"),                      NULL, NULL, 0, "<Separator>"},
+       {N_("/_Tool/_Filter messages"),         NULL, filter_cb, 0, NULL},
+       {N_("/_Tool/---"),                      NULL, NULL, 0, "<Separator>"},
+       {N_("/_Tool/E_xecute"),                 "<alt>X", execute_summary_cb, 0, NULL},
+       {N_("/_Tool/---"),                      NULL, NULL, 0, "<Separator>"},
        {N_("/_Tool/_Log window"),              "<alt>L", log_window_show_cb, 0, NULL},
 
        {N_("/_Configuration"),                 NULL, NULL, 0, "<Branch>"},
@@ -636,7 +650,7 @@ static GtkItemFactoryEntry mainwin_entries[] =
        {N_("/_Configuration/C_hange current account"),
                                                NULL, NULL, 0, "<Branch>"},
 
-       {N_("/_Help"),                          NULL, NULL, 0, "<LastBranch>"},
+       {N_("/_Help"),                          NULL, NULL, 0, "<Branch>"},
        {N_("/_Help/_Manual"),                  NULL, NULL, 0, "<Branch>"},
        {N_("/_Help/_Manual/_English"),         NULL, manual_open_cb, MANUAL_LANG_EN, NULL},
        {N_("/_Help/_Manual/_Japanese"),        NULL, manual_open_cb, MANUAL_LANG_JA, NULL},
@@ -736,20 +750,28 @@ MainWindow *main_window_create(SeparateType type)
                        sizeof(reply_popup_entries[0]);
        reply_popup = popupmenu_create(window, reply_popup_entries, n_menu_entries,
                                      "<ReplyPopup>", mainwin);
+       gtk_signal_connect(GTK_OBJECT(reply_popup), "selection_done",
+                          GTK_SIGNAL_FUNC(toolbar_reply_popup_closed_cb), mainwin);
        n_menu_entries = sizeof(replyall_popup_entries) /
                        sizeof(replyall_popup_entries[0]);
        replyall_popup = popupmenu_create(window, replyall_popup_entries, n_menu_entries,
                                      "<ReplyAllPopup>", mainwin);
+       gtk_signal_connect(GTK_OBJECT(replyall_popup), "selection_done",
+                          GTK_SIGNAL_FUNC(toolbar_reply_to_all_popup_closed_cb), mainwin);
        n_menu_entries = sizeof(replysender_popup_entries) /
                        sizeof(replysender_popup_entries[0]);
        replysender_popup = popupmenu_create(window, replysender_popup_entries, n_menu_entries,
                                      "<ReplySenderPopup>", mainwin);
+       gtk_signal_connect(GTK_OBJECT(replysender_popup), "selection_done",
+                          GTK_SIGNAL_FUNC(toolbar_reply_to_sender_popup_closed_cb), mainwin);
        /* create the popup menu for the forward button */
        n_menu_entries = sizeof(fwd_popup_entries) /
                        sizeof(fwd_popup_entries[0]);
        fwd_popup = popupmenu_create(window, fwd_popup_entries, n_menu_entries,
                                      "<ForwardPopup>", mainwin);
-                                         
+       gtk_signal_connect(GTK_OBJECT(fwd_popup), "selection_done",
+                          GTK_SIGNAL_FUNC(toolbar_forward_popup_closed_cb), mainwin);
+                          
        main_window_toolbar_create(mainwin, handlebox);
 
        /* vbox that contains body */
@@ -913,13 +935,10 @@ MainWindow *main_window_create(SeparateType type)
                                           GUINT_TO_POINTER(SEPARATE_MESSAGE));
 
 
-       menu_set_sensitive(ifactory, "/Summary/Thread view",
+       menu_set_sensitive(ifactory, "/View/Thread view",
                           prefs_common.enable_thread ? FALSE : TRUE);
-       menu_set_sensitive(ifactory, "/Summary/Unthread view",
+       menu_set_sensitive(ifactory, "/View/Unthread view",
                           prefs_common.enable_thread ? TRUE : FALSE);
-       
-       /*main_window_set_thread_option(mainwin);*/
-
 
        /* set account selection menu */
        ac_menu = gtk_item_factory_get_widget
@@ -936,7 +955,6 @@ MainWindow *main_window_create(SeparateType type)
                                 prefs_common.mainwin_y);
        gtk_widget_set_usize(window, prefs_common.mainwin_width,
                             prefs_common.mainwin_height);
-                            
        gtk_widget_show(mainwin->window);
 
        /* initialize views */
@@ -946,7 +964,6 @@ MainWindow *main_window_create(SeparateType type)
        header_window_init(mainwin->headerwin);
        log_window_init(mainwin->logwin);
 
-
        mainwin->lock_count = 0;
        mainwin->cursor_count = 0;
 
@@ -1184,21 +1201,17 @@ void main_window_get_position(MainWindow *mainwin)
 void main_window_empty_trash(MainWindow *mainwin, gboolean confirm)
 {
        GList *list;
-       gboolean hasTrash = 0;
-
-       for (list = folder_get_list(); list != NULL; list = list->next) {
-               Folder *folder;
+       guint has_trash;
+       Folder *folder;
 
-               folder = list->data;
-               if (folder->trash) {
-                       hasTrash = (folder->trash->total > 0);
-               }
+       for (has_trash = 0, list = folder_get_list(); list != NULL; list = list->next) {
+               folder = FOLDER(list->data);
+               if (folder && folder->trash && folder->trash->total > 0)
+                       has_trash++;
        }
 
-       if (!hasTrash) {
-         return;
-       }
+       if (!has_trash) return;
+       
        if (confirm) {
                if (alertpanel(_("Empty trash"),
                               _("Empty all messages in trash?"),
@@ -1210,10 +1223,8 @@ void main_window_empty_trash(MainWindow *mainwin, gboolean confirm)
        procmsg_empty_trash();
 
        for (list = folder_get_list(); list != NULL; list = list->next) {
-               Folder *folder;
-
                folder = list->data;
-               if (folder->trash) {
+               if (folder && folder->trash && folder->trash->total != 0) {
                        folder_item_scan(folder->trash);
                        folderview_update_item(folder->trash, TRUE);
                }
@@ -1429,15 +1440,26 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
                {"/File/Empty trash"           , M_UNLOCKED},
                {"/File/Save as...", M_SINGLE_TARGET_EXIST|M_UNLOCKED},
                {"/File/Print..."  , M_TARGET_EXIST|M_UNLOCKED},
-/*             {"/File/Close", M_UNLOCKED},*/
+               /* {"/File/Close", M_UNLOCKED}, */
                {"/File/Exit" , M_UNLOCKED},
 
-               {"/View/Show all header"      , M_SINGLE_TARGET_EXIST},
-               {"/View/View source"          , M_SINGLE_TARGET_EXIST},
+               {"/View/Sort"                      , M_MSG_EXIST},
+               {"/View/Thread view"               , M_UNTHREADED},
+               {"/View/Unthread view"             , M_THREADED},
+               {"/View/Go to"                     , M_MSG_EXIST},
+               {"/View/Go to/Prev message"        , M_MSG_EXIST},
+               {"/View/Go to/Next message"        , M_MSG_EXIST},
+               {"/View/Go to/Next unread message" , M_MSG_EXIST},
+               {"/View/Go to/Prev marked message" , M_MSG_EXIST},
+               {"/View/Go to/Next marked message" , M_MSG_EXIST},
+               {"/View/Go to/Prev labeled message", M_MSG_EXIST},
+               {"/View/Go to/Next labeled message", M_MSG_EXIST},
+               {"/View/Open in new window"        , M_SINGLE_TARGET_EXIST},
+               {"/View/Show all header"           , M_SINGLE_TARGET_EXIST},
+               {"/View/View source"               , M_SINGLE_TARGET_EXIST},
 
                {"/Message/Get new mail"          , M_HAVE_ACCOUNT|M_UNLOCKED},
                {"/Message/Get from all accounts" , M_HAVE_ACCOUNT|M_UNLOCKED},
-/*             {"/Message/Compose new message"   , M_HAVE_ACCOUNT}, */
                {"/Message/Compose a news message", M_HAVE_NEWS_ACCOUNT},
                {"/Message/Reply"                 , M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST},
                {"/Message/Reply to sender"       , M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST},
@@ -1445,33 +1467,22 @@ void main_window_set_menu_sensitive(MainWindow *mainwin)
                {"/Message/Follow-up and reply to", M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST|M_NEWS},
                {"/Message/Forward"               , M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST},
                {"/Message/Bounce"                , M_HAVE_ACCOUNT|M_SINGLE_TARGET_EXIST},
-               {"/Message/Open in new window"    , M_SINGLE_TARGET_EXIST},
                {"/Message/Re-edit", M_HAVE_ACCOUNT|M_ALLOW_REEDIT},
                {"/Message/Move...", M_TARGET_EXIST|M_EXEC|M_UNLOCKED},
                {"/Message/Copy...", M_TARGET_EXIST|M_EXEC|M_UNLOCKED},
                {"/Message/Delete" , M_TARGET_EXIST|M_EXEC|M_UNLOCKED},
                {"/Message/Mark"   , M_TARGET_EXIST},
+               {"/Message/Delete duplicated messages", M_MSG_EXIST|M_EXEC|M_UNLOCKED},
 
-               {"/Summary/Delete duplicated messages", M_MSG_EXIST|M_EXEC|M_UNLOCKED},
-               {"/Summary/Filter messages"           , M_MSG_EXIST|M_EXEC|M_UNLOCKED},
-               {"/Summary/Execute"                   , M_MSG_EXIST|M_EXEC|M_UNLOCKED},
-               {"/Summary/Go to"                     , M_MSG_EXIST},
-               {"/Summary/Go to/Prev message"        , M_MSG_EXIST},
-               {"/Summary/Go to/Next message"        , M_MSG_EXIST},
-               {"/Summary/Go to/Next unread message" , M_MSG_EXIST},
-               {"/Summary/Go to/Prev marked message" , M_MSG_EXIST},
-               {"/Summary/Go to/Next marked message" , M_MSG_EXIST},
-               {"/Summary/Go to/Prev labeled message", M_MSG_EXIST},
-               {"/Summary/Go to/Next labeled message", M_MSG_EXIST},
-               {"/Summary/Sort"                      , M_MSG_EXIST},
-               {"/Summary/Thread view"               , M_UNTHREADED},
-               {"/Summary/Unthread view"             , M_THREADED},
+               {"/Tool/Add sender to address book", M_SINGLE_TARGET_EXIST},
+               {"/Tool/Filter messages"           , M_MSG_EXIST|M_EXEC|M_UNLOCKED},
+               {"/Tool/Execute"                   , M_MSG_EXIST|M_EXEC|M_UNLOCKED},
 
                {"/Configuration", M_UNLOCKED},
 
                {NULL, 0}
        };
-       
+
        ifactory = gtk_item_factory_from_widget(mainwin->menubar);
        state = main_window_get_current_state(mainwin);
 
@@ -1548,8 +1559,10 @@ static void main_window_set_widgets(MainWindow *mainwin, SeparateType type)
        /* create separated window(s) if needed */
        if (type & SEPARATE_FOLDER) {
                folderwin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-               gtk_window_set_title(GTK_WINDOW(folderwin), _("Sylpheed - folder view"));
-               gtk_window_set_wmclass(GTK_WINDOW(folderwin), "separate folderview", "Sylpheed");
+               gtk_window_set_title(GTK_WINDOW(folderwin),
+                                    _("Sylpheed - Folder View"));
+               gtk_window_set_wmclass(GTK_WINDOW(folderwin),
+                                      "folder_view", "Sylpheed");
                gtk_window_set_policy(GTK_WINDOW(folderwin),
                                      TRUE, TRUE, FALSE);
                gtk_widget_set_usize(folderwin, -1,
@@ -1562,8 +1575,10 @@ static void main_window_set_widgets(MainWindow *mainwin, SeparateType type)
        }
        if (type & SEPARATE_MESSAGE) {
                messagewin = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-               gtk_window_set_title(GTK_WINDOW(messagewin), _("Sylpheed - message view"));
-               gtk_window_set_wmclass(GTK_WINDOW(messagewin), "separate messageview", "Sylpheed");
+               gtk_window_set_title(GTK_WINDOW(messagewin),
+                                    _("Sylpheed - Message View"));
+               gtk_window_set_wmclass(GTK_WINDOW(messagewin),
+                                      "message_view", "Sylpheed");
                gtk_window_set_policy(GTK_WINDOW(messagewin),
                                      TRUE, TRUE, FALSE);
                gtk_widget_set_usize
@@ -1709,35 +1724,10 @@ static void main_window_set_widgets(MainWindow *mainwin, SeparateType type)
        debug_print(_("done.\n"));
 }
 
-#include "pixmaps/stock_mail_receive.xpm"
-#include "pixmaps/stock_mail_receive_all.xpm"
-#include "pixmaps/stock_mail_compose.xpm"
-#include "pixmaps/stock_news_compose.xpm"
-#include "pixmaps/stock_mail_reply.xpm"
-#include "pixmaps/stock_mail_reply_to_all.xpm"
-#include "pixmaps/stock_mail_reply_to_author.xpm"
-#include "pixmaps/stock_mail_forward.xpm"
-#include "pixmaps/stock_mail_send.xpm"
-#include "pixmaps/stock_preferences.xpm"
-#include "pixmaps/stock_properties.xpm"
-#include "pixmaps/stock_down_arrow.xpm"
-#include "pixmaps/stock_close.xpm"
-#include "pixmaps/stock_exec.xpm"
-
-#define CREATE_TOOLBAR_ICON(xpm_d) \
-{ \
-       icon = gdk_pixmap_create_from_xpm_d(container->window, &mask, \
-                                           &container->style->white, \
-                                           xpm_d); \
-       icon_wid = gtk_pixmap_new(icon, mask); \
-}
-
 static void main_window_toolbar_create(MainWindow *mainwin,
                                       GtkWidget *container)
 {
        GtkWidget *toolbar;
-       GdkPixmap *icon;
-       GdkBitmap *mask;
        GtkWidget *icon_wid;
        GtkWidget *get_btn;
        GtkWidget *getall_btn;
@@ -1766,13 +1756,13 @@ static void main_window_toolbar_create(MainWindow *mainwin,
        gtk_toolbar_set_space_style(GTK_TOOLBAR(toolbar),
                                    GTK_TOOLBAR_SPACE_LINE);
 
-       CREATE_TOOLBAR_ICON(stock_mail_receive_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_RECEIVE);
        get_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                          _("Get"),
                                          _("Get new mail from current account"),
                                          "Get",
                                          icon_wid, toolbar_inc_cb, mainwin);
-       CREATE_TOOLBAR_ICON(stock_mail_receive_all_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_RECEIVE_ALL);
        getall_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                             _("Get all"),
                                             _("Get new mail from all accounts"),
@@ -1783,7 +1773,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
 
        gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
 
-       CREATE_TOOLBAR_ICON(stock_mail_send_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_SEND);
        send_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                           _("Send"),
                                           _("Send queued message(s)"),
@@ -1793,8 +1783,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
                                           mainwin);
 
        /* insert compose mail button widget */                                    
-
-       CREATE_TOOLBAR_ICON(stock_mail_compose_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_COMPOSE);
        compose_mail_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                              _("Email"),
                                              _("Compose an email message"),
@@ -1804,8 +1793,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
                                              mainwin);
 
        /* insert compose news button widget */
-
-       CREATE_TOOLBAR_ICON(stock_news_compose_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_NEWS_COMPOSE);
        compose_news_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                              _("News"),
                                              _("Compose a news message"),
@@ -1818,7 +1806,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
        
        /* reply button */
        
-       CREATE_TOOLBAR_ICON(stock_mail_reply_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_REPLY);
        reply_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                            _("Reply"),
                                            _("Reply to the message - Right button: more options"),
@@ -1828,8 +1816,8 @@ static void main_window_toolbar_create(MainWindow *mainwin,
                                            mainwin);
 
        /* replyall button */
-       
-       CREATE_TOOLBAR_ICON(stock_mail_reply_to_all_xpm);
+
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_REPLY_TO_ALL);
        replyall_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                               _("All"),
                                               _("Reply to all - Right button: more options"),
@@ -1839,8 +1827,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
                                               mainwin);
 
        /* reply to sender button */
-       
-       CREATE_TOOLBAR_ICON(stock_mail_reply_to_author_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_REPLY_TO_AUTHOR);
        replysender_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                                  _("Sender"),
                                                  _("Reply to sender - Right button: more options"),
@@ -1850,8 +1837,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
                                                  mainwin);
 
        /* forward button */
-       
-       CREATE_TOOLBAR_ICON(stock_mail_forward_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_MAIL_FORWARD);
        fwd_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                          _("Forward"),
                                          _("Forward the message - Right button: more options"),
@@ -1862,7 +1848,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
 
        gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
 
-       CREATE_TOOLBAR_ICON(stock_close_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_CLOSE);
        delete_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                          _("Delete"),
                                          _("Delete the message"),
@@ -1871,7 +1857,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
                                          toolbar_delete_cb,
                                          mainwin);
 
-       CREATE_TOOLBAR_ICON(stock_exec_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_EXEC);
        exec_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                           _("Execute"),
                                           _("Execute marked process"),
@@ -1880,7 +1866,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
                                           toolbar_exec_cb,
                                           mainwin);
 
-       CREATE_TOOLBAR_ICON(stock_down_arrow_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_DOWN_ARROW);
        next_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                           _("Next"),
                                           _("Next unread message"),
@@ -1892,7 +1878,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
        /*
        gtk_toolbar_append_space(GTK_TOOLBAR(toolbar));
 
-       CREATE_TOOLBAR_ICON(stock_preferences_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_PREFERENCES);
        prefs_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                            _("Prefs"),
                                            _("Common preference"),
@@ -1900,7 +1886,7 @@ static void main_window_toolbar_create(MainWindow *mainwin,
                                            icon_wid,
                                            toolbar_prefs_cb,
                                            mainwin);
-       CREATE_TOOLBAR_ICON(stock_properties_xpm);
+       icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_PROPERTIES);
        account_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),
                                              _("Account"),
                                              _("Account setting"),
@@ -1958,8 +1944,20 @@ static void toolbar_reply_popup_cb(GtkWidget *widget, GdkEventButton *event, gpo
        
        if (!event) return;
 
-       if (event->button == 3)
-               gtk_menu_popup(GTK_MENU(mainwindow->reply_popup), NULL, NULL, NULL,     NULL, 1, 0);
+       if (event->button == 3) {
+               gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL);
+               gtk_menu_popup(GTK_MENU(mainwindow->reply_popup), NULL, NULL,
+                      menu_button_position, widget,
+                      event->button, event->time);
+       }
+}
+
+static void toolbar_reply_popup_closed_cb(GtkMenuShell *menu_shell, gpointer data)
+{
+       MainWindow *mainwin = (MainWindow *)data;
+
+       gtk_button_set_relief(GTK_BUTTON(mainwin->reply_btn), GTK_RELIEF_NONE);
+       manage_window_focus_in(mainwin->window, NULL, NULL);
 }
 
 static void toolbar_reply_to_all_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
@@ -1968,8 +1966,20 @@ static void toolbar_reply_to_all_popup_cb(GtkWidget *widget, GdkEventButton *eve
        
        if (!event) return;
 
-       if (event->button == 3)
-               gtk_menu_popup(GTK_MENU(mainwindow->replyall_popup), NULL, NULL, NULL,  NULL, 1, 0);
+       if (event->button == 3) {
+               gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL);
+               gtk_menu_popup(GTK_MENU(mainwindow->replyall_popup), NULL, NULL,
+                      menu_button_position, widget,
+                      event->button, event->time);
+       }
+}
+
+static void toolbar_reply_to_all_popup_closed_cb(GtkMenuShell *menu_shell, gpointer data)
+{
+       MainWindow *mainwin = (MainWindow *)data;
+
+       gtk_button_set_relief(GTK_BUTTON(mainwin->replyall_btn), GTK_RELIEF_NONE);
+       manage_window_focus_in(mainwin->window, NULL, NULL);
 }
 
 static void toolbar_reply_to_sender_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
@@ -1979,8 +1989,20 @@ static void toolbar_reply_to_sender_popup_cb(GtkWidget *widget, GdkEventButton *
 
        if (!event) return;
 
-       if (event->button == 3)
-               gtk_menu_popup(GTK_MENU(mainwindow->replysender_popup), NULL, NULL, NULL,       NULL, 1, 0);
+       if (event->button == 3) {
+               gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL);
+               gtk_menu_popup(GTK_MENU(mainwindow->replysender_popup), NULL, NULL,
+                      menu_button_position, widget,
+                      event->button, event->time);
+       }
+}
+
+static void toolbar_reply_to_sender_popup_closed_cb(GtkMenuShell *menu_shell, gpointer data)
+{
+       MainWindow *mainwin = (MainWindow *)data;
+
+       gtk_button_set_relief(GTK_BUTTON(mainwin->replysender_btn), GTK_RELIEF_NONE);
+       manage_window_focus_in(mainwin->window, NULL, NULL);
 }
 
 static void toolbar_forward_popup_cb(GtkWidget *widget, GdkEventButton *event, gpointer data)
@@ -1989,8 +2011,20 @@ static void toolbar_forward_popup_cb(GtkWidget *widget, GdkEventButton *event, g
        
        if (!event) return;
 
-       if (event->button == 3)
-               gtk_menu_popup(GTK_MENU(mainwindow->fwd_popup), NULL, NULL, NULL,       NULL, 1, 0);
+       if (event->button == 3) {
+               gtk_button_set_relief(GTK_BUTTON(widget), GTK_RELIEF_NORMAL);
+               gtk_menu_popup(GTK_MENU(mainwindow->fwd_popup), NULL, NULL,
+                      menu_button_position, widget,
+                      event->button, event->time);
+       }
+}
+
+static void toolbar_forward_popup_closed_cb(GtkMenuShell *menu_shell, gpointer data)
+{
+       MainWindow *mainwin = (MainWindow *)data;
+
+       gtk_button_set_relief(GTK_BUTTON(mainwin->fwd_btn), GTK_RELIEF_NONE);
+       manage_window_focus_in(mainwin->window, NULL, NULL);
 }
 
 static void toolbar_inc_cb     (GtkWidget      *widget,
@@ -2668,13 +2702,13 @@ static void thread_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
        if (0 == action) {
                summary_thread_build(mainwin->summaryview);
                mainwin->summaryview->folder_item->threaded = TRUE;
-               menu_set_sensitive(ifactory, "/Summary/Thread view",   FALSE);
-               menu_set_sensitive(ifactory, "/Summary/Unthread view", TRUE);
+               menu_set_sensitive(ifactory, "/View/Thread view",   FALSE);
+               menu_set_sensitive(ifactory, "/View/Unthread view", TRUE);
        } else {
                summary_unthread(mainwin->summaryview);
                mainwin->summaryview->folder_item->threaded = FALSE;
-               menu_set_sensitive(ifactory, "/Summary/Thread view",   TRUE);
-               menu_set_sensitive(ifactory, "/Summary/Unthread view", FALSE);
+               menu_set_sensitive(ifactory, "/View/Thread view",   TRUE);
+               menu_set_sensitive(ifactory, "/View/Unthread view", FALSE);
        }
 }