/*
Claws Mail -- a GTK+ based, lightweight, and fast e-mail client
- Copyright (C) 1999-2007 Hiroyuki Yamamoto and the Claws Mail team
+ Copyright (C) 1999-2008 Hiroyuki Yamamoto and the Claws Mail team
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
static void main_window_menu_callback_unblock (MainWindow *mainwin);
static void main_window_show_cur_account (MainWindow *mainwin);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static void main_window_separation_change (MainWindow *mainwin,
LayoutType layout_mode);
#endif
static void toolbar_child_detached (GtkWidget *widget,
GtkWidget *child,
gpointer data);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static gboolean ac_label_button_pressed (GtkWidget *widget,
GdkEventButton *event,
gpointer data);
static void toggle_col_headers_cb(MainWindow *mainwin,
guint action,
GtkWidget *widget);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static void toggle_statusbar_cb (MainWindow *mainwin,
guint action,
GtkWidget *widget);
gpointer data);
static void account_receive_menu_cb (GtkMenuItem *menuitem,
gpointer data);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static void account_compose_menu_cb (GtkMenuItem *menuitem,
gpointer data);
#endif
NULL, toggle_toolbar_cb, TOOLBAR_ICON, "/View/Show or hide/Toolbar/Text below icons"},
{N_("/_View/Show or hi_de/_Toolbar/_Text only"),
NULL, toggle_toolbar_cb, TOOLBAR_TEXT, "/View/Show or hide/Toolbar/Text below icons"},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{N_("/_View/Show or hi_de/_Toolbar/_Hide"),
NULL, toggle_toolbar_cb, TOOLBAR_NONE, "/View/Show or hide/Toolbar/Text below icons"},
#endif
{N_("/_View/Show or hi_de/_Message view"),
"V", toggle_message_cb, 0, "<ToggleItem>"},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{N_("/_View/Show or hi_de/Status _bar"),
NULL, toggle_statusbar_cb, 0, "<ToggleItem>"},
#endif
{N_("/_View/Set displayed _columns/in _Message list..."),NULL, set_summary_display_item_cb, 0, NULL},
{N_("/_View/---"), NULL, NULL, 0, "<Separator>"},
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
{N_("/_View/La_yout"), NULL, NULL, 0, "<Branch>"},
{N_("/_View/Layout/_Standard"), NULL, set_layout_cb, NORMAL_LAYOUT, "<RadioItem>"},
{N_("/_View/Layout/_Three columns"), NULL, set_layout_cb, VERTICAL_LAYOUT, "/View/Layout/Standard"},
gtk_menu_item_set_submenu(GTK_MENU_ITEM(label_menuitem), menu);
mainwin->tags_menu = menu;
}
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static gboolean warning_icon_pressed(GtkWidget *widget, GdkEventButton *evt,
MainWindow *mainwindow)
{
gtk_window_fullscreen(GTK_WINDOW(widget));
}
break;
+ case GDK_F7:
+ {
+ PangoFontDescription *font_desc;
+ int size;
+ font_desc = pango_font_description_from_string(prefs_common.normalfont);
+ size = pango_font_description_get_size(font_desc)/PANGO_SCALE;
+ if (size < 30) {
+ size++; pango_font_description_set_size(font_desc, size*PANGO_SCALE);
+ g_free(prefs_common.normalfont);
+ prefs_common.normalfont = pango_font_description_to_string(font_desc);
+ main_window_reflect_prefs_all();
+ }
+ pango_font_description_free(font_desc);
+ font_desc = pango_font_description_from_string(prefs_common.textfont);
+ size = pango_font_description_get_size(font_desc)/PANGO_SCALE;
+ if (size < 30) {
+ size++; pango_font_description_set_size(font_desc, size*PANGO_SCALE);
+ g_free(prefs_common.textfont);
+ prefs_common.textfont = pango_font_description_to_string(font_desc);
+ main_window_reflect_prefs_all();
+ }
+ pango_font_description_free(font_desc);
+ }
+ break;
+ case GDK_F8:
+ {
+ PangoFontDescription *font_desc;
+ int size;
+ font_desc = pango_font_description_from_string(prefs_common.normalfont);
+ size = pango_font_description_get_size(font_desc)/PANGO_SCALE;
+ if (size > 5) {
+ size--; pango_font_description_set_size(font_desc, size*PANGO_SCALE);
+ g_free(prefs_common.normalfont);
+ prefs_common.normalfont = pango_font_description_to_string(font_desc);
+ main_window_reflect_prefs_all();
+ }
+ pango_font_description_free(font_desc);
+ font_desc = pango_font_description_from_string(prefs_common.textfont);
+ size = pango_font_description_get_size(font_desc)/PANGO_SCALE;
+ if (size > 5) {
+ size--; pango_font_description_set_size(font_desc, size*PANGO_SCALE);
+ g_free(prefs_common.textfont);
+ prefs_common.textfont = pango_font_description_to_string(font_desc);
+ main_window_reflect_prefs_all();
+ }
+ pango_font_description_free(font_desc);
+ }
+ break;
case GDK_Escape:
if (mainwin->summaryview &&
mainwin->summaryview->ext_messageview &&
static void led_update(FolderItem *removed_item)
{
- guint new, unread, unreadmarked, marked, total;
+ guint new, unread, unreadmarked, marked, total, replied;
+ guint forwarded, locked, ignored, watched;
- folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total);
+ folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total,
+ &replied, &forwarded, &locked, &ignored,
+ &watched);
if (removed_item) {
total -= removed_item->total_msgs;
new -= removed_item->new_msgs;
GtkWidget *menubar;
GtkWidget *handlebox;
GtkWidget *vbox_body;
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
GtkWidget *hbox_stat;
GtkWidget *statusbar;
GtkWidget *progressbar;
window = GTK_WIDGET(gtkut_window_new(GTK_WINDOW_TOPLEVEL, "mainwindow"));
gtk_window_set_title(GTK_WINDOW(window), PROG_VERSION);
gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
-#ifdef MAEMO
+#ifdef GENERIC_UMPC
prefs_common.layout_mode = SMALL_LAYOUT;
#endif
if (!geometry.min_height) {
gtk_container_set_border_width(GTK_CONTAINER(vbox_body), BORDER_WIDTH);
gtk_box_pack_start(GTK_BOX(vbox), vbox_body, TRUE, TRUE, 0);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
hbox_stat = gtk_hbox_new(FALSE, 2);
gtk_box_pack_end(GTK_BOX(vbox_body), hbox_stat, FALSE, FALSE, 0);
mainwin->vbox_body = vbox_body;
mainwin->online_switch = online_switch;
mainwin->offline_switch = offline_switch;
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
messageview->statusbar = statusbar;
mainwin->statusbar = statusbar;
mainwin->hbox_stat = hbox_stat;
}
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
gtk_widget_hide(mainwin->hbox_stat);
menuitem = gtk_item_factory_get_item
(ifactory, "/View/Show or hide/Status bar");
menu items in different menus */
menu_connect_identical_items();
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
gtk_window_iconify(GTK_WINDOW(mainwin->window));
#endif
gboolean pixmap_theme_changed = GPOINTER_TO_INT(data);
GList *cur;
MainWindow *mainwin;
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
GtkWidget *pixmap;
#endif
for (cur = mainwin_list; cur != NULL; cur = cur->next) {
compose_reflect_prefs_pixmap_theme();
folderview_reflect_prefs_pixmap_theme(mainwin->folderview);
summary_reflect_prefs_pixmap_theme(mainwin->summaryview);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
pixmap = stock_pixmap_widget(mainwin->hbox_stat, STOCK_PIXMAP_ONLINE);
gtk_container_remove(GTK_CONTAINER(mainwin->online_switch),
mainwin->online_pixmap);
gtk_widget_show(pixmap);
mainwin->offline_pixmap = pixmap;
#endif
+ hooks_invoke(THEME_CHANGED_HOOKLIST, NULL);
}
headerview_set_font(mainwin->messageview->headerview);
textview_reflect_prefs(mainwin->messageview->mimeview->textview);
folderview_reflect_prefs();
summary_reflect_prefs();
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
summary_redisplay_msg(mainwin->summaryview);
#endif
if (prefs_common.layout_mode == SMALL_LAYOUT) {
GList *cur;
MainWindow *mainwin = (MainWindow *)data;
- if (summary_is_locked(mainwin->summaryview))
+ if (summary_is_locked(mainwin->summaryview)) {
+ tags_tag = 0;
return TRUE;
-
+ }
/* re-create tags submenu */
menu = GTK_MENU_SHELL(mainwin->tags_menu);
g_return_val_if_fail(menu != NULL, FALSE);
mainwindow_tags_menu_create(mainwin, TRUE);
summary_reflect_tags_changes(mainwin->summaryview);
+ tags_tag = 0;
return FALSE;
}
void main_window_reflect_prefs_all_real(gboolean pixmap_theme_changed)
{
- if (prefs_tag == 0 || pixmap_theme_changed) {
- prefs_tag = g_timeout_add(500, reflect_prefs_timeout_cb,
+ if (prefs_tag == 0) {
+ prefs_tag = g_timeout_add(100, reflect_prefs_timeout_cb,
GINT_TO_POINTER(pixmap_theme_changed));
}
}
for (cur_ac = account_list; cur_ac != NULL; cur_ac = cur_ac->next) {
ac_prefs = (PrefsAccount *)cur_ac->data;
+ if (ac_prefs->protocol == A_NONE)
+ continue;
+
menuitem = gtk_menu_item_new_with_label
(ac_prefs->account_name ? ac_prefs->account_name
: _("Untitled"));
for (cur_ac = account_list; cur_ac != NULL; cur_ac = cur_ac->next) {
ac_prefs = (PrefsAccount *)cur_ac->data;
+ if (ac_prefs->protocol == A_NONE)
+ continue;
+
menuitem = gtk_menu_item_new_with_label
(ac_prefs->account_name
? ac_prefs->account_name : _("Untitled"));
static void main_window_set_toolbar_combo_compose_menu(MainWindow *mainwin,
GList *account_list)
{
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
GList *cur_ac;
GtkWidget *menuitem;
PrefsAccount *ac_prefs;
gtk_window_set_title(GTK_WINDOW(mainwin->window), buf);
g_free(buf);
- gtk_label_set_text(GTK_LABEL(mainwin->ac_label), ac_name);
+ if (mainwin->ac_label)
+ gtk_label_set_text(GTK_LABEL(mainwin->ac_label), ac_name);
if (mainwin->ac_button)
gtk_widget_queue_resize(mainwin->ac_button);
g_free(ac_name);
}
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static void main_window_separation_change(MainWindow *mainwin, LayoutType layout_mode)
{
GtkWidget *folder_wid = GTK_WIDGET_PTR(mainwin->folderview);
gtk_widget_queue_resize(mainwin->vpaned);
}
summary_grab_focus(summaryview);
+ if (!summary_is_list(summaryview)) {
+ summary_show(summaryview, summaryview->folder_item);
+ }
}
void main_window_get_size(MainWindow *mainwin)
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(mainwin->progressbar), "");
}
-void main_window_empty_trash(MainWindow *mainwin, gboolean confirm)
+static gboolean main_window_empty_trash(MainWindow *mainwin, gboolean confirm, gboolean for_quit)
{
if (confirm && procmsg_have_trashed_mails_fast()) {
- if (alertpanel(_("Empty trash"),
+ AlertValue val;
+
+ if (for_quit)
+ val = alertpanel(_("Empty trash"),
_("Delete all messages in trash folders?"),
- GTK_STOCK_NO, "+" GTK_STOCK_YES, NULL)
- != G_ALERTALTERNATE)
- return;
+ GTK_STOCK_NO, "+" GTK_STOCK_YES, _("Don't quit"));
+ else
+ val = alertpanel(_("Empty trash"),
+ _("Delete all messages in trash folders?"),
+ GTK_STOCK_NO, "+" GTK_STOCK_YES, NULL);
+ if (val == G_ALERTALTERNATE) {
+ debug_print("will empty trash\n");
+ } else if (val == G_ALERTDEFAULT) {
+ debug_print("will not empty trash\n");
+ return TRUE;
+ } else {
+ return FALSE; /* cancel exit */
+ }
manage_window_focus_in(mainwin->window, NULL, NULL);
}
if (mainwin->summaryview->folder_item &&
mainwin->summaryview->folder_item->stype == F_TRASH)
gtk_widget_grab_focus(mainwin->folderview->ctree);
+ return TRUE;
}
static void main_window_add_mailbox(MainWindow *mainwin)
if (summary_is_list(mainwin->summaryview))
state |= M_SUMMARY_ISLIST;
+ if (prefs_common.layout_mode != SMALL_LAYOUT || mainwin->in_folder)
+ state |= M_IN_MSGLIST;
+
return state;
}
{"/Edit/Select thread" , M_TARGET_EXIST|M_SUMMARY_ISLIST},
{"/Edit/Delete thread" , M_TARGET_EXIST|M_SUMMARY_ISLIST},
{"/Edit/Find in current message...", M_SINGLE_TARGET_EXIST},
+ {"/Edit/Quick search", M_IN_MSGLIST},
{"/View/Set displayed columns/in Folder list..."
, M_UNLOCKED|M_SUMMARY_ISLIST},
void main_window_popup(MainWindow *mainwin)
{
+ static gboolean first_start = TRUE;
+
if (!GTK_WIDGET_VISIBLE(GTK_WIDGET(mainwin->window)))
main_window_show(mainwin);
if (prefs_common.mainwin_maximised)
gtk_window_maximize(GTK_WINDOW(mainwin->window));
- gtkut_window_popup(mainwin->window);
-
+ if (first_start) {
+ gtk_window_deiconify(GTK_WINDOW(mainwin->window));
+ first_start = FALSE;
+ } else {
+ gtkut_window_popup(mainwin->window);
+ }
if (prefs_common.layout_mode == SMALL_LAYOUT) {
if (mainwin->in_folder) {
mainwindow_enter_folder(mainwin);
{
gtk_widget_show(mainwin->window);
gtk_widget_show(mainwin->vbox_body);
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
gtk_widget_set_uposition(mainwin->window,
prefs_common.mainwin_x,
prefs_common.mainwin_y);
prefs_common.msgview_height);
}
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
mainwin->messageview->statusbar = mainwin->statusbar;
mainwin->messageview->statusbar_cid = mainwin->messageview_cid;
#endif
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), active); \
}
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
switch (prefs_common.layout_mode) {
case NORMAL_LAYOUT:
SET_CHECK_MENU_ACTIVE("/View/Layout/Standard", TRUE);
{
gtk_widget_set_size_request(child, -1, -1);
}
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static gboolean ac_label_button_pressed(GtkWidget *widget, GdkEventButton *event,
gpointer data)
{
static void empty_trash_cb(MainWindow *mainwin, guint action,
GtkWidget *widget)
{
- main_window_empty_trash(mainwin, TRUE);
+ main_window_empty_trash(mainwin, TRUE, FALSE);
}
static void save_as_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
static void app_exit_cb(MainWindow *mainwin, guint action, GtkWidget *widget)
{
+ if (prefs_common.clean_on_exit) {
+ if (!main_window_empty_trash(mainwin, prefs_common.ask_on_clean, TRUE))
+ return;
+ }
+
if (prefs_common.confirm_on_exit) {
if (alertpanel(_("Exit"), _("Exit Claws Mail?"),
GTK_STOCK_CANCEL, GTK_STOCK_QUIT, NULL)
}
}
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static void toggle_statusbar_cb(MainWindow *mainwin, guint action,
GtkWidget *widget)
{
g_return_if_fail(menuitem != NULL);
if (btn == GTK_BUTTON(mainwin->online_switch)) {
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
gtk_widget_hide (mainwin->online_switch);
gtk_widget_show (mainwin->offline_switch);
#endif
/*go online */
if (!prefs_common.work_offline)
return;
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
gtk_widget_hide (mainwin->offline_switch);
gtk_widget_show (mainwin->online_switch);
#endif
inc_account_mail(mainwin, account);
}
-#ifndef MAEMO
+#ifndef GENERIC_UMPC
static void account_compose_menu_cb(GtkMenuItem *menuitem, gpointer data)
{
PrefsAccount *account = (PrefsAccount *)data;
gtk_widget_grab_focus(mainwin->folderview->ctree);
}
mainwin->in_folder = FALSE;
+ main_window_set_menu_sensitive(mainwin);
}
void mainwindow_enter_folder(MainWindow *mainwin) {
mainwin_paned_show_last(GTK_PANED(mainwin->hpaned));
}
mainwin->in_folder = TRUE;
+ main_window_set_menu_sensitive(mainwin);
}
#ifdef MAEMO