2 Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
3 Copyright (C) 1999-2018 the Claws Mail team and Hiroyuki Yamamoto
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
27 #include <glib/gi18n.h>
28 #include <gdk/gdkkeysyms.h>
34 #include "mainwindow.h"
35 #include "folderview.h"
36 #include "folder_item_prefs.h"
37 #include "foldersel.h"
38 #include "quicksearch.h"
39 #include "summaryview.h"
40 #include "summary_search.h"
41 #include "messageview.h"
43 #include "message_search.h"
44 #include "headerview.h"
46 #include "stock_pixmap.h"
56 #include "prefs_common.h"
57 #include "prefs_actions.h"
58 #include "prefs_filtering.h"
59 #include "prefs_account.h"
60 #include "prefs_summary_column.h"
61 #include "prefs_folder_column.h"
62 #include "prefs_template.h"
65 #ifndef USE_ALT_ADDRBOOK
66 #include "addressbook.h"
68 #include "addressbook-dbus.h"
70 #include "logwindow.h"
71 #include "manage_window.h"
72 #include "alertpanel.h"
73 #include "statusbar.h"
74 #include "inputdialog.h"
81 #include "ssl_manager.h"
82 #include "sslcertwindow.h"
83 #include "prefs_gtk.h"
84 #include "pluginwindow.h"
86 #include "progressindicator.h"
87 #include "localfolder.h"
88 #include "filtering.h"
89 #include "folderutils.h"
90 #include "foldersort.h"
91 #include "icon_legend.h"
92 #include "colorlabel.h"
99 #include "send_message.h"
104 #define AC_LABEL_WIDTH 240
106 /* list of all instantiated MainWindow */
107 static GList
*mainwin_list
= NULL
;
109 static GdkCursor
*watch_cursor
= NULL
;
110 static GdkCursor
*hand_cursor
= NULL
;
112 static gint iconified_count
= 0;
114 static void main_window_menu_callback_block (MainWindow
*mainwin
);
115 static void main_window_menu_callback_unblock (MainWindow
*mainwin
);
117 static void main_window_show_cur_account (MainWindow
*mainwin
);
119 static void main_window_separation_change (MainWindow
*mainwin
,
120 LayoutType layout_mode
);
122 static void main_window_set_widgets (MainWindow
*mainwin
,
123 LayoutType layout_mode
);
125 static void toolbar_child_attached (GtkWidget
*widget
,
128 static void toolbar_child_detached (GtkWidget
*widget
,
132 static gboolean
ac_label_button_pressed (GtkWidget
*widget
,
133 GdkEventButton
*event
,
136 static gint
main_window_close_cb (GtkWidget
*widget
,
140 static void main_window_size_allocate_cb (GtkWidget
*widget
,
141 GtkAllocation
*allocation
,
143 static void folder_window_size_allocate_cb (GtkWidget
*widget
,
144 GtkAllocation
*allocation
,
146 static void message_window_size_allocate_cb (GtkWidget
*widget
,
147 GtkAllocation
*allocation
,
150 static void update_folderview_cb (GtkAction
*action
,
152 static void add_mailbox_cb (GtkAction
*action
,
154 static void foldersort_cb (GtkAction
*action
,
156 static void import_mbox_cb (GtkAction
*action
,
158 static void export_mbox_cb (GtkAction
*action
,
160 static void export_list_mbox_cb (GtkAction
*action
,
162 static void empty_trash_cb (GtkAction
*action
,
164 static void save_as_cb (GtkAction
*action
,
166 static void page_setup_cb (GtkAction
*action
,
168 static void print_cb (GtkAction
*action
,
170 static void app_exit_cb (GtkAction
*action
,
174 static void search_cb (GtkAction
*action
,
176 static void search_folder_cb (GtkAction
*action
,
179 static void toggle_message_cb (GtkAction
*action
,
181 static void toggle_toolbar_cb (GtkAction
*action
, GtkRadioAction
*current
, gpointer data
);
182 static void toggle_col_headers_cb(GtkAction
*action
,
185 static void toggle_statusbar_cb (GtkAction
*action
,
187 static void set_layout_cb (GtkAction
*action
, GtkRadioAction
*current
, gpointer data
);
189 static void addressbook_open_cb (GtkAction
*action
,
191 static void log_window_show_cb (GtkAction
*action
,
193 static void filtering_debug_window_show_cb (GtkAction
*action
,
196 static void debug_log_show_cb(GtkAction
*action
, gpointer data
);
199 static void inc_cancel_cb (GtkAction
*action
,
201 static void send_cancel_cb (GtkAction
*action
,
204 static void open_msg_cb (GtkAction
*action
,
207 static void view_source_cb (GtkAction
*action
,
210 static void show_all_header_cb (GtkAction
*action
,
212 static void toggle_fullscreen_cb (GtkAction
*action
,
214 static void toggle_menubar_cb (GtkAction
*action
,
217 static void hide_quotes_cb(GtkAction
*action
,
220 static void move_to_cb (GtkAction
*action
,
222 static void copy_to_cb (GtkAction
*action
,
224 static void delete_cb (GtkAction
*action
,
226 static void delete_trash_cb (GtkAction
*action
,
229 static void cancel_cb (GtkAction
*action
,
232 static void mark_cb (GtkAction
*action
,
234 static void unmark_cb (GtkAction
*action
,
237 static void mark_as_unread_cb (GtkAction
*action
,
239 static void mark_as_read_cb (GtkAction
*action
,
241 static void mark_all_read_cb (GtkAction
*action
,
243 static void mark_all_unread_cb (GtkAction
*action
,
245 static void mark_as_spam_cb (GtkAction
*action
,
247 static void mark_as_ham_cb (GtkAction
*action
,
250 static void ignore_thread_cb (GtkAction
*action
,
252 static void unignore_thread_cb (GtkAction
*action
,
254 static void watch_thread_cb (GtkAction
*action
,
256 static void unwatch_thread_cb (GtkAction
*action
,
258 static void lock_msgs_cb (GtkAction
*action
,
260 static void unlock_msgs_cb (GtkAction
*action
,
263 static void reedit_cb (GtkAction
*action
,
266 static void add_address_cb (GtkAction
*action
,
269 static void set_charset_cb (GtkAction
*action
, GtkRadioAction
*current
, gpointer data
);
271 static void set_decode_cb (GtkAction
*action
, GtkRadioAction
*current
, gpointer data
);
273 static void hide_read_messages (GtkAction
*action
,
275 static void hide_read_threads (GtkAction
*action
,
277 static void hide_del_messages (GtkAction
*action
,
280 static void thread_cb (GtkAction
*action
,
282 static void expand_threads_cb (GtkAction
*action
,
284 static void collapse_threads_cb (GtkAction
*action
,
287 static void set_summary_display_item_cb (GtkAction
*action
,
289 static void set_folder_display_item_cb (GtkAction
*action
,
291 static void sort_summary_cb (GtkAction
*action
, GtkRadioAction
*current
, gpointer data
);
292 static void sort_summary_type_cb (GtkAction
*action
, GtkRadioAction
*current
, gpointer data
);
293 static void attract_by_subject_cb(GtkAction
*action
,
296 static void delete_duplicated_cb (GtkAction
*action
,
298 static void delete_duplicated_all_cb (GtkAction
*action
,
300 static void filter_cb (GtkAction
*action
,
302 static void filter_list_cb (GtkAction
*action
,
304 static void process_cb (GtkAction
*action
,
306 static void execute_summary_cb (GtkAction
*action
,
308 static void expunge_summary_cb (GtkAction
*action
,
310 static void update_summary_cb (GtkAction
*action
,
313 static void prev_cb (GtkAction
*action
,
315 static void next_cb (GtkAction
*action
,
317 static void next_unread_cb (GtkAction
*action
,
319 static void prev_unread_cb (GtkAction
*action
,
322 static void prev_new_cb (GtkAction
*action
,
324 static void next_new_cb (GtkAction
*action
,
326 static void prev_marked_cb (GtkAction
*action
,
328 static void next_marked_cb (GtkAction
*action
,
330 static void prev_labeled_cb (GtkAction
*action
,
332 static void next_labeled_cb (GtkAction
*action
,
334 static void prev_history_cb (GtkAction
*action
,
336 static void next_history_cb (GtkAction
*action
,
338 static void parent_cb (GtkAction
*action
,
341 static void goto_folder_cb (GtkAction
*action
,
343 static void goto_unread_folder_cb(GtkAction
*action
,
346 static void scroll_prev_line_cb (GtkAction
*action
,
348 static void scroll_next_line_cb (GtkAction
*action
,
350 static void scroll_prev_page_cb (GtkAction
*action
,
352 static void scroll_next_page_cb (GtkAction
*action
,
355 static void copy_cb (GtkAction
*action
,
357 static void allsel_cb (GtkAction
*action
,
359 static void select_thread_cb (GtkAction
*action
,
361 static void trash_thread_cb (GtkAction
*action
,
363 static void delete_thread_cb (GtkAction
*action
,
366 static void create_filter_cb (GtkAction
*action
,
368 static void create_processing_cb (GtkAction
*action
,
370 static void open_urls_cb (GtkAction
*action
,
373 static void prefs_template_open_cb (GtkAction
*action
,
375 static void prefs_actions_open_cb (GtkAction
*action
,
377 static void prefs_tags_open_cb (GtkAction
*action
,
379 static void prefs_account_open_cb (GtkAction
*action
,
382 static void prefs_pre_processing_open_cb (GtkAction
*action
,
385 static void prefs_post_processing_open_cb (GtkAction
*action
,
388 static void prefs_filtering_open_cb (GtkAction
*action
,
391 static void ssl_manager_open_cb (GtkAction
*action
,
394 static void new_account_cb (GtkAction
*action
,
397 static void account_selector_menu_cb (GtkMenuItem
*menuitem
,
399 static void account_receive_menu_cb (GtkMenuItem
*menuitem
,
402 static void account_compose_menu_cb (GtkMenuItem
*menuitem
,
405 static void prefs_open_cb (GtkAction
*action
,
407 static void plugins_open_cb (GtkAction
*action
,
410 static void online_switch_clicked(GtkButton
*btn
,
413 static void manual_open_cb (GtkAction
*action
,
415 static void manual_faq_open_cb (GtkAction
*action
,
418 static void legend_open_cb (GtkAction
*action
,
422 static void set_default_client_cb (GtkAction
*action
,
426 static void scan_tree_func (Folder
*folder
,
430 static void toggle_work_offline_cb(GtkAction
*action
,
433 static void addr_harvest_cb ( GtkAction
*action
,
436 static void addr_harvest_msg_cb ( GtkAction
*action
,
438 static void sync_cb ( GtkAction
*action
,
441 static void forget_session_passwords_cb (GtkAction
*action
,
443 #ifndef PASSWORD_CRYPTO_OLD
444 static void forget_master_passphrase_cb (GtkAction
*action
,
447 static gboolean
mainwindow_focus_in_event (GtkWidget
*widget
,
448 GdkEventFocus
*focus
,
450 static gboolean
mainwindow_visibility_event_cb (GtkWidget
*widget
,
451 GdkEventVisibility
*state
,
453 static gboolean
mainwindow_state_event_cb (GtkWidget
*widget
,
454 GdkEventWindowState
*state
,
456 static void main_window_reply_cb (GtkAction
*action
,
458 static gboolean
mainwindow_progressindicator_hook (gpointer source
,
461 static gint
mailing_list_create_submenu(MainWindow
*mainwindow
,
464 static gint
mailing_list_populate_submenu(GtkWidget
*menu
, const gchar
* list_header
);
466 static void get_url_part(const gchar
**buf
, gchar
*url_decoded
);
468 static void mailing_list_compose(GtkWidget
*w
, gpointer
*data
);
470 static void mailing_list_open_uri(GtkWidget
*w
, gpointer
*data
);
471 #define SEPARATE_ACTION 500
472 static void mainwindow_quicksearch (GtkAction
*action
,
474 static gboolean
any_folder_want_synchronise(void);
476 static void save_part_as_cb(GtkAction
*action
, gpointer data
);
477 static void view_part_as_text_cb(GtkAction
*action
, gpointer data
);
478 static void open_part_cb(GtkAction
*action
, gpointer data
);
480 static void open_part_with_cb(GtkAction
*action
, gpointer data
);
482 static void check_signature_cb(GtkAction
*action
, gpointer data
);
483 static void goto_next_part_cb(GtkAction
*action
, gpointer data
);
484 static void goto_prev_part_cb(GtkAction
*action
, gpointer data
);
485 #define DO_ACTION(name, act) { if (!strcmp(a_name, name)) action = act; }
487 static void mainwindow_nothing_cb (GtkAction
*action
, gpointer data
)
492 static void about_cb(GtkAction
*gaction
, gpointer data
)
497 static void mw_inc_mail_cb (GtkAction
*gaction
, gpointer data
)
499 inc_mail_cb(data
, 0, NULL
);
501 static void mw_inc_all_account_mail_cb (GtkAction
*gaction
, gpointer data
)
503 inc_all_account_mail_cb(data
, 0, NULL
);
505 static void mw_send_queue_cb (GtkAction
*gaction
, gpointer data
)
507 send_queue_cb(data
, 0, NULL
);
509 static void mw_compose_mail_cb (GtkAction
*gaction
, gpointer data
)
511 compose_mail_cb(data
, 0, NULL
);
513 static void mw_compose_news_cb (GtkAction
*gaction
, gpointer data
)
515 compose_news_cb(data
, 0, NULL
);
518 static GtkActionEntry mainwin_entries
[] =
520 {"Menu", NULL
, "Menu", NULL
, NULL
, NULL
},
522 {"File", NULL
, N_("_File"), NULL
, NULL
, NULL
},
523 {"Edit", NULL
, N_("_Edit"), NULL
, NULL
, NULL
},
524 {"View", NULL
, N_("_View"), NULL
, NULL
, NULL
},
525 {"Message", NULL
, N_("_Message"), NULL
, NULL
, NULL
},
526 {"Tools", NULL
, N_("_Tools"), NULL
, NULL
, NULL
},
527 {"Configuration", NULL
, N_("_Configuration"), NULL
, NULL
, NULL
},
528 {"Help", NULL
, N_("_Help"), NULL
, NULL
, NULL
},
531 {"File/AddMailbox", NULL
, N_("_Add mailbox"), NULL
, NULL
, NULL
},
532 {"File/AddMailbox/MH", NULL
, N_("MH..."), NULL
, NULL
, G_CALLBACK(add_mailbox_cb
) },
533 {"File/---", NULL
, "---", NULL
, NULL
, NULL
},
535 {"File/SortMailboxes", NULL
, N_("Change mailbox order..."), NULL
, NULL
, G_CALLBACK(foldersort_cb
) },
537 /* {"File/---", NULL, "---", NULL, NULL, NULL }, */
538 {"File/ImportMbox", NULL
, N_("_Import mbox file..."), NULL
, NULL
, G_CALLBACK(import_mbox_cb
) },
539 {"File/ExportMbox", NULL
, N_("_Export to mbox file..."), NULL
, NULL
, G_CALLBACK(export_mbox_cb
) },
540 {"File/ExportSelMbox", NULL
, N_("_Export selected to mbox file..."), NULL
, NULL
, G_CALLBACK(export_list_mbox_cb
) },
541 /* {"File/---", NULL, "---", NULL, NULL, NULL }, */
542 {"File/EmptyTrashes", NULL
, N_("Empty all _Trash folders"), "<shift>D", NULL
, G_CALLBACK(empty_trash_cb
) },
543 /* {"File/---", NULL, "---", NULL, NULL, NULL }, */
545 {"File/SaveAs", NULL
, N_("_Save email as..."), "<control>S", NULL
, G_CALLBACK(save_as_cb
) },
546 {"File/SavePartAs", NULL
, N_("_Save part as..."), "Y", NULL
, G_CALLBACK(save_part_as_cb
) },
547 /* {"File/---", NULL, "---", NULL, NULL, NULL }, */
549 {"File/PageSetup", NULL
, N_("Page setup..."), NULL
, NULL
, G_CALLBACK(page_setup_cb
) },
550 {"File/Print", NULL
, N_("_Print..."), "<control>P", NULL
, G_CALLBACK(print_cb
) },
551 /* {"File/---", NULL, "---", NULL, NULL, NULL }, */
552 {"File/SynchroniseFolders", NULL
, N_("Synchronise folders"), "<control><shift>S", NULL
, G_CALLBACK(sync_cb
) },
553 /* {"File/---", NULL, "---", NULL, NULL, NULL }, */
554 {"File/Exit", NULL
, N_("E_xit"), "<control>Q", NULL
, G_CALLBACK(app_exit_cb
) },
557 {"Edit/Copy", NULL
, N_("_Copy"), "<control>C", NULL
, G_CALLBACK(copy_cb
) },
558 {"Edit/SelectAll", NULL
, N_("Select _all"), "<control>A", NULL
, G_CALLBACK(allsel_cb
) },
559 {"Edit/SelectThread", NULL
, N_("Select _thread"), NULL
, NULL
, G_CALLBACK(select_thread_cb
) },
560 {"Edit/---", NULL
, "---", NULL
, NULL
, NULL
},
561 {"Edit/Find", NULL
, N_("_Find in current message..."), "<control>F", NULL
, G_CALLBACK(search_cb
) },
562 {"Edit/SearchFolder", NULL
, N_("_Search folder..."), "<shift><control>F", NULL
, G_CALLBACK(search_folder_cb
) },
563 {"Edit/QuickSearch", NULL
, N_("_Quick search"), "slash", NULL
, G_CALLBACK(mainwindow_quicksearch
) },
566 {"View/ShowHide", NULL
, N_("Show or hi_de"), NULL
, NULL
, NULL
},
567 {"View/ShowHide/Toolbar", NULL
, N_("_Toolbar"), NULL
, NULL
, NULL
},
569 {"View/SetColumns", NULL
, N_("Set displayed _columns"), NULL
, NULL
, NULL
},
570 {"View/SetColumns/Folderlist", NULL
, N_("In _folder list..."), NULL
, NULL
, G_CALLBACK(set_folder_display_item_cb
) },
571 {"View/SetColumns/Messagelist", NULL
, N_("In _message list..."), NULL
, NULL
, G_CALLBACK(set_summary_display_item_cb
) },
572 {"View/---", NULL
, "---", NULL
, NULL
, NULL
},
576 {"View/Layout", NULL
, N_("La_yout"), NULL
, NULL
, NULL
},
578 {"View/Sort", NULL
, N_("_Sort"), NULL
, NULL
, NULL
},
579 {"View/Sort/---", NULL
, "---", NULL
, NULL
, NULL
},
580 {"View/Sort/AttractSubj", NULL
, N_("_Attract by subject"), NULL
, NULL
, G_CALLBACK(attract_by_subject_cb
) },
582 {"View/ExpandThreads", NULL
, N_("E_xpand all threads"), NULL
, NULL
, G_CALLBACK(expand_threads_cb
) },
583 {"View/CollapseThreads", NULL
, N_("Co_llapse all threads"), NULL
, NULL
, G_CALLBACK(collapse_threads_cb
) },
585 {"View/Goto", NULL
, N_("_Go to"), NULL
, NULL
, NULL
},
586 {"View/Goto/Prev", NULL
, N_("_Previous message"), "P", NULL
, G_CALLBACK(prev_cb
) },
587 {"View/Goto/Next", NULL
, N_("_Next message"), "N", NULL
, G_CALLBACK(next_cb
) },
588 {"View/Goto/---", NULL
, "---", NULL
, NULL
, NULL
},
589 {"View/Goto/PrevUnread", NULL
, N_("P_revious unread message"), "<shift>P", NULL
, G_CALLBACK(prev_unread_cb
) },
590 {"View/Goto/NextUnread", NULL
, N_("N_ext unread message"), "<shift>N", NULL
, G_CALLBACK(next_unread_cb
) },
591 /* {"View/Goto/---", NULL, "---", NULL, NULL, NULL }, */
592 {"View/Goto/PrevNew", NULL
, N_("Previous ne_w message"), NULL
, NULL
, G_CALLBACK(prev_new_cb
) },
593 {"View/Goto/NextNew", NULL
, N_("Ne_xt new message"), NULL
, NULL
, G_CALLBACK(next_new_cb
) },
594 /* {"View/Goto/---", NULL, "---", NULL, NULL, NULL }, */
595 {"View/Goto/PrevMarked", NULL
, N_("Previous _marked message"), NULL
, NULL
, G_CALLBACK(prev_marked_cb
) },
596 {"View/Goto/NextMarked", NULL
, N_("Next m_arked message"), NULL
, NULL
, G_CALLBACK(next_marked_cb
) },
597 /* {"View/Goto/---", NULL, "---", NULL, NULL, NULL }, */
598 {"View/Goto/PrevLabeled", NULL
, N_("Previous _labeled message"), NULL
, NULL
, G_CALLBACK(prev_labeled_cb
) },
599 {"View/Goto/NextLabeled", NULL
, N_("Next la_beled message"), NULL
, NULL
, G_CALLBACK(next_labeled_cb
) },
600 /* {"View/Goto/---", NULL, "---", NULL, NULL, NULL }, */
601 {"View/Goto/PrevHistory", NULL
, N_("Previous opened message"), "<alt>Left", NULL
, G_CALLBACK(prev_history_cb
) },
602 {"View/Goto/NextHistory", NULL
, N_("Next opened message"), "<alt>Right", NULL
, G_CALLBACK(next_history_cb
) },
603 /* {"View/Goto/---", NULL, "---", NULL, NULL, NULL }, */
604 {"View/Goto/ParentMessage", NULL
, N_("Parent message"), "<control>Up", NULL
, G_CALLBACK(parent_cb
) },
605 /* {"View/Goto/---", NULL, "---", NULL, NULL, NULL }, */
606 {"View/Goto/NextUnreadFolder", NULL
, N_("Next unread _folder"), "<shift>G", NULL
, G_CALLBACK(goto_unread_folder_cb
) },
607 {"View/Goto/Folder", NULL
, N_("F_older..."), "G", NULL
, G_CALLBACK(goto_folder_cb
) },
608 /* {"View/Goto/---", NULL, "---", NULL, NULL, NULL }, */
609 {"View/Goto/NextPart", NULL
, N_("Next part"), "A", NULL
, G_CALLBACK(goto_next_part_cb
) },
610 {"View/Goto/PrevPart", NULL
, N_("Previous part"), "Z", NULL
, G_CALLBACK(goto_prev_part_cb
) },
612 /* {"View/Scroll/---", NULL, "---", NULL, NULL, NULL }, */
613 {"View/Scroll", NULL
, N_("Message scroll"), NULL
, NULL
, NULL
},
614 {"View/Scroll/PrevLine", NULL
, N_("Previous line"), NULL
, NULL
, G_CALLBACK(scroll_prev_line_cb
) },
615 {"View/Scroll/NextLine", NULL
, N_("Next line"), NULL
, NULL
, G_CALLBACK(scroll_next_line_cb
) },
616 {"View/Scroll/PrevPage", NULL
, N_("Previous page"), NULL
, NULL
, G_CALLBACK(scroll_prev_page_cb
) },
617 {"View/Scroll/NextPage", NULL
, N_("Next page"), NULL
, NULL
, G_CALLBACK(scroll_next_page_cb
) },
619 /* {"View/---", NULL, "---", NULL, NULL, NULL }, */
620 {"View/Encoding", NULL
, N_("Character _encoding"), NULL
, NULL
, NULL
}, /* set_charset_cb */
621 {"View/Encoding/---", NULL
, "---", NULL
, NULL
, NULL
},
622 #define ENC_ACTION(cs_char,c_char,string) \
623 { "View/Encoding/" cs_char, NULL, N_(string), NULL, NULL, c_char }
625 {"View/Encoding/Western", NULL
, N_("Western European"), NULL
, NULL
, NULL
},
626 {"View/Encoding/Baltic", NULL
, N_("Baltic"), NULL
, NULL
, NULL
},
627 {"View/Encoding/Hebrew", NULL
, N_("Hebrew"), NULL
, NULL
, NULL
},
628 {"View/Encoding/Arabic", NULL
, N_("Arabic"), NULL
, NULL
, NULL
},
629 {"View/Encoding/Cyrillic", NULL
, N_("Cyrillic"), NULL
, NULL
, NULL
},
630 {"View/Encoding/Japanese", NULL
, N_("Japanese"), NULL
, NULL
, NULL
},
631 {"View/Encoding/Chinese", NULL
, N_("Chinese"), NULL
, NULL
, NULL
},
632 {"View/Encoding/Korean", NULL
, N_("Korean"), NULL
, NULL
, NULL
},
633 {"View/Encoding/Thai", NULL
, N_("Thai"), NULL
, NULL
, NULL
},
635 {"View/Decode", NULL
, N_("Decode"), NULL
, NULL
, NULL
}, /* set_decode_cb */
636 {"View/Decode/---", NULL
, "---", NULL
, NULL
, NULL
},
638 #define DEC_ACTION(cs_type,c_type,string) \
639 { "View/Decode/" cs_type, NULL, N_(string), NULL, NULL, c_type }
641 /* {"View/---", NULL, "---", NULL, NULL, NULL }, */
642 {"View/OpenNewWindow", NULL
, N_("Open in new _window"), "<control><alt>N", NULL
, G_CALLBACK(open_msg_cb
) },
643 {"View/MessageSource", NULL
, N_("Mess_age source"), "<control>U", NULL
, G_CALLBACK(view_source_cb
) },
644 /* {"View/---", NULL, "---", NULL, NULL, NULL }, */
645 {"View/Part", NULL
, N_("Message part"), NULL
, NULL
, NULL
},
646 {"View/Part/AsText", NULL
, N_("View as text"), "T", NULL
, G_CALLBACK(view_part_as_text_cb
) },
647 {"View/Part/Open", NULL
, N_("Open"), "L", NULL
, G_CALLBACK(open_part_cb
) },
649 {"View/Part/OpenWith", NULL
, N_("Open with..."), "O", NULL
, G_CALLBACK(open_part_with_cb
) },
651 /* {"View/---", NULL, "---", NULL, NULL, NULL }, */
653 {"View/Quotes", NULL
, N_("Quotes"), NULL
, NULL
, NULL
},
654 /* {"View/---", NULL, "---", NULL, NULL, NULL }, */
655 {"View/UpdateSummary", NULL
, N_("_Update summary"), "<control><alt>U", NULL
, G_CALLBACK(update_summary_cb
) },
658 {"Message/Receive", NULL
, N_("Recei_ve"), NULL
, NULL
, NULL
},
659 {"Message/Receive/CurrentAccount", NULL
, N_("Get from _current account"), "<control>I", NULL
, G_CALLBACK(mw_inc_mail_cb
) },
660 {"Message/Receive/AllAccounts", NULL
, N_("Get from _all accounts"), "<shift><control>I", NULL
, G_CALLBACK(mw_inc_all_account_mail_cb
) },
661 {"Message/Receive/CancelReceiving", NULL
, N_("Cancel receivin_g"), NULL
, NULL
, G_CALLBACK(inc_cancel_cb
) },
662 {"Message/Receive/---", NULL
, "---", NULL
, NULL
, NULL
},
663 {"Message/Receive/PlaceHolder", NULL
, "PlaceHolder,", NULL
, NULL
, G_CALLBACK(mainwindow_nothing_cb
) },
664 {"Message/SendQueue", NULL
, N_("_Send queued messages"), NULL
, NULL
, G_CALLBACK(mw_send_queue_cb
) },
665 {"Message/CancelSending", NULL
, N_("Cancel sending"), NULL
, NULL
, G_CALLBACK(send_cancel_cb
) },
667 {"Message/---", NULL
, "---", NULL
, NULL
, NULL
},
669 {"Message/ComposeEmail", NULL
, N_("Compose a_n email message"), "<control>M", NULL
, G_CALLBACK(mw_compose_mail_cb
) },
670 {"Message/ComposeNews", NULL
, N_("Compose a news message"), NULL
, NULL
, G_CALLBACK(mw_compose_news_cb
) },
672 {"Message/Reply", NULL
, N_("_Reply"), "<control>R", NULL
, G_CALLBACK(main_window_reply_cb
) }, /* COMPOSE_REPLY */
673 {"Message/ReplyTo", NULL
, N_("Repl_y to"), NULL
, NULL
, NULL
},
674 {"Message/ReplyTo/All", NULL
, N_("_All"), "<control><shift>R", NULL
, G_CALLBACK(main_window_reply_cb
) }, /* COMPOSE_REPLY_TO_ALL */
675 {"Message/ReplyTo/Sender", NULL
, N_("_Sender"), NULL
, NULL
, G_CALLBACK(main_window_reply_cb
) }, /* COMPOSE_REPLY_TO_SENDER */
676 {"Message/ReplyTo/List", NULL
, N_("Mailing _list"), "<control>L", NULL
, G_CALLBACK(main_window_reply_cb
) }, /* COMPOSE_REPLY_TO_LIST */
677 {"Message/FollowupReply", NULL
, N_("Follow-up and reply to"), NULL
, NULL
, G_CALLBACK(main_window_reply_cb
) }, /* COMPOSE_FOLLOWUP_AND_REPLY_TO */
678 /* {"Message/---", NULL, "---", NULL, NULL, NULL }, */
680 {"Message/Forward", NULL
, N_("_Forward"), "<control><alt>F", NULL
, G_CALLBACK(main_window_reply_cb
) }, /* COMPOSE_FORWARD_INLINE */
681 {"Message/ForwardAtt", NULL
, N_("For_ward as attachment"), NULL
, NULL
, G_CALLBACK(main_window_reply_cb
) }, /* COMPOSE_FORWARD_AS_ATTACH */
682 {"Message/Redirect", NULL
, N_("Redirec_t"), NULL
, NULL
, G_CALLBACK(main_window_reply_cb
) }, /* COMPOSE_REDIRECT */
684 {"Message/MailingList", NULL
, N_("Mailing-_List"), NULL
, NULL
, NULL
},
685 {"Message/MailingList/Post", NULL
, N_("Post"), NULL
, NULL
, NULL
},
686 {"Message/MailingList/Post/PlaceHolder", NULL
, "Placeholder", NULL
, NULL
, G_CALLBACK(mainwindow_nothing_cb
) },
687 {"Message/MailingList/Help", NULL
, N_("Help"), NULL
, NULL
, NULL
},
688 {"Message/MailingList/Help/PlaceHolder", NULL
, "Placeholder", NULL
, NULL
, G_CALLBACK(mainwindow_nothing_cb
) },
689 {"Message/MailingList/Subscribe", NULL
, N_("Subscribe"), NULL
, NULL
, NULL
},
690 {"Message/MailingList/Subscribe/PlaceHolder", NULL
, "Placeholder", NULL
, NULL
, G_CALLBACK(mainwindow_nothing_cb
) },
691 {"Message/MailingList/Unsubscribe", NULL
, N_("Unsubscribe"), NULL
, NULL
, NULL
},
692 {"Message/MailingList/Unsubscribe/PlaceHolder", NULL
, "Placeholder", NULL
, NULL
, G_CALLBACK(mainwindow_nothing_cb
) },
693 {"Message/MailingList/ViewArchive", NULL
, N_("View archive"), NULL
, NULL
, NULL
},
694 {"Message/MailingList/ViewArchive/PlaceHolder", NULL
, "Placeholder", NULL
, NULL
, G_CALLBACK(mainwindow_nothing_cb
) },
695 {"Message/MailingList/ContactOwner", NULL
, N_("Contact owner"), NULL
, NULL
, NULL
},
696 {"Message/MailingList/ContactOwner/PlaceHolder", NULL
, "Placeholder", NULL
, NULL
, G_CALLBACK(mainwindow_nothing_cb
) },
699 {"Message/Move", NULL
, N_("M_ove..."), "<control>O", NULL
, G_CALLBACK(move_to_cb
) },
700 {"Message/Copy", NULL
, N_("_Copy..."), "<shift><control>O", NULL
, G_CALLBACK(copy_to_cb
) },
701 {"Message/Trash", NULL
, N_("Move to _trash"), "<control>D", NULL
, G_CALLBACK(delete_trash_cb
) },
702 {"Message/Delete", NULL
, N_("_Delete..."), NULL
, NULL
, G_CALLBACK(delete_cb
) },
703 {"Message/TrashThread", NULL
, N_("Move thread to tr_ash"), NULL
, NULL
, G_CALLBACK(trash_thread_cb
) },
704 {"Message/DeleteThread", NULL
, N_("Delete t_hread"), NULL
, NULL
, G_CALLBACK(delete_thread_cb
) },
705 {"Message/CancelNews", NULL
, N_("Cancel a news message"), NULL
, NULL
, G_CALLBACK(cancel_cb
) },
708 {"Message/Mark", NULL
, N_("_Mark"), NULL
, NULL
, NULL
},
709 {"Message/Mark/Mark", NULL
, N_("_Mark"), "<shift>asterisk", NULL
, G_CALLBACK(mark_cb
) },
710 {"Message/Mark/Unmark", NULL
, N_("_Unmark"), "U", NULL
, G_CALLBACK(unmark_cb
) },
711 {"Message/Mark/---", NULL
, "---", NULL
, NULL
, NULL
},
713 {"Message/Mark/MarkRead", NULL
, N_("Mark as rea_d"), NULL
, NULL
, G_CALLBACK(mark_as_read_cb
) },
714 {"Message/Mark/MarkUnread", NULL
, N_("Mark as unr_ead"), "<shift>exclam", NULL
, G_CALLBACK(mark_as_unread_cb
) },
716 {"Message/Mark/MarkAllRead", NULL
, N_("Mark all read in folder"), NULL
, NULL
, G_CALLBACK(mark_all_read_cb
) },
717 {"Message/Mark/MarkAllUnread", NULL
, N_("Mark all unread in folder"), NULL
, NULL
, G_CALLBACK(mark_all_unread_cb
) },
719 {"Message/Mark/IgnoreThread", NULL
, N_("Ignore thread"), NULL
, NULL
, G_CALLBACK(ignore_thread_cb
) },
720 {"Message/Mark/UnignoreThread", NULL
, N_("Unignore thread"), NULL
, NULL
, G_CALLBACK(unignore_thread_cb
) },
721 {"Message/Mark/WatchThread", NULL
, N_("Watch thread"), NULL
, NULL
, G_CALLBACK(watch_thread_cb
) },
722 {"Message/Mark/UnwatchThread", NULL
, N_("Unwatch thread"), NULL
, NULL
, G_CALLBACK(unwatch_thread_cb
) },
725 {"Message/Mark/MarkSpam", NULL
, N_("Mark as _spam"), NULL
, NULL
, G_CALLBACK(mark_as_spam_cb
) },
726 {"Message/Mark/MarkHam", NULL
, N_("Mark as _ham"), NULL
, NULL
, G_CALLBACK(mark_as_ham_cb
) },
729 {"Message/Mark/Lock", NULL
, N_("Lock"), NULL
, NULL
, G_CALLBACK(lock_msgs_cb
) },
730 {"Message/Mark/Unlock", NULL
, N_("Unlock"), NULL
, NULL
, G_CALLBACK(unlock_msgs_cb
) },
732 {"Message/ColorLabel", NULL
, N_("Color la_bel"), NULL
, NULL
, NULL
},
733 {"Message/Tags", NULL
, N_("Ta_gs"), NULL
, NULL
, NULL
},
734 /*{"Message/---", NULL, "---", NULL, NULL, NULL },*/
736 {"Message/Reedit", NULL
, N_("Re-_edit"), NULL
, NULL
, G_CALLBACK(reedit_cb
) },
737 /*{"Message/---", NULL, "---", NULL, NULL, NULL },*/
739 {"Message/CheckSignature", NULL
, N_("Check signature"), "C", NULL
, G_CALLBACK(check_signature_cb
) },
743 {"Tools/AddressBook", NULL
, N_("_Address book"), "<control><shift>A", NULL
, G_CALLBACK(addressbook_open_cb
) },
744 {"Tools/AddSenderToAB", NULL
, N_("Add sender to address boo_k"), NULL
, NULL
, G_CALLBACK(add_address_cb
) },
746 {"Tools/CollectAddresses", NULL
, N_("C_ollect addresses"), NULL
, NULL
, NULL
},
747 {"Tools/CollectAddresses/FromFolder", NULL
, N_("From current _folder..."), NULL
, NULL
, G_CALLBACK(addr_harvest_cb
) },
748 {"Tools/CollectAddresses/FromSelected", NULL
, N_("From selected _messages..."), NULL
, NULL
, G_CALLBACK(addr_harvest_msg_cb
) },
749 {"Tools/---", NULL
, "---", NULL
, NULL
, NULL
},
751 {"Tools/FilterFolder", NULL
, N_("_Filter all messages in folder"), NULL
, NULL
, G_CALLBACK(filter_cb
) },
752 {"Tools/FilterSelected", NULL
, N_("Filter _selected messages"), NULL
, NULL
, G_CALLBACK(filter_list_cb
) },
753 {"Tools/RunProcessing", NULL
, N_("Run folder pr_ocessing rules"), NULL
, NULL
, G_CALLBACK(process_cb
) },
755 {"Tools/CreateFilterRule", NULL
, N_("_Create filter rule"), NULL
, NULL
, NULL
},
756 {"Tools/CreateFilterRule/Automatically", NULL
, N_("_Automatically"), NULL
, NULL
, G_CALLBACK(create_filter_cb
) }, /* FILTER_BY_AUTO */
757 {"Tools/CreateFilterRule/ByFrom", NULL
, N_("By _From"), NULL
, NULL
, G_CALLBACK(create_filter_cb
) }, /* FILTER_BY_FROM */
758 {"Tools/CreateFilterRule/ByTo", NULL
, N_("By _To"), NULL
, NULL
, G_CALLBACK(create_filter_cb
) }, /* FILTER_BY_TO */
759 {"Tools/CreateFilterRule/BySubject", NULL
, N_("By _Subject"), NULL
, NULL
, G_CALLBACK(create_filter_cb
) }, /* FILTER_BY_SUBJECT */
761 {"Tools/CreateProcessingRule", NULL
, N_("Create processing rule"), NULL
, NULL
, NULL
},
762 {"Tools/CreateProcessingRule/Automatically", NULL
, N_("_Automatically"), NULL
, NULL
, G_CALLBACK(create_processing_cb
) },
763 {"Tools/CreateProcessingRule/ByFrom", NULL
, N_("By _From"), NULL
, NULL
, G_CALLBACK(create_processing_cb
) },
764 {"Tools/CreateProcessingRule/ByTo", NULL
, N_("By _To"), NULL
, NULL
, G_CALLBACK(create_processing_cb
) },
765 {"Tools/CreateProcessingRule/BySubject", NULL
, N_("By _Subject"), NULL
, NULL
, G_CALLBACK(create_processing_cb
) },
766 /* {"Tools/---", NULL, "---", NULL, NULL, NULL }, */
768 {"Tools/ListUrls", NULL
, N_("List _URLs..."), "<control><shift>U", NULL
, G_CALLBACK(open_urls_cb
) },
770 /* {"Tools/---", NULL, "---", NULL, NULL, NULL }, */
771 {"Tools/Actions", NULL
, N_("Actio_ns"), NULL
, NULL
, NULL
},
772 {"Tools/Actions/PlaceHolder", NULL
, "Placeholder", NULL
, NULL
, G_CALLBACK(mainwindow_nothing_cb
) },
773 /* {"Tools/---", NULL, "---", NULL, NULL, NULL }, */
775 {"Tools/CheckNewMessages", NULL
, N_("Ch_eck for new messages in all folders"), NULL
, NULL
, G_CALLBACK(update_folderview_cb
) },
776 {"Tools/DeleteDuplicates", NULL
, N_("Delete du_plicated messages"), NULL
, NULL
, NULL
},
777 {"Tools/DeleteDuplicates/SelFolder", NULL
, N_("In selected folder"), NULL
, NULL
, G_CALLBACK(delete_duplicated_cb
) },
778 {"Tools/DeleteDuplicates/AllFolders", NULL
, N_("In all folders"), NULL
, NULL
, G_CALLBACK(delete_duplicated_all_cb
) },
779 /* {"Tools/---", NULL, "---", NULL, NULL, NULL }, */
781 {"Tools/Execute", NULL
, N_("E_xecute"), "X", NULL
, G_CALLBACK(execute_summary_cb
) },
782 {"Tools/Expunge", NULL
, N_("Exp_unge"), "<control>E", NULL
, G_CALLBACK(expunge_summary_cb
) },
784 /* {"Tools/---", NULL, "---", NULL, NULL, NULL }, */
785 {"Tools/SSLCertificates", NULL
, N_("SSL/TLS cer_tificates"), NULL
, NULL
, G_CALLBACK(ssl_manager_open_cb
) },
787 /* {"Tools/---", NULL, "---", NULL, NULL, NULL }, */
788 {"Tools/FilteringLog", NULL
, N_("Filtering Lo_g"), NULL
, NULL
, G_CALLBACK(filtering_debug_window_show_cb
) },
789 {"Tools/NetworkLog", NULL
, N_("Network _Log"), "<shift><control>L", NULL
, G_CALLBACK(log_window_show_cb
) },
791 {"Tools/DebugLog", NULL
, N_("Debug _Log"), NULL
, NULL
, G_CALLBACK(debug_log_show_cb
) },
793 /* {"Tools/---", NULL, "---", NULL, NULL, NULL }, */
794 {"Tools/ForgetSessionPasswords", NULL
, N_("_Forget all session passwords"), NULL
, NULL
, G_CALLBACK(forget_session_passwords_cb
) },
795 #ifndef PASSWORD_CRYPTO_OLD
796 {"Tools/ForgetMasterPassphrase", NULL
, N_("Forget _master passphrase"), NULL
, NULL
, G_CALLBACK(forget_master_passphrase_cb
) },
799 /* Configuration menu */
800 {"Configuration/ChangeAccount", NULL
, N_("C_hange current account"), NULL
, NULL
, NULL
},
801 {"Configuration/ChangeAccount/PlaceHolder", NULL
, "Placeholder", NULL
, NULL
, G_CALLBACK(mainwindow_nothing_cb
) },
802 {"Configuration/AccountPrefs", NULL
, N_("_Preferences for current account..."), NULL
, NULL
, G_CALLBACK(prefs_account_open_cb
) },
803 {"Configuration/CreateAccount", NULL
, N_("Create _new account..."), NULL
, NULL
, G_CALLBACK(new_account_cb
) },
804 {"Configuration/EditAccounts", NULL
, N_("_Edit accounts..."), NULL
, NULL
, G_CALLBACK(account_edit_open
) },
805 {"Configuration/---", NULL
, "---", NULL
, NULL
, NULL
},
807 {"Configuration/Preferences", NULL
, N_("P_references..."), NULL
, NULL
, G_CALLBACK(prefs_open_cb
) },
808 {"Configuration/PreProcessing", NULL
, N_("Pre-pr_ocessing..."), NULL
, NULL
, G_CALLBACK(prefs_pre_processing_open_cb
) },
809 {"Configuration/PostProcessing", NULL
, N_("Post-pro_cessing..."), NULL
, NULL
, G_CALLBACK(prefs_post_processing_open_cb
) },
810 {"Configuration/Filtering", NULL
, N_("_Filtering..."), NULL
, NULL
, G_CALLBACK(prefs_filtering_open_cb
) },
811 {"Configuration/Templates", NULL
, N_("_Templates..."), NULL
, NULL
, G_CALLBACK(prefs_template_open_cb
) },
812 {"Configuration/Actions", NULL
, N_("_Actions..."), NULL
, NULL
, G_CALLBACK(prefs_actions_open_cb
) },
813 {"Configuration/Tags", NULL
, N_("Tag_s..."), NULL
, NULL
, G_CALLBACK(prefs_tags_open_cb
) },
814 /* {"Configuration/---", NULL, "---", NULL, NULL, NULL }, */
815 {"Configuration/Plugins", NULL
, N_("Plu_gins..."), NULL
, NULL
, G_CALLBACK(plugins_open_cb
) },
818 {"Help/Manual", NULL
, N_("_Manual"), NULL
, NULL
, G_CALLBACK(manual_open_cb
) },
819 {"Help/FAQ", NULL
, N_("_Online User-contributed FAQ"), NULL
, NULL
, G_CALLBACK(manual_faq_open_cb
) },
820 {"Help/IconLegend", NULL
, N_("Icon _Legend"), NULL
, NULL
, G_CALLBACK(legend_open_cb
) },
822 {"Help/SetDefault", NULL
, N_("Set as default client"), NULL
, NULL
, G_CALLBACK(set_default_client_cb
) },
824 {"Help/---", NULL
, "---", NULL
, NULL
, NULL
},
825 {"Help/About", NULL
, N_("_About"), NULL
, NULL
, G_CALLBACK(about_cb
) },
828 static GtkToggleActionEntry mainwin_toggle_entries
[] = {
829 {"File/OfflineMode", NULL
, N_("Offline _mode"), "<control>W", NULL
, G_CALLBACK(toggle_work_offline_cb
), FALSE
}, /*toggle*/
830 {"View/ShowHide/MenuBar", NULL
, N_("Men_ubar"), "<control>F12", NULL
, G_CALLBACK(toggle_menubar_cb
), FALSE
}, /* toggle */
831 {"View/ShowHide/MessageView", NULL
, N_("_Message view"), "V", NULL
, G_CALLBACK(toggle_message_cb
), FALSE
}, /* toggle */
833 {"View/ShowHide/StatusBar", NULL
, N_("Status _bar"), NULL
, NULL
, G_CALLBACK(toggle_statusbar_cb
), FALSE
}, /* toggle */
835 {"View/ShowHide/ColumnHeaders", NULL
, N_("Column headers"), NULL
, NULL
, G_CALLBACK(toggle_col_headers_cb
), FALSE
}, /* toggle */
836 {"View/ThreadView", NULL
, N_("Th_read view"), "<control>T", NULL
, G_CALLBACK(thread_cb
), FALSE
}, /* toggle */
837 {"View/HideReadThreads", NULL
, N_("Hide read threads"), NULL
, NULL
, G_CALLBACK(hide_read_threads
), FALSE
}, /* toggle */
838 {"View/HideReadMessages", NULL
, N_("_Hide read messages"), NULL
, NULL
, G_CALLBACK(hide_read_messages
), FALSE
}, /* toggle */
839 {"View/HideDelMessages", NULL
, N_("Hide deleted messages"), NULL
, NULL
, G_CALLBACK(hide_del_messages
), FALSE
}, /* toggle */
840 {"View/FullScreen", NULL
, N_("_Fullscreen"), "F11", NULL
, G_CALLBACK(toggle_fullscreen_cb
), FALSE
}, /* toggle */
841 {"View/AllHeaders", NULL
, N_("Show all _headers"), "<control>H", NULL
, G_CALLBACK(show_all_header_cb
), FALSE
}, /* toggle */
842 {"View/Quotes/CollapseAll", NULL
, N_("_Collapse all"), "<control><shift>Q", NULL
, G_CALLBACK(hide_quotes_cb
), FALSE
}, /* 1 toggle */
843 {"View/Quotes/Collapse2", NULL
, N_("Collapse from level _2"), NULL
, NULL
, G_CALLBACK(hide_quotes_cb
), FALSE
}, /* 2 toggle */
844 {"View/Quotes/Collapse3", NULL
, N_("Collapse from level _3"), NULL
, NULL
, G_CALLBACK(hide_quotes_cb
), FALSE
}, /* 3 toggle */
847 static GtkRadioActionEntry mainwin_showhide_radio_entries
[] = { /* toggle_toolbar_cb */
848 {"View/ShowHide/Toolbar/TextBelowIcon", NULL
, N_("Text _below icons"), NULL
, NULL
, TOOLBAR_BOTH
}, /* radio TOOLBAR_BOTH */
849 {"View/ShowHide/Toolbar/TextBesideIcon", NULL
, N_("Text be_side icons"), NULL
, NULL
, TOOLBAR_BOTH_HORIZ
}, /* radio TOOLBAR_BOTH_HORIZ */
850 {"View/ShowHide/Toolbar/IconOnly", NULL
, N_("_Icons only"), NULL
, NULL
, TOOLBAR_ICON
}, /* radio TOOLBAR_ICON */
851 {"View/ShowHide/Toolbar/TextOnly", NULL
, N_("_Text only"), NULL
, NULL
, TOOLBAR_TEXT
}, /* radio TOOLBAR_TEXT */
853 {"View/ShowHide/Toolbar/Hide", NULL
, N_("_Hide"), NULL
, NULL
, TOOLBAR_NONE
}, /* radio TOOLBAR_NONE */
857 static GtkRadioActionEntry mainwin_layout_radio_entries
[] = { /* set_layout_cb */
858 {"View/Layout/Standard", NULL
, N_("_Standard"), NULL
, NULL
, NORMAL_LAYOUT
}, /* radio NORMAL_LAYOUT */
859 {"View/Layout/ThreeColumns", NULL
, N_("_Three columns"), NULL
, NULL
, VERTICAL_LAYOUT
}, /* radio VERTICAL_LAYOUT */
860 {"View/Layout/WideMessage", NULL
, N_("_Wide message"), NULL
, NULL
, WIDE_LAYOUT
}, /* radio WIDE_LAYOUT */
861 {"View/Layout/WideMessageList", NULL
, N_("W_ide message list"), NULL
, NULL
, WIDE_MSGLIST_LAYOUT
}, /* radio WIDE_MSGLIST_LAYOUT */
862 {"View/Layout/SmallScreen", NULL
, N_("S_mall screen"), NULL
, NULL
, SMALL_LAYOUT
}, /* radio SMALL_LAYOUT */
865 static GtkRadioActionEntry mainwin_sort_radio_entries
[] = { /* sort_summary_cb */
866 {"View/Sort/Number", NULL
, N_("By _number"), NULL
, NULL
, SORT_BY_NUMBER
}, /* radio SORT_BY_NUMBER */
867 {"View/Sort/Size", NULL
, N_("By s_ize"), NULL
, NULL
, SORT_BY_SIZE
}, /* radio SORT_BY_SIZE */
868 {"View/Sort/Date", NULL
, N_("By _date"), NULL
, NULL
, SORT_BY_DATE
}, /* radio SORT_BY_DATE */
869 {"View/Sort/ThreadDate", NULL
, N_("By thread date"), NULL
, NULL
, SORT_BY_THREAD_DATE
}, /* radio SORT_BY_THREAD_DATE */
870 {"View/Sort/From", NULL
, N_("By _From"), NULL
, NULL
, SORT_BY_FROM
}, /* radio SORT_BY_FROM */
871 {"View/Sort/To", NULL
, N_("By _To"), NULL
, NULL
, SORT_BY_TO
}, /* radio SORT_BY_TO */
872 {"View/Sort/Subject", NULL
, N_("By s_ubject"), NULL
, NULL
, SORT_BY_SUBJECT
}, /* radio SORT_BY_SUBJECT */
873 {"View/Sort/Color", NULL
, N_("By _color label"), NULL
, NULL
, SORT_BY_LABEL
}, /* radio SORT_BY_LABEL */
874 {"View/Sort/Tag", NULL
, N_("By tag"), NULL
, NULL
, SORT_BY_TAGS
}, /* radio SORT_BY_TAGS */
875 {"View/Sort/Mark", NULL
, N_("By _mark"), NULL
, NULL
, SORT_BY_MARK
}, /* radio SORT_BY_MARK */
876 {"View/Sort/Status", NULL
, N_("By _status"), NULL
, NULL
, SORT_BY_STATUS
}, /* radio SORT_BY_STATUS */
877 {"View/Sort/Attachment", NULL
, N_("By a_ttachment"), NULL
, NULL
, SORT_BY_MIME
}, /* radio SORT_BY_MIME */
878 {"View/Sort/Score", NULL
, N_("By score"), NULL
, NULL
, SORT_BY_SCORE
}, /* radio SORT_BY_SCORE */
879 {"View/Sort/Locked", NULL
, N_("By locked"), NULL
, NULL
, SORT_BY_LOCKED
}, /* radio SORT_BY_LOCKED */
880 {"View/Sort/DontSort", NULL
, N_("D_on't sort"), NULL
, NULL
, SORT_BY_NONE
}, /* radio SORT_BY_NONE */
883 static GtkRadioActionEntry mainwin_sorttype_radio_entries
[] = { /* sort_summary_type_cb */
884 {"View/Sort/Ascending", NULL
, N_("Ascending"), NULL
, NULL
, SORT_ASCENDING
}, /* radio SORT_ASCENDING */
885 {"View/Sort/Descending", NULL
, N_("Descending"), NULL
, NULL
, SORT_DESCENDING
}, /* radio SORT_DESCENDING */
888 static GtkRadioActionEntry mainwin_radio_enc_entries
[] =
890 ENC_ACTION(CS_AUTO
, C_AUTO
, N_("_Automatic")), /* RADIO set_charset_cb */
891 ENC_ACTION(CS_US_ASCII
, C_US_ASCII
, N_("7bit ASCII (US-ASC_II)")), /* RADIO set_charset_cb */
892 ENC_ACTION(CS_UTF_8
, C_UTF_8
, N_("Unicode (_UTF-8)")), /* RADIO set_charset_cb */
893 ENC_ACTION("Western/"CS_ISO_8859_1
, C_ISO_8859_1
, "ISO-8859-_1"), /* RADIO set_charset_cb */
894 ENC_ACTION("Western/"CS_ISO_8859_15
, C_ISO_8859_15
, "ISO-8859-15"), /* RADIO set_charset_cb */
895 ENC_ACTION("Western/"CS_WINDOWS_1252
, C_WINDOWS_1252
, "Windows-1252"), /* RADIO set_charset_cb */
896 ENC_ACTION(CS_ISO_8859_2
, C_ISO_8859_2
, N_("Central European (ISO-8859-_2)")), /* RADIO set_charset_cb */
897 ENC_ACTION("Baltic/"CS_ISO_8859_13
, C_ISO_8859_13
, "ISO-8859-13"), /* RADIO set_charset_cb */
898 ENC_ACTION("Baltic/"CS_ISO_8859_4
, C_ISO_8859_14
, "ISO-8859-_4"), /* RADIO set_charset_cb */
899 ENC_ACTION(CS_ISO_8859_7
, C_ISO_8859_7
, N_("Greek (ISO-8859-_7)")), /* RADIO set_charset_cb */
900 ENC_ACTION("Hebrew/"CS_ISO_8859_8
, C_ISO_8859_8
, "ISO-8859-_8"), /* RADIO set_charset_cb */
901 ENC_ACTION("Hebrew/"CS_WINDOWS_1255
, C_WINDOWS_1255
, "Windows-1255"), /* RADIO set_charset_cb */
902 ENC_ACTION("Arabic/"CS_ISO_8859_6
, C_ISO_8859_6
, "ISO-8859-_6"), /* RADIO set_charset_cb */
903 ENC_ACTION("Arabic/"CS_WINDOWS_1256
, C_WINDOWS_1256
, "Windows-1256"), /* RADIO set_charset_cb */
904 ENC_ACTION(CS_ISO_8859_9
, C_ISO_8859_9
, N_("Turkish (ISO-8859-_9)")), /* RADIO set_charset_cb */
905 ENC_ACTION("Cyrillic/"CS_ISO_8859_5
, C_ISO_8859_5
, "ISO-8859-_5"), /* RADIO set_charset_cb */
906 ENC_ACTION("Cyrillic/"CS_KOI8_R
, C_KOI8_R
, "KOI8-_R"), /* RADIO set_charset_cb */
907 ENC_ACTION("Cyrillic/"CS_MACCYR
, C_MACCYR
, "_Mac-Cyrillic"), /* RADIO set_charset_cb */
908 ENC_ACTION("Cyrillic/"CS_KOI8_U
, C_KOI8_U
, "KOI8-_U"), /* RADIO set_charset_cb */
909 ENC_ACTION("Cyrillic/"CS_WINDOWS_1251
, C_WINDOWS_1251
, "Windows-1251"), /* RADIO set_charset_cb */
910 ENC_ACTION("Japanese/"CS_ISO_2022_JP
, C_ISO_2022_JP
, "ISO-2022-_JP"), /* RADIO set_charset_cb */
911 ENC_ACTION("Japanese/"CS_ISO_2022_JP_2
, C_ISO_2022_JP_2
, "ISO-2022-JP-_2"), /* RADIO set_charset_cb */
912 ENC_ACTION("Japanese/"CS_EUC_JP
, C_EUC_JP
, "_EUC-JP"), /* RADIO set_charset_cb */
913 ENC_ACTION("Japanese/"CS_SHIFT_JIS
, C_SHIFT_JIS
, "_Shift-JIS"), /* RADIO set_charset_cb */
914 ENC_ACTION("Chinese/"CS_GB18030
, C_GB18030
, "_GB18030"), /* RADIO set_charset_cb */
915 ENC_ACTION("Chinese/"CS_GB2312
, C_GB2312
, "_GB2312"), /* RADIO set_charset_cb */
916 ENC_ACTION("Chinese/"CS_GBK
, C_GBK
, "GB_K"), /* RADIO set_charset_cb */
917 ENC_ACTION("Chinese/"CS_BIG5
, C_BIG5
, "_Big5-JP"), /* RADIO set_charset_cb */
918 ENC_ACTION("Chinese/"CS_EUC_TW
, C_EUC_TW
, "EUC-_TW"), /* RADIO set_charset_cb */
919 ENC_ACTION("Korean/"CS_EUC_KR
, C_EUC_KR
, "_EUC-KR"), /* RADIO set_charset_cb */
920 ENC_ACTION("Korean/"CS_ISO_2022_KR
, C_ISO_2022_KR
, "_ISO-2022-KR"), /* RADIO set_charset_cb */
921 ENC_ACTION("Thai/"CS_TIS_620
, C_TIS_620
, "_TIS-620-KR"), /* RADIO set_charset_cb */
922 ENC_ACTION("Thai/"CS_WINDOWS_874
, C_WINDOWS_874
, "_Windows-874"), /* RADIO set_charset_cb */
925 static GtkRadioActionEntry mainwin_radio_dec_entries
[] =
927 DEC_ACTION("AutoDetect", 0, N_("_Auto detect")), /* set_decode_cb */
929 DEC_ACTION("8bit", ENC_8BIT
, "_8bit"),
930 DEC_ACTION("QP", ENC_QUOTED_PRINTABLE
, "_Quoted printable"),
931 DEC_ACTION("B64", ENC_BASE64
, "_Base64"),
932 DEC_ACTION("Uuencode", ENC_X_UUENCODE
, "_Uuencode"),
935 static gboolean offline_ask_sync
= TRUE
;
936 static gboolean is_obscured
= FALSE
;
938 #define N_COLOR_LABELS colorlabel_get_color_count()
940 static void mainwindow_colorlabel_menu_item_activate_item_cb(GtkMenuItem
*menu_item
,
945 GtkCheckMenuItem
**items
;
947 GList
*children
, *cur
;
950 mainwin
= (MainWindow
*)data
;
951 cm_return_if_fail(mainwin
!= NULL
);
953 sel
= summary_get_selection(mainwin
->summaryview
);
956 menu
= GTK_MENU_SHELL(mainwin
->colorlabel_menu
);
957 cm_return_if_fail(menu
!= NULL
);
959 Xalloca(items
, (N_COLOR_LABELS
+ 1) * sizeof(GtkWidget
*), return);
961 /* NOTE: don't return prematurely because we set the "dont_toggle"
962 * state for check menu items. This would be bad! */
963 g_object_set_data(G_OBJECT(menu
), "dont_toggle",
966 /* clear items. get item pointers. */
967 children
= gtk_container_get_children(GTK_CONTAINER(menu
));
968 for (n
= 0, cur
= children
; cur
!= NULL
&& cur
->data
!= NULL
; cur
= cur
->next
) {
969 if (GTK_IS_CHECK_MENU_ITEM(cur
->data
)) {
970 gtk_check_menu_item_set_active
971 (GTK_CHECK_MENU_ITEM(cur
->data
), FALSE
);
972 items
[n
] = GTK_CHECK_MENU_ITEM(cur
->data
);
977 g_list_free(children
);
979 if (n
== (N_COLOR_LABELS
+ 1)) {
980 /* iterate all messages and set the state of the appropriate
982 for (; sel
!= NULL
; sel
= sel
->next
) {
986 msginfo
= (MsgInfo
*)sel
->data
;
988 clabel
= MSG_GET_COLORLABEL_VALUE(msginfo
->flags
);
989 if (!gtk_check_menu_item_get_active(items
[clabel
]))
990 gtk_check_menu_item_set_active
991 (items
[clabel
], TRUE
);
995 g_warning("invalid number of color elements (%d)", n
);
998 /* reset "dont_toggle" state */
999 g_object_set_data(G_OBJECT(menu
), "dont_toggle",
1000 GINT_TO_POINTER(0));
1003 static void mainwindow_colorlabel_menu_item_activate_cb(GtkWidget
*widget
,
1006 guint color
= GPOINTER_TO_UINT(data
);
1007 MainWindow
*mainwin
;
1009 mainwin
= g_object_get_data(G_OBJECT(widget
), "mainwin");
1010 cm_return_if_fail(mainwin
!= NULL
);
1012 /* "dont_toggle" state set? */
1013 if (g_object_get_data(G_OBJECT(mainwin
->colorlabel_menu
),
1017 summary_set_colorlabel(mainwin
->summaryview
, color
, NULL
);
1020 static void mainwindow_tags_menu_item_activate_item_cb(GtkMenuItem
*menu_item
,
1023 MainWindow
*mainwin
;
1025 GList
*children
, *cur
;
1027 GHashTable
*menu_table
= g_hash_table_new_full(
1031 GHashTable
*menu_allsel_table
= g_hash_table_new_full(
1036 mainwin
= (MainWindow
*)data
;
1037 cm_return_if_fail(mainwin
!= NULL
);
1039 sel
= summary_get_selection(mainwin
->summaryview
);
1042 menu
= GTK_MENU_SHELL(mainwin
->tags_menu
);
1043 cm_return_if_fail(menu
!= NULL
);
1045 /* NOTE: don't return prematurely because we set the "dont_toggle"
1046 * state for check menu items */
1047 g_object_set_data(G_OBJECT(menu
), "dont_toggle",
1048 GINT_TO_POINTER(1));
1050 /* clear items. get item pointers. */
1051 children
= gtk_container_get_children(GTK_CONTAINER(menu
));
1052 for (cur
= children
; cur
!= NULL
&& cur
->data
!= NULL
; cur
= cur
->next
) {
1053 if (GTK_IS_CHECK_MENU_ITEM(cur
->data
)) {
1054 gint id
= GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cur
->data
),
1056 gtk_check_menu_item_set_active
1057 (GTK_CHECK_MENU_ITEM(cur
->data
), FALSE
);
1059 g_hash_table_insert(menu_table
, GINT_TO_POINTER(id
), GTK_CHECK_MENU_ITEM(cur
->data
));
1060 g_hash_table_insert(menu_allsel_table
, GINT_TO_POINTER(id
), GINT_TO_POINTER(0));
1064 g_list_free(children
);
1066 /* iterate all messages and set the state of the appropriate
1069 for (; sel
!= NULL
; sel
= sel
->next
) {
1071 GSList
*tags
= NULL
;
1072 GtkCheckMenuItem
*item
;
1073 msginfo
= (MsgInfo
*)sel
->data
;
1076 tags
= msginfo
->tags
;
1080 for (; tags
; tags
= tags
->next
) {
1081 gint num_checked
= GPOINTER_TO_INT(g_hash_table_lookup(menu_allsel_table
, tags
->data
));
1082 item
= g_hash_table_lookup(menu_table
, GINT_TO_POINTER(tags
->data
));
1083 if (item
&& !gtk_check_menu_item_get_active(item
)) {
1084 gtk_check_menu_item_set_active
1088 g_hash_table_replace(menu_allsel_table
, tags
->data
, GINT_TO_POINTER(num_checked
));
1093 children
= gtk_container_get_children(GTK_CONTAINER(menu
));
1094 for (cur
= children
; cur
!= NULL
&& cur
->data
!= NULL
; cur
= cur
->next
) {
1095 if (GTK_IS_CHECK_MENU_ITEM(cur
->data
)) {
1096 gint id
= GPOINTER_TO_INT(g_object_get_data(G_OBJECT(cur
->data
),
1098 gint num_checked
= GPOINTER_TO_INT(g_hash_table_lookup(menu_allsel_table
, GINT_TO_POINTER(id
)));
1099 if (num_checked
< sel_len
&& num_checked
> 0)
1100 gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(cur
->data
), TRUE
);
1102 gtk_check_menu_item_set_inconsistent(GTK_CHECK_MENU_ITEM(cur
->data
), FALSE
);
1105 g_list_free(children
);
1107 g_hash_table_destroy(menu_table
);
1108 g_hash_table_destroy(menu_allsel_table
);
1109 /* reset "dont_toggle" state */
1110 g_object_set_data(G_OBJECT(menu
), "dont_toggle",
1111 GINT_TO_POINTER(0));
1114 static void mainwindow_tags_menu_item_activate_cb(GtkWidget
*widget
,
1117 gint id
= GPOINTER_TO_INT(data
);
1118 gboolean set
= gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget
));
1119 MainWindow
*mainwin
;
1121 mainwin
= g_object_get_data(G_OBJECT(widget
), "mainwin");
1122 cm_return_if_fail(mainwin
!= NULL
);
1124 /* "dont_toggle" state set? */
1125 if (g_object_get_data(G_OBJECT(mainwin
->tags_menu
),
1131 summary_set_tag(mainwin
->summaryview
, id
, NULL
);
1134 void mainwin_accel_changed_cb (GtkAccelGroup
*accelgroup
, guint keyval
, GdkModifierType modifier
,
1135 GClosure
*closure
, GtkMenuItem
*item
)
1137 GList
*closures
= gtk_widget_list_accel_closures(GTK_WIDGET(item
));
1139 for (cur
= closures
; cur
; cur
= cur
->next
) {
1140 if (closure
== cur
->data
) {
1141 GtkLabel
*label
= g_object_get_data(G_OBJECT(item
), "accel_label");
1144 if (keyval
== GDK_KEY_Delete
) {
1145 const gchar
*accel_path
;
1146 accel_path
= gtk_menu_item_get_accel_path(item
);
1147 keyval
= 0; modifier
= 0;
1148 gtk_accel_map_change_entry (accel_path
, keyval
, modifier
, TRUE
);
1150 new_accel
= gtk_accelerator_get_label(keyval
, modifier
);
1151 gtk_label_set_text(label
, new_accel
);
1155 g_list_free(closures
);
1158 static void mainwindow_colorlabel_menu_create(MainWindow
*mainwin
, gboolean refresh
)
1160 GtkWidget
*label_menuitem
;
1164 gchar
*accel_path
= NULL
;
1166 label_menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/ColorLabel");
1167 g_signal_connect(G_OBJECT(label_menuitem
), "activate",
1168 G_CALLBACK(mainwindow_colorlabel_menu_item_activate_item_cb
),
1170 gtk_widget_show(label_menuitem
);
1172 menu
= gtk_menu_new();
1173 gtk_menu_set_accel_group (GTK_MENU (menu
),
1174 gtk_ui_manager_get_accel_group(mainwin
->ui_manager
));
1176 /* create sub items. for the menu item activation callback we pass the
1177 * index of label_colors[] as data parameter. for the None color we
1178 * pass an invalid (high) value. also we attach a data pointer so we
1179 * can always get back the Mainwindow pointer. */
1181 item
= gtk_check_menu_item_new_with_label(_("None"));
1182 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), item
);
1183 g_signal_connect(G_OBJECT(item
), "activate",
1184 G_CALLBACK(mainwindow_colorlabel_menu_item_activate_cb
),
1185 GUINT_TO_POINTER(0));
1186 g_object_set_data(G_OBJECT(item
), "mainwin", mainwin
);
1187 gtk_widget_show(item
);
1189 accel_path
= g_strdup_printf("<ClawsColorLabels>/None");
1190 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(item
), accel_path
);
1192 gtk_accel_map_add_entry("<ClawsColorLabels>/None", GDK_KEY_0
, GDK_CONTROL_MASK
);
1193 item
= gtk_menu_item_new();
1194 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), item
);
1195 gtk_widget_show(item
);
1197 /* create pixmap/label menu items */
1198 for (i
= 0; i
< N_COLOR_LABELS
; i
++) {
1199 item
= colorlabel_create_check_color_menu_item(
1200 i
, refresh
, MAINWIN_COLORMENU
);
1201 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), item
);
1202 g_signal_connect(G_OBJECT(item
), "activate",
1203 G_CALLBACK(mainwindow_colorlabel_menu_item_activate_cb
),
1204 GUINT_TO_POINTER(i
+ 1));
1205 g_object_set_data(G_OBJECT(item
), "mainwin",
1207 gtk_widget_show(item
);
1208 accel_path
= g_strdup_printf("<ClawsColorLabels>/%d", i
+1);
1209 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(item
), accel_path
);
1211 gtk_accel_map_add_entry(accel_path
, GDK_KEY_1
+i
, GDK_CONTROL_MASK
);
1213 g_signal_connect (gtk_ui_manager_get_accel_group(mainwin
->ui_manager
),
1214 "accel-changed", G_CALLBACK (mainwin_accel_changed_cb
), item
);
1218 gtk_widget_show(menu
);
1219 gtk_menu_item_set_submenu(GTK_MENU_ITEM(label_menuitem
), menu
);
1220 mainwin
->colorlabel_menu
= menu
;
1223 static void mainwindow_tags_menu_item_apply_tags_activate_cb(GtkWidget
*widget
,
1226 MainWindow
*mainwin
;
1228 mainwin
= g_object_get_data(G_OBJECT(widget
), "mainwin");
1229 cm_return_if_fail(mainwin
!= NULL
);
1231 /* "dont_toggle" state set? */
1232 if (g_object_get_data(G_OBJECT(mainwin
->tags_menu
),
1236 tag_apply_open(summary_get_selection(mainwin
->summaryview
));
1239 static gint
mainwin_tag_cmp_list(gconstpointer a
, gconstpointer b
)
1241 gint id_a
= GPOINTER_TO_INT(a
);
1242 gint id_b
= GPOINTER_TO_INT(b
);
1243 const gchar
*tag_a
= tags_get_tag(id_a
);
1244 const gchar
*tag_b
= tags_get_tag(id_b
);
1248 return tag_b
== NULL
? 0:1;
1253 return g_utf8_collate(tag_a
, tag_b
);
1256 static void mainwindow_tags_menu_create(MainWindow
*mainwin
, gboolean refresh
)
1258 GtkWidget
*label_menuitem
;
1261 GSList
*cur
= tags_get_list();
1262 GSList
*orig
= NULL
;
1263 gboolean existing_tags
= FALSE
;
1265 cur
= orig
= g_slist_sort(cur
, mainwin_tag_cmp_list
);
1267 label_menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/Tags");
1268 g_signal_connect(G_OBJECT(label_menuitem
), "activate",
1269 G_CALLBACK(mainwindow_tags_menu_item_activate_item_cb
),
1272 gtk_widget_show(label_menuitem
);
1274 menu
= gtk_menu_new();
1275 gtk_menu_set_accel_group (GTK_MENU (menu
),
1276 gtk_ui_manager_get_accel_group(mainwin
->ui_manager
));
1278 /* create tags menu items */
1279 for (; cur
; cur
= cur
->next
) {
1280 gint id
= GPOINTER_TO_INT(cur
->data
);
1281 const gchar
*tag
= tags_get_tag(id
);
1283 item
= gtk_check_menu_item_new_with_label(tag
);
1284 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), item
);
1285 g_signal_connect(G_OBJECT(item
), "activate",
1286 G_CALLBACK(mainwindow_tags_menu_item_activate_cb
),
1287 GINT_TO_POINTER(id
));
1288 g_object_set_data(G_OBJECT(item
), "mainwin",
1290 g_object_set_data(G_OBJECT(item
), "tag_id",
1291 GINT_TO_POINTER(id
));
1292 gtk_widget_show(item
);
1293 accel_path
= g_strconcat("<ClawsTags>/",tag
, NULL
);
1294 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(item
), accel_path
);
1296 existing_tags
= TRUE
;
1298 if (existing_tags
) {
1300 item
= gtk_menu_item_new();
1301 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), item
);
1302 gtk_widget_show(item
);
1305 item
= gtk_menu_item_new_with_label(_("Apply tags..."));
1306 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), item
);
1307 g_signal_connect(G_OBJECT(item
), "activate",
1308 G_CALLBACK(mainwindow_tags_menu_item_apply_tags_activate_cb
),
1310 g_object_set_data(G_OBJECT(item
), "mainwin",
1312 gtk_widget_show(item
);
1313 accel_path
= g_strdup_printf("<ClawsTags>/ApplyTags");
1314 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(item
), accel_path
);
1316 gtk_accel_map_add_entry("<ClawsTags>/ApplyTags", GDK_KEY_T
, GDK_CONTROL_MASK
|GDK_SHIFT_MASK
);
1318 gtk_widget_show(menu
);
1319 gtk_menu_item_set_submenu(GTK_MENU_ITEM(label_menuitem
), menu
);
1320 mainwin
->tags_menu
= menu
;
1322 #ifndef GENERIC_UMPC
1323 static gboolean
warning_icon_pressed(GtkWidget
*widget
, GdkEventButton
*evt
,
1324 MainWindow
*mainwindow
)
1326 if (evt
&& evt
->button
== 1) {
1327 log_window_show_error(mainwindow
->logwin
);
1328 gtk_widget_hide(mainwindow
->warning_btn
);
1333 static gboolean
warning_visi_notify(GtkWidget
*widget
,
1334 GdkEventVisibility
*event
,
1335 MainWindow
*mainwindow
)
1337 gdk_window_set_cursor(gtk_widget_get_window(mainwindow
->warning_btn
), hand_cursor
);
1341 static gboolean
warning_leave_notify(GtkWidget
*widget
,
1342 GdkEventCrossing
*event
,
1343 MainWindow
*mainwindow
)
1345 gdk_window_set_cursor(gtk_widget_get_window(mainwindow
->warning_btn
), NULL
);
1349 static gboolean
warning_enter_notify(GtkWidget
*widget
,
1350 GdkEventCrossing
*event
,
1351 MainWindow
*mainwindow
)
1353 gdk_window_set_cursor(gtk_widget_get_window(mainwindow
->warning_btn
), hand_cursor
);
1357 void mainwindow_show_error(void)
1359 MainWindow
*mainwin
= mainwindow_get_mainwindow();
1360 gtk_widget_show(mainwin
->warning_btn
);
1363 void mainwindow_clear_error(MainWindow
*mainwin
)
1365 gtk_widget_hide(mainwin
->warning_btn
);
1368 #define BREAK_ON_MODIFIER_KEY() \
1369 if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break
1371 static gboolean
mainwindow_key_pressed (GtkWidget
*widget
, GdkEventKey
*event
,
1374 MainWindow
*mainwin
= (MainWindow
*) data
;
1376 if (!mainwin
|| !event
)
1379 if (quicksearch_has_focus(mainwin
->summaryview
->quicksearch
))
1382 quicksearch_get_entry(mainwin
->summaryview
->quicksearch
);
1384 g_signal_emit_by_name(entry
, "key-press-event", event
, &handled
);
1390 switch (event
->keyval
) {
1391 case GDK_KEY_Q
: /* Quit */
1392 BREAK_ON_MODIFIER_KEY();
1394 if (gtk_window_is_active(GTK_WINDOW(mainwin
->window
))) {
1395 app_exit_cb(NULL
, mainwin
);
1399 BREAK_ON_MODIFIER_KEY();
1400 if (gtk_window_is_active(GTK_WINDOW(mainwin
->window
))) {
1401 if (mainwin
->folderview
!= NULL
&& mainwin
->summaryview
!= NULL
1402 && ((!mainwin
->summaryview
->displayed
1403 && !mainwin
->summaryview
->selected
)
1404 || (mainwin
->summaryview
->folder_item
1405 && mainwin
->summaryview
->folder_item
->total_msgs
== 0))) {
1406 g_signal_stop_emission_by_name(G_OBJECT(widget
),
1408 folderview_select_next_with_flag(mainwin
->folderview
, MSG_UNREAD
);
1418 #undef BREAK_ON_MODIFIER_KEY
1420 MainWindow
*main_window_create()
1422 MainWindow
*mainwin
;
1426 GtkWidget
*handlebox
;
1427 GtkWidget
*vbox_body
;
1428 GtkWidget
*menuitem
;
1429 #ifndef GENERIC_UMPC
1430 GtkWidget
*hbox_stat
;
1431 GtkWidget
*statusbar
;
1432 GtkWidget
*progressbar
;
1433 GtkWidget
*statuslabel
;
1434 GtkWidget
*ac_button
;
1435 GtkWidget
*ac_label
;
1436 GtkWidget
*online_pixmap
;
1437 GtkWidget
*offline_pixmap
;
1438 GtkWidget
*warning_icon
;
1439 GtkWidget
*warning_btn
;
1441 GtkWidget
*online_switch
;
1442 GtkWidget
*offline_switch
;
1443 FolderView
*folderview
;
1444 SummaryView
*summaryview
;
1445 MessageView
*messageview
;
1446 GdkColormap
*colormap
;
1447 gboolean success
[4];
1452 static GdkGeometry geometry
;
1454 debug_print("Creating main window...\n");
1455 mainwin
= g_new0(MainWindow
, 1);
1458 window
= GTK_WIDGET(gtkut_window_new(GTK_WINDOW_TOPLEVEL
, "mainwindow"));
1459 gtk_window_set_title(GTK_WINDOW(window
), PROG_VERSION
);
1460 gtk_window_set_resizable(GTK_WINDOW(window
), TRUE
);
1462 prefs_common
.layout_mode
= SMALL_LAYOUT
;
1464 if (!geometry
.min_height
) {
1465 geometry
.min_width
= 320;
1466 geometry
.min_height
= 200;
1468 gtk_window_set_geometry_hints(GTK_WINDOW(window
), NULL
, &geometry
,
1471 g_signal_connect(G_OBJECT(window
), "delete_event",
1472 G_CALLBACK(main_window_close_cb
), mainwin
);
1473 MANAGE_WINDOW_SIGNALS_CONNECT(window
);
1474 g_signal_connect(G_OBJECT(window
), "focus_in_event",
1475 G_CALLBACK(mainwindow_focus_in_event
),
1477 g_signal_connect(G_OBJECT(window
), "key_press_event",
1478 G_CALLBACK(mainwindow_key_pressed
), mainwin
);
1480 gtk_widget_realize(window
);
1481 gtk_widget_add_events(window
, GDK_KEY_PRESS_MASK
|GDK_KEY_RELEASE_MASK
);
1484 gtkut_widget_set_app_icon(window
);
1486 vbox
= gtk_vbox_new(FALSE
, 0);
1487 gtk_widget_show(vbox
);
1488 gtk_container_add(GTK_CONTAINER(window
), vbox
);
1492 mainwin
->ui_manager
= gtk_ui_manager_new();
1493 mainwin
->action_group
= cm_menu_create_action_group_full(mainwin
->ui_manager
,"Menu", mainwin_entries
,
1494 G_N_ELEMENTS(mainwin_entries
), (gpointer
)mainwin
);
1495 gtk_action_group_add_toggle_actions(mainwin
->action_group
, mainwin_toggle_entries
,
1496 G_N_ELEMENTS(mainwin_toggle_entries
), (gpointer
)mainwin
);
1497 gtk_action_group_add_radio_actions(mainwin
->action_group
, mainwin_showhide_radio_entries
,
1498 G_N_ELEMENTS(mainwin_showhide_radio_entries
), C_AUTO
, G_CALLBACK(toggle_toolbar_cb
), (gpointer
)mainwin
);
1499 #ifndef GENERIC_UMPC
1500 gtk_action_group_add_radio_actions(mainwin
->action_group
, mainwin_layout_radio_entries
,
1501 G_N_ELEMENTS(mainwin_layout_radio_entries
), C_AUTO
, G_CALLBACK(set_layout_cb
), (gpointer
)mainwin
);
1503 gtk_action_group_add_radio_actions(mainwin
->action_group
, mainwin_sort_radio_entries
,
1504 G_N_ELEMENTS(mainwin_sort_radio_entries
), C_AUTO
, G_CALLBACK(sort_summary_cb
), (gpointer
)mainwin
);
1505 gtk_action_group_add_radio_actions(mainwin
->action_group
, mainwin_sorttype_radio_entries
,
1506 G_N_ELEMENTS(mainwin_sorttype_radio_entries
), C_AUTO
, G_CALLBACK(sort_summary_type_cb
), (gpointer
)mainwin
);
1507 gtk_action_group_add_radio_actions(mainwin
->action_group
, mainwin_radio_enc_entries
,
1508 G_N_ELEMENTS(mainwin_radio_enc_entries
), C_AUTO
, G_CALLBACK(set_charset_cb
), (gpointer
)mainwin
);
1509 gtk_action_group_add_radio_actions(mainwin
->action_group
, mainwin_radio_dec_entries
,
1510 G_N_ELEMENTS(mainwin_radio_dec_entries
), C_AUTO
, G_CALLBACK(set_decode_cb
), (gpointer
)mainwin
);
1512 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/", "Menu", NULL
, GTK_UI_MANAGER_MENUBAR
)
1513 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu", "File", "File", GTK_UI_MANAGER_MENU
)
1514 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu", "Edit", "Edit", GTK_UI_MANAGER_MENU
)
1515 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu", "View", "View", GTK_UI_MANAGER_MENU
)
1516 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu", "Message", "Message", GTK_UI_MANAGER_MENU
)
1517 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu", "Tools", "Tools", GTK_UI_MANAGER_MENU
)
1518 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu", "Configuration", "Configuration", GTK_UI_MANAGER_MENU
)
1519 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu", "Help", "Help", GTK_UI_MANAGER_MENU
)
1522 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "AddMailbox", "File/AddMailbox", GTK_UI_MANAGER_MENU
)
1523 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File/AddMailbox", "MH", "File/AddMailbox/MH", GTK_UI_MANAGER_MENUITEM
)
1524 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "Separator1", "File/---", GTK_UI_MANAGER_SEPARATOR
)
1525 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "SortMailboxes", "File/SortMailboxes", GTK_UI_MANAGER_MENUITEM
)
1526 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "Separator2", "File/---", GTK_UI_MANAGER_SEPARATOR
)
1527 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "ImportMbox", "File/ImportMbox", GTK_UI_MANAGER_MENUITEM
)
1528 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "ExportMbox", "File/ExportMbox", GTK_UI_MANAGER_MENUITEM
)
1529 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "ExportSelMbox", "File/ExportSelMbox", GTK_UI_MANAGER_MENUITEM
)
1530 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "Separator3", "File/---", GTK_UI_MANAGER_SEPARATOR
)
1531 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "EmptyTrashes", "File/EmptyTrashes", GTK_UI_MANAGER_MENUITEM
)
1532 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "Separator4", "File/---", GTK_UI_MANAGER_SEPARATOR
)
1533 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "SaveAs", "File/SaveAs", GTK_UI_MANAGER_MENUITEM
)
1534 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "SavePartAs", "File/SavePartAs", GTK_UI_MANAGER_MENUITEM
)
1535 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "Separator5", "File/---", GTK_UI_MANAGER_SEPARATOR
)
1536 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "PageSetup", "File/PageSetup", GTK_UI_MANAGER_MENUITEM
)
1537 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "Print", "File/Print", GTK_UI_MANAGER_MENUITEM
)
1538 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "Separator6", "File/---", GTK_UI_MANAGER_SEPARATOR
)
1539 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "OfflineMode", "File/OfflineMode", GTK_UI_MANAGER_MENUITEM
)
1540 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "SynchroniseFolders", "File/SynchroniseFolders", GTK_UI_MANAGER_MENUITEM
)
1541 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "Separator7", "File/---", GTK_UI_MANAGER_SEPARATOR
)
1542 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/File", "Exit", "File/Exit", GTK_UI_MANAGER_MENUITEM
)
1545 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Edit", "Copy", "Edit/Copy", GTK_UI_MANAGER_MENUITEM
)
1546 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Edit", "SelectAll", "Edit/SelectAll", GTK_UI_MANAGER_MENUITEM
)
1547 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Edit", "SelectThread", "Edit/SelectThread", GTK_UI_MANAGER_MENUITEM
)
1548 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Edit", "Separator1", "Edit/---", GTK_UI_MANAGER_SEPARATOR
)
1549 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Edit", "Find", "Edit/Find", GTK_UI_MANAGER_MENUITEM
)
1550 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Edit", "SearchFolder", "Edit/SearchFolder", GTK_UI_MANAGER_MENUITEM
)
1551 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Edit", "QuickSearch", "Edit/QuickSearch", GTK_UI_MANAGER_MENUITEM
)
1554 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "ShowHide", "View/ShowHide", GTK_UI_MANAGER_MENU
)
1555 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/ShowHide", "MenuBar", "View/ShowHide/MenuBar", GTK_UI_MANAGER_MENUITEM
)
1556 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/ShowHide", "Toolbar", "View/ShowHide/Toolbar", GTK_UI_MANAGER_MENU
)
1557 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/ShowHide/Toolbar", "TextBelowIcon", "View/ShowHide/Toolbar/TextBelowIcon", GTK_UI_MANAGER_MENUITEM
)
1558 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/ShowHide/Toolbar", "TextBesideIcon", "View/ShowHide/Toolbar/TextBesideIcon", GTK_UI_MANAGER_MENUITEM
)
1559 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/ShowHide/Toolbar", "IconOnly", "View/ShowHide/Toolbar/IconOnly", GTK_UI_MANAGER_MENUITEM
)
1560 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/ShowHide/Toolbar", "TextOnly", "View/ShowHide/Toolbar/TextOnly", GTK_UI_MANAGER_MENUITEM
)
1561 #ifndef GENERIC_UMPC
1562 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/ShowHide/Toolbar", "Hide", "View/ShowHide/Toolbar/Hide", GTK_UI_MANAGER_MENUITEM
)
1564 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/ShowHide", "MessageView", "View/ShowHide/MessageView", GTK_UI_MANAGER_MENUITEM
)
1565 #ifndef GENERIC_UMPC
1566 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/ShowHide", "StatusBar", "View/ShowHide/StatusBar", GTK_UI_MANAGER_MENUITEM
)
1568 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/ShowHide", "ColumnHeaders", "View/ShowHide/ColumnHeaders", GTK_UI_MANAGER_MENUITEM
)
1569 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "SetColumns", "View/SetColumns", GTK_UI_MANAGER_MENU
)
1570 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/SetColumns", "Folderlist", "View/SetColumns/Folderlist", GTK_UI_MANAGER_MENUITEM
)
1571 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/SetColumns", "Messagelist", "View/SetColumns/Messagelist", GTK_UI_MANAGER_MENUITEM
)
1572 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Separator1", "View/---", GTK_UI_MANAGER_SEPARATOR
)
1574 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "FullScreen", "View/FullScreen", GTK_UI_MANAGER_MENUITEM
)
1575 #ifndef GENERIC_UMPC
1576 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Layout", "View/Layout", GTK_UI_MANAGER_MENU
)
1577 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Layout", "Standard", "View/Layout/Standard", GTK_UI_MANAGER_MENUITEM
)
1578 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Layout", "ThreeColumns", "View/Layout/ThreeColumns", GTK_UI_MANAGER_MENUITEM
)
1579 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Layout", "WideMessage", "View/Layout/WideMessage", GTK_UI_MANAGER_MENUITEM
)
1580 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Layout", "WideMessageList", "View/Layout/WideMessageList", GTK_UI_MANAGER_MENUITEM
)
1581 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Layout", "SmallScreen", "View/Layout/SmallScreen", GTK_UI_MANAGER_MENUITEM
)
1582 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Separator2", "View/---", GTK_UI_MANAGER_SEPARATOR
)
1585 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Sort", "View/Sort", GTK_UI_MANAGER_MENU
)
1586 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Number", "View/Sort/Number", GTK_UI_MANAGER_MENUITEM
)
1587 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Size", "View/Sort/Size", GTK_UI_MANAGER_MENUITEM
)
1588 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Date", "View/Sort/Date", GTK_UI_MANAGER_MENUITEM
)
1589 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "ThreadDate", "View/Sort/ThreadDate", GTK_UI_MANAGER_MENUITEM
)
1590 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "From", "View/Sort/From", GTK_UI_MANAGER_MENUITEM
)
1591 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "To", "View/Sort/To", GTK_UI_MANAGER_MENUITEM
)
1592 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Subject", "View/Sort/Subject", GTK_UI_MANAGER_MENUITEM
)
1593 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Color", "View/Sort/Color", GTK_UI_MANAGER_MENUITEM
)
1594 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Tag", "View/Sort/Tag", GTK_UI_MANAGER_MENUITEM
)
1595 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Mark", "View/Sort/Mark", GTK_UI_MANAGER_MENUITEM
)
1596 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Status", "View/Sort/Status", GTK_UI_MANAGER_MENUITEM
)
1597 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Attachment", "View/Sort/Attachment", GTK_UI_MANAGER_MENUITEM
)
1598 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Score", "View/Sort/Score", GTK_UI_MANAGER_MENUITEM
)
1599 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Locked", "View/Sort/Locked", GTK_UI_MANAGER_MENUITEM
)
1600 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "DontSort", "View/Sort/DontSort", GTK_UI_MANAGER_MENUITEM
)
1601 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Separator1", "View/Sort/---", GTK_UI_MANAGER_SEPARATOR
)
1602 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Ascending", "View/Sort/Ascending", GTK_UI_MANAGER_MENUITEM
)
1603 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Descending", "View/Sort/Descending", GTK_UI_MANAGER_MENUITEM
)
1604 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "Separator2", "View/Sort/---", GTK_UI_MANAGER_SEPARATOR
)
1605 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Sort", "AttractSubj", "View/Sort/AttractSubj", GTK_UI_MANAGER_MENUITEM
)
1607 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "ThreadView", "View/ThreadView", GTK_UI_MANAGER_MENUITEM
)
1608 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "ExpandThreads", "View/ExpandThreads", GTK_UI_MANAGER_MENUITEM
)
1609 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "CollapseThreads", "View/CollapseThreads", GTK_UI_MANAGER_MENUITEM
)
1610 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "HideReadThreads", "View/HideReadThreads", GTK_UI_MANAGER_MENUITEM
)
1611 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "HideReadMessages", "View/HideReadMessages", GTK_UI_MANAGER_MENUITEM
)
1612 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "HideDelMessages", "View/HideDelMessages", GTK_UI_MANAGER_MENUITEM
)
1613 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Separator3", "View/---", GTK_UI_MANAGER_SEPARATOR
)
1615 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Goto", "View/Goto", GTK_UI_MANAGER_MENU
)
1616 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Prev", "View/Goto/Prev", GTK_UI_MANAGER_MENUITEM
)
1617 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Next", "View/Goto/Next", GTK_UI_MANAGER_MENUITEM
)
1618 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Separator1", "View/Goto/---", GTK_UI_MANAGER_SEPARATOR
)
1619 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "PrevUnread", "View/Goto/PrevUnread", GTK_UI_MANAGER_MENUITEM
)
1620 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "NextUnread", "View/Goto/NextUnread", GTK_UI_MANAGER_MENUITEM
)
1621 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Separator2", "View/Goto/---", GTK_UI_MANAGER_SEPARATOR
)
1622 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "PrevNew", "View/Goto/PrevNew", GTK_UI_MANAGER_MENUITEM
)
1623 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "NextNew", "View/Goto/NextNew", GTK_UI_MANAGER_MENUITEM
)
1624 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Separator3", "View/Goto/---", GTK_UI_MANAGER_SEPARATOR
)
1625 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "PrevMarked", "View/Goto/PrevMarked", GTK_UI_MANAGER_MENUITEM
)
1626 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "NextMarked", "View/Goto/NextMarked", GTK_UI_MANAGER_MENUITEM
)
1627 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Separator4", "View/Goto/---", GTK_UI_MANAGER_SEPARATOR
)
1628 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "PrevLabeled", "View/Goto/PrevLabeled", GTK_UI_MANAGER_MENUITEM
)
1629 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "NextLabeled", "View/Goto/NextLabeled", GTK_UI_MANAGER_MENUITEM
)
1630 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Separator5", "View/Goto/---", GTK_UI_MANAGER_SEPARATOR
)
1631 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "PrevHistory", "View/Goto/PrevHistory", GTK_UI_MANAGER_MENUITEM
)
1632 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "NextHistory", "View/Goto/NextHistory", GTK_UI_MANAGER_MENUITEM
)
1633 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Separator6", "View/Goto/---", GTK_UI_MANAGER_SEPARATOR
)
1634 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "ParentMessage", "View/Goto/ParentMessage", GTK_UI_MANAGER_MENUITEM
)
1635 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Separator7", "View/Goto/---", GTK_UI_MANAGER_SEPARATOR
)
1636 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "NextUnreadFolder", "View/Goto/NextUnreadFolder", GTK_UI_MANAGER_MENUITEM
)
1637 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Folder", "View/Goto/Folder", GTK_UI_MANAGER_MENUITEM
)
1638 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "Separator8", "View/Goto/---", GTK_UI_MANAGER_SEPARATOR
)
1639 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "NextPart", "View/Goto/NextPart", GTK_UI_MANAGER_MENUITEM
)
1640 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Goto", "PrevPart", "View/Goto/PrevPart", GTK_UI_MANAGER_MENUITEM
)
1641 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Scroll", "View/Scroll", GTK_UI_MANAGER_MENU
)
1642 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Scroll", "PrevLine", "View/Scroll/PrevLine", GTK_UI_MANAGER_MENUITEM
)
1643 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Scroll", "NextLine", "View/Scroll/NextLine", GTK_UI_MANAGER_MENUITEM
)
1644 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Scroll", "PrevPage", "View/Scroll/PrevPage", GTK_UI_MANAGER_MENUITEM
)
1645 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Scroll", "NextPage", "View/Scroll/NextPage", GTK_UI_MANAGER_MENUITEM
)
1646 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Separator4", "View/---", GTK_UI_MANAGER_SEPARATOR
)
1648 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Encoding", "View/Encoding", GTK_UI_MANAGER_MENU
)
1649 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", CS_AUTO
, "View/Encoding/"CS_AUTO
, GTK_UI_MANAGER_MENUITEM
)
1650 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Separator1", "View/Encoding/---", GTK_UI_MANAGER_SEPARATOR
)
1651 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", CS_US_ASCII
, "View/Encoding/"CS_US_ASCII
, GTK_UI_MANAGER_MENUITEM
)
1652 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", CS_UTF_8
, "View/Encoding/"CS_UTF_8
, GTK_UI_MANAGER_MENUITEM
)
1653 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Separator2", "View/Encoding/---", GTK_UI_MANAGER_SEPARATOR
)
1655 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Western", "View/Encoding/Western", GTK_UI_MANAGER_MENU
)
1656 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Western", CS_ISO_8859_1
, "View/Encoding/Western/"CS_ISO_8859_1
, GTK_UI_MANAGER_MENUITEM
)
1657 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Western", CS_ISO_8859_15
, "View/Encoding/Western/"CS_ISO_8859_15
, GTK_UI_MANAGER_MENUITEM
)
1658 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Western", CS_WINDOWS_1252
, "View/Encoding/Western/"CS_WINDOWS_1252
, GTK_UI_MANAGER_MENUITEM
)
1660 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", CS_ISO_8859_2
, "View/Encoding/"CS_ISO_8859_2
, GTK_UI_MANAGER_MENUITEM
)
1662 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Baltic", "View/Encoding/Baltic", GTK_UI_MANAGER_MENU
)
1663 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Baltic", CS_ISO_8859_13
, "View/Encoding/Baltic/"CS_ISO_8859_13
, GTK_UI_MANAGER_MENUITEM
)
1664 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Baltic", CS_ISO_8859_4
, "View/Encoding/Baltic/"CS_ISO_8859_4
, GTK_UI_MANAGER_MENUITEM
)
1666 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", CS_ISO_8859_7
, "View/Encoding/"CS_ISO_8859_7
, GTK_UI_MANAGER_MENUITEM
)
1668 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Hebrew", "View/Encoding/Hebrew", GTK_UI_MANAGER_MENU
)
1669 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Hebrew", CS_ISO_8859_8
, "View/Encoding/Hebrew/"CS_ISO_8859_8
, GTK_UI_MANAGER_MENUITEM
)
1670 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Hebrew", CS_WINDOWS_1255
, "View/Encoding/Hebrew/"CS_WINDOWS_1255
, GTK_UI_MANAGER_MENUITEM
)
1672 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Arabic", "View/Encoding/Arabic", GTK_UI_MANAGER_MENU
)
1673 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Arabic", CS_ISO_8859_6
, "View/Encoding/Arabic/"CS_ISO_8859_6
, GTK_UI_MANAGER_MENUITEM
)
1674 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Arabic", CS_WINDOWS_1256
, "View/Encoding/Arabic/"CS_WINDOWS_1256
, GTK_UI_MANAGER_MENUITEM
)
1676 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", CS_ISO_8859_9
, "View/Encoding/"CS_ISO_8859_9
, GTK_UI_MANAGER_MENUITEM
)
1678 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Cyrillic", "View/Encoding/Cyrillic", GTK_UI_MANAGER_MENU
)
1679 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Cyrillic", CS_ISO_8859_5
, "View/Encoding/Cyrillic/"CS_ISO_8859_5
, GTK_UI_MANAGER_MENUITEM
)
1680 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Cyrillic", CS_KOI8_R
, "View/Encoding/Cyrillic/"CS_KOI8_R
, GTK_UI_MANAGER_MENUITEM
)
1681 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Cyrillic", CS_MACCYR
, "View/Encoding/Cyrillic/"CS_MACCYR
, GTK_UI_MANAGER_MENUITEM
)
1682 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Cyrillic", CS_KOI8_U
, "View/Encoding/Cyrillic/"CS_KOI8_U
, GTK_UI_MANAGER_MENUITEM
)
1683 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Cyrillic", CS_WINDOWS_1251
, "View/Encoding/Cyrillic/"CS_WINDOWS_1251
, GTK_UI_MANAGER_MENUITEM
)
1685 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Japanese", "View/Encoding/Japanese", GTK_UI_MANAGER_MENU
)
1686 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Japanese", CS_ISO_2022_JP
, "View/Encoding/Japanese/"CS_ISO_2022_JP
, GTK_UI_MANAGER_MENUITEM
)
1687 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Japanese", CS_ISO_2022_JP_2
, "View/Encoding/Japanese/"CS_ISO_2022_JP_2
, GTK_UI_MANAGER_MENUITEM
)
1688 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Japanese", CS_EUC_JP
, "View/Encoding/Japanese/"CS_EUC_JP
, GTK_UI_MANAGER_MENUITEM
)
1689 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Japanese", CS_SHIFT_JIS
, "View/Encoding/Japanese/"CS_SHIFT_JIS
, GTK_UI_MANAGER_MENUITEM
)
1691 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Chinese", "View/Encoding/Chinese", GTK_UI_MANAGER_MENU
)
1692 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Chinese", CS_GB18030
, "View/Encoding/Chinese/"CS_GB18030
, GTK_UI_MANAGER_MENUITEM
)
1693 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Chinese", CS_GB2312
, "View/Encoding/Chinese/"CS_GB2312
, GTK_UI_MANAGER_MENUITEM
)
1694 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Chinese", CS_GBK
, "View/Encoding/Chinese/"CS_GBK
, GTK_UI_MANAGER_MENUITEM
)
1695 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Chinese", CS_BIG5
, "View/Encoding/Chinese/"CS_BIG5
, GTK_UI_MANAGER_MENUITEM
)
1696 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Chinese", CS_EUC_TW
, "View/Encoding/Chinese/"CS_EUC_TW
, GTK_UI_MANAGER_MENUITEM
)
1698 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Korean", "View/Encoding/Korean", GTK_UI_MANAGER_MENU
)
1699 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Korean", CS_EUC_KR
, "View/Encoding/Korean/"CS_EUC_KR
, GTK_UI_MANAGER_MENUITEM
)
1700 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Korean", CS_ISO_2022_KR
, "View/Encoding/Korean/"CS_ISO_2022_KR
, GTK_UI_MANAGER_MENUITEM
)
1702 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding", "Thai", "View/Encoding/Thai", GTK_UI_MANAGER_MENU
)
1703 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Thai", CS_TIS_620
, "View/Encoding/Thai/"CS_TIS_620
, GTK_UI_MANAGER_MENUITEM
)
1704 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Encoding/Thai", CS_WINDOWS_874
, "View/Encoding/Thai/"CS_WINDOWS_874
, GTK_UI_MANAGER_MENUITEM
)
1706 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Decode", "View/Decode", GTK_UI_MANAGER_MENU
)
1707 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Decode", "AutoDetect", "View/Decode/AutoDetect", GTK_UI_MANAGER_MENUITEM
)
1708 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Decode", "Separator1", "View/Decode/---", GTK_UI_MANAGER_SEPARATOR
)
1709 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Decode", "8bit", "View/Decode/8bit", GTK_UI_MANAGER_MENUITEM
)
1710 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Decode", "QP", "View/Decode/QP", GTK_UI_MANAGER_MENUITEM
)
1711 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Decode", "B64", "View/Decode/B64", GTK_UI_MANAGER_MENUITEM
)
1712 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Decode", "Uuencode", "View/Decode/Uuencode", GTK_UI_MANAGER_MENUITEM
)
1713 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Separator5", "View/---", GTK_UI_MANAGER_SEPARATOR
)
1715 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "OpenNewWindow", "View/OpenNewWindow", GTK_UI_MANAGER_MENUITEM
)
1716 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "MessageSource", "View/MessageSource", GTK_UI_MANAGER_MENUITEM
)
1717 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "AllHeaders", "View/AllHeaders", GTK_UI_MANAGER_MENUITEM
)
1718 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Quotes", "View/Quotes", GTK_UI_MANAGER_MENU
)
1719 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Quotes", "CollapseAll", "View/Quotes/CollapseAll", GTK_UI_MANAGER_MENUITEM
)
1720 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Quotes", "Collapse2", "View/Quotes/Collapse2", GTK_UI_MANAGER_MENUITEM
)
1721 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Quotes", "Collapse3", "View/Quotes/Collapse3", GTK_UI_MANAGER_MENUITEM
)
1722 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Part", "View/Part", GTK_UI_MANAGER_MENU
)
1723 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Part", "AsText", "View/Part/AsText", GTK_UI_MANAGER_MENUITEM
)
1724 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Part", "Open", "View/Part/Open", GTK_UI_MANAGER_MENUITEM
)
1726 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View/Part", "OpenWith", "View/Part/OpenWith", GTK_UI_MANAGER_MENUITEM
)
1728 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "Separator8", "View/---", GTK_UI_MANAGER_SEPARATOR
)
1729 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/View", "UpdateSummary", "View/UpdateSummary", GTK_UI_MANAGER_MENUITEM
)
1732 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Receive", "Message/Receive", GTK_UI_MANAGER_MENU
)
1733 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Receive", "CurrentAccount", "Message/Receive/CurrentAccount", GTK_UI_MANAGER_MENUITEM
)
1734 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Receive", "AllAccounts", "Message/Receive/AllAccounts", GTK_UI_MANAGER_MENUITEM
)
1735 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Receive", "CancelReceiving", "Message/Receive/CancelReceiving", GTK_UI_MANAGER_MENUITEM
)
1736 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Receive", "Separator1", "Message/Receive/---", GTK_UI_MANAGER_SEPARATOR
)
1737 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Receive", "PlaceHolder", "Message/Receive/PlaceHolder", GTK_UI_MANAGER_MENUITEM
)
1738 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "SendQueue", "Message/SendQueue", GTK_UI_MANAGER_MENUITEM
)
1739 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "CancelSending", "Message/CancelSending", GTK_UI_MANAGER_MENUITEM
)
1740 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Separator1", "Message/---", GTK_UI_MANAGER_SEPARATOR
)
1742 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "ComposeEmail", "Message/ComposeEmail", GTK_UI_MANAGER_MENUITEM
)
1743 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "ComposeNews", "Message/ComposeNews", GTK_UI_MANAGER_MENUITEM
)
1744 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Reply", "Message/Reply", GTK_UI_MANAGER_MENUITEM
)
1745 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "ReplyTo", "Message/ReplyTo", GTK_UI_MANAGER_MENU
)
1746 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/ReplyTo", "All", "Message/ReplyTo/All", GTK_UI_MANAGER_MENUITEM
)
1747 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/ReplyTo", "Sender", "Message/ReplyTo/Sender", GTK_UI_MANAGER_MENUITEM
)
1748 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/ReplyTo", "List", "Message/ReplyTo/List", GTK_UI_MANAGER_MENUITEM
)
1749 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "FollowupReply", "Message/FollowupReply", GTK_UI_MANAGER_MENUITEM
)
1750 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Separator2", "Message/---", GTK_UI_MANAGER_SEPARATOR
)
1752 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Forward", "Message/Forward", GTK_UI_MANAGER_MENUITEM
)
1753 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "ForwardAtt", "Message/ForwardAtt", GTK_UI_MANAGER_MENUITEM
)
1754 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Redirect", "Message/Redirect", GTK_UI_MANAGER_MENUITEM
)
1755 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "MailingList", "Message/MailingList", GTK_UI_MANAGER_MENU
)
1756 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList", "Post", "Message/MailingList/Post", GTK_UI_MANAGER_MENU
)
1757 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList", "Help", "Message/MailingList/Help", GTK_UI_MANAGER_MENU
)
1758 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList", "Subscribe", "Message/MailingList/Subscribe", GTK_UI_MANAGER_MENU
)
1759 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList", "Unsubscribe", "Message/MailingList/Unsubscribe", GTK_UI_MANAGER_MENU
)
1760 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList", "ViewArchive", "Message/MailingList/ViewArchive", GTK_UI_MANAGER_MENU
)
1761 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList", "ContactOwner", "Message/MailingList/ContactOwner", GTK_UI_MANAGER_MENU
)
1762 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList/Post", "PlaceHolder", "Message/MailingList/Post/PlaceHolder", GTK_UI_MANAGER_MENUITEM
)
1763 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList/Help", "PlaceHolder", "Message/MailingList/Help/PlaceHolder", GTK_UI_MANAGER_MENUITEM
)
1764 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList/Subscribe", "PlaceHolder", "Message/MailingList/Subscribe/PlaceHolder", GTK_UI_MANAGER_MENUITEM
)
1765 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList/Unsubscribe", "PlaceHolder", "Message/MailingList/Unsubscribe/PlaceHolder", GTK_UI_MANAGER_MENUITEM
)
1766 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList/ViewArchive", "PlaceHolder", "Message/MailingList/ViewArchive/PlaceHolder", GTK_UI_MANAGER_MENUITEM
)
1767 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/MailingList/ContactOwner", "PlaceHolder", "Message/MailingList/ContactOwner/PlaceHolder", GTK_UI_MANAGER_MENUITEM
)
1768 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Separator3", "Message/---", GTK_UI_MANAGER_SEPARATOR
)
1770 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Move", "Message/Move", GTK_UI_MANAGER_MENUITEM
)
1771 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Copy", "Message/Copy", GTK_UI_MANAGER_MENUITEM
)
1772 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Trash", "Message/Trash", GTK_UI_MANAGER_MENUITEM
)
1773 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Delete", "Message/Delete", GTK_UI_MANAGER_MENUITEM
)
1774 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "TrashThread", "Message/TrashThread", GTK_UI_MANAGER_MENUITEM
)
1775 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "DeleteThread", "Message/DeleteThread", GTK_UI_MANAGER_MENUITEM
)
1776 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "CancelNews", "Message/CancelNews", GTK_UI_MANAGER_MENUITEM
)
1777 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Separator4", "Message/---", GTK_UI_MANAGER_SEPARATOR
)
1779 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Mark", "Message/Mark", GTK_UI_MANAGER_MENU
)
1780 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "Mark", "Message/Mark/Mark", GTK_UI_MANAGER_MENUITEM
)
1781 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "Unmark", "Message/Mark/Unmark", GTK_UI_MANAGER_MENUITEM
)
1782 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "Separator1", "Message/Mark/---", GTK_UI_MANAGER_SEPARATOR
)
1783 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "MarkRead", "Message/Mark/MarkRead", GTK_UI_MANAGER_MENUITEM
)
1784 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "MarkUnread", "Message/Mark/MarkUnread", GTK_UI_MANAGER_MENUITEM
)
1785 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "Separator2", "Message/Mark/---", GTK_UI_MANAGER_SEPARATOR
)
1786 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "MarkAllRead", "Message/Mark/MarkAllRead", GTK_UI_MANAGER_MENUITEM
)
1787 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "MarkAllUnread", "Message/Mark/MarkAllUnread", GTK_UI_MANAGER_MENUITEM
)
1788 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "Separator3", "Message/Mark/---", GTK_UI_MANAGER_SEPARATOR
)
1789 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "IgnoreThread", "Message/Mark/IgnoreThread", GTK_UI_MANAGER_MENUITEM
)
1790 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "UnignoreThread", "Message/Mark/UnignoreThread", GTK_UI_MANAGER_MENUITEM
)
1791 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "WatchThread", "Message/Mark/WatchThread", GTK_UI_MANAGER_MENUITEM
)
1792 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "UnwatchThread", "Message/Mark/UnwatchThread", GTK_UI_MANAGER_MENUITEM
)
1793 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "Separator4", "Message/Mark/---", GTK_UI_MANAGER_SEPARATOR
)
1794 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "MarkSpam", "Message/Mark/MarkSpam", GTK_UI_MANAGER_MENUITEM
)
1795 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "MarkHam", "Message/Mark/MarkHam", GTK_UI_MANAGER_MENUITEM
)
1796 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "Separator5", "Message/Mark/---", GTK_UI_MANAGER_SEPARATOR
)
1797 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "Lock", "Message/Mark/Lock", GTK_UI_MANAGER_MENUITEM
)
1798 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message/Mark", "Unlock", "Message/Mark/Unlock", GTK_UI_MANAGER_MENUITEM
)
1799 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "ColorLabel", "Message/ColorLabel", GTK_UI_MANAGER_MENUITEM
)
1800 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Tags", "Message/Tags", GTK_UI_MANAGER_MENUITEM
)
1801 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Separator5", "Message/---", GTK_UI_MANAGER_SEPARATOR
)
1803 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Reedit", "Message/Reedit", GTK_UI_MANAGER_MENUITEM
)
1804 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "Separator6", "Message/---", GTK_UI_MANAGER_SEPARATOR
)
1805 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Message", "CheckSignature", "Message/CheckSignature", GTK_UI_MANAGER_MENUITEM
)
1808 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "AddressBook", "Tools/AddressBook", GTK_UI_MANAGER_MENUITEM
)
1809 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "AddSenderToAB", "Tools/AddSenderToAB", GTK_UI_MANAGER_MENUITEM
)
1810 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "CollectAddresses", "Tools/CollectAddresses", GTK_UI_MANAGER_MENU
)
1811 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/CollectAddresses", "FromFolder", "Tools/CollectAddresses/FromFolder", GTK_UI_MANAGER_MENUITEM
)
1812 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/CollectAddresses", "FromSelected", "Tools/CollectAddresses/FromSelected", GTK_UI_MANAGER_MENUITEM
)
1813 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Separator1", "Tools/---", GTK_UI_MANAGER_SEPARATOR
)
1815 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "FilterFolder", "Tools/FilterFolder", GTK_UI_MANAGER_MENUITEM
)
1816 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "FilterSelected", "Tools/FilterSelected", GTK_UI_MANAGER_MENUITEM
)
1817 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "RunProcessing", "Tools/RunProcessing", GTK_UI_MANAGER_MENUITEM
)
1818 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "CreateFilterRule", "Tools/CreateFilterRule", GTK_UI_MANAGER_MENU
)
1819 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/CreateFilterRule", "Automatically", "Tools/CreateFilterRule/Automatically", GTK_UI_MANAGER_MENUITEM
)
1820 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/CreateFilterRule", "ByFrom", "Tools/CreateFilterRule/ByFrom", GTK_UI_MANAGER_MENUITEM
)
1821 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/CreateFilterRule", "ByTo", "Tools/CreateFilterRule/ByTo", GTK_UI_MANAGER_MENUITEM
)
1822 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/CreateFilterRule", "BySubject", "Tools/CreateFilterRule/BySubject", GTK_UI_MANAGER_MENUITEM
)
1824 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "CreateProcessingRule", "Tools/CreateProcessingRule", GTK_UI_MANAGER_MENU
)
1825 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/CreateProcessingRule", "Automatically", "Tools/CreateProcessingRule/Automatically", GTK_UI_MANAGER_MENUITEM
)
1826 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/CreateProcessingRule", "ByFrom", "Tools/CreateProcessingRule/ByFrom", GTK_UI_MANAGER_MENUITEM
)
1827 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/CreateProcessingRule", "ByTo", "Tools/CreateProcessingRule/ByTo", GTK_UI_MANAGER_MENUITEM
)
1828 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/CreateProcessingRule", "BySubject", "Tools/CreateProcessingRule/BySubject", GTK_UI_MANAGER_MENUITEM
)
1829 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Separator2", "Tools/---", GTK_UI_MANAGER_SEPARATOR
)
1831 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "ListUrls", "Tools/ListUrls", GTK_UI_MANAGER_MENUITEM
)
1832 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Separator3", "Tools/---", GTK_UI_MANAGER_SEPARATOR
)
1834 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Actions", "Tools/Actions", GTK_UI_MANAGER_MENU
)
1835 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/Actions", "PlaceHolder", "Tools/Actions/PlaceHolder", GTK_UI_MANAGER_MENUITEM
)
1836 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Separator4", "Tools/---", GTK_UI_MANAGER_SEPARATOR
)
1838 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "CheckNewMessages", "Tools/CheckNewMessages", GTK_UI_MANAGER_MENUITEM
)
1839 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "DeleteDuplicates", "Tools/DeleteDuplicates", GTK_UI_MANAGER_MENU
)
1840 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/DeleteDuplicates", "SelFolder", "Tools/DeleteDuplicates/SelFolder", GTK_UI_MANAGER_MENUITEM
)
1841 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools/DeleteDuplicates", "AllFolders", "Tools/DeleteDuplicates/AllFolders", GTK_UI_MANAGER_MENUITEM
)
1842 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Separator5", "Tools/---", GTK_UI_MANAGER_SEPARATOR
)
1844 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Execute", "Tools/Execute", GTK_UI_MANAGER_MENUITEM
)
1845 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Expunge", "Tools/Expunge", GTK_UI_MANAGER_MENUITEM
)
1847 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Separator6", "Tools/---", GTK_UI_MANAGER_SEPARATOR
)
1848 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "SSLCertificates", "Tools/SSLCertificates", GTK_UI_MANAGER_MENUITEM
)
1850 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Separator7", "Tools/---", GTK_UI_MANAGER_SEPARATOR
)
1851 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "FilteringLog", "Tools/FilteringLog", GTK_UI_MANAGER_MENUITEM
)
1852 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "NetworkLog", "Tools/NetworkLog", GTK_UI_MANAGER_MENUITEM
)
1854 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "DebugLog", "Tools/DebugLog", GTK_UI_MANAGER_MENUITEM
)
1856 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Separator8", "Tools/---", GTK_UI_MANAGER_SEPARATOR
)
1857 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "ForgetSessionPasswords", "Tools/ForgetSessionPasswords", GTK_UI_MANAGER_MENUITEM
)
1858 #ifndef PASSWORD_CRYPTO_OLD
1859 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "ForgetMasterPassphrase", "Tools/ForgetMasterPassphrase", GTK_UI_MANAGER_MENUITEM
)
1861 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Tools", "Separator9", "Tools/---", GTK_UI_MANAGER_SEPARATOR
)
1863 /* Configuration menu */
1864 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "ChangeAccount", "Configuration/ChangeAccount", GTK_UI_MANAGER_MENU
)
1865 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration/ChangeAccount", "PlaceHolder", "Configuration/ChangeAccount/PlaceHolder", GTK_UI_MANAGER_MENUITEM
)
1866 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "AccountPrefs", "Configuration/AccountPrefs", GTK_UI_MANAGER_MENUITEM
)
1867 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "CreateAccount", "Configuration/CreateAccount", GTK_UI_MANAGER_MENUITEM
)
1868 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "EditAccounts", "Configuration/EditAccounts", GTK_UI_MANAGER_MENUITEM
)
1869 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "Separator1", "Configuration/---", GTK_UI_MANAGER_SEPARATOR
)
1871 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "Preferences", "Configuration/Preferences", GTK_UI_MANAGER_MENUITEM
)
1872 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "PreProcessing", "Configuration/PreProcessing", GTK_UI_MANAGER_MENUITEM
)
1873 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "PostProcessing", "Configuration/PostProcessing", GTK_UI_MANAGER_MENUITEM
)
1874 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "Filtering", "Configuration/Filtering", GTK_UI_MANAGER_MENUITEM
)
1875 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "Templates", "Configuration/Templates", GTK_UI_MANAGER_MENUITEM
)
1876 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "Actions", "Configuration/Actions", GTK_UI_MANAGER_MENUITEM
)
1877 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "Tags", "Configuration/Tags", GTK_UI_MANAGER_MENUITEM
)
1879 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "Separator2", "Configuration/---", GTK_UI_MANAGER_SEPARATOR
)
1880 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Configuration", "Plugins", "Configuration/Plugins", GTK_UI_MANAGER_MENUITEM
)
1883 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Help", "Manual", "Help/Manual", GTK_UI_MANAGER_MENUITEM
)
1884 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Help", "FAQ", "Help/FAQ", GTK_UI_MANAGER_MENUITEM
)
1885 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Help", "IconLegend", "Help/IconLegend", GTK_UI_MANAGER_MENUITEM
)
1887 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Help", "Separator1", "Help/---", GTK_UI_MANAGER_SEPARATOR
)
1888 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Help", "SetDefault", "Help/SetDefault", GTK_UI_MANAGER_MENUITEM
)
1890 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Help", "Separator2", "Help/---", GTK_UI_MANAGER_SEPARATOR
)
1891 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/Menu/Help", "About", "Help/About", GTK_UI_MANAGER_MENUITEM
)
1894 menubar
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu");
1895 if (prefs_common
.mainwin_menubar
)
1896 gtk_widget_show_all(menubar
);
1898 gtk_widget_hide(menubar
);
1899 gtk_window_add_accel_group(GTK_WINDOW(window
), gtk_ui_manager_get_accel_group(mainwin
->ui_manager
));
1901 /* Create a menu container for the different popup menus we
1902 * will be adding from other UI elements. */
1903 MENUITEM_ADDUI_MANAGER(mainwin
->ui_manager
, "/", "Menus", "Menus", GTK_UI_MANAGER_MENUBAR
)
1905 gtk_box_pack_start(GTK_BOX(vbox
), menubar
, FALSE
, TRUE
, 0);
1907 if (prefs_common
.toolbar_detachable
) {
1908 handlebox
= gtk_handle_box_new();
1909 gtk_widget_show(handlebox
);
1910 gtk_box_pack_start(GTK_BOX(vbox
), handlebox
, FALSE
, FALSE
, 0);
1911 g_signal_connect(G_OBJECT(handlebox
), "child_attached",
1912 G_CALLBACK(toolbar_child_attached
), mainwin
);
1913 g_signal_connect(G_OBJECT(handlebox
), "child_detached",
1914 G_CALLBACK(toolbar_child_detached
), mainwin
);
1916 handlebox
= gtk_hbox_new(FALSE
, 0);
1917 gtk_widget_show(handlebox
);
1918 gtk_box_pack_start(GTK_BOX(vbox
), handlebox
, FALSE
, FALSE
, 0);
1920 /* link window to mainwin->window to avoid gdk warnings */
1921 mainwin
->window
= window
;
1922 mainwin_list
= g_list_append(mainwin_list
, mainwin
);
1924 mainwin
->toolbar
= toolbar_create(TOOLBAR_MAIN
,
1927 toolbar_set_learn_button
1931 /* vbox that contains body */
1932 vbox_body
= gtk_vbox_new(FALSE
, BORDER_WIDTH
);
1933 gtk_widget_show(vbox_body
);
1934 gtk_container_set_border_width(GTK_CONTAINER(vbox_body
), BORDER_WIDTH
);
1935 gtk_box_pack_start(GTK_BOX(vbox
), vbox_body
, TRUE
, TRUE
, 0);
1937 #ifndef GENERIC_UMPC
1938 hbox_stat
= gtk_hbox_new(FALSE
, 2);
1939 gtk_box_pack_end(GTK_BOX(vbox_body
), hbox_stat
, FALSE
, FALSE
, 0);
1941 warning_icon
= gtk_image_new_from_stock
1942 (GTK_STOCK_DIALOG_WARNING
, GTK_ICON_SIZE_SMALL_TOOLBAR
);
1943 warning_btn
= gtk_event_box_new();
1944 gtk_event_box_set_visible_window(GTK_EVENT_BOX(warning_btn
), FALSE
);
1946 mainwin
->warning_btn
= warning_btn
;
1948 g_signal_connect(G_OBJECT(warning_btn
), "button-press-event",
1949 G_CALLBACK(warning_icon_pressed
),
1950 (gpointer
) mainwin
);
1951 g_signal_connect(G_OBJECT(warning_btn
), "motion-notify-event",
1952 G_CALLBACK(warning_visi_notify
), mainwin
);
1953 g_signal_connect(G_OBJECT(warning_btn
), "leave-notify-event",
1954 G_CALLBACK(warning_leave_notify
), mainwin
);
1955 g_signal_connect(G_OBJECT(warning_btn
), "enter-notify-event",
1956 G_CALLBACK(warning_enter_notify
), mainwin
);
1958 gtk_container_add (GTK_CONTAINER(warning_btn
), warning_icon
);
1960 CLAWS_SET_TIP(warning_btn
,
1961 _("Some error(s) happened. Click here to view log."));
1962 gtk_box_pack_start(GTK_BOX(hbox_stat
), warning_btn
, FALSE
, FALSE
, 0);
1964 statusbar
= statusbar_create();
1965 gtk_box_pack_start(GTK_BOX(hbox_stat
), statusbar
, TRUE
, TRUE
, 0);
1967 progressbar
= gtk_progress_bar_new();
1968 gtk_widget_set_size_request(progressbar
, 120, 1);
1969 gtk_box_pack_start(GTK_BOX(hbox_stat
), progressbar
, FALSE
, FALSE
, 0);
1971 online_pixmap
= stock_pixmap_widget(STOCK_PIXMAP_ONLINE
);
1972 offline_pixmap
= stock_pixmap_widget(STOCK_PIXMAP_OFFLINE
);
1973 online_switch
= gtk_button_new ();
1974 gtk_widget_set_can_focus(online_switch
, FALSE
);
1975 CLAWS_SET_TIP(online_switch
,
1976 _("You are online. Click the icon to go offline"));
1977 offline_switch
= gtk_button_new ();
1978 CLAWS_SET_TIP(offline_switch
,
1979 _("You are offline. Click the icon to go online"));
1980 gtk_container_add (GTK_CONTAINER(online_switch
), online_pixmap
);
1981 gtk_button_set_relief (GTK_BUTTON(online_switch
), GTK_RELIEF_NONE
);
1982 g_signal_connect (G_OBJECT(online_switch
), "clicked", G_CALLBACK(online_switch_clicked
), mainwin
);
1983 gtk_box_pack_start (GTK_BOX(hbox_stat
), online_switch
, FALSE
, FALSE
, 0);
1984 gtk_container_add (GTK_CONTAINER(offline_switch
), offline_pixmap
);
1985 gtk_button_set_relief (GTK_BUTTON(offline_switch
), GTK_RELIEF_NONE
);
1986 g_signal_connect (G_OBJECT(offline_switch
), "clicked", G_CALLBACK(online_switch_clicked
), mainwin
);
1987 gtk_box_pack_start (GTK_BOX(hbox_stat
), offline_switch
, FALSE
, FALSE
, 0);
1989 statuslabel
= gtk_label_new("");
1990 gtk_box_pack_start(GTK_BOX(hbox_stat
), statuslabel
, FALSE
, FALSE
, 0);
1992 ac_button
= gtk_button_new();
1993 CLAWS_SET_TIP(ac_button
, _("Select account"));
1994 gtk_widget_set_can_focus(ac_button
, FALSE
);
1995 gtk_widget_set_size_request(ac_button
, -1, 0);
1996 gtk_box_pack_end(GTK_BOX(hbox_stat
), ac_button
, FALSE
, FALSE
, 0);
1997 g_signal_connect(G_OBJECT(ac_button
), "button_press_event",
1998 G_CALLBACK(ac_label_button_pressed
), mainwin
);
2000 ac_label
= gtk_label_new("");
2001 gtk_container_add(GTK_CONTAINER(ac_button
), ac_label
);
2003 gtk_widget_show_all(hbox_stat
);
2005 gtk_widget_hide(offline_switch
);
2006 gtk_widget_hide(progressbar
);
2007 gtk_widget_hide(warning_btn
);
2009 online_switch
= gtk_button_new ();
2010 offline_switch
= gtk_button_new ();
2011 g_signal_connect (G_OBJECT(online_switch
), "clicked", G_CALLBACK(online_switch_clicked
), mainwin
);
2012 g_signal_connect (G_OBJECT(offline_switch
), "clicked", G_CALLBACK(online_switch_clicked
), mainwin
);
2015 mainwin
->folderview
= folderview
= folderview_create(mainwin
);
2016 mainwin
->summaryview
= summaryview
= summary_create(mainwin
);
2017 mainwin
->messageview
= messageview
= messageview_create(mainwin
);
2019 /* init log instances data before creating log views */
2020 set_log_title(LOG_PROTOCOL
, _("Network log"));
2021 set_log_prefs(LOG_PROTOCOL
,
2022 &prefs_common
.logwin_width
,
2023 &prefs_common
.logwin_height
);
2024 set_log_title(LOG_DEBUG_FILTERING
, _("Filtering/Processing debug log"));
2025 set_log_prefs(LOG_DEBUG_FILTERING
,
2026 &prefs_common
.filtering_debugwin_width
,
2027 &prefs_common
.filtering_debugwin_height
);
2029 /* setup log windows */
2030 mainwin
->logwin
= log_window_create(LOG_PROTOCOL
);
2031 log_window_init(mainwin
->logwin
);
2033 mainwin
->filtering_debugwin
= log_window_create(LOG_DEBUG_FILTERING
);
2034 log_window_set_clipping(mainwin
->logwin
,
2035 prefs_common
.cliplog
,
2036 prefs_common
.loglength
);
2038 log_window_init(mainwin
->filtering_debugwin
);
2039 log_window_set_clipping(mainwin
->filtering_debugwin
,
2040 prefs_common
.filtering_debug_cliplog
,
2041 prefs_common
.filtering_debug_loglength
);
2042 if (prefs_common
.enable_filtering_debug
)
2043 log_message(LOG_DEBUG_FILTERING
, _("filtering log enabled\n"));
2045 log_message(LOG_DEBUG_FILTERING
, _("filtering log disabled\n"));
2047 folderview
->mainwin
= mainwin
;
2048 folderview
->summaryview
= summaryview
;
2050 summaryview
->mainwin
= mainwin
;
2051 summaryview
->folderview
= folderview
;
2052 summaryview
->messageview
= messageview
;
2053 summaryview
->window
= window
;
2055 mainwin
->vbox
= vbox
;
2056 mainwin
->menubar
= menubar
;
2057 mainwin
->handlebox
= handlebox
;
2058 mainwin
->vbox_body
= vbox_body
;
2059 mainwin
->online_switch
= online_switch
;
2060 mainwin
->offline_switch
= offline_switch
;
2061 #ifndef GENERIC_UMPC
2062 messageview
->statusbar
= statusbar
;
2063 mainwin
->statusbar
= statusbar
;
2064 mainwin
->hbox_stat
= hbox_stat
;
2065 mainwin
->progressbar
= progressbar
;
2066 mainwin
->statuslabel
= statuslabel
;
2067 mainwin
->online_pixmap
= online_pixmap
;
2068 mainwin
->offline_pixmap
= offline_pixmap
;
2069 mainwin
->ac_button
= ac_button
;
2070 mainwin
->ac_label
= ac_label
;
2071 /* set context IDs for status bar */
2072 mainwin
->mainwin_cid
= gtk_statusbar_get_context_id
2073 (GTK_STATUSBAR(statusbar
), "Main Window");
2074 mainwin
->folderview_cid
= gtk_statusbar_get_context_id
2075 (GTK_STATUSBAR(statusbar
), "Folder View");
2076 mainwin
->summaryview_cid
= gtk_statusbar_get_context_id
2077 (GTK_STATUSBAR(statusbar
), "Summary View");
2078 mainwin
->messageview_cid
= gtk_statusbar_get_context_id
2079 (GTK_STATUSBAR(statusbar
), "Message View");
2080 messageview
->statusbar_cid
= mainwin
->messageview_cid
;
2083 messageview
->statusbar
= NULL
;
2084 mainwin
->statusbar
= NULL
;
2085 mainwin
->hbox_stat
= NULL
;
2086 /* mainwin->progressbar is set in toolbar.c */
2087 mainwin
->statuslabel
= NULL
;
2088 mainwin
->online_pixmap
= NULL
;
2089 mainwin
->offline_pixmap
= NULL
;
2090 mainwin
->ac_button
= NULL
;
2091 mainwin
->ac_label
= NULL
;
2094 /* allocate colors for summary view and folder view */
2095 summaryview
->color_marked
.red
= summaryview
->color_marked
.green
= 0;
2096 summaryview
->color_marked
.blue
= (guint16
)65535;
2098 summaryview
->color_dim
.red
= summaryview
->color_dim
.green
=
2099 summaryview
->color_dim
.blue
= COLOR_DIM
;
2101 gtkut_convert_int_to_gdk_color(prefs_common
.color
[COL_NEW
],
2102 &folderview
->color_new
);
2104 gtkut_convert_int_to_gdk_color(prefs_common
.color
[COL_TGT_FOLDER
],
2105 &folderview
->color_op
);
2107 color
[0] = summaryview
->color_marked
;
2108 color
[1] = summaryview
->color_dim
;
2109 color
[2] = folderview
->color_new
;
2110 color
[3] = folderview
->color_op
;
2112 colormap
= gdk_drawable_get_colormap(gtk_widget_get_window(window
));
2113 gdk_colormap_alloc_colors(colormap
, color
, 4, FALSE
, TRUE
, success
);
2114 for (i
= 0; i
< 4; i
++) {
2115 if (success
[i
] == FALSE
)
2116 g_warning("MainWindow: color allocation %d failed", i
);
2119 debug_print("done.\n");
2121 messageview
->visible
= prefs_common
.msgview_visible
;
2123 main_window_set_widgets(mainwin
, prefs_common
.layout_mode
);
2125 g_signal_connect(G_OBJECT(window
), "size_allocate",
2126 G_CALLBACK(main_window_size_allocate_cb
),
2129 /* set menu items */
2130 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Encoding/"CS_AUTO
, TRUE
);
2133 switch (prefs_common
.toolbar_style
) {
2135 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/View/ShowHide/Toolbar/Hide");
2138 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/View/ShowHide/Toolbar/IconOnly");
2141 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/View/ShowHide/Toolbar/TextOnly");
2144 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/View/ShowHide/Toolbar/TextBelowIcon");
2146 case TOOLBAR_BOTH_HORIZ
:
2147 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/View/ShowHide/Toolbar/TextBesideIcon");
2149 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem
), TRUE
);
2151 toolbar_set_style(mainwin
->toolbar
->toolbar
,
2153 prefs_common
.toolbar_style
);
2154 #ifndef GENERIC_UMPC
2155 gtk_widget_hide(mainwin
->hbox_stat
);
2156 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/View/ShowHide/StatusBar");
2157 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem
),
2158 prefs_common
.show_statusbar
);
2160 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/View/ShowHide/ColumnHeaders");
2161 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem
),
2162 prefs_common
.show_col_headers
);
2163 /* set account selection menu */
2164 ac_menu
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Configuration/ChangeAccount");
2165 mainwin
->ac_menu
= ac_menu
;
2167 toolbar_main_set_sensitive(mainwin
);
2169 /* create actions menu */
2170 main_window_update_actions_menu(mainwin
);
2172 main_create_mailing_list_menu (mainwin
, NULL
);
2174 /* attach accel groups to main window */
2175 #define ADD_MENU_ACCEL_GROUP_TO_WINDOW(menu,win) \
2176 gtk_window_add_accel_group \
2178 gtk_ui_manager_get_accel_group(gtkut_ui_manager()));
2180 ADD_MENU_ACCEL_GROUP_TO_WINDOW(summaryview
->popupmenu
, mainwin
->window
);
2182 g_signal_connect(G_OBJECT(window
), "window_state_event",
2183 G_CALLBACK(mainwindow_state_event_cb
), mainwin
);
2184 g_signal_connect(G_OBJECT(window
), "visibility_notify_event",
2185 G_CALLBACK(mainwindow_visibility_event_cb
), mainwin
);
2186 gtk_widget_add_events(GTK_WIDGET(window
), GDK_VISIBILITY_NOTIFY_MASK
);
2188 if (prefs_common
.layout_mode
== VERTICAL_LAYOUT
||
2189 prefs_common
.layout_mode
== SMALL_LAYOUT
) {
2190 summary_relayout(mainwin
->summaryview
);
2192 summary_update_unread(mainwin
->summaryview
, NULL
);
2194 /* initialize views */
2195 folderview_init(folderview
);
2196 summary_init(summaryview
);
2197 messageview_init(messageview
);
2199 sslcertwindow_register_hook();
2201 mainwin
->lock_count
= 0;
2202 mainwin
->menu_lock_count
= 0;
2203 mainwin
->cursor_count
= 0;
2205 mainwin
->progressindicator_hook
=
2206 hooks_register_hook(PROGRESSINDICATOR_HOOKLIST
, mainwindow_progressindicator_hook
, mainwin
);
2209 watch_cursor
= gdk_cursor_new(GDK_WATCH
);
2211 hand_cursor
= gdk_cursor_new(GDK_HAND2
);
2213 /* init work_offline */
2214 if (prefs_common
.work_offline
)
2215 online_switch_clicked (GTK_BUTTON(online_switch
), mainwin
);
2217 mainwindow_colorlabel_menu_create(mainwin
, FALSE
);
2218 mainwindow_tags_menu_create(mainwin
, FALSE
);
2220 if (prefs_common
.mainwin_fullscreen
) {
2221 cm_toggle_menu_set_active_full(mainwin
->ui_manager
,
2222 "Menu/View/FullScreen",
2225 if (prefs_common
.mainwin_menubar
)
2226 cm_toggle_menu_set_active_full(mainwin
->ui_manager
,"Menu/View/ShowHide/MenuBar", TRUE
);
2231 void main_window_update_actions_menu(MainWindow
*mainwin
)
2233 action_update_mainwin_menu(mainwin
->ui_manager
, "/Menu/Tools/Actions", mainwin
);
2236 void main_window_cursor_wait(MainWindow
*mainwin
)
2239 if (mainwin
->cursor_count
== 0) {
2240 gdk_window_set_cursor(gtk_widget_get_window(mainwin
->window
), watch_cursor
);
2241 textview_cursor_wait(mainwin
->messageview
->mimeview
->textview
);
2244 mainwin
->cursor_count
++;
2249 void main_window_cursor_normal(MainWindow
*mainwin
)
2251 if (mainwin
->cursor_count
)
2252 mainwin
->cursor_count
--;
2254 if (mainwin
->cursor_count
== 0) {
2255 gdk_window_set_cursor(gtk_widget_get_window(mainwin
->window
), NULL
);
2256 textview_cursor_normal(mainwin
->messageview
->mimeview
->textview
);
2261 /* lock / unlock the user-interface */
2262 void main_window_lock(MainWindow
*mainwin
)
2264 if (mainwin
->lock_count
== 0 && mainwin
->ac_button
)
2265 gtk_widget_set_sensitive(mainwin
->ac_button
, FALSE
);
2267 mainwin
->lock_count
++;
2269 main_window_set_menu_sensitive(mainwin
);
2270 toolbar_main_set_sensitive(mainwin
);
2273 void main_window_unlock(MainWindow
*mainwin
)
2275 if (mainwin
->lock_count
)
2276 mainwin
->lock_count
--;
2278 main_window_set_menu_sensitive(mainwin
);
2279 toolbar_main_set_sensitive(mainwin
);
2281 if (mainwin
->lock_count
== 0 && mainwin
->ac_button
)
2282 gtk_widget_set_sensitive(mainwin
->ac_button
, TRUE
);
2285 static void main_window_menu_callback_block(MainWindow
*mainwin
)
2287 mainwin
->menu_lock_count
++;
2290 static void main_window_menu_callback_unblock(MainWindow
*mainwin
)
2292 if (mainwin
->menu_lock_count
)
2293 mainwin
->menu_lock_count
--;
2296 static guint prefs_tag
= 0;
2298 void main_window_reflect_prefs_all(void)
2300 main_window_reflect_prefs_all_real(FALSE
);
2303 static gboolean
reflect_prefs_timeout_cb(gpointer data
)
2305 gboolean pixmap_theme_changed
= GPOINTER_TO_INT(data
);
2307 MainWindow
*mainwin
;
2308 #ifndef GENERIC_UMPC
2311 for (cur
= mainwin_list
; cur
!= NULL
; cur
= cur
->next
) {
2312 mainwin
= (MainWindow
*)cur
->data
;
2314 main_window_show_cur_account(mainwin
);
2315 main_window_set_menu_sensitive(mainwin
);
2316 toolbar_main_set_sensitive(mainwin
);
2319 if (pixmap_theme_changed
) {
2320 toolbar_update(TOOLBAR_MAIN
, mainwin
);
2321 messageview_reflect_prefs_pixmap_theme();
2322 compose_reflect_prefs_pixmap_theme();
2323 folderview_reinit_fonts(mainwin
->folderview
);
2324 summary_reflect_prefs_pixmap_theme(mainwin
->summaryview
);
2325 foldersel_reflect_prefs_pixmap_theme();
2326 #ifndef USE_ALT_ADDRBOOK
2327 addressbook_reflect_prefs_pixmap_theme();
2329 #ifndef GENERIC_UMPC
2330 pixmap
= stock_pixmap_widget(STOCK_PIXMAP_ONLINE
);
2331 gtk_container_remove(GTK_CONTAINER(mainwin
->online_switch
),
2332 mainwin
->online_pixmap
);
2333 gtk_container_add (GTK_CONTAINER(mainwin
->online_switch
), pixmap
);
2334 gtk_widget_show(pixmap
);
2335 mainwin
->online_pixmap
= pixmap
;
2336 pixmap
= stock_pixmap_widget(STOCK_PIXMAP_OFFLINE
);
2337 gtk_container_remove(GTK_CONTAINER(mainwin
->offline_switch
),
2338 mainwin
->offline_pixmap
);
2339 gtk_container_add (GTK_CONTAINER(mainwin
->offline_switch
), pixmap
);
2340 gtk_widget_show(pixmap
);
2341 mainwin
->offline_pixmap
= pixmap
;
2343 hooks_invoke(THEME_CHANGED_HOOKLIST
, NULL
);
2346 headerview_set_font(mainwin
->messageview
->headerview
);
2347 headerview_set_visibility(mainwin
->messageview
->headerview
,
2348 prefs_common
.display_header_pane
);
2349 textview_reflect_prefs(mainwin
->messageview
->mimeview
->textview
);
2350 folderview_reflect_prefs();
2351 summary_reflect_prefs();
2352 #ifndef GENERIC_UMPC
2353 summary_redisplay_msg(mainwin
->summaryview
);
2355 if (prefs_common
.layout_mode
== SMALL_LAYOUT
) {
2356 if (mainwin
->in_folder
) {
2357 mainwindow_enter_folder(mainwin
);
2359 mainwindow_exit_folder(mainwin
);
2367 void main_window_reflect_prefs_all_now(void)
2369 reflect_prefs_timeout_cb(GINT_TO_POINTER(FALSE
));
2372 void main_window_reflect_prefs_custom_colors(MainWindow
*mainwin
)
2375 GList
*children
, *cur
;
2377 /* re-create colorlabel submenu */
2378 menu
= GTK_MENU_SHELL(mainwin
->colorlabel_menu
);
2379 cm_return_if_fail(menu
!= NULL
);
2381 /* clear items. get item pointers. */
2382 children
= gtk_container_get_children(GTK_CONTAINER(menu
));
2383 for (cur
= children
; cur
!= NULL
&& cur
->data
!= NULL
; cur
= cur
->next
) {
2384 g_signal_handlers_disconnect_matched
2385 (gtk_ui_manager_get_accel_group(mainwin
->ui_manager
),
2386 G_SIGNAL_MATCH_DATA
|G_SIGNAL_MATCH_FUNC
,
2387 0, 0, NULL
, mainwin_accel_changed_cb
, cur
->data
);
2388 gtk_menu_item_set_submenu(GTK_MENU_ITEM(cur
->data
), NULL
);
2390 g_list_free(children
);
2391 mainwindow_colorlabel_menu_create(mainwin
, TRUE
);
2392 summary_reflect_prefs_custom_colors(mainwin
->summaryview
);
2393 folderview_reinit_fonts(mainwin
->folderview
);
2396 static gint tags_tag
= 0;
2397 static gboolean
main_window_reflect_tags_changes_real(gpointer data
)
2400 GList
*children
, *cur
;
2401 MainWindow
*mainwin
= (MainWindow
*)data
;
2403 if (summary_is_locked(mainwin
->summaryview
)) {
2406 /* re-create tags submenu */
2407 menu
= GTK_MENU_SHELL(mainwin
->tags_menu
);
2408 cm_return_val_if_fail(menu
!= NULL
, FALSE
);
2410 /* clear items. get item pointers. */
2411 children
= gtk_container_get_children(GTK_CONTAINER(menu
));
2412 for (cur
= children
; cur
!= NULL
&& cur
->data
!= NULL
; cur
= cur
->next
) {
2413 gtk_menu_item_set_submenu(GTK_MENU_ITEM(cur
->data
), NULL
);
2415 g_list_free(children
);
2416 mainwindow_tags_menu_create(mainwin
, TRUE
);
2417 summary_reflect_tags_changes(mainwin
->summaryview
);
2423 void main_window_reflect_tags_changes(MainWindow
*mainwin
)
2425 if (tags_tag
== 0) {
2426 tags_tag
= g_timeout_add(100, main_window_reflect_tags_changes_real
,
2431 void main_window_reflect_prefs_all_real(gboolean pixmap_theme_changed
)
2433 if (prefs_tag
== 0) {
2434 prefs_tag
= g_timeout_add(100, reflect_prefs_timeout_cb
,
2435 GINT_TO_POINTER(pixmap_theme_changed
));
2439 void main_window_set_summary_column(void)
2442 MainWindow
*mainwin
;
2444 for (cur
= mainwin_list
; cur
!= NULL
; cur
= cur
->next
) {
2445 mainwin
= (MainWindow
*)cur
->data
;
2446 summary_set_column_order(mainwin
->summaryview
);
2450 void main_window_set_folder_column(void)
2453 MainWindow
*mainwin
;
2455 for (cur
= mainwin_list
; cur
!= NULL
; cur
= cur
->next
) {
2456 mainwin
= (MainWindow
*)cur
->data
;
2457 folderview_set_column_order(mainwin
->folderview
);
2461 static void main_window_set_account_selector_menu(MainWindow
*mainwin
,
2462 GList
*account_list
)
2465 GtkWidget
*menuitem
;
2466 PrefsAccount
*ac_prefs
;
2470 menu
= gtk_menu_new();
2471 gtk_menu_set_accel_group (GTK_MENU (menu
),
2472 gtk_ui_manager_get_accel_group(mainwin
->ui_manager
));
2474 for (cur_ac
= account_list
; cur_ac
!= NULL
; cur_ac
= cur_ac
->next
) {
2475 ac_prefs
= (PrefsAccount
*)cur_ac
->data
;
2477 menuitem
= gtk_menu_item_new_with_label
2478 (ac_prefs
->account_name
2479 ? ac_prefs
->account_name
: _("Untitled"));
2480 gtk_widget_show(menuitem
);
2481 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), menuitem
);
2482 g_signal_connect(G_OBJECT(menuitem
), "activate",
2483 G_CALLBACK(account_selector_menu_cb
),
2485 accel_path
= g_strconcat("<Actions>/Menu/Configuration/ChangeAccount/",(ac_prefs
->account_name
2486 ? ac_prefs
->account_name
: _("Untitled")), NULL
);
2487 gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem
), accel_path
);
2490 gtk_menu_item_set_submenu(GTK_MENU_ITEM(mainwin
->ac_menu
), menu
);
2493 static void main_window_set_account_receive_menu(MainWindow
*mainwin
,
2494 GList
*account_list
)
2496 GList
*children
, *child
;
2498 GtkWidget
*menuitem
;
2499 PrefsAccount
*ac_prefs
;
2501 menu
= gtk_menu_item_get_submenu(GTK_MENU_ITEM(
2502 gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/Receive")));
2504 /* search for separator */
2505 children
= gtk_container_get_children(GTK_CONTAINER(menu
));
2506 for (child
= children
; child
!= NULL
; child
= child
->next
) {
2507 if (child
->data
== gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/Receive/Separator1")) {
2508 child
= child
->next
;
2513 /* destroy all previous menu item */
2514 while (child
!= NULL
) {
2515 gtk_widget_destroy(GTK_WIDGET(child
->data
));
2516 child
= child
->next
;
2519 g_list_free(children
);
2521 for (child
= account_list
; child
!= NULL
; child
= child
->next
) {
2522 ac_prefs
= (PrefsAccount
*)child
->data
;
2524 if (ac_prefs
->protocol
== A_NONE
)
2527 menuitem
= gtk_menu_item_new_with_label
2528 (ac_prefs
->account_name
? ac_prefs
->account_name
2530 gtk_widget_show(menuitem
);
2531 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), menuitem
);
2532 g_signal_connect(G_OBJECT(menuitem
), "activate",
2533 G_CALLBACK(account_receive_menu_cb
),
2538 static void main_window_set_toolbar_combo_receive_menu(MainWindow
*mainwin
,
2539 GList
*account_list
)
2542 GtkWidget
*menuitem
;
2543 PrefsAccount
*ac_prefs
;
2544 GtkWidget
*menu
= NULL
;
2546 if (mainwin
->toolbar
->getall_btn
== NULL
) /* button doesn't exist */
2549 menu
= gtk_menu_tool_button_get_menu(GTK_MENU_TOOL_BUTTON(mainwin
->toolbar
->getall_btn
));
2551 gtk_widget_destroy(menu
);
2552 menu
= gtk_menu_new();
2554 for (cur_ac
= account_list
; cur_ac
!= NULL
; cur_ac
= cur_ac
->next
) {
2555 ac_prefs
= (PrefsAccount
*)cur_ac
->data
;
2557 if (ac_prefs
->protocol
== A_NONE
)
2560 menuitem
= gtk_menu_item_new_with_label
2561 (ac_prefs
->account_name
2562 ? ac_prefs
->account_name
: _("Untitled"));
2563 gtk_widget_show(menuitem
);
2564 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), menuitem
);
2565 g_signal_connect(G_OBJECT(menuitem
), "activate",
2566 G_CALLBACK(account_receive_menu_cb
),
2569 gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(mainwin
->toolbar
->getall_btn
), menu
);
2572 static void main_window_set_toolbar_combo_compose_menu(MainWindow
*mainwin
,
2573 GList
*account_list
)
2575 #ifndef GENERIC_UMPC
2577 GtkWidget
*menuitem
;
2578 PrefsAccount
*ac_prefs
;
2579 GtkWidget
*menu
= NULL
;
2581 if (mainwin
->toolbar
->compose_mail_btn
== NULL
) /* button doesn't exist */
2584 menu
= gtk_menu_tool_button_get_menu(GTK_MENU_TOOL_BUTTON(mainwin
->toolbar
->compose_mail_btn
));
2586 gtk_widget_destroy(menu
);
2587 menu
= gtk_menu_new();
2589 for (cur_ac
= account_list
; cur_ac
!= NULL
; cur_ac
= cur_ac
->next
) {
2590 ac_prefs
= (PrefsAccount
*)cur_ac
->data
;
2592 menuitem
= gtk_menu_item_new_with_label
2593 (ac_prefs
->account_name
2594 ? ac_prefs
->account_name
: _("Untitled"));
2595 gtk_widget_show(menuitem
);
2596 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), menuitem
);
2597 g_signal_connect(G_OBJECT(menuitem
), "activate",
2598 G_CALLBACK(account_compose_menu_cb
),
2601 gtk_menu_tool_button_set_menu(GTK_MENU_TOOL_BUTTON(mainwin
->toolbar
->compose_mail_btn
), menu
);
2605 void main_window_set_account_menu(GList
*account_list
)
2608 MainWindow
*mainwin
;
2610 for (cur
= mainwin_list
; cur
!= NULL
; cur
= cur
->next
) {
2611 mainwin
= (MainWindow
*)cur
->data
;
2612 main_window_set_account_selector_menu(mainwin
, account_list
);
2613 main_window_set_account_receive_menu(mainwin
, account_list
);
2614 main_window_set_toolbar_combo_receive_menu(mainwin
, account_list
);
2615 main_window_set_toolbar_combo_compose_menu(mainwin
, account_list
);
2617 hooks_invoke(ACCOUNT_LIST_CHANGED_HOOKLIST
, NULL
);
2620 void main_window_set_account_menu_only_toolbar(GList
*account_list
)
2623 MainWindow
*mainwin
;
2625 for (cur
= mainwin_list
; cur
!= NULL
; cur
= cur
->next
) {
2626 mainwin
= (MainWindow
*)cur
->data
;
2627 main_window_set_toolbar_combo_receive_menu(mainwin
, account_list
);
2628 main_window_set_toolbar_combo_compose_menu(mainwin
, account_list
);
2632 static void main_window_show_cur_account(MainWindow
*mainwin
)
2637 ac_name
= g_strdup(cur_account
2638 ? (cur_account
->account_name
2639 ? cur_account
->account_name
: _("Untitled"))
2643 buf
= g_strdup_printf("%s - %s", ac_name
, PROG_VERSION
);
2645 buf
= g_strdup(PROG_VERSION
);
2646 gtk_window_set_title(GTK_WINDOW(mainwin
->window
), buf
);
2649 if (mainwin
->ac_label
)
2650 gtk_label_set_text(GTK_LABEL(mainwin
->ac_label
), ac_name
);
2651 if (mainwin
->ac_button
)
2652 gtk_widget_queue_resize(mainwin
->ac_button
);
2656 #ifndef GENERIC_UMPC
2657 static void main_window_separation_change(MainWindow
*mainwin
, LayoutType layout_mode
)
2659 GtkWidget
*folder_wid
= GTK_WIDGET_PTR(mainwin
->folderview
);
2660 GtkWidget
*summary_wid
= GTK_WIDGET_PTR(mainwin
->summaryview
);
2661 GtkWidget
*message_wid
= mainwin
->messageview
->vbox
;
2663 if (layout_mode
== prefs_common
.layout_mode
)
2666 debug_print("Changing window separation type from %d to %d\n",
2667 prefs_common
.layout_mode
, layout_mode
);
2669 /* remove widgets from those containers */
2670 g_object_ref(folder_wid
);
2671 g_object_ref(summary_wid
);
2672 g_object_ref(message_wid
);
2673 gtkut_container_remove
2674 (GTK_CONTAINER(gtk_widget_get_parent(folder_wid
)), folder_wid
);
2675 gtkut_container_remove
2676 (GTK_CONTAINER(gtk_widget_get_parent(summary_wid
)), summary_wid
);
2677 gtkut_container_remove
2678 (GTK_CONTAINER(gtk_widget_get_parent(message_wid
)), message_wid
);
2680 gtk_widget_hide(mainwin
->window
);
2681 main_window_set_widgets(mainwin
, layout_mode
);
2682 gtk_widget_show(mainwin
->window
);
2684 g_object_unref(folder_wid
);
2685 g_object_unref(summary_wid
);
2686 g_object_unref(message_wid
);
2689 void mainwindow_reset_paned(GtkPaned
*paned
)
2693 if (gtk_paned_get_child1(GTK_PANED(paned
)))
2694 gtk_widget_show(gtk_paned_get_child1(GTK_PANED(paned
)));
2695 if (gtk_paned_get_child2(GTK_PANED(paned
)))
2696 gtk_widget_show(gtk_paned_get_child2(GTK_PANED(paned
)));
2699 g_object_get (G_OBJECT(paned
),
2702 g_object_get (G_OBJECT(paned
),
2706 gtk_paned_set_position(GTK_PANED(paned
), mid
);
2709 static void mainwin_paned_show_first(GtkPaned
*paned
)
2712 g_object_get (G_OBJECT(paned
),
2716 if (gtk_paned_get_child1(GTK_PANED(paned
)))
2717 gtk_widget_show(gtk_paned_get_child1(GTK_PANED(paned
)));
2718 if (gtk_paned_get_child2(GTK_PANED(paned
)))
2719 gtk_widget_hide(gtk_paned_get_child2(GTK_PANED(paned
)));
2720 gtk_paned_set_position(GTK_PANED(paned
), max
);
2723 static void mainwin_paned_show_last(GtkPaned
*paned
)
2726 g_object_get (G_OBJECT(paned
),
2730 if (gtk_paned_get_child1(GTK_PANED(paned
)))
2731 gtk_widget_hide(gtk_paned_get_child1(GTK_PANED(paned
)));
2732 if (gtk_paned_get_child2(GTK_PANED(paned
)))
2733 gtk_widget_show(gtk_paned_get_child2(GTK_PANED(paned
)));
2734 gtk_paned_set_position(GTK_PANED(paned
), min
);
2737 void main_window_toggle_message_view(MainWindow
*mainwin
)
2739 SummaryView
*summaryview
= mainwin
->summaryview
;
2740 GtkWidget
*ppaned
= NULL
;
2741 GtkWidget
*container
= NULL
;
2743 switch (prefs_common
.layout_mode
) {
2745 case VERTICAL_LAYOUT
:
2747 ppaned
= mainwin
->vpaned
;
2748 container
= mainwin
->hpaned
;
2749 if (gtk_widget_get_parent(ppaned
) != NULL
) {
2750 mainwin
->messageview
->visible
= FALSE
;
2751 summaryview
->displayed
= NULL
;
2752 g_object_ref(ppaned
);
2753 gtkut_container_remove(GTK_CONTAINER(container
), ppaned
);
2754 gtk_widget_reparent(GTK_WIDGET_PTR(summaryview
), container
);
2756 mainwin
->messageview
->visible
= TRUE
;
2757 gtk_widget_reparent(GTK_WIDGET_PTR(summaryview
), ppaned
);
2758 gtk_container_add(GTK_CONTAINER(container
), ppaned
);
2759 g_object_unref(ppaned
);
2763 container
= mainwin
->vpaned
;
2764 if (gtk_widget_get_parent(mainwin
->messageview
->vbox
) != NULL
) {
2765 mainwin
->messageview
->visible
= FALSE
;
2766 summaryview
->displayed
= NULL
;
2767 g_object_ref(mainwin
->messageview
->vbox
);
2768 gtkut_container_remove(GTK_CONTAINER(container
), mainwin
->messageview
->vbox
);
2770 mainwin
->messageview
->visible
= TRUE
;
2771 gtk_container_add(GTK_CONTAINER(container
), mainwin
->messageview
->vbox
);
2772 g_object_unref(mainwin
->messageview
->vbox
);
2775 case WIDE_MSGLIST_LAYOUT
:
2776 g_warning("can't hide messageview in this wide msglist layout");
2780 if (messageview_is_visible(mainwin
->messageview
))
2781 gtk_arrow_set(GTK_ARROW(mainwin
->summaryview
->toggle_arrow
),
2782 GTK_ARROW_DOWN
, GTK_SHADOW_OUT
);
2784 gtk_arrow_set(GTK_ARROW(mainwin
->summaryview
->toggle_arrow
),
2785 GTK_ARROW_UP
, GTK_SHADOW_OUT
);
2787 if (mainwin
->messageview
->visible
== FALSE
)
2788 messageview_clear(mainwin
->messageview
);
2790 main_window_set_menu_sensitive(mainwin
);
2792 prefs_common
.msgview_visible
= mainwin
->messageview
->visible
;
2794 if (messageview_is_visible(mainwin
->messageview
)) {
2795 gtk_widget_queue_resize(mainwin
->hpaned
);
2796 gtk_widget_queue_resize(mainwin
->vpaned
);
2798 summary_grab_focus(summaryview
);
2799 if (!summary_is_list(summaryview
)) {
2800 summary_show(summaryview
, summaryview
->folder_item
, FALSE
);
2804 void main_window_get_size(MainWindow
*mainwin
)
2806 GtkAllocation allocation
;
2808 if (mainwin_list
== NULL
|| mainwin
->messageview
== NULL
) {
2809 debug_print("called after messageview "
2810 "has been deallocated!\n");
2814 if (prefs_common
.mainwin_fullscreen
) {
2815 debug_print("mainwin in full screen state. "
2816 "Keeping original settings\n");
2819 gtk_widget_get_allocation(GTK_WIDGET_PTR(mainwin
->summaryview
), &allocation
);
2820 if (allocation
.width
> 1 && allocation
.height
> 1 && !prefs_common
.mainwin_fullscreen
) {
2821 prefs_common
.summaryview_width
= allocation
.width
;
2823 if (messageview_is_visible(mainwin
->messageview
))
2824 prefs_common
.summaryview_height
= allocation
.height
;
2826 prefs_common
.mainview_width
= allocation
.width
;
2829 gtk_widget_get_allocation(mainwin
->window
, &allocation
);
2830 if (allocation
.width
> 1 && allocation
.height
> 1 &&
2831 !prefs_common
.mainwin_maximised
&& !prefs_common
.mainwin_fullscreen
) {
2832 prefs_common
.mainview_height
= allocation
.height
;
2833 prefs_common
.mainwin_width
= allocation
.width
;
2834 prefs_common
.mainwin_height
= allocation
.height
;
2837 gtk_widget_get_allocation(GTK_WIDGET_PTR(mainwin
->folderview
), &allocation
);
2838 if (allocation
.width
> 1 && allocation
.height
> 1 &&
2839 !prefs_common
.mainwin_fullscreen
) {
2840 prefs_common
.folderview_width
= allocation
.width
;
2841 prefs_common
.folderview_height
= allocation
.height
;
2844 gtk_widget_get_allocation(GTK_WIDGET_PTR(mainwin
->messageview
), &allocation
);
2845 if (allocation
.width
> 1 && allocation
.height
> 1 &&
2846 !prefs_common
.mainwin_fullscreen
) {
2847 prefs_common
.msgview_width
= allocation
.width
;
2848 prefs_common
.msgview_height
= allocation
.height
;
2851 /* debug_print("summaryview size: %d x %d\n",
2852 prefs_common.summaryview_width,
2853 prefs_common.summaryview_height);
2854 debug_print("folderview size: %d x %d\n",
2855 prefs_common.folderview_width,
2856 prefs_common.folderview_height);
2857 debug_print("messageview size: %d x %d\n",
2858 prefs_common.msgview_width,
2859 prefs_common.msgview_height); */
2862 void main_window_get_position(MainWindow
*mainwin
)
2866 if (prefs_common
.mainwin_maximised
|| prefs_common
.mainwin_fullscreen
)
2869 gtkut_widget_get_uposition(mainwin
->window
, &x
, &y
);
2871 prefs_common
.mainview_x
= x
;
2872 prefs_common
.mainview_y
= y
;
2873 prefs_common
.mainwin_x
= x
;
2874 prefs_common
.mainwin_y
= y
;
2876 debug_print("main window position: %d, %d\n", x
, y
);
2879 void main_window_progress_on(MainWindow
*mainwin
)
2881 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(mainwin
->progressbar
), "");
2884 void main_window_progress_off(MainWindow
*mainwin
)
2886 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(mainwin
->progressbar
), 0.0);
2887 gtk_progress_bar_set_text(GTK_PROGRESS_BAR(mainwin
->progressbar
), "");
2890 gboolean
main_window_empty_trash(MainWindow
*mainwin
, gboolean confirm
, gboolean for_quit
)
2892 if (confirm
&& procmsg_have_trashed_mails_fast()) {
2896 val
= alertpanel(_("Empty trash"),
2897 _("Delete all messages in trash folders?"),
2898 GTK_STOCK_NO
, GTK_STOCK_YES
, _("Don't quit"),
2901 val
= alertpanel(_("Empty trash"),
2902 _("Delete all messages in trash folders?"),
2903 GTK_STOCK_NO
, GTK_STOCK_YES
, NULL
,
2905 if (val
== G_ALERTALTERNATE
) {
2906 debug_print("will empty trash\n");
2907 } else if (val
== G_ALERTDEFAULT
) {
2908 debug_print("will not empty trash\n");
2911 return FALSE
; /* cancel exit */
2913 manage_window_focus_in(mainwin
->window
, NULL
, NULL
);
2916 procmsg_empty_all_trash();
2918 if (mainwin
->summaryview
->folder_item
&&
2919 mainwin
->summaryview
->folder_item
->stype
== F_TRASH
)
2920 folderview_grab_focus(mainwin
->folderview
);
2924 static void main_window_add_mailbox(MainWindow
*mainwin
)
2929 path
= input_dialog(_("Add mailbox"),
2930 _("Input the location of the mailbox.\n"
2931 "The location can be either the full path or relative to the \n"
2933 "If the location of an existing mailbox is specified, it will be\n"
2934 "scanned automatically."),
2937 if (folder_find_from_path(path
)) {
2938 alertpanel_error(_("The mailbox '%s' already exists."), path
);
2942 folder
= folder_new(folder_get_class_from_string("mh"),
2943 !strcmp(path
, "Mail") ? _("Mailbox") :
2944 g_path_get_basename(path
), path
);
2947 if (folder
->klass
->create_tree(folder
) < 0) {
2948 alertpanel_error(_("Creation of the mailbox failed.\n"
2949 "Maybe some files already exist, or you don't have the permission to write there."));
2950 folder_destroy(folder
);
2955 folder_set_ui_func(folder
, scan_tree_func
, mainwin
);
2956 folder_scan_tree(folder
, TRUE
);
2957 folder_set_ui_func(folder
, NULL
, NULL
);
2960 SensitiveCondMask
main_window_get_current_state(MainWindow
*mainwin
)
2962 SensitiveCondMask state
= 0;
2963 SummarySelection selection
;
2964 FolderItem
*item
= mainwin
->summaryview
->folder_item
;
2965 GList
*account_list
= account_get_list();
2968 selection
= summary_get_selection_type(mainwin
->summaryview
);
2970 #define UPDATE_STATE(...) \
2972 state |= main_window_get_mask(__VA_ARGS__, -1); \
2975 if (mainwin
->lock_count
== 0 && !claws_is_starting())
2976 UPDATE_STATE(M_UNLOCKED
);
2977 if (selection
!= SUMMARY_NONE
&& selection
!= SUMMARY_SELECTED_NONE
)
2978 UPDATE_STATE(M_MSG_EXIST
);
2979 if (item
&& item
->path
&& folder_item_parent(item
) && !item
->no_select
) {
2980 UPDATE_STATE(M_EXEC
);
2981 /* if (item->folder->type != F_NEWS) */
2982 UPDATE_STATE(M_ALLOW_DELETE
);
2984 if (prefs_common
.immediate_exec
== 0
2985 && mainwin
->lock_count
== 0)
2986 UPDATE_STATE(M_DELAY_EXEC
);
2988 if ((selection
== SUMMARY_NONE
&& item
->hide_read_msgs
)
2989 || selection
!= SUMMARY_NONE
)
2990 UPDATE_STATE(M_HIDE_READ_MSG
);
2992 if ((selection
== SUMMARY_NONE
&& item
->hide_read_threads
)
2993 || selection
!= SUMMARY_NONE
)
2994 UPDATE_STATE(M_HIDE_READ_THREADS
);
2996 if (mainwin
->summaryview
->threaded
)
2997 UPDATE_STATE(M_THREADED
);
2999 UPDATE_STATE(M_UNTHREADED
);
3000 if (selection
== SUMMARY_SELECTED_SINGLE
||
3001 selection
== SUMMARY_SELECTED_MULTIPLE
)
3002 UPDATE_STATE(M_TARGET_EXIST
);
3003 if (selection
== SUMMARY_SELECTED_SINGLE
)
3004 UPDATE_STATE(M_SINGLE_TARGET_EXIST
);
3005 if (mainwin
->summaryview
->folder_item
&&
3006 mainwin
->summaryview
->folder_item
->folder
->klass
->type
== F_NEWS
)
3007 UPDATE_STATE(M_NEWS
);
3009 UPDATE_STATE(M_NOT_NEWS
);
3010 if (mainwin
->summaryview
->folder_item
&&
3011 (mainwin
->summaryview
->folder_item
->stype
!= F_TRASH
||
3012 !folder_has_parent_of_type(mainwin
->summaryview
->folder_item
, F_TRASH
)))
3013 UPDATE_STATE(M_NOT_TRASH
);
3015 if (mainwin
->summaryview
->folder_item
3016 && mainwin
->summaryview
->folder_item
->stype
!= F_DRAFT
)
3017 UPDATE_STATE(M_NOT_DRAFT
);
3019 if (prefs_common
.actions_list
&& g_slist_length(prefs_common
.actions_list
))
3020 UPDATE_STATE(M_ACTIONS_EXIST
);
3022 tmp
= tags_get_list();
3023 if (tmp
&& g_slist_length(tmp
))
3024 UPDATE_STATE(M_TAGS_EXIST
);
3027 if (procmsg_have_queued_mails_fast() && !procmsg_is_sending())
3028 UPDATE_STATE(M_HAVE_QUEUED_MAILS
);
3030 if (selection
== SUMMARY_SELECTED_SINGLE
&&
3032 (folder_has_parent_of_type(item
, F_DRAFT
) ||
3033 folder_has_parent_of_type(item
, F_OUTBOX
) ||
3034 folder_has_parent_of_type(item
, F_QUEUE
))))
3035 UPDATE_STATE(M_ALLOW_REEDIT
);
3037 UPDATE_STATE(M_HAVE_ACCOUNT
);
3039 if (cur_account
&& cur_account
->protocol
!= A_NONE
)
3040 UPDATE_STATE(M_HAVE_RETRIEVABLE_ACCOUNT
);
3042 if (any_folder_want_synchronise())
3043 UPDATE_STATE(M_WANT_SYNC
);
3045 if (item
&& item
->prefs
->processing
&& selection
!= SUMMARY_NONE
)
3046 UPDATE_STATE(M_HAVE_PROCESSING
);
3048 if (g_list_length(account_list
) > 1)
3049 UPDATE_STATE(M_HAVE_MULTI_ACCOUNT
);
3051 for (account_list
= account_get_list(); account_list
!= NULL
; account_list
= account_list
->next
) {
3052 if (((PrefsAccount
*)account_list
->data
)->protocol
!= A_NONE
) {
3053 UPDATE_STATE(M_HAVE_ANY_RETRIEVABLE_ACCOUNT
);
3058 for (account_list
= account_get_list(); account_list
!= NULL
; account_list
= account_list
->next
) {
3059 if (((PrefsAccount
*)account_list
->data
)->protocol
== A_NNTP
) {
3060 UPDATE_STATE(M_HAVE_NEWS_ACCOUNT
);
3065 if (procmsg_spam_can_learn() &&
3066 (mainwin
->summaryview
->folder_item
&&
3067 mainwin
->summaryview
->folder_item
->folder
->klass
->type
!= F_UNKNOWN
&&
3068 mainwin
->summaryview
->folder_item
->folder
->klass
->type
!= F_NEWS
)) {
3069 UPDATE_STATE(M_CAN_LEARN_SPAM
);
3072 if (mainwin
->summaryview
->folder_item
) {
3073 UPDATE_STATE(M_FOLDER_SELECTED
);
3076 if (inc_is_active())
3077 UPDATE_STATE(M_INC_ACTIVE
);
3078 if (imap_cancel_all_enabled())
3079 UPDATE_STATE(M_INC_ACTIVE
);
3081 if (send_is_active() | procmsg_is_sending())
3082 UPDATE_STATE(M_SEND_ACTIVE
);
3084 if (mainwin
->summaryview
->deleted
> 0)
3085 UPDATE_STATE(M_DELETED_EXISTS
);
3087 if (mainwin
->summaryview
->deleted
> 0 ||
3088 mainwin
->summaryview
->moved
> 0 ||
3089 mainwin
->summaryview
->copied
> 0)
3090 UPDATE_STATE(M_DELAY_EXEC
);
3092 if (summary_is_list(mainwin
->summaryview
))
3093 UPDATE_STATE(M_SUMMARY_ISLIST
);
3095 if (prefs_common
.layout_mode
!= SMALL_LAYOUT
|| mainwin
->in_folder
)
3096 UPDATE_STATE(M_IN_MSGLIST
);
3098 for (account_list
= account_get_list(); account_list
!= NULL
; account_list
= account_list
->next
) {
3099 PrefsAccount
*account
= account_list
->data
;
3100 if (account
->session_passwd
|| account
->session_smtp_passwd
) {
3101 UPDATE_STATE(M_SESSION_PASSWORDS
);
3106 #ifndef PASSWORD_CRYPTO_OLD
3107 if (master_passphrase_is_entered()) {
3108 UPDATE_STATE(M_MASTER_PASSPHRASE
);
3117 SensitiveCondMask
main_window_get_mask(SensitiveCond cond
, ...)
3121 SensitiveCondMask value
;
3122 static SensitiveCondMask SensitiveCond_table
[M_MAX_RESERVED
];
3123 static gboolean first_time
= TRUE
;
3126 for (i
= 0; i
< M_MAX_RESERVED
; i
++)
3127 SensitiveCond_table
[i
] = (SensitiveCondMask
) ((SensitiveCondMask
)1 << i
);
3133 va_start(args
, cond
);
3134 for (i
= (gint
) cond
; i
>= 0; i
= va_arg(args
, gint
))
3135 value
|= SensitiveCond_table
[i
];
3141 void main_window_set_menu_sensitive(MainWindow
*mainwin
)
3143 SensitiveCondMask state
;
3145 SummaryView
*summaryview
;
3148 GList
*children
, *cur_item
;
3149 gboolean mimepart_selected
= FALSE
;
3151 state
= main_window_get_current_state(mainwin
);
3153 #define SET_SENSITIVE(entry_str, ...) \
3155 SensitiveCondMask cond = main_window_get_mask(__VA_ARGS__, -1); \
3156 cm_menu_set_sensitive_full(mainwin->ui_manager, \
3157 (const gchar *) entry_str, \
3158 ((cond & state) == cond)); \
3160 SET_SENSITIVE("Menu/File/SaveAs", M_TARGET_EXIST
);
3161 SET_SENSITIVE("Menu/File/SavePartAs", M_SINGLE_TARGET_EXIST
);
3162 SET_SENSITIVE("Menu/File/Print", M_TARGET_EXIST
);
3163 SET_SENSITIVE("Menu/File/SynchroniseFolders", M_WANT_SYNC
);
3164 SET_SENSITIVE("Menu/File/Exit", M_UNLOCKED
);
3166 SET_SENSITIVE("Menu/Edit/SelectThread", M_TARGET_EXIST
, M_SUMMARY_ISLIST
);
3167 SET_SENSITIVE("Menu/Edit/Find", M_SINGLE_TARGET_EXIST
);
3168 SET_SENSITIVE("Menu/Edit/QuickSearch", M_IN_MSGLIST
);
3169 SET_SENSITIVE("Menu/Edit/SearchFolder", M_TARGET_EXIST
, M_SUMMARY_ISLIST
);
3171 SET_SENSITIVE("Menu/View/SetColumns/Folderlist", M_UNLOCKED
, M_SUMMARY_ISLIST
);
3172 SET_SENSITIVE("Menu/View/Sort", M_EXEC
, M_SUMMARY_ISLIST
);
3173 SET_SENSITIVE("Menu/View/ThreadView", M_EXEC
, M_SUMMARY_ISLIST
);
3174 SET_SENSITIVE("Menu/View/ExpandThreads", M_MSG_EXIST
, M_SUMMARY_ISLIST
);
3175 SET_SENSITIVE("Menu/View/CollapseThreads", M_MSG_EXIST
, M_SUMMARY_ISLIST
);
3176 SET_SENSITIVE("Menu/View/HideReadThreads", M_HIDE_READ_THREADS
, M_SUMMARY_ISLIST
, M_NOT_DRAFT
);
3177 SET_SENSITIVE("Menu/View/HideReadMessages", M_HIDE_READ_MSG
, M_SUMMARY_ISLIST
, M_NOT_DRAFT
);
3178 SET_SENSITIVE("Menu/View/HideDelMessages", M_SUMMARY_ISLIST
, M_NOT_DRAFT
);
3179 SET_SENSITIVE("Menu/View/Goto/Prev", M_MSG_EXIST
);
3180 SET_SENSITIVE("Menu/View/Goto/Next", M_MSG_EXIST
);
3181 SET_SENSITIVE("Menu/View/Goto/PrevUnread", M_MSG_EXIST
);
3182 SET_SENSITIVE("Menu/View/Goto/NextUnread", M_MSG_EXIST
);
3183 SET_SENSITIVE("Menu/View/Goto/PrevNew", M_MSG_EXIST
);
3184 SET_SENSITIVE("Menu/View/Goto/NextNew", M_MSG_EXIST
);
3185 SET_SENSITIVE("Menu/View/Goto/PrevMarked", M_MSG_EXIST
);
3186 SET_SENSITIVE("Menu/View/Goto/NextMarked", M_MSG_EXIST
);
3187 SET_SENSITIVE("Menu/View/Goto/PrevLabeled", M_MSG_EXIST
);
3188 SET_SENSITIVE("Menu/View/Goto/NextLabeled", M_MSG_EXIST
);
3189 SET_SENSITIVE("Menu/View/Goto/ParentMessage", M_SINGLE_TARGET_EXIST
);
3190 SET_SENSITIVE("Menu/View/Goto/NextPart", M_SINGLE_TARGET_EXIST
);
3191 SET_SENSITIVE("Menu/View/Goto/PrevPart", M_SINGLE_TARGET_EXIST
);
3192 SET_SENSITIVE("Menu/View/OpenNewWindow", M_SINGLE_TARGET_EXIST
);
3193 SET_SENSITIVE("Menu/View/MessageSource", M_SINGLE_TARGET_EXIST
);
3194 SET_SENSITIVE("Menu/View/Part", M_SINGLE_TARGET_EXIST
);
3195 SET_SENSITIVE("Menu/View/AllHeaders", M_SINGLE_TARGET_EXIST
);
3196 SET_SENSITIVE("Menu/View/Quotes", M_SINGLE_TARGET_EXIST
);
3198 SET_SENSITIVE("Menu/Message/Receive/CurrentAccount", M_HAVE_ACCOUNT
, M_UNLOCKED
, M_HAVE_RETRIEVABLE_ACCOUNT
);
3199 SET_SENSITIVE("Menu/Message/Receive/AllAccounts", M_HAVE_ACCOUNT
, M_UNLOCKED
, M_HAVE_ANY_RETRIEVABLE_ACCOUNT
);
3200 SET_SENSITIVE("Menu/Message/Receive/CancelReceiving", M_INC_ACTIVE
);
3201 SET_SENSITIVE("Menu/Message/SendQueue", M_HAVE_ACCOUNT
, M_HAVE_QUEUED_MAILS
);
3202 SET_SENSITIVE("Menu/Message/CancelSending", M_SEND_ACTIVE
);
3203 SET_SENSITIVE("Menu/Message/ComposeEmail", M_HAVE_ACCOUNT
);
3204 SET_SENSITIVE("Menu/Message/ComposeNews", M_HAVE_NEWS_ACCOUNT
);
3205 SET_SENSITIVE("Menu/Message/Reply", M_HAVE_ACCOUNT
, M_TARGET_EXIST
, M_SUMMARY_ISLIST
);
3206 SET_SENSITIVE("Menu/Message/ReplyTo", M_HAVE_ACCOUNT
, M_TARGET_EXIST
, M_SUMMARY_ISLIST
);
3207 SET_SENSITIVE("Menu/Message/FollowupReply", M_HAVE_ACCOUNT
, M_TARGET_EXIST
, M_NEWS
, M_SUMMARY_ISLIST
);
3208 SET_SENSITIVE("Menu/Message/Forward", M_HAVE_ACCOUNT
, M_TARGET_EXIST
, M_SUMMARY_ISLIST
);
3209 SET_SENSITIVE("Menu/Message/ForwardAtt", M_HAVE_ACCOUNT
, M_TARGET_EXIST
, M_SUMMARY_ISLIST
);
3210 SET_SENSITIVE("Menu/Message/Redirect", M_HAVE_ACCOUNT
, M_TARGET_EXIST
, M_SUMMARY_ISLIST
);
3211 SET_SENSITIVE("Menu/Message/Move", M_TARGET_EXIST
, M_ALLOW_DELETE
, M_NOT_NEWS
);
3212 SET_SENSITIVE("Menu/Message/Copy", M_TARGET_EXIST
, M_EXEC
);
3213 SET_SENSITIVE("Menu/Message/Trash", M_TARGET_EXIST
, M_ALLOW_DELETE
, M_NOT_NEWS
, M_NOT_TRASH
);
3214 SET_SENSITIVE("Menu/Message/Delete", M_TARGET_EXIST
, M_ALLOW_DELETE
);
3215 SET_SENSITIVE("Menu/Message/TrashThread", M_TARGET_EXIST
, M_SUMMARY_ISLIST
);
3216 SET_SENSITIVE("Menu/Message/DeleteThread", M_TARGET_EXIST
, M_SUMMARY_ISLIST
);
3217 SET_SENSITIVE("Menu/Message/CancelNews", M_TARGET_EXIST
, M_ALLOW_DELETE
, M_NEWS
);
3218 SET_SENSITIVE("Menu/Message/Mark", M_TARGET_EXIST
, M_SUMMARY_ISLIST
);
3219 SET_SENSITIVE("Menu/Message/Mark/MarkSpam", M_TARGET_EXIST
, M_CAN_LEARN_SPAM
);
3220 SET_SENSITIVE("Menu/Message/Mark/MarkHam", M_TARGET_EXIST
, M_CAN_LEARN_SPAM
);
3221 SET_SENSITIVE("Menu/Message/Mark/IgnoreThread", M_TARGET_EXIST
);
3222 SET_SENSITIVE("Menu/Message/Mark/UnignoreThread", M_TARGET_EXIST
);
3223 SET_SENSITIVE("Menu/Message/Mark/Lock", M_TARGET_EXIST
);
3224 SET_SENSITIVE("Menu/Message/Mark/Unlock", M_TARGET_EXIST
);
3225 SET_SENSITIVE("Menu/Message/ColorLabel", M_TARGET_EXIST
);
3226 SET_SENSITIVE("Menu/Message/Tags", M_TARGET_EXIST
);
3227 SET_SENSITIVE("Menu/Message/Reedit", M_HAVE_ACCOUNT
, M_ALLOW_REEDIT
);
3228 SET_SENSITIVE("Menu/Message/CheckSignature", M_SINGLE_TARGET_EXIST
);
3230 SET_SENSITIVE("Menu/Tools/AddSenderToAB", M_SINGLE_TARGET_EXIST
);
3231 SET_SENSITIVE("Menu/Tools/CollectAddresses", M_FOLDER_SELECTED
);
3232 SET_SENSITIVE("Menu/Tools/CollectAddresses/FromFolder", M_FOLDER_SELECTED
);
3233 SET_SENSITIVE("Menu/Tools/CollectAddresses/FromSelected", M_TARGET_EXIST
);
3234 SET_SENSITIVE("Menu/Tools/FilterFolder", M_MSG_EXIST
, M_EXEC
);
3235 SET_SENSITIVE("Menu/Tools/FilterSelected", M_TARGET_EXIST
, M_EXEC
);
3236 SET_SENSITIVE("Menu/Tools/RunProcessing", M_HAVE_PROCESSING
);
3237 SET_SENSITIVE("Menu/Tools/CreateFilterRule", M_SINGLE_TARGET_EXIST
, M_UNLOCKED
);
3238 SET_SENSITIVE("Menu/Tools/CreateProcessingRule", M_SINGLE_TARGET_EXIST
, M_UNLOCKED
);
3239 SET_SENSITIVE("Menu/Tools/ListUrls", M_TARGET_EXIST
);
3240 SET_SENSITIVE("Menu/Tools/Actions", M_TARGET_EXIST
, M_ACTIONS_EXIST
);
3241 SET_SENSITIVE("Menu/Tools/Execute", M_DELAY_EXEC
);
3242 SET_SENSITIVE("Menu/Tools/Expunge", M_DELETED_EXISTS
);
3243 SET_SENSITIVE("Menu/Tools/ForgetSessionPasswords", M_SESSION_PASSWORDS
);
3244 #ifndef PASSWORD_CRYPTO_OLD
3245 SET_SENSITIVE("Menu/Tools/ForgetMasterPassphrase", M_MASTER_PASSPHRASE
);
3247 SET_SENSITIVE("Menu/Tools/DeleteDuplicates/SelFolder", M_MSG_EXIST
, M_ALLOW_DELETE
);
3249 SET_SENSITIVE("Menu/Configuration", M_UNLOCKED
);
3250 SET_SENSITIVE("Menu/Configuration/ChangeAccount", M_HAVE_MULTI_ACCOUNT
);
3251 SET_SENSITIVE("Menu/Configuration/AccountPrefs", M_UNLOCKED
);
3252 SET_SENSITIVE("Menu/Configuration/CreateAccount", M_UNLOCKED
);
3253 SET_SENSITIVE("Menu/Configuration/EditAccounts", M_UNLOCKED
);
3254 #undef SET_SENSITIVE
3256 menu
= gtk_menu_item_get_submenu(GTK_MENU_ITEM(
3257 gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/Receive")));
3259 children
= gtk_container_get_children(GTK_CONTAINER(menu
));
3260 for (cur_item
= children
; cur_item
!= NULL
; cur_item
= cur_item
->next
) {
3261 if (cur_item
->data
== gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/Receive/Separator1")) {
3262 cur_item
= cur_item
->next
;
3267 for (; cur_item
!= NULL
; cur_item
= cur_item
->next
) {
3268 gtk_widget_set_sensitive(GTK_WIDGET(cur_item
->data
),
3269 (main_window_get_mask(M_UNLOCKED
, -1) & state
) != 0);
3272 g_list_free(children
);
3274 main_window_menu_callback_block(mainwin
);
3276 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/ShowHide/MessageView",
3277 messageview_is_visible(mainwin
->messageview
));
3279 summaryview
= mainwin
->summaryview
;
3281 switch (summaryview
->sort_key
) {
3282 case SORT_BY_NUMBER
:
3283 menu_path
= "Menu/View/Sort/Number"; break;
3285 menu_path
= "Menu/View/Sort/Size"; break;
3287 menu_path
= "Menu/View/Sort/Date"; break;
3288 case SORT_BY_THREAD_DATE
:
3289 menu_path
= "Menu/View/Sort/ThreadDate"; break;
3291 menu_path
= "Menu/View/Sort/From"; break;
3293 menu_path
= "Menu/View/Sort/To"; break;
3294 case SORT_BY_SUBJECT
:
3295 menu_path
= "Menu/View/Sort/Subject"; break;
3297 menu_path
= "Menu/View/Sort/Color"; break;
3299 menu_path
= "Menu/View/Sort/Mark"; break;
3300 case SORT_BY_STATUS
:
3301 menu_path
= "Menu/View/Sort/Status"; break;
3303 menu_path
= "Menu/View/Sort/Attachment"; break;
3305 menu_path
= "Menu/View/Sort/Score"; break;
3306 case SORT_BY_LOCKED
:
3307 menu_path
= "Menu/View/Sort/Locked"; break;
3309 menu_path
= "Menu/View/Sort/Tag"; break;
3312 menu_path
= "Menu/View/Sort/DontSort"; break;
3314 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, menu_path
, TRUE
);
3316 if (summaryview
->sort_type
== SORT_ASCENDING
) {
3317 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Sort/Ascending", TRUE
);
3319 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Sort/Descending", TRUE
);
3322 if (summaryview
->sort_key
!= SORT_BY_NONE
) {
3323 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/Sort/Ascending", TRUE
);
3324 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/Sort/Descending", TRUE
);
3326 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/Sort/Ascending", FALSE
);
3327 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/Sort/Descending", FALSE
);
3330 if (mainwin
->messageview
3331 && mainwin
->messageview
->mimeview
3332 && mainwin
->messageview
->mimeview
->textview
)
3333 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/AllHeaders",
3334 prefs_common
.show_all_headers
);
3335 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/ThreadView", (state
& main_window_get_mask(M_THREADED
, -1)) != 0);
3336 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/ExpandThreads", (state
& main_window_get_mask(M_THREADED
, -1)) != 0);
3337 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/CollapseThreads", (state
& main_window_get_mask(M_THREADED
, -1)) != 0);
3338 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/HideReadThreads", (state
& main_window_get_mask(M_THREADED
, -1)) != 0 && (state
& main_window_get_mask(M_NOT_DRAFT
, -1)) != 0);
3339 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Quotes/CollapseAll", (prefs_common
.hide_quotes
== 1));
3340 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Quotes/Collapse2", (prefs_common
.hide_quotes
== 2));
3341 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Quotes/Collapse3", (prefs_common
.hide_quotes
== 3));
3343 if (mainwin
->summaryview
->folder_item
&& !mainwin
->summaryview
->folder_item
->threaded
)
3344 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/HideReadThreads", FALSE
);
3345 if ((mainwin
->summaryview
->folder_item
&& mainwin
->summaryview
->folder_item
->hide_read_msgs
) ||
3346 quicksearch_has_sat_predicate(mainwin
->summaryview
->quicksearch
))
3347 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/HideReadThreads", FALSE
);
3348 if ((mainwin
->summaryview
->folder_item
&& mainwin
->summaryview
->folder_item
->hide_read_threads
) ||
3349 quicksearch_has_sat_predicate(mainwin
->summaryview
->quicksearch
))
3350 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/HideReadMessages", FALSE
);
3351 if (quicksearch_has_sat_predicate(mainwin
->summaryview
->quicksearch
))
3352 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/HideDelMessages", FALSE
);
3354 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/Goto/PrevHistory",
3355 messageview_nav_has_prev(mainwin
->messageview
));
3356 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/Goto/NextHistory",
3357 messageview_nav_has_next(mainwin
->messageview
));
3359 if (mainwin
->messageview
3360 && mainwin
->messageview
->mimeview
)
3361 mimepart_selected
= !mimeview_tree_is_empty(mainwin
->messageview
->mimeview
);
3363 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/File/SavePartAs", mimepart_selected
);
3364 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/Goto/NextPart", mimepart_selected
);
3365 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/Goto/PrevPart", mimepart_selected
);
3366 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/Part", mimepart_selected
);
3367 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/Message/CheckSignature",
3368 mimepart_selected
&& mainwin
->messageview
->mimeview
->signed_part
);
3371 if (mimepart_selected
) {
3372 MimeInfo
*partinfo
= messageview_get_selected_mime_part(mainwin
->messageview
);
3374 if (partinfo
&& (partinfo
->type
== MIMETYPE_MESSAGE
||
3375 partinfo
->type
== MIMETYPE_IMAGE
||
3376 partinfo
->type
== MIMETYPE_MULTIPART
)) {
3380 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/Part/AsText", sensitive
);
3382 main_window_menu_callback_unblock(mainwin
);
3385 void main_create_mailing_list_menu (MainWindow
*mainwin
, MsgInfo
*msginfo
)
3390 is_menu
= mailing_list_create_submenu (mainwin
, msginfo
);
3392 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/Message/MailingList", TRUE
);
3394 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/Message/MailingList", FALSE
);
3397 static gint
mailing_list_create_submenu (MainWindow
*mainwin
, MsgInfo
*msginfo
)
3400 GtkWidget
*menuitem
;
3402 if (!msginfo
|| !msginfo
->extradata
) {
3403 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/Message/MailingList/Post", FALSE
);
3404 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/Message/MailingList/Help", FALSE
);
3405 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/Message/MailingList/Subscribe", FALSE
);
3406 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/Message/MailingList/Unsubscribe", FALSE
);
3407 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/Message/MailingList/ViewArchive", FALSE
);
3408 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/Message/MailingList/ContactOwner", FALSE
);
3412 /* Mailing list post */
3413 if (!g_strcmp0 (msginfo
->extradata
->list_post
, "NO")) {
3414 g_free(msginfo
->extradata
->list_post
);
3415 msginfo
->extradata
->list_post
= g_strdup (_("No posting allowed"));
3417 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/MailingList/Post");
3419 menu_nb
+= mailing_list_populate_submenu (menuitem
, msginfo
->extradata
->list_post
);
3421 /* Mailing list help */
3422 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/MailingList/Help");
3424 menu_nb
+= mailing_list_populate_submenu (menuitem
, msginfo
->extradata
->list_help
);
3426 /* Mailing list subscribe */
3427 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/MailingList/Subscribe");
3429 menu_nb
+= mailing_list_populate_submenu (menuitem
, msginfo
->extradata
->list_subscribe
);
3431 /* Mailing list unsubscribe */
3432 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/MailingList/Unsubscribe");
3434 menu_nb
+= mailing_list_populate_submenu (menuitem
, msginfo
->extradata
->list_unsubscribe
);
3436 /* Mailing list view archive */
3437 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/MailingList/ViewArchive");
3439 menu_nb
+= mailing_list_populate_submenu (menuitem
, msginfo
->extradata
->list_archive
);
3441 /* Mailing list contact owner */
3442 menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/Message/MailingList/ContactOwner");
3444 menu_nb
+= mailing_list_populate_submenu (menuitem
, msginfo
->extradata
->list_owner
);
3449 static gint
mailing_list_populate_submenu (GtkWidget
*menuitem
, const gchar
* list_header
)
3451 GtkWidget
*item
, *menu
;
3452 const gchar
*url_pt
;
3453 gchar url_decoded
[BUFFSIZE
];
3454 GList
*children
, *amenu
;
3457 menu
= gtk_menu_item_get_submenu(GTK_MENU_ITEM(menuitem
));
3459 /* First delete old submenu */
3460 /* FIXME: we can optimize this, and only change/add/delete necessary items */
3461 children
= gtk_container_get_children(GTK_CONTAINER(menu
));
3462 for (amenu
= children
; amenu
; amenu
= amenu
->next
) {
3463 item
= GTK_WIDGET (amenu
->data
);
3464 gtk_widget_destroy (item
);
3466 g_list_free(children
);
3468 for (url_pt
= list_header
; url_pt
&& *url_pt
;) {
3469 get_url_part (&url_pt
, url_decoded
);
3471 if (!g_ascii_strncasecmp(url_decoded
, "mailto:", 7)) {
3472 item
= cm_menu_item_new_label_from_url ((url_decoded
));
3473 g_signal_connect(G_OBJECT(item
), "activate",
3474 G_CALLBACK(mailing_list_compose
),
3477 else if (!g_ascii_strncasecmp(url_decoded
, "http:", 5) ||
3478 !g_ascii_strncasecmp(url_decoded
, "https:",6)) {
3480 item
= cm_menu_item_new_label_from_url ((url_decoded
));
3481 g_signal_connect(G_OBJECT(item
), "activate",
3482 G_CALLBACK(mailing_list_open_uri
),
3486 gtk_menu_shell_append(GTK_MENU_SHELL(menu
), item
);
3487 gtk_widget_show (item
);
3493 gtk_widget_set_sensitive (menuitem
, TRUE
);
3495 gtk_widget_set_sensitive (menuitem
, FALSE
);
3501 static void get_url_part (const gchar
**buffer
, gchar
*url_decoded
)
3503 gchar tmp
[BUFFSIZE
];
3507 gboolean with_plus
= TRUE
;
3510 *url_decoded
= '\0';
3514 /* Ignore spaces, comments and tabs () */
3515 for (;*buf
== ' ' || *buf
== '(' || *buf
== '\t'; buf
++)
3517 for (;*buf
!= ')' && *buf
!= 0x00; buf
++);
3519 /* First non space and non comment must be a < */
3522 if (!strncmp(buf
, "mailto:", strlen("mailto:")))
3525 *buf
!= '>' && *buf
!= 0x00 && i
< BUFFSIZE
;
3526 tmp
[i
++] = *(buf
++));
3529 *url_decoded
= '\0';
3536 *url_decoded
= '\0';
3540 *url_decoded
= '\0';
3543 if (i
== BUFFSIZE
) {
3547 decode_uri_with_plus (url_decoded
, (const gchar
*)tmp
, with_plus
);
3549 /* Prepare the work for the next url in the list */
3550 /* after the closing bracket >, ignore space, comments and tabs */
3551 for (;buf
&& *buf
&& (*buf
== ' ' || *buf
== '(' || *buf
== '\t'); buf
++)
3553 for (;*buf
!= ')' && *buf
!= 0x00; buf
++);
3555 if (!buf
|| !*buf
) {
3560 /* now first non space, non comment must be a comma */
3562 for (;*buf
!= 0x00; buf
++);
3568 static void mailing_list_compose (GtkWidget
*w
, gpointer
*data
)
3570 const gchar
*mailto
;
3571 PrefsAccount
*account
= NULL
;
3572 FolderItem
*folder_item
= NULL
;
3574 mailto
= gtk_label_get_text(GTK_LABEL (gtk_bin_get_child(GTK_BIN((w
)))));
3575 if (mainwindow_get_mainwindow()) {
3576 folder_item
= mainwindow_get_mainwindow()->summaryview
->folder_item
;
3577 if (folder_item
&& folder_item
->prefs
&& folder_item
->prefs
->enable_default_account
)
3578 account
= account_find_from_id(folder_item
->prefs
->default_account
);
3579 if (folder_item
&& !account
)
3580 account
= account_find_from_item(folder_item
);
3583 compose_new_with_folderitem(account
, folder_item
, mailto
+7);
3586 static void mailing_list_open_uri (GtkWidget
*w
, gpointer
*data
)
3589 const gchar
*mailto
;
3591 mailto
= gtk_label_get_text(GTK_LABEL (gtk_bin_get_child(GTK_BIN((w
)))));
3593 open_uri (mailto
, prefs_common_get_uri_cmd());
3596 static void fix_folderview_scroll(MainWindow
*mainwin
)
3598 static gboolean fix_done
= FALSE
;
3603 gtk_widget_queue_resize(mainwin
->folderview
->ctree
);
3608 void main_window_popup(MainWindow
*mainwin
)
3610 static gboolean first_start
= TRUE
;
3612 if (!gtk_widget_get_visible(GTK_WIDGET(mainwin
->window
)))
3613 main_window_show(mainwin
);
3615 if (prefs_common
.mainwin_maximised
)
3616 gtk_window_maximize(GTK_WINDOW(mainwin
->window
));
3619 first_start
= FALSE
;
3621 gtkut_window_popup(mainwin
->window
);
3624 if (prefs_common
.layout_mode
== SMALL_LAYOUT
) {
3625 if (mainwin
->in_folder
) {
3626 mainwindow_enter_folder(mainwin
);
3628 mainwindow_exit_folder(mainwin
);
3631 fix_folderview_scroll(mainwin
);
3634 void main_window_show(MainWindow
*mainwin
)
3636 gtk_widget_show(mainwin
->window
);
3637 gtk_widget_show(mainwin
->vbox_body
);
3638 #ifndef GENERIC_UMPC
3639 gtk_window_move(GTK_WINDOW(mainwin
->window
),
3640 prefs_common
.mainwin_x
,
3641 prefs_common
.mainwin_y
);
3643 gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin
->folderview
),
3644 prefs_common
.folderview_width
,
3645 prefs_common
.folderview_height
);
3646 gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin
->summaryview
),
3647 prefs_common
.summaryview_width
,
3648 prefs_common
.summaryview_height
);
3649 gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin
->messageview
),
3650 prefs_common
.msgview_width
,
3651 prefs_common
.msgview_height
);
3655 void main_window_hide(MainWindow
*mainwin
)
3657 main_window_get_size(mainwin
);
3658 main_window_get_position(mainwin
);
3660 gtk_widget_hide(mainwin
->window
);
3661 gtk_widget_hide(mainwin
->vbox_body
);
3664 static void main_window_set_widgets(MainWindow
*mainwin
, LayoutType layout_mode
)
3666 GtkWidget
*folderwin
= NULL
;
3667 GtkWidget
*messagewin
= NULL
;
3670 GtkWidget
*vbox_body
= mainwin
->vbox_body
;
3671 gboolean first_set
= (mainwin
->hpaned
== NULL
);
3672 debug_print("Setting widgets...\n");
3674 #ifndef GENERIC_UMPC
3675 mainwin
->messageview
->statusbar
= mainwin
->statusbar
;
3676 mainwin
->messageview
->statusbar_cid
= mainwin
->messageview_cid
;
3678 /* clean top-most container */
3679 if (mainwin
->hpaned
) {
3680 if (gtk_widget_get_parent(mainwin
->hpaned
) == mainwin
->vpaned
)
3681 gtk_widget_destroy(mainwin
->vpaned
);
3683 gtk_widget_destroy(mainwin
->hpaned
);
3686 cm_menu_set_sensitive_full(mainwin
->ui_manager
, "Menu/View/ShowHide/MessageView",
3687 (layout_mode
!= WIDE_MSGLIST_LAYOUT
&& layout_mode
!= SMALL_LAYOUT
));
3688 switch (layout_mode
) {
3689 case VERTICAL_LAYOUT
:
3692 hpaned
= gtk_hpaned_new();
3693 if (layout_mode
== VERTICAL_LAYOUT
)
3694 vpaned
= gtk_hpaned_new();
3696 vpaned
= gtk_vpaned_new();
3697 gtk_box_pack_start(GTK_BOX(vbox_body
), hpaned
, TRUE
, TRUE
, 0);
3698 gtk_paned_add1(GTK_PANED(hpaned
),
3699 GTK_WIDGET_PTR(mainwin
->folderview
));
3700 gtk_widget_show(hpaned
);
3701 gtk_widget_queue_resize(hpaned
);
3703 if (messageview_is_visible(mainwin
->messageview
)) {
3704 gtk_paned_add2(GTK_PANED(hpaned
), vpaned
);
3705 gtk_paned_pack1(GTK_PANED(vpaned
),
3706 GTK_WIDGET_PTR(mainwin
->summaryview
), TRUE
, TRUE
);
3708 gtk_paned_add2(GTK_PANED(hpaned
),
3709 GTK_WIDGET_PTR(mainwin
->summaryview
));
3710 g_object_ref(vpaned
);
3712 gtk_paned_add2(GTK_PANED(vpaned
),
3713 GTK_WIDGET_PTR(mainwin
->messageview
));
3714 gtk_widget_show(vpaned
);
3715 if (layout_mode
== SMALL_LAYOUT
&& first_set
) {
3716 mainwin_paned_show_first(GTK_PANED(hpaned
));
3718 gtk_widget_queue_resize(vpaned
);
3721 vpaned
= gtk_vpaned_new();
3722 hpaned
= gtk_hpaned_new();
3723 gtk_box_pack_start(GTK_BOX(vbox_body
), vpaned
, TRUE
, TRUE
, 0);
3724 gtk_paned_add1(GTK_PANED(vpaned
), hpaned
);
3726 gtk_paned_add1(GTK_PANED(hpaned
),
3727 GTK_WIDGET_PTR(mainwin
->folderview
));
3728 gtk_paned_add2(GTK_PANED(hpaned
),
3729 GTK_WIDGET_PTR(mainwin
->summaryview
));
3731 gtk_widget_show(hpaned
);
3732 gtk_widget_queue_resize(hpaned
);
3734 if (messageview_is_visible(mainwin
->messageview
)) {
3735 gtk_paned_add2(GTK_PANED(vpaned
),
3736 GTK_WIDGET_PTR(mainwin
->messageview
));
3738 g_object_ref(GTK_WIDGET_PTR(mainwin
->messageview
));
3740 gtk_widget_show(vpaned
);
3741 gtk_widget_queue_resize(vpaned
);
3743 case WIDE_MSGLIST_LAYOUT
:
3744 vpaned
= gtk_vpaned_new();
3745 hpaned
= gtk_hpaned_new();
3746 gtk_box_pack_start(GTK_BOX(vbox_body
), vpaned
, TRUE
, TRUE
, 0);
3748 gtk_paned_add1(GTK_PANED(vpaned
),
3749 GTK_WIDGET_PTR(mainwin
->summaryview
));
3750 gtk_paned_add1(GTK_PANED(hpaned
),
3751 GTK_WIDGET_PTR(mainwin
->folderview
));
3753 gtk_widget_show(hpaned
);
3754 gtk_widget_queue_resize(hpaned
);
3756 if (messageview_is_visible(mainwin
->messageview
)) {
3757 gtk_paned_add2(GTK_PANED(hpaned
),
3758 GTK_WIDGET_PTR(mainwin
->messageview
));
3760 g_object_ref(GTK_WIDGET_PTR(mainwin
->messageview
));
3762 gtk_paned_add2(GTK_PANED(vpaned
), hpaned
);
3764 gtk_widget_show(vpaned
);
3765 gtk_widget_queue_resize(vpaned
);
3768 g_warning("Unknown layout");
3772 mainwin
->hpaned
= hpaned
;
3773 mainwin
->vpaned
= vpaned
;
3775 if (layout_mode
== SMALL_LAYOUT
) {
3776 if (mainwin
->messageview
->visible
)
3777 main_window_toggle_message_view(mainwin
);
3780 if (layout_mode
== SMALL_LAYOUT
&& first_set
) {
3781 gtk_widget_realize(mainwin
->window
);
3782 gtk_widget_realize(mainwin
->folderview
->ctree
);
3783 gtk_widget_realize(mainwin
->summaryview
->hbox
);
3784 gtk_widget_realize(mainwin
->summaryview
->hbox_l
);
3785 gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin
->folderview
),
3786 prefs_common
.folderview_width
,
3787 prefs_common
.folderview_height
);
3788 gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin
->summaryview
),
3790 gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin
->messageview
),
3792 gtk_widget_set_size_request(GTK_WIDGET(mainwin
->window
),
3793 prefs_common
.mainwin_width
,
3794 prefs_common
.mainwin_height
);
3795 gtk_paned_set_position(GTK_PANED(mainwin
->hpaned
), 800);
3797 gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin
->folderview
),
3798 prefs_common
.folderview_width
,
3799 prefs_common
.folderview_height
);
3800 gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin
->summaryview
),
3801 prefs_common
.summaryview_width
,
3802 prefs_common
.summaryview_height
);
3803 gtk_widget_set_size_request(GTK_WIDGET_PTR(mainwin
->messageview
),
3804 prefs_common
.msgview_width
,
3805 prefs_common
.msgview_height
);
3806 gtk_widget_set_size_request(GTK_WIDGET(mainwin
->window
),
3807 prefs_common
.mainwin_width
,
3808 prefs_common
.mainwin_height
);
3810 /* remove headerview if not in prefs */
3811 headerview_set_visibility(mainwin
->messageview
->headerview
,
3812 prefs_common
.display_header_pane
);
3814 if (messageview_is_visible(mainwin
->messageview
))
3815 gtk_arrow_set(GTK_ARROW(mainwin
->summaryview
->toggle_arrow
),
3816 GTK_ARROW_DOWN
, GTK_SHADOW_OUT
);
3818 gtk_arrow_set(GTK_ARROW(mainwin
->summaryview
->toggle_arrow
),
3819 GTK_ARROW_UP
, GTK_SHADOW_OUT
);
3821 gtk_window_move(GTK_WINDOW(mainwin
->window
),
3822 prefs_common
.mainwin_x
,
3823 prefs_common
.mainwin_y
);
3825 gtk_widget_queue_resize(vbox_body
);
3826 gtk_widget_queue_resize(mainwin
->vbox
);
3827 gtk_widget_queue_resize(mainwin
->window
);
3828 /* CLAWS: previous "gtk_widget_show_all" makes noticeview
3829 * and mimeview icon list/ctree lose track of their visibility states */
3830 if (!noticeview_is_visible(mainwin
->messageview
->noticeview
))
3831 gtk_widget_hide(GTK_WIDGET_PTR(mainwin
->messageview
->noticeview
));
3832 if (!noticeview_is_visible(mainwin
->messageview
->mimeview
->siginfoview
))
3833 gtk_widget_hide(GTK_WIDGET_PTR(mainwin
->messageview
->mimeview
->siginfoview
));
3834 if (mainwin
->messageview
->mimeview
->ctree_mode
)
3835 gtk_widget_hide(mainwin
->messageview
->mimeview
->icon_mainbox
);
3837 gtk_widget_hide(mainwin
->messageview
->mimeview
->ctree_mainbox
);
3839 prefs_common
.layout_mode
= layout_mode
;
3841 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/ShowHide/MessageView",
3842 messageview_is_visible(mainwin
->messageview
));
3844 #ifndef GENERIC_UMPC
3845 switch (prefs_common
.layout_mode
) {
3847 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Layout/Standard", TRUE
);
3849 case VERTICAL_LAYOUT
:
3850 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Layout/ThreeColumns", TRUE
);
3853 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Layout/WideMessage", TRUE
);
3855 case WIDE_MSGLIST_LAYOUT
:
3856 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Layout/WideMessageList", TRUE
);
3859 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Layout/SmallScreen", TRUE
);
3866 (G_OBJECT(folderwin
), "size_allocate",
3867 G_CALLBACK(folder_window_size_allocate_cb
),
3872 (G_OBJECT(messagewin
), "size_allocate",
3873 G_CALLBACK(message_window_size_allocate_cb
),
3877 debug_print("Setting widgets done.\n");
3880 void main_window_destroy_all(void)
3882 while (mainwin_list
!= NULL
) {
3883 MainWindow
*mainwin
= (MainWindow
*)mainwin_list
->data
;
3885 /* free toolbar stuff */
3886 toolbar_clear_list(TOOLBAR_MAIN
);
3887 toolbar_destroy(mainwin
->toolbar
);
3889 summaryview_destroy(mainwin
->summaryview
);
3890 mainwin
->folderview
->mainwin
= NULL
;
3891 mainwin
->summaryview
->mainwin
= NULL
;
3892 mainwin
->messageview
->mainwin
= NULL
;
3894 g_free(mainwin
->toolbar
);
3897 mainwin_list
= g_list_remove(mainwin_list
, mainwin
);
3899 g_list_free(mainwin_list
);
3900 mainwin_list
= NULL
;
3903 static void toolbar_child_attached(GtkWidget
*widget
, GtkWidget
*child
,
3906 gtk_widget_set_size_request(child
, 1, -1);
3909 static void toolbar_child_detached(GtkWidget
*widget
, GtkWidget
*child
,
3912 gtk_widget_set_size_request(child
, -1, -1);
3914 #ifndef GENERIC_UMPC
3915 static gboolean
ac_label_button_pressed(GtkWidget
*widget
, GdkEventButton
*event
,
3918 MainWindow
*mainwin
= (MainWindow
*)data
;
3919 GtkWidget
*menu
= NULL
;
3921 if (!event
) return FALSE
;
3923 gtk_button_set_relief(GTK_BUTTON(widget
), GTK_RELIEF_NORMAL
);
3925 menu
= gtk_menu_item_get_submenu(GTK_MENU_ITEM(mainwin
->ac_menu
));
3927 gtk_menu_popup(GTK_MENU(menu
), NULL
, NULL
,
3928 menu_button_position
, widget
,
3929 event
->button
, event
->time
);
3934 static gint
main_window_close_cb(GtkWidget
*widget
, GdkEventAny
*event
,
3937 MainWindow
*mainwin
= (MainWindow
*)data
;
3938 gboolean close_allowed
= TRUE
;
3940 hooks_invoke(MAIN_WINDOW_CLOSE
, &close_allowed
);
3942 if (close_allowed
&& mainwin
->lock_count
== 0)
3943 app_exit_cb(NULL
, data
);
3948 static void main_window_size_allocate_cb(GtkWidget
*widget
,
3949 GtkAllocation
*allocation
,
3952 MainWindow
*mainwin
= (MainWindow
*)data
;
3953 main_window_get_size(mainwin
);
3956 static void folder_window_size_allocate_cb(GtkWidget
*widget
,
3957 GtkAllocation
*allocation
,
3960 MainWindow
*mainwin
= (MainWindow
*)data
;
3962 main_window_get_size(mainwin
);
3965 static void message_window_size_allocate_cb(GtkWidget
*widget
,
3966 GtkAllocation
*allocation
,
3969 MainWindow
*mainwin
= (MainWindow
*)data
;
3971 main_window_get_size(mainwin
);
3974 static void add_mailbox_cb(GtkAction
*action
, gpointer data
)
3976 MainWindow
*mainwin
= (MainWindow
*)data
;
3977 main_window_add_mailbox(mainwin
);
3980 static void update_folderview_cb(GtkAction
*action
, gpointer data
)
3982 MainWindow
*mainwin
= (MainWindow
*)data
;
3983 summary_show(mainwin
->summaryview
, NULL
, FALSE
);
3984 folderview_check_new_all();
3987 static void foldersort_cb(GtkAction
*action
, gpointer data
)
3992 static void import_mbox_cb(GtkAction
*action
, gpointer data
)
3994 MainWindow
*mainwin
= (MainWindow
*)data
;
3995 /* only notify if import has failed */
3996 if (import_mbox(mainwin
->summaryview
->folder_item
) == -1) {
3997 alertpanel_error(_("Mbox import has failed."));
4001 static void export_mbox_cb(GtkAction
*action
, gpointer data
)
4003 MainWindow
*mainwin
= (MainWindow
*)data
;
4004 /* only notify if export has failed */
4005 if (export_mbox(mainwin
->summaryview
->folder_item
) == -1) {
4006 alertpanel_error(_("Export to mbox has failed."));
4010 static void export_list_mbox_cb(GtkAction
*action
, gpointer data
)
4012 MainWindow
*mainwin
= (MainWindow
*)data
;
4013 /* only notify if export has failed */
4014 if (summaryview_export_mbox_list(mainwin
->summaryview
) == -1) {
4015 alertpanel_error(_("Export to mbox has failed."));
4019 static void empty_trash_cb(GtkAction
*action
, gpointer data
)
4021 MainWindow
*mainwin
= (MainWindow
*)data
;
4022 main_window_empty_trash(mainwin
, TRUE
, FALSE
);
4025 static void save_as_cb(GtkAction
*action
, gpointer data
)
4027 MainWindow
*mainwin
= (MainWindow
*)data
;
4028 summary_save_as(mainwin
->summaryview
);
4031 static void print_cb(GtkAction
*action
, gpointer data
)
4033 MainWindow
*mainwin
= (MainWindow
*)data
;
4034 summary_print(mainwin
->summaryview
);
4037 static void page_setup_cb(GtkAction
*action
, gpointer data
)
4039 MainWindow
*mainwin
= (MainWindow
*)data
;
4042 win
= (mainwin
? GTK_WINDOW(mainwin
->window
) : NULL
);
4044 printing_page_setup(win
);
4047 static void app_exit_cb(GtkAction
*action
, gpointer data
)
4049 MainWindow
*mainwin
= (MainWindow
*)data
;
4050 if (prefs_common
.clean_on_exit
) {
4051 if (!main_window_empty_trash(mainwin
, prefs_common
.ask_on_clean
, TRUE
))
4055 if (prefs_common
.confirm_on_exit
) {
4056 if (alertpanel(_("Exit"), _("Exit Claws Mail?"),
4057 GTK_STOCK_CANCEL
, GTK_STOCK_QUIT
, NULL
, ALERTFOCUS_FIRST
)
4058 != G_ALERTALTERNATE
)
4060 manage_window_focus_in(mainwin
->window
, NULL
, NULL
);
4063 app_will_exit(NULL
, mainwin
);
4066 static void search_cb(GtkAction
*action
, gpointer data
)
4068 MainWindow
*mainwin
= (MainWindow
*)data
;
4069 message_search(mainwin
->messageview
);
4072 static void search_folder_cb(GtkAction
*action
, gpointer data
)
4074 MainWindow
*mainwin
= (MainWindow
*)data
;
4075 FolderItem
*item
= mainwin
->summaryview
->folder_item
;
4076 cm_return_if_fail(item
!= NULL
);
4077 summary_search(mainwin
->summaryview
);
4080 static void mainwindow_quicksearch(GtkAction
*action
, gpointer data
)
4082 MainWindow
*mainwin
= (MainWindow
*)data
;
4083 summaryview_activate_quicksearch(mainwin
->summaryview
, TRUE
);
4086 static void toggle_message_cb(GtkAction
*action
, gpointer data
)
4088 MainWindow
*mainwin
= (MainWindow
*)data
;
4091 active
= gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action
));
4093 if (active
!= messageview_is_visible(mainwin
->messageview
))
4094 summary_toggle_view(mainwin
->summaryview
);
4097 static void toggle_toolbar_cb(GtkAction
*action
, GtkRadioAction
*current
, gpointer data
)
4099 gint value
= gtk_radio_action_get_current_value (GTK_RADIO_ACTION (current
));
4100 MainWindow
*mainwin
= (MainWindow
*)data
;
4101 toolbar_toggle(value
, mainwin
);
4104 static void main_window_reply_cb(GtkAction
*gaction
, gpointer data
)
4106 MainWindow
*mainwin
= (MainWindow
*)data
;
4107 MessageView
*msgview
= (MessageView
*)mainwin
->messageview
;
4108 GSList
*msginfo_list
= NULL
;
4109 gint action
= COMPOSE_REPLY
;
4110 const gchar
*a_name
= gtk_action_get_name(gaction
);
4112 DO_ACTION("Message/Reply", COMPOSE_REPLY
);
4113 DO_ACTION("Message/ReplyTo/All", COMPOSE_REPLY_TO_ALL
);
4114 DO_ACTION("Message/ReplyTo/Sender", COMPOSE_REPLY_TO_SENDER
);
4115 DO_ACTION("Message/ReplyTo/List", COMPOSE_REPLY_TO_LIST
);
4116 DO_ACTION("Message/Forward", COMPOSE_FORWARD_INLINE
);
4117 DO_ACTION("Message/ForwardAtt", COMPOSE_FORWARD_AS_ATTACH
);
4118 DO_ACTION("Message/Redirect", COMPOSE_REDIRECT
);
4119 DO_ACTION("Message/FollowupReply", COMPOSE_FOLLOWUP_AND_REPLY_TO
);
4121 cm_return_if_fail(msgview
!= NULL
);
4123 msginfo_list
= summary_get_selection(mainwin
->summaryview
);
4124 cm_return_if_fail(msginfo_list
!= NULL
);
4126 if (!summary_has_opened_message(mainwin
->summaryview
)) {
4127 compose_reply_from_messageview(NULL
, msginfo_list
, action
);
4128 } else if (summary_is_opened_message_selected(mainwin
->summaryview
)) {
4129 compose_reply_from_messageview(msgview
, msginfo_list
, action
);
4131 compose_reply_from_messageview(msgview
, NULL
, action
);
4134 g_slist_free(msginfo_list
);
4137 static void toggle_col_headers_cb(GtkAction
*gaction
, gpointer data
)
4139 MainWindow
*mainwin
= (MainWindow
*)data
;
4140 FolderView
*folderview
= mainwin
->folderview
;
4141 SummaryView
*summaryview
= mainwin
->summaryview
;
4142 MimeView
*mimeview
= mainwin
->messageview
->mimeview
;
4144 if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (gaction
))) {
4145 gtk_cmclist_column_titles_show(GTK_CMCLIST(folderview
->ctree
));
4146 gtk_cmclist_column_titles_show(GTK_CMCLIST(summaryview
->ctree
));
4147 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(mimeview
->ctree
), TRUE
);
4148 prefs_common
.show_col_headers
= TRUE
;
4150 gtk_cmclist_column_titles_hide(GTK_CMCLIST(folderview
->ctree
));
4151 gtk_cmclist_column_titles_hide(GTK_CMCLIST(summaryview
->ctree
));
4152 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(mimeview
->ctree
), FALSE
);
4153 prefs_common
.show_col_headers
= FALSE
;
4157 #ifndef GENERIC_UMPC
4158 static void toggle_statusbar_cb(GtkAction
*gaction
, gpointer data
)
4160 MainWindow
*mainwin
= (MainWindow
*)data
;
4161 if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (gaction
))) {
4162 gtk_widget_show(mainwin
->hbox_stat
);
4163 prefs_common
.show_statusbar
= TRUE
;
4165 gtk_widget_hide(mainwin
->hbox_stat
);
4166 prefs_common
.show_statusbar
= FALSE
;
4170 static void set_layout_cb(GtkAction
*action
, GtkRadioAction
*current
, gpointer data
)
4172 MainWindow
*mainwin
= (MainWindow
*)data
;
4173 gint value
= gtk_radio_action_get_current_value (GTK_RADIO_ACTION (current
));
4174 LayoutType layout_mode
= value
;
4175 LayoutType old_layout_mode
= prefs_common
.layout_mode
;
4176 if (mainwin
->menu_lock_count
) {
4179 if (!gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (current
))) {
4183 if (layout_mode
== prefs_common
.layout_mode
) {
4187 if (!mainwin
->messageview
->visible
&& layout_mode
!= SMALL_LAYOUT
)
4188 main_window_toggle_message_view(mainwin
);
4189 else if (mainwin
->messageview
->visible
&& layout_mode
== SMALL_LAYOUT
)
4190 main_window_toggle_message_view(mainwin
);
4192 main_window_separation_change(mainwin
, layout_mode
);
4193 mainwindow_reset_paned(GTK_PANED(mainwin
->vpaned
));
4194 if (old_layout_mode
== SMALL_LAYOUT
&& layout_mode
!= SMALL_LAYOUT
) {
4195 mainwindow_reset_paned(GTK_PANED(mainwin
->hpaned
));
4196 if (layout_mode
== VERTICAL_LAYOUT
)
4197 mainwindow_reset_paned(GTK_PANED(mainwin
->vpaned
));
4199 if (old_layout_mode
!= SMALL_LAYOUT
&& layout_mode
== SMALL_LAYOUT
) {
4200 mainwin_paned_show_first(GTK_PANED(mainwin
->hpaned
));
4201 mainwindow_exit_folder(mainwin
);
4203 summary_relayout(mainwin
->summaryview
);
4204 summary_update_unread(mainwin
->summaryview
, NULL
);
4208 void main_window_toggle_work_offline (MainWindow
*mainwin
, gboolean offline
,
4211 static gboolean switching
= FALSE
;
4218 offline_ask_sync
= ask_sync
;
4220 online_switch_clicked (GTK_BUTTON(mainwin
->online_switch
), mainwin
);
4222 online_switch_clicked (GTK_BUTTON(mainwin
->offline_switch
), mainwin
);
4223 offline_ask_sync
= TRUE
;
4225 inc_reset_offline_override_timers();
4230 static void toggle_work_offline_cb (GtkAction
*action
, gpointer data
)
4232 MainWindow
*mainwin
= (MainWindow
*)data
;
4233 main_window_toggle_work_offline(mainwin
, gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action
)), TRUE
);
4236 static gboolean
any_folder_want_synchronise(void)
4238 GList
*folderlist
= folder_get_list();
4240 /* see if there are synchronised folders */
4241 for (; folderlist
; folderlist
= folderlist
->next
) {
4242 Folder
*folder
= (Folder
*)folderlist
->data
;
4243 if (folder_want_synchronise(folder
)) {
4251 static void mainwindow_check_synchronise(MainWindow
*mainwin
, gboolean ask
)
4254 if (!any_folder_want_synchronise())
4257 if (offline_ask_sync
&& ask
&& alertpanel(_("Folder synchronisation"),
4258 _("Do you want to synchronise your folders now?"),
4259 GTK_STOCK_CANCEL
, _("_Synchronise"), NULL
, ALERTFOCUS_SECOND
) != G_ALERTALTERNATE
)
4262 if (offline_ask_sync
)
4263 folder_synchronise(NULL
);
4266 static void online_switch_clicked (GtkButton
*btn
, gpointer data
)
4268 MainWindow
*mainwin
;
4269 gboolean have_connectivity
;
4271 #ifdef HAVE_NETWORKMANAGER_SUPPORT
4272 have_connectivity
= networkmanager_is_online(NULL
);
4274 have_connectivity
= TRUE
;
4277 mainwin
= (MainWindow
*) data
;
4279 cm_return_if_fail(mainwin
!= NULL
);
4281 if (btn
== GTK_BUTTON(mainwin
->online_switch
)) {
4282 #ifndef GENERIC_UMPC
4283 gtk_widget_hide (mainwin
->online_switch
);
4284 gtk_widget_show (mainwin
->offline_switch
);
4286 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/File/OfflineMode", TRUE
);
4288 inc_autocheck_timer_remove();
4291 if (prefs_common
.work_offline
)
4294 if(have_connectivity
)
4295 mainwindow_check_synchronise(mainwin
, TRUE
);
4296 prefs_common
.work_offline
= TRUE
;
4297 imap_disconnect_all(have_connectivity
);
4298 nntp_disconnect_all(have_connectivity
);
4299 hooks_invoke(OFFLINE_SWITCH_HOOKLIST
, NULL
);
4302 if (!prefs_common
.work_offline
)
4304 #ifndef GENERIC_UMPC
4305 gtk_widget_hide (mainwin
->offline_switch
);
4306 gtk_widget_show (mainwin
->online_switch
);
4308 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/File/OfflineMode", FALSE
);
4309 prefs_common
.work_offline
= FALSE
;
4310 inc_autocheck_timer_set();
4311 refresh_resolvers();
4312 hooks_invoke(OFFLINE_SWITCH_HOOKLIST
, NULL
);
4316 static void addressbook_open_cb(GtkAction
*action
, gpointer data
)
4318 #ifndef USE_ALT_ADDRBOOK
4319 addressbook_open(NULL
);
4321 GError
* error
= NULL
;
4323 addressbook_dbus_open(FALSE
, &error
);
4325 g_warning("Failed to open address book: %s", error
->message
);
4326 g_error_free(error
);
4331 static void log_window_show_cb(GtkAction
*action
, gpointer data
)
4333 MainWindow
*mainwin
= (MainWindow
*)data
;
4334 log_window_show(mainwin
->logwin
);
4337 static void filtering_debug_window_show_cb(GtkAction
*action
, gpointer data
)
4339 MainWindow
*mainwin
= (MainWindow
*)data
;
4340 log_window_show(mainwin
->filtering_debugwin
);
4344 static void debug_log_show_cb(GtkAction
*action
, gpointer data
)
4346 GError
*error
= NULL
;
4347 gchar
*logpath8
= win32_debug_log_path();
4348 gunichar2
*logpath16
;
4350 debug_print("opening '%s'\n", logpath8
);
4352 logpath16
= g_utf8_to_utf16(logpath8
, -1, NULL
, NULL
, &error
);
4354 if (error
!= NULL
) {
4355 g_warning("couldn't convert debug log path '%s' to UTF-16: %s",
4356 logpath8
, error
->message
);
4357 g_error_free(error
);
4362 HINSTANCE ret
= ShellExecute(NULL
, NULL
, (LPCWSTR
)logpath16
,
4363 NULL
, NULL
, SW_SHOW
);
4367 debug_print("ShellExecute result: %"G_GSIZE_FORMAT
"\n", (gsize
)ret
);
4371 static void inc_cancel_cb(GtkAction
*action
, gpointer data
)
4377 static void send_cancel_cb(GtkAction
*action
, gpointer data
)
4382 static void move_to_cb(GtkAction
*action
, gpointer data
)
4384 MainWindow
*mainwin
= (MainWindow
*)data
;
4385 summary_move_to(mainwin
->summaryview
);
4388 static void copy_to_cb(GtkAction
*action
, gpointer data
)
4390 MainWindow
*mainwin
= (MainWindow
*)data
;
4391 summary_copy_to(mainwin
->summaryview
);
4394 static void delete_cb(GtkAction
*action
, gpointer data
)
4396 MainWindow
*mainwin
= (MainWindow
*)data
;
4397 summary_delete(mainwin
->summaryview
);
4400 static void delete_trash_cb(GtkAction
*action
, gpointer data
)
4402 MainWindow
*mainwin
= (MainWindow
*)data
;
4403 summary_delete_trash(mainwin
->summaryview
);
4406 static void cancel_cb(GtkAction
*action
, gpointer data
)
4408 MainWindow
*mainwin
= (MainWindow
*)data
;
4409 summary_cancel(mainwin
->summaryview
);
4412 static void open_msg_cb(GtkAction
*action
, gpointer data
)
4414 MainWindow
*mainwin
= (MainWindow
*)data
;
4415 summary_open_msg(mainwin
->summaryview
);
4418 static void view_source_cb(GtkAction
*action
, gpointer data
)
4420 MainWindow
*mainwin
= (MainWindow
*)data
;
4421 summary_view_source(mainwin
->summaryview
);
4424 static void show_all_header_cb(GtkAction
*action
, gpointer data
)
4426 MainWindow
*mainwin
= (MainWindow
*)data
;
4427 if (mainwin
->menu_lock_count
) return;
4428 prefs_common
.show_all_headers
=
4429 gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action
));
4430 summary_display_msg_selected(mainwin
->summaryview
,
4431 gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action
)));
4434 static void toggle_fullscreen_cb(GtkAction
*action
, gpointer data
)
4436 MainWindow
*mainwin
= (MainWindow
*)data
;
4437 if (mainwin
->menu_lock_count
) return;
4438 if (!gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action
))) {
4439 gtk_window_unfullscreen(GTK_WINDOW(mainwin
->window
));
4440 prefs_common
.mainwin_fullscreen
= FALSE
;
4443 prefs_common
.mainwin_fullscreen
= TRUE
;
4444 gtk_window_fullscreen(GTK_WINDOW(mainwin
->window
));
4448 static void toggle_menubar_cb(GtkAction
*action
, gpointer data
)
4450 MainWindow
*mainwin
= (MainWindow
*)data
;
4451 if (mainwin
->menu_lock_count
) return;
4452 if (!gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action
))) {
4453 gtk_widget_hide(GTK_WIDGET(mainwin
->menubar
));
4454 prefs_common
.mainwin_menubar
= FALSE
;
4456 gtk_widget_show(GTK_WIDGET(mainwin
->menubar
));
4457 prefs_common
.mainwin_menubar
= TRUE
;
4461 static void hide_quotes_cb(GtkAction
*action
, gpointer data
)
4463 MainWindow
*mainwin
= (MainWindow
*)data
;
4465 if (mainwin
->menu_lock_count
) return;
4467 if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action
))) {
4468 const gchar
*a_name
= gtk_action_get_name(GTK_ACTION(action
));
4469 if (!strcmp(a_name
, "View/Quotes/CollapseAll")) prefs_common
.hide_quotes
= 1;
4470 else if (!strcmp(a_name
, "View/Quotes/Collapse2")) prefs_common
.hide_quotes
= 2;
4471 else if (!strcmp(a_name
, "View/Quotes/Collapse3")) prefs_common
.hide_quotes
= 3;
4473 prefs_common
.hide_quotes
= 0;
4475 mainwin
->menu_lock_count
++;
4476 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Quotes/CollapseAll", (prefs_common
.hide_quotes
== 1));
4477 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Quotes/Collapse2", (prefs_common
.hide_quotes
== 2));
4478 cm_toggle_menu_set_active_full(mainwin
->ui_manager
, "Menu/View/Quotes/Collapse3", (prefs_common
.hide_quotes
== 3));
4479 mainwin
->menu_lock_count
--;
4481 summary_redisplay_msg(mainwin
->summaryview
);
4484 static void mark_cb(GtkAction
*action
, gpointer data
)
4486 MainWindow
*mainwin
= (MainWindow
*)data
;
4487 summary_mark(mainwin
->summaryview
);
4490 static void unmark_cb(GtkAction
*action
, gpointer data
)
4492 MainWindow
*mainwin
= (MainWindow
*)data
;
4493 summary_unmark(mainwin
->summaryview
);
4496 static void mark_as_read_cb(GtkAction
*action
, gpointer data
)
4498 MainWindow
*mainwin
= (MainWindow
*)data
;
4499 summary_mark_as_read(mainwin
->summaryview
);
4502 static void mark_as_unread_cb(GtkAction
*action
, gpointer data
)
4504 MainWindow
*mainwin
= (MainWindow
*)data
;
4505 summary_mark_as_unread(mainwin
->summaryview
);
4508 static void mark_all_read_cb(GtkAction
*action
, gpointer data
)
4510 MainWindow
*mainwin
= (MainWindow
*)data
;
4511 summary_mark_all_read(mainwin
->summaryview
, TRUE
);
4514 static void mark_all_unread_cb(GtkAction
*action
, gpointer data
)
4516 MainWindow
*mainwin
= (MainWindow
*)data
;
4517 summary_mark_all_unread(mainwin
->summaryview
, TRUE
);
4520 static void mark_as_spam_cb(GtkAction
*action
, gpointer data
)
4522 MainWindow
*mainwin
= (MainWindow
*)data
;
4523 summary_mark_as_spam(mainwin
->summaryview
, TRUE
, NULL
);
4526 static void mark_as_ham_cb(GtkAction
*action
, gpointer data
)
4528 MainWindow
*mainwin
= (MainWindow
*)data
;
4529 summary_mark_as_spam(mainwin
->summaryview
, FALSE
, NULL
);
4532 static void ignore_thread_cb(GtkAction
*action
, gpointer data
)
4534 MainWindow
*mainwin
= (MainWindow
*)data
;
4535 summary_ignore_thread(mainwin
->summaryview
);
4538 static void unignore_thread_cb(GtkAction
*action
, gpointer data
)
4540 MainWindow
*mainwin
= (MainWindow
*)data
;
4541 summary_unignore_thread(mainwin
->summaryview
);
4544 static void watch_thread_cb(GtkAction
*action
, gpointer data
)
4546 MainWindow
*mainwin
= (MainWindow
*)data
;
4547 summary_watch_thread(mainwin
->summaryview
);
4550 static void unwatch_thread_cb(GtkAction
*action
, gpointer data
)
4552 MainWindow
*mainwin
= (MainWindow
*)data
;
4553 summary_unwatch_thread(mainwin
->summaryview
);
4556 static void lock_msgs_cb(GtkAction
*action
, gpointer data
)
4558 MainWindow
*mainwin
= (MainWindow
*)data
;
4559 summary_msgs_lock(mainwin
->summaryview
);
4562 static void unlock_msgs_cb(GtkAction
*action
, gpointer data
)
4564 MainWindow
*mainwin
= (MainWindow
*)data
;
4565 summary_msgs_unlock(mainwin
->summaryview
);
4569 static void reedit_cb(GtkAction
*action
, gpointer data
)
4571 MainWindow
*mainwin
= (MainWindow
*)data
;
4572 summary_reedit(mainwin
->summaryview
);
4575 static void open_urls_cb(GtkAction
*action
, gpointer data
)
4577 MainWindow
*mainwin
= (MainWindow
*)data
;
4578 if (!mainwin
->summaryview
->displayed
&& mainwin
->summaryview
->selected
) {
4579 summary_display_msg_selected(mainwin
->summaryview
,
4580 prefs_common
.show_all_headers
);
4582 messageview_list_urls(mainwin
->messageview
);
4585 static void add_address_cb(GtkAction
*action
, gpointer data
)
4587 MainWindow
*mainwin
= (MainWindow
*)data
;
4588 summary_add_address(mainwin
->summaryview
);
4591 static void set_charset_cb(GtkAction
*action
, GtkRadioAction
*current
, gpointer data
)
4593 MainWindow
*mainwin
= (MainWindow
*)data
;
4594 gint value
= gtk_radio_action_get_current_value (GTK_RADIO_ACTION (current
));
4597 if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (current
))) {
4598 str
= conv_get_charset_str((CharSet
)value
);
4600 g_free(mainwin
->messageview
->forced_charset
);
4601 mainwin
->messageview
->forced_charset
= str
? g_strdup(str
) : NULL
;
4602 procmime_force_charset(str
);
4604 summary_redisplay_msg(mainwin
->summaryview
);
4606 debug_print("forced charset: %s\n", str
? str
: "Auto-Detect");
4610 static void set_decode_cb(GtkAction
*action
, GtkRadioAction
*current
, gpointer data
)
4612 MainWindow
*mainwin
= (MainWindow
*)data
;
4613 gint value
= gtk_radio_action_get_current_value (GTK_RADIO_ACTION (current
));
4614 if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (current
))) {
4615 mainwin
->messageview
->forced_encoding
= (EncodingType
)value
;
4617 summary_redisplay_msg(mainwin
->summaryview
);
4619 debug_print("forced encoding: %d\n", value
);
4623 static void hide_read_messages (GtkAction
*action
, gpointer data
)
4625 MainWindow
*mainwin
= (MainWindow
*)data
;
4626 GtkWidget
*menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/View/HideReadMessages");
4627 if (!mainwin
->summaryview
->folder_item
4628 || g_object_get_data(G_OBJECT(menuitem
), "dont_toggle"))
4630 summary_toggle_show_read_messages(mainwin
->summaryview
);
4633 static void hide_del_messages (GtkAction
*action
, gpointer data
)
4635 MainWindow
*mainwin
= (MainWindow
*)data
;
4636 GtkWidget
*menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/View/HideDelMessages");
4637 if (!mainwin
->summaryview
->folder_item
4638 || g_object_get_data(G_OBJECT(menuitem
), "dont_toggle"))
4640 summary_toggle_show_del_messages(mainwin
->summaryview
);
4643 static void hide_read_threads (GtkAction
*action
, gpointer data
)
4645 MainWindow
*mainwin
= (MainWindow
*)data
;
4646 GtkWidget
*menuitem
= gtk_ui_manager_get_widget(mainwin
->ui_manager
, "/Menu/View/HideReadThreads");
4647 if (!mainwin
->summaryview
->folder_item
4648 || g_object_get_data(G_OBJECT(menuitem
), "dont_toggle"))
4650 summary_toggle_show_read_threads(mainwin
->summaryview
);
4653 static void thread_cb(GtkAction
*action
, gpointer data
)
4655 MainWindow
*mainwin
= (MainWindow
*)data
;
4656 gboolean threaded
= FALSE
;
4657 guint selected_msgnum
= 0;
4659 if (mainwin
->menu_lock_count
) return;
4660 if (!mainwin
->summaryview
->folder_item
) return;
4662 selected_msgnum
= summary_get_msgnum(mainwin
->summaryview
, mainwin
->summaryview
->selected
);
4664 threaded
= gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action
));
4666 mainwin
->summaryview
->folder_item
->threaded
= threaded
;
4668 mainwin
->summaryview
->threaded
= threaded
;
4670 summary_show(mainwin
->summaryview
,
4671 mainwin
->summaryview
->folder_item
, FALSE
);
4672 summary_select_by_msgnum(mainwin
->summaryview
, selected_msgnum
, FALSE
);
4675 static void expand_threads_cb(GtkAction
*action
, gpointer data
)
4677 MainWindow
*mainwin
= (MainWindow
*)data
;
4678 summary_expand_threads(mainwin
->summaryview
);
4681 static void collapse_threads_cb(GtkAction
*action
, gpointer data
)
4683 MainWindow
*mainwin
= (MainWindow
*)data
;
4684 summary_collapse_threads(mainwin
->summaryview
);
4687 static void set_summary_display_item_cb(GtkAction
*action
, gpointer data
)
4689 prefs_summary_column_open();
4692 static void set_folder_display_item_cb(GtkAction
*action
, gpointer data
)
4694 prefs_folder_column_open();
4697 static void sort_summary_cb(GtkAction
*action
, GtkRadioAction
*current
, gpointer data
)
4699 MainWindow
*mainwin
= (MainWindow
*)data
;
4700 gint value
= gtk_radio_action_get_current_value (GTK_RADIO_ACTION (current
));
4702 if (mainwin
->menu_lock_count
) return;
4704 if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (current
))) {
4705 summary_sort(mainwin
->summaryview
, (FolderSortKey
)value
,
4706 mainwin
->summaryview
->sort_type
);
4710 static void sort_summary_type_cb(GtkAction
*gaction
, GtkRadioAction
*current
, gpointer data
)
4712 MainWindow
*mainwin
= (MainWindow
*)data
;
4713 gint value
= gtk_radio_action_get_current_value (GTK_RADIO_ACTION (current
));
4715 if (mainwin
->menu_lock_count
) return;
4717 if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (current
)))
4718 summary_sort(mainwin
->summaryview
,
4719 mainwin
->summaryview
->sort_key
, (FolderSortType
)value
);
4722 static void attract_by_subject_cb(GtkAction
*action
, gpointer data
)
4724 MainWindow
*mainwin
= (MainWindow
*)data
;
4725 summary_attract_by_subject(mainwin
->summaryview
);
4728 void mainwindow_delete_duplicated(MainWindow
*mainwin
)
4732 item
= folderview_get_selected_item(mainwin
->folderview
);
4736 main_window_cursor_wait(mainwin
);
4737 STATUSBAR_PUSH(mainwin
, _("Deleting duplicated messages..."));
4738 result
= folderutils_delete_duplicates(item
, prefs_common
.immediate_exec
?
4739 DELETE_DUPLICATES_REMOVE
: DELETE_DUPLICATES_SETFLAG
);
4740 STATUSBAR_POP(mainwin
);
4741 main_window_cursor_normal(mainwin
);
4747 alertpanel_notice(_("No duplicate message found in selected folder.\n"));
4752 if (prefs_common
.immediate_exec
) {
4753 msg
= ngettext("Deleted %d duplicate message in selected folder.\n",
4754 "Deleted %d duplicate messages in selected folder.\n",
4757 msg
= ngettext("Marked %d duplicate message for deletion in selected folder.\n",
4758 "Marked %d duplicate messages for deletion in selected folder.\n",
4761 alertpanel_notice(msg
, result
);
4767 static void delete_duplicated_cb(GtkAction
*action
, gpointer data
)
4769 mainwindow_delete_duplicated((MainWindow
*)data
);
4778 static void deldup_all(FolderItem
*item
, gpointer _data
)
4780 struct DelDupsData
*data
= _data
;
4783 result
= folderutils_delete_duplicates(item
, DELETE_DUPLICATES_REMOVE
);
4785 data
->dups
+= result
;
4790 void mainwindow_delete_duplicated_all(MainWindow
*mainwin
)
4792 struct DelDupsData data
= {0, 0};
4794 main_window_cursor_wait(mainwin
);
4795 STATUSBAR_PUSH(mainwin
, _("Deleting duplicated messages in all folders..."));
4796 folder_func_to_all_folders(deldup_all
, &data
);
4797 STATUSBAR_POP(mainwin
);
4798 main_window_cursor_normal(mainwin
);
4800 if (data
.dups
> 0) {
4801 alertpanel_notice(ngettext("Deleted %d duplicate message in %d folders.\n",
4802 "Deleted %d duplicate messages in %d folders.\n",
4804 data
.dups
, data
.folders
);
4806 alertpanel_notice(_("No duplicate message found in %d folders.\n"), data
.folders
);
4810 static void delete_duplicated_all_cb(GtkAction
*action
, gpointer mw
)
4812 MainWindow
*mainwin
= (MainWindow
*)mw
;
4814 mainwindow_delete_duplicated_all(mainwin
);
4817 static void filter_cb(GtkAction
*action
, gpointer data
)
4819 MainWindow
*mainwin
= (MainWindow
*)data
;
4820 summary_filter(mainwin
->summaryview
, FALSE
);
4823 static void filter_list_cb(GtkAction
*action
, gpointer data
)
4825 MainWindow
*mainwin
= (MainWindow
*)data
;
4826 summary_filter(mainwin
->summaryview
, TRUE
);
4829 static void process_cb(GtkAction
*action
, gpointer data
)
4831 MainWindow
*mainwin
= (MainWindow
*)data
;
4832 FolderItem
*item
= mainwin
->summaryview
->folder_item
;
4833 cm_return_if_fail(item
!= NULL
);
4835 item
->processing_pending
= TRUE
;
4836 folder_item_apply_processing(item
);
4837 item
->processing_pending
= FALSE
;
4840 static void execute_summary_cb(GtkAction
*action
, gpointer data
)
4842 MainWindow
*mainwin
= (MainWindow
*)data
;
4843 summary_execute(mainwin
->summaryview
);
4846 static void expunge_summary_cb(GtkAction
*action
, gpointer data
)
4848 MainWindow
*mainwin
= (MainWindow
*)data
;
4849 summary_expunge(mainwin
->summaryview
);
4852 static void update_summary_cb(GtkAction
*action
, gpointer data
)
4854 MainWindow
*mainwin
= (MainWindow
*)data
;
4856 FolderView
*folderview
= mainwin
->folderview
;
4858 if (!mainwin
->summaryview
->folder_item
) return;
4859 if ((fitem
= folderview_get_opened_item(folderview
)) == NULL
) return;
4861 folder_update_op_count();
4862 folder_item_scan(fitem
);
4863 summary_show(mainwin
->summaryview
, fitem
, FALSE
);
4866 static void prev_cb(GtkAction
*action
, gpointer data
)
4868 MainWindow
*mainwin
= (MainWindow
*)data
;
4869 summary_select_prev(mainwin
->summaryview
);
4872 static void next_cb(GtkAction
*action
, gpointer data
)
4874 MainWindow
*mainwin
= (MainWindow
*)data
;
4875 summary_select_next(mainwin
->summaryview
);
4878 static void prev_unread_cb(GtkAction
*action
, gpointer data
)
4880 MainWindow
*mainwin
= (MainWindow
*)data
;
4881 summary_select_prev_unread(mainwin
->summaryview
);
4884 static void next_unread_cb(GtkAction
*action
, gpointer data
)
4886 MainWindow
*mainwin
= (MainWindow
*)data
;
4887 summary_select_next_unread(mainwin
->summaryview
);
4890 static void prev_new_cb(GtkAction
*action
, gpointer data
)
4892 MainWindow
*mainwin
= (MainWindow
*)data
;
4893 summary_select_prev_new(mainwin
->summaryview
);
4896 static void next_new_cb(GtkAction
*action
, gpointer data
)
4898 MainWindow
*mainwin
= (MainWindow
*)data
;
4899 summary_select_next_new(mainwin
->summaryview
);
4902 static void prev_marked_cb(GtkAction
*action
, gpointer data
)
4904 MainWindow
*mainwin
= (MainWindow
*)data
;
4905 summary_select_prev_marked(mainwin
->summaryview
);
4908 static void next_marked_cb(GtkAction
*action
, gpointer data
)
4910 MainWindow
*mainwin
= (MainWindow
*)data
;
4911 summary_select_next_marked(mainwin
->summaryview
);
4914 static void prev_labeled_cb(GtkAction
*action
, gpointer data
)
4916 MainWindow
*mainwin
= (MainWindow
*)data
;
4917 summary_select_prev_labeled(mainwin
->summaryview
);
4920 static void next_labeled_cb(GtkAction
*action
, gpointer data
)
4922 MainWindow
*mainwin
= (MainWindow
*)data
;
4923 summary_select_next_labeled(mainwin
->summaryview
);
4926 static void prev_history_cb(GtkAction
*action
, gpointer data
)
4928 MainWindow
*mainwin
= (MainWindow
*)data
;
4929 MsgInfo
*info
= messageview_nav_get_prev(mainwin
->messageview
);
4931 if (info
->folder
!= mainwin
->summaryview
->folder_item
)
4932 folderview_select(mainwin
->folderview
, info
->folder
);
4933 summary_select_by_msgnum(mainwin
->summaryview
, info
->msgnum
,
4934 OPEN_SELECTED_ON_PREVNEXT
);
4935 procmsg_msginfo_free(&info
);
4936 main_window_set_menu_sensitive(mainwindow_get_mainwindow());
4937 toolbar_main_set_sensitive(mainwindow_get_mainwindow());
4941 static void next_history_cb(GtkAction
*action
, gpointer data
)
4943 MainWindow
*mainwin
= (MainWindow
*)data
;
4944 MsgInfo
*info
= messageview_nav_get_next(mainwin
->messageview
);
4946 if (info
->folder
!= mainwin
->summaryview
->folder_item
)
4947 folderview_select(mainwin
->folderview
, info
->folder
);
4948 summary_select_by_msgnum(mainwin
->summaryview
, info
->msgnum
,
4949 OPEN_SELECTED_ON_PREVNEXT
);
4950 procmsg_msginfo_free(&info
);
4951 main_window_set_menu_sensitive(mainwindow_get_mainwindow());
4952 toolbar_main_set_sensitive(mainwindow_get_mainwindow());
4956 static void parent_cb(GtkAction
*action
, gpointer data
)
4958 MainWindow
*mainwin
= (MainWindow
*)data
;
4959 summary_select_parent(mainwin
->summaryview
);
4962 static void goto_folder_cb(GtkAction
*action
, gpointer data
)
4964 MainWindow
*mainwin
= (MainWindow
*)data
;
4965 FolderItem
*to_folder
;
4967 to_folder
= foldersel_folder_sel(NULL
, FOLDER_SEL_ALL
, NULL
, FALSE
,
4968 _("Select folder to go to"));
4971 folderview_select(mainwin
->folderview
, to_folder
);
4974 static void goto_unread_folder_cb(GtkAction
*action
, gpointer data
)
4976 MainWindow
*mainwin
= (MainWindow
*)data
;
4977 folderview_select_next_with_flag(mainwin
->folderview
, MSG_UNREAD
);
4980 static void scroll_prev_line_cb(GtkAction
*action
, gpointer data
)
4982 MainWindow
*mainwin
= (MainWindow
*)data
;
4983 mimeview_scroll_one_line(mainwin
->messageview
->mimeview
,TRUE
);
4986 static void scroll_next_line_cb(GtkAction
*action
, gpointer data
)
4988 MainWindow
*mainwin
= (MainWindow
*)data
;
4989 mimeview_scroll_one_line(mainwin
->messageview
->mimeview
,FALSE
);
4992 static void scroll_prev_page_cb(GtkAction
*action
, gpointer data
)
4994 MainWindow
*mainwin
= (MainWindow
*)data
;
4995 mimeview_scroll_page(mainwin
->messageview
->mimeview
,TRUE
);
4998 static void scroll_next_page_cb(GtkAction
*action
, gpointer data
)
5000 MainWindow
*mainwin
= (MainWindow
*)data
;
5001 mimeview_scroll_page(mainwin
->messageview
->mimeview
,FALSE
);
5004 static void copy_cb(GtkAction
*action
, gpointer data
)
5006 MainWindow
*mainwin
= (MainWindow
*)data
;
5007 messageview_copy_clipboard(mainwin
->messageview
);
5010 static void allsel_cb(GtkAction
*action
, gpointer data
)
5012 MainWindow
*mainwin
= (MainWindow
*)data
;
5013 MessageView
*msgview
= mainwin
->messageview
;
5015 if (messageview_is_visible(msgview
) &&
5016 (gtk_widget_has_focus(msgview
->mimeview
->textview
->text
)))
5017 messageview_select_all(mainwin
->messageview
);
5019 summary_select_all(mainwin
->summaryview
);
5022 static void select_thread_cb(GtkAction
*action
, gpointer data
)
5024 MainWindow
*mainwin
= (MainWindow
*)data
;
5025 summary_select_thread(mainwin
->summaryview
, FALSE
, FALSE
);
5028 static void trash_thread_cb(GtkAction
*action
, gpointer data
)
5030 MainWindow
*mainwin
= (MainWindow
*)data
;
5031 summary_select_thread(mainwin
->summaryview
, FALSE
, TRUE
);
5034 static void delete_thread_cb(GtkAction
*action
, gpointer data
)
5036 MainWindow
*mainwin
= (MainWindow
*)data
;
5037 summary_select_thread(mainwin
->summaryview
, TRUE
, FALSE
);
5040 static void create_filter_cb(GtkAction
*gaction
, gpointer data
)
5042 MainWindow
*mainwin
= (MainWindow
*)data
;
5043 const gchar
*a_name
= gtk_action_get_name(gaction
);
5046 DO_ACTION("Tools/CreateFilterRule/Automatically", FILTER_BY_AUTO
);
5047 DO_ACTION("Tools/CreateFilterRule/ByFrom", FILTER_BY_FROM
);
5048 DO_ACTION("Tools/CreateFilterRule/ByTo", FILTER_BY_TO
);
5049 DO_ACTION("Tools/CreateFilterRule/BySubject", FILTER_BY_SUBJECT
);
5050 summary_filter_open(mainwin
->summaryview
, (PrefsFilterType
)action
, 0);
5053 static void create_processing_cb(GtkAction
*gaction
, gpointer data
)
5055 MainWindow
*mainwin
= (MainWindow
*)data
;
5056 const gchar
*a_name
= gtk_action_get_name(gaction
);
5059 DO_ACTION("Tools/CreateProcessingRule/Automatically", FILTER_BY_AUTO
);
5060 DO_ACTION("Tools/CreateProcessingRule/ByFrom", FILTER_BY_FROM
);
5061 DO_ACTION("Tools/CreateProcessingRule/ByTo", FILTER_BY_TO
);
5062 DO_ACTION("Tools/CreateProcessingRule/BySubject", FILTER_BY_SUBJECT
);
5063 summary_filter_open(mainwin
->summaryview
, (PrefsFilterType
)action
, 1);
5066 static void prefs_pre_processing_open_cb(GtkAction
*action
, gpointer data
)
5068 prefs_filtering_open(&pre_global_processing
,
5069 _("Processing rules to apply before folder rules"),
5070 MANUAL_ANCHOR_PROCESSING
,
5074 static void prefs_post_processing_open_cb(GtkAction
*action
, gpointer data
)
5076 prefs_filtering_open(&post_global_processing
,
5077 _("Processing rules to apply after folder rules"),
5078 MANUAL_ANCHOR_PROCESSING
,
5082 static void prefs_filtering_open_cb(GtkAction
*action
, gpointer data
)
5084 prefs_filtering_open(&filtering_rules
,
5085 _("Filtering configuration"),
5086 MANUAL_ANCHOR_FILTERING
,
5090 static void prefs_template_open_cb(GtkAction
*action
, gpointer data
)
5092 prefs_template_open();
5095 static void prefs_actions_open_cb(GtkAction
*action
, gpointer data
)
5097 MainWindow
*mainwin
= (MainWindow
*)data
;
5098 prefs_actions_open(mainwin
);
5101 static void prefs_tags_open_cb(GtkAction
*action
, gpointer data
)
5103 MainWindow
*mainwin
= (MainWindow
*)data
;
5104 GSList
* list
= summary_get_selected_msg_list(mainwin
->summaryview
);
5105 tag_apply_open(list
);
5108 static void ssl_manager_open_cb(GtkAction
*action
, gpointer data
)
5110 MainWindow
*mainwin
= (MainWindow
*)data
;
5111 ssl_manager_open(mainwin
);
5114 static void prefs_account_open_cb(GtkAction
*action
, gpointer data
)
5116 MainWindow
*mainwin
= (MainWindow
*)data
;
5118 new_account_cb(NULL
, mainwin
);
5120 account_open(cur_account
, FALSE
);
5124 static void new_account_cb(GtkAction
*action
, gpointer data
)
5126 account_edit_open(NULL
, NULL
);
5127 if (!compose_get_compose_list()) account_add();
5130 static void account_selector_menu_cb(GtkMenuItem
*menuitem
, gpointer data
)
5132 FolderItem
*item
= NULL
;
5133 cur_account
= (PrefsAccount
*)data
;
5135 if (!mainwindow_get_mainwindow())
5137 main_window_show_cur_account(mainwindow_get_mainwindow());
5138 toolbar_update(TOOLBAR_MAIN
, mainwindow_get_mainwindow());
5139 main_window_set_menu_sensitive(mainwindow_get_mainwindow());
5140 toolbar_main_set_sensitive(mainwindow_get_mainwindow());
5141 item
= folderview_get_selected_item(
5142 mainwindow_get_mainwindow()->folderview
);
5144 toolbar_set_compose_button
5145 (mainwindow_get_mainwindow()->toolbar
,
5146 FOLDER_TYPE(item
->folder
) == F_NEWS
?
5147 COMPOSEBUTTON_NEWS
: COMPOSEBUTTON_MAIL
);
5151 static void account_receive_menu_cb(GtkMenuItem
*menuitem
, gpointer data
)
5153 MainWindow
*mainwin
= (MainWindow
*)mainwin_list
->data
;
5154 PrefsAccount
*account
= (PrefsAccount
*)data
;
5156 inc_account_mail(mainwin
, account
);
5158 #ifndef GENERIC_UMPC
5159 static void account_compose_menu_cb(GtkMenuItem
*menuitem
, gpointer data
)
5161 PrefsAccount
*account
= (PrefsAccount
*)data
;
5163 compose_new_with_folderitem(account
, NULL
, NULL
);
5166 static void prefs_open_cb(GtkAction
*action
, gpointer data
)
5171 static void plugins_open_cb(GtkAction
*action
, gpointer data
)
5173 pluginwindow_create();
5176 static void manual_open_cb(GtkAction
*action
, gpointer data
)
5178 manual_open(MANUAL_MANUAL_CLAWS
, NULL
);
5181 static void manual_faq_open_cb(GtkAction
*action
, gpointer data
)
5183 manual_open(MANUAL_FAQ_CLAWS
, NULL
);
5186 static void legend_open_cb(GtkAction
*action
, gpointer data
)
5192 static void set_default_client_cb(GtkAction
*action
, gpointer data
)
5194 char exename
[MAX_PATH
];
5195 gchar
*binary_icon
= NULL
;
5196 gchar
*binary_compose
= NULL
;
5197 gchar
*binary_run
= NULL
;
5199 if ( !GetModuleFileNameA (0, exename
, sizeof (exename
)) ) {
5200 alertpanel_error(_("Can not register as default client: impossible to get executable path."));
5203 binary_icon
= g_strconcat(exename
, ",0", NULL
);
5204 binary_compose
= g_strconcat(exename
, " --compose %1", NULL
);
5205 binary_run
= g_strconcat(exename
, NULL
);
5207 /* Try to set the Mail Start menu item to Claws. It may fail if we're not root; we don't care */
5208 r
= write_w32_registry_string("HKLM", "Software\\Clients\\Mail",
5211 r
= write_w32_registry_string("HKCU", "Software\\Clients\\Mail\\Claws Mail",
5214 r
= write_w32_registry_string("HKCU", "Software\\Clients\\Mail\\Claws Mail",
5217 r
= write_w32_registry_string("HKCU", "Software\\Clients\\Mail\\Claws Mail\\Protocols\\mailto",
5218 "", "URL:MailTo-Protocol");
5220 r
= write_w32_registry_string("HKCU", "Software\\Clients\\Mail\\Claws Mail\\Protocols\\mailto",
5221 "URL Protocol", "");
5223 r
= write_w32_registry_dword ("HKCU", "Software\\Clients\\Mail\\Claws Mail\\Protocols\\mailto",
5226 r
= write_w32_registry_string ("HKCU", "Software\\Clients\\Mail\\Claws Mail\\Protocols\\mailto",
5227 "FriendlyTypeName", "Claws-Mail URL");
5229 r
= write_w32_registry_string("HKCU", "Software\\Clients\\Mail\\Claws Mail\\Protocols\\mailto\\DefaultIcon",
5232 r
= write_w32_registry_string("HKCU", "Software\\Clients\\Mail\\Claws Mail\\Protocols\\mailto\\shell\\open\\command",
5233 "", binary_compose
);
5235 r
= write_w32_registry_string("HKCU", "Software\\Clients\\Mail\\Claws Mail\\shell\\open\\command",
5239 r
= write_w32_registry_string("HKCU", "Software\\Classes\\mailto",
5240 "", "URL:MailTo-Protocol");
5242 r
= write_w32_registry_string("HKCU", "Software\\Classes\\mailto",
5243 "URL Protocol", "");
5245 r
= write_w32_registry_dword ("HKCU", "Software\\Classes\\mailto",
5248 r
= write_w32_registry_string("HKCU", "Software\\Classes\\mailto",
5249 "FriendlyTypeName", "Claws-Mail URL");
5251 r
= write_w32_registry_string("HKCU", "Software\\Classes\\mailto\\DefaultIcon",
5254 r
= write_w32_registry_string("HKCU", "Software\\Classes\\mailto\\shell\\open\\command",
5255 "", binary_compose
);
5258 SendMessage(HWND_BROADCAST
, WM_SETTINGCHANGE
, 0, (LPARAM
)"Software\\Clients\\Mail");
5259 alertpanel_notice(_("Claws Mail has been registered as default client."));
5261 alertpanel_error(_("Can not register as default client: impossible to write to the registry."));
5263 g_free(binary_icon
);
5264 g_free(binary_compose
);
5269 static void scan_tree_func(Folder
*folder
, FolderItem
*item
, gpointer data
)
5271 MainWindow
*mainwin
= (MainWindow
*)data
;
5275 str
= g_strdup_printf(_("Scanning folder %s%c%s..."),
5276 LOCAL_FOLDER(folder
)->rootpath
,
5280 str
= g_strdup_printf(_("Scanning folder %s..."),
5281 LOCAL_FOLDER(folder
)->rootpath
);
5283 STATUSBAR_PUSH(mainwin
, str
);
5284 STATUSBAR_POP(mainwin
);
5288 static gboolean
mainwindow_focus_in_event(GtkWidget
*widget
, GdkEventFocus
*focus
,
5291 SummaryView
*summary
;
5293 cm_return_val_if_fail(data
, FALSE
);
5294 if (!g_list_find(mainwin_list
, data
))
5296 summary
= ((MainWindow
*)data
)->summaryview
;
5297 cm_return_val_if_fail(summary
, FALSE
);
5299 if (GTK_CMCLIST(summary
->ctree
)->selection
&&
5300 g_list_length(GTK_CMCLIST(summary
->ctree
)->selection
) > 1)
5306 static gboolean
mainwindow_visibility_event_cb(GtkWidget
*widget
, GdkEventVisibility
*event
,
5309 is_obscured
= (event
->state
== GDK_VISIBILITY_FULLY_OBSCURED
);
5313 static gboolean
mainwindow_state_event_cb(GtkWidget
*widget
, GdkEventWindowState
*state
,
5316 if (!claws_is_starting()
5317 && state
->changed_mask
&GDK_WINDOW_STATE_ICONIFIED
5318 && state
->new_window_state
&GDK_WINDOW_STATE_ICONIFIED
) {
5320 if (iconified_count
> 0)
5321 hooks_invoke(MAIN_WINDOW_GOT_ICONIFIED
, NULL
);
5323 } else if (!claws_is_starting()) {
5324 prefs_common
.mainwin_maximised
=
5325 ((state
->new_window_state
&GDK_WINDOW_STATE_MAXIMIZED
) != 0);
5327 if (state
->new_window_state
== 0)
5328 gtk_window_set_skip_taskbar_hint(GTK_WINDOW(widget
), FALSE
);
5332 gboolean
mainwindow_is_obscured(void)
5338 * Harvest addresses for selected folder.
5340 static void addr_harvest_cb( GtkAction
*action
, gpointer data
)
5342 MainWindow
*mainwin
= (MainWindow
*)data
;
5344 addressbook_harvest( mainwin
->summaryview
->folder_item
, FALSE
, NULL
);
5348 * Harvest addresses for selected messages in summary view.
5350 static void addr_harvest_msg_cb( GtkAction
*action
, gpointer data
)
5352 MainWindow
*mainwin
= (MainWindow
*)data
;
5353 summary_harvest_address( mainwin
->summaryview
);
5357 *\brief get a MainWindow
5359 *\return MainWindow * The first mainwindow in the mainwin_list
5361 MainWindow
*mainwindow_get_mainwindow(void)
5363 if (mainwin_list
&& mainwin_list
->data
)
5364 return (MainWindow
*)(mainwin_list
->data
);
5369 static gboolean
mainwindow_progressindicator_hook(gpointer source
, gpointer userdata
)
5371 ProgressData
*data
= (ProgressData
*) source
;
5372 MainWindow
*mainwin
= (MainWindow
*) userdata
;
5374 switch (data
->cmd
) {
5375 case PROGRESS_COMMAND_START
:
5376 case PROGRESS_COMMAND_STOP
:
5377 gtk_progress_bar_set_fraction
5378 (GTK_PROGRESS_BAR(mainwin
->progressbar
), 0.0);
5380 case PROGRESS_COMMAND_SET_PERCENTAGE
:
5381 gtk_progress_bar_set_fraction
5382 (GTK_PROGRESS_BAR(mainwin
->progressbar
), data
->value
);
5385 while (gtk_events_pending()) gtk_main_iteration ();
5390 static void sync_cb(GtkAction
*action
, gpointer data
)
5392 MainWindow
*mainwin
= (MainWindow
*)data
;
5393 mainwindow_check_synchronise(mainwin
, FALSE
);
5396 static void forget_session_passwords_cb(GtkAction
*action
, gpointer data
)
5398 MainWindow
*mainwin
= (MainWindow
*)data
;
5403 main_window_lock(mainwin
);
5404 for (list
= account_get_list(); list
!= NULL
; list
= list
->next
) {
5405 PrefsAccount
*account
= list
->data
;
5406 if (account
->session_passwd
) {
5407 g_free(account
->session_passwd
);
5408 account
->session_passwd
= NULL
;
5411 if (account
->session_smtp_passwd
) {
5412 g_free(account
->session_smtp_passwd
);
5413 account
->session_smtp_passwd
= NULL
;
5418 main_window_unlock(mainwin
);
5419 alertpanel_notice(ngettext("Forgotten %d password in %d accounts.\n",
5420 "Forgotten %d passwords in %d accounts.\n",
5424 #ifndef PASSWORD_CRYPTO_OLD
5425 static void forget_master_passphrase_cb(GtkAction
*action
, gpointer data
)
5427 MainWindow
*mainwin
= (MainWindow
*)data
;
5429 main_window_lock(mainwin
);
5430 master_passphrase_forget();
5431 main_window_unlock(mainwin
);
5435 void mainwindow_learn (MainWindow
*mainwin
, gboolean is_spam
)
5437 summary_mark_as_spam(mainwin
->summaryview
, is_spam
, NULL
);
5440 void mainwindow_jump_to(const gchar
*target
, gboolean popup
)
5444 FolderItem
*item
= NULL
;
5446 MainWindow
*mainwin
= mainwindow_get_mainwindow();
5447 gchar
*from_uri
= NULL
;
5452 g_print("not initialized\n");
5456 if ((from_uri
= g_filename_from_uri(target
, NULL
, NULL
)) != NULL
)
5459 tmp
= g_strdup(target
);
5461 if ((p
= strstr(tmp
, "\r")) != NULL
)
5463 if ((p
= strstr(tmp
, "\n")) != NULL
)
5466 if ((item
= folder_find_item_from_identifier(tmp
))) {
5467 g_print("selecting folder '%s'\n", tmp
);
5468 folderview_select(mainwin
->folderview
, item
);
5470 main_window_popup(mainwin
);
5475 msg
= strrchr(tmp
, '/');
5478 if ((item
= folder_find_item_from_identifier(tmp
))) {
5479 g_print("selecting folder '%s'\n", tmp
);
5480 folderview_select(mainwin
->folderview
, item
);
5481 } else if ((item
= folder_find_item_from_real_path(tmp
))) {
5482 g_print("selecting folder '%s'\n", tmp
);
5483 folderview_select(mainwin
->folderview
, item
);
5485 g_print("'%s' not found\n", tmp
);
5487 if (item
&& msg
&& atoi(msg
)) {
5488 g_print("selecting message %d\n", atoi(msg
));
5489 summary_select_by_msgnum(mainwin
->summaryview
, atoi(msg
), TRUE
);
5491 main_window_popup(mainwin
);
5494 } else if (item
&& msg
[0] == '<' && msg
[strlen(msg
)-1] == '>') {
5495 MsgInfo
*msginfo
= NULL
;
5497 msg
[strlen(msg
)-1] = '\0';
5498 msginfo
= folder_item_get_msginfo_by_msgid(item
, msg
);
5500 g_print("selecting message %s\n", msg
);
5501 summary_select_by_msgnum(mainwin
->summaryview
, msginfo
->msgnum
, TRUE
);
5503 main_window_popup(mainwin
);
5505 procmsg_msginfo_free(&msginfo
);
5508 g_print("'%s' not found\n", msg
);
5511 g_print("'%s' not found\n", msg
);
5514 g_print("'%s' not found\n", tmp
);
5520 void mainwindow_exit_folder(MainWindow
*mainwin
) {
5521 if (prefs_common
.layout_mode
== SMALL_LAYOUT
) {
5522 folderview_close_opened(mainwin
->folderview
, FALSE
);
5523 mainwin_paned_show_first(GTK_PANED(mainwin
->hpaned
));
5524 folderview_grab_focus(mainwin
->folderview
);
5526 mainwin
->in_folder
= FALSE
;
5527 main_window_set_menu_sensitive(mainwin
);
5530 void mainwindow_enter_folder(MainWindow
*mainwin
) {
5531 if (prefs_common
.layout_mode
== SMALL_LAYOUT
) {
5532 mainwin_paned_show_last(GTK_PANED(mainwin
->hpaned
));
5534 mainwin
->in_folder
= TRUE
;
5535 main_window_set_menu_sensitive(mainwin
);
5538 static void save_part_as_cb(GtkAction
*action
, gpointer data
)
5540 MainWindow
*mainwin
= (MainWindow
*)data
;
5542 if (mainwin
->messageview
5543 && mainwin
->messageview
->mimeview
)
5544 mimeview_save_as(mainwin
->messageview
->mimeview
);
5547 static void view_part_as_text_cb(GtkAction
*action
, gpointer data
)
5549 MainWindow
*mainwin
= (MainWindow
*)data
;
5551 if (mainwin
->messageview
5552 && mainwin
->messageview
->mimeview
)
5553 mimeview_display_as_text(mainwin
->messageview
->mimeview
);
5556 static void open_part_cb(GtkAction
*action
, gpointer data
)
5558 MainWindow
*mainwin
= (MainWindow
*)data
;
5560 if (mainwin
->messageview
5561 && mainwin
->messageview
->mimeview
)
5562 mimeview_launch(mainwin
->messageview
->mimeview
, NULL
);
5565 static void open_part_with_cb(GtkAction
*action
, gpointer data
)
5567 MainWindow
*mainwin
= (MainWindow
*)data
;
5569 if (mainwin
->messageview
5570 && mainwin
->messageview
->mimeview
)
5571 mimeview_open_with(mainwin
->messageview
->mimeview
);
5574 static void check_signature_cb(GtkAction
*action
, gpointer data
)
5576 MainWindow
*mainwin
= (MainWindow
*)data
;
5578 if (mainwin
->messageview
5579 && mainwin
->messageview
->mimeview
)
5580 mimeview_check_signature(mainwin
->messageview
->mimeview
);
5583 static void goto_next_part_cb(GtkAction
*action
, gpointer data
)
5585 MainWindow
*mainwin
= (MainWindow
*)data
;
5587 if (mainwin
->messageview
5588 && mainwin
->messageview
->mimeview
)
5589 mimeview_select_next_part(mainwin
->messageview
->mimeview
);
5592 static void goto_prev_part_cb(GtkAction
*action
, gpointer data
)
5594 MainWindow
*mainwin
= (MainWindow
*)data
;
5596 if (mainwin
->messageview
5597 && mainwin
->messageview
->mimeview
)
5598 mimeview_select_prev_part(mainwin
->messageview
->mimeview
);