+2007-05-15 [colin] 2.9.2cvs9
+
+ * src/main.c
+ * src/main.h
+ Add a public function to know whether Claws
+ crashed last time
+ Store opened folder when exiting
+ * src/folder.c
+ * src/folder.h
+ Store last opened message in each FolderItem;
+ Reset last seen messages if Claws crashed, so
+ that one can't go in an infinite crash in case
+ a particular mail crashes Claws.
+ * src/messageview.c
+ * src/prefs_common.c
+ * src/prefs_common.h
+ * src/summaryview.c
+ * src/prefs_summaries.c
+ Add "Select last opened message" when entering
+ a folder
+ Add "Select last opened folder" at startup.
+
2007-05-14 [colin] 2.9.2cvs8
* manual/xml2pdf
( cvs diff -u -r 1.2.2.33 -r 1.2.2.34 src/gtk/filesel.c; ) > 2.9.2cvs6.patchset
( cvs diff -u -r 1.1.4.29 -r 1.1.4.30 src/gtk/logwindow.c; ) > 2.9.2cvs7.patchset
( cvs diff -u -r 1.1.2.5 -r 1.1.2.6 manual/xml2pdf; ) > 2.9.2cvs8.patchset
+( cvs diff -u -r 1.213.2.144 -r 1.213.2.145 src/folder.c; cvs diff -u -r 1.87.2.40 -r 1.87.2.41 src/folder.h; cvs diff -u -r 1.115.2.152 -r 1.115.2.153 src/main.c; cvs diff -u -r 1.7.2.10 -r 1.7.2.11 src/main.h; cvs diff -u -r 1.94.2.133 -r 1.94.2.134 src/messageview.c; cvs diff -u -r 1.204.2.134 -r 1.204.2.135 src/prefs_common.c; cvs diff -u -r 1.103.2.82 -r 1.103.2.83 src/prefs_common.h; cvs diff -u -r 1.1.2.40 -r 1.1.2.41 src/prefs_summaries.c; cvs diff -u -r 1.395.2.302 -r 1.395.2.303 src/summaryview.c; ) > 2.9.2cvs9.patchset
MICRO_VERSION=2
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=8
+EXTRA_VERSION=9
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
#include "gtkutils.h"
#include "timing.h"
#include "compose.h"
+#include "main.h"
/* Dependecies to be removed ?! */
#include "prefs_common.h"
g_warning("account_id: %s not found\n", attr->value);
else
item->account = account;
- } else if (!strcmp(attr->name, "apply_sub"))
+ } else if (!strcmp(attr->name, "apply_sub")) {
item->apply_sub = *attr->value == '1' ? TRUE : FALSE;
+ } else if (!strcmp(attr->name, "last_seen")) {
+ if (!claws_crashed())
+ item->last_seen = atoi(attr->value);
+ else
+ item->last_seen = 0;
+ }
}
}
if (item->apply_sub)
xml_tag_add_attr(tag, xml_attr_new("apply_sub", "1"));
+ xml_tag_add_attr(tag, xml_attr_new_int("last_seen", item->last_seen));
+
return tag;
}
SpecialFolderItemType parent_stype;
gboolean processing_pending;
gboolean scanning;
+ guint last_seen;
};
struct _PersistPrefs
static gboolean sc_exiting = FALSE;
static gboolean sc_starting = FALSE;
static gboolean show_at_startup = TRUE;
+static gboolean claws_crashed_bool = FALSE;
+
+gboolean claws_crashed(void) {
+ return claws_crashed_bool;
+}
void main_set_show_at_startup(gboolean show)
{
remove_all_files(get_tmp_dir());
remove_all_files(get_mime_tmp_dir());
+ if (!cmd.crash && crash_file_present)
+ claws_crashed_bool = TRUE;
+
if (is_file_exist("claws.log")) {
if (rename_force("claws.log", "claws.log.bak") < 0)
FILE_OP_ERROR("claws.log", "rename");
/* if crashed, show window early so that the user
* sees what's happening */
- if (!cmd.crash && crash_file_present)
+ if (claws_crashed())
main_window_popup(mainwin);
#ifdef HAVE_LIBETPAN
folder_func_to_all_folders(initial_processing, (gpointer *)mainwin);
/* if claws crashed, rebuild caches */
- if (!cmd.crash && crash_file_present) {
+ if (claws_crashed()) {
GTK_EVENTS_FLUSH();
debug_print("Claws Mail crashed, checking for new messages in local folders\n");
folder_item_update_thaw();
plugin_load_standard_plugins ();
/* if not crashed, show window now */
- if (!(!cmd.crash && crash_file_present)) {
+ if (!claws_crashed()) {
/* apart if something told not to show */
if (show_at_startup)
main_window_popup(mainwin);
gtk_clist_thaw(GTK_CLIST(mainwin->folderview->ctree));
main_window_cursor_normal(mainwin);
+ if (!cmd.target && prefs_common.goto_last_folder_on_startup &&
+ folder_find_item_from_identifier(prefs_common.last_opened_folder) != NULL &&
+ !claws_crashed()) {
+ cmd.target = prefs_common.last_opened_folder;
+ }
+
if (cmd.receive_all && !cmd.target) {
g_timeout_add(1000, defer_check_all, GINT_TO_POINTER(FALSE));
} else if (prefs_common.chk_on_startup && !cmd.target) {
return;
}
- if (item->opened)
+ if (item->opened) {
folder_item_close(item);
-
+ }
+
folder_item_free_cache(item, TRUE);
}
item = gtk_ctree_node_get_row_data(GTK_CTREE(mainwin->folderview->ctree), mainwin->folderview->opened);
summary_save_prefs_to_folderitem(mainwin->folderview->summaryview, item);
+ prefs_common.last_opened_folder = folder_item_get_identifier(item);
}
/* save all state before exiting */
gboolean claws_is_starting(void);
gchar *claws_get_socket_name(void);
void main_set_show_at_startup(gboolean show);
+gboolean claws_crashed(void);
#endif /* __MAIN_H__ */
g_free(subject);
}
+ if (msginfo && msginfo->folder) {
+ msginfo->folder->last_seen = msginfo->msgnum;
+ }
+
main_create_mailing_list_menu(messageview->mainwin, messageview->msginfo);
if (messageview->msginfo->extradata
#endif
{"thread_by_subject_max_age", "10", &prefs_common.thread_by_subject_max_age,
P_INT, NULL, NULL, NULL },
+ {"last_opened_folder", "", &prefs_common.last_opened_folder,
+ P_STRING, NULL, NULL, NULL },
+ {"goto_last_folder_on_startup", "FALSE", &prefs_common.goto_last_folder_on_startup,
+ P_BOOL, NULL, NULL, NULL },
{"summary_quicksearch_sticky", "1", &prefs_common.summary_quicksearch_sticky, P_INT,
NULL, NULL, NULL},
{"summary_quicksearch_dynamic", "0", &prefs_common.summary_quicksearch_dynamic, P_INT,
SELECTONENTRY_NUM,
SELECTONENTRY_NMU,
SELECTONENTRY_MNU,
- SELECTONENTRY_MUN
+ SELECTONENTRY_MUN,
+ SELECTONENTRY_LAST
} SelectOnEntry;
typedef enum
gint thread_by_subject_max_age; /*!< Max. age of a thread which was threaded
* by subject (days) */
+ gchar *last_opened_folder;
+ gboolean goto_last_folder_on_startup;
+
ToolbarStyle toolbar_style;
gboolean toolbar_detachable;
gboolean show_statusbar;
GtkWidget *button_datefmt;
GtkWidget *entry_datefmt;
+ GtkWidget *checkbtn_reopen_last_folder;
GtkWidget *checkbtn_always_show_msg;
GtkWidget *checkbtn_mark_as_read_on_newwin;
GtkWidget *spinbtn_mark_as_read_delay;
GtkWidget *button_dispitem;
GtkWidget *hbox2;
+ GtkWidget *checkbtn_reopen_last_folder;
GtkWidget *checkbtn_always_show_msg;
GtkWidget *checkbtn_mark_as_read_on_newwin;
GtkWidget *spinbtn_mark_as_read_delay;
gtk_widget_show (hbox1);
gtk_box_pack_start(GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0);
+ PACK_CHECK_BUTTON
+ (vbox2, checkbtn_reopen_last_folder,
+ _("Open last opened folder at startup"));
+
label_ng_abbrev = gtk_label_new
(_("Abbreviate newsgroup names longer than"));
gtk_widget_show (label_ng_abbrev);
SELECTONENTRY_MNU);
MENUITEM_ADD (menu, menuitem, _("Select first marked (or unread or new) message"),
SELECTONENTRY_MUN);
+ MENUITEM_ADD (menu, menuitem, _("Select last opened message"),
+ SELECTONENTRY_LAST);
gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_select_on_entry), menu);
gtk_box_pack_start(GTK_BOX(hbox1), optmenu_select_on_entry, FALSE, FALSE, 0);
gtk_entry_set_text(GTK_ENTRY(entry_datefmt),
prefs_common.date_format?prefs_common.date_format:"");
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_reopen_last_folder),
+ prefs_common.goto_last_folder_on_startup);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_always_show_msg),
prefs_common.always_show_msg);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_mark_as_read_on_newwin),
prefs_summaries->checkbtn_threadsubj = checkbtn_threadsubj;
prefs_summaries->entry_datefmt = entry_datefmt;
+ prefs_summaries->checkbtn_reopen_last_folder = checkbtn_reopen_last_folder;
prefs_summaries->checkbtn_always_show_msg = checkbtn_always_show_msg;
prefs_summaries->checkbtn_mark_as_read_on_newwin = checkbtn_mark_as_read_on_newwin;
prefs_summaries->spinbtn_mark_as_read_delay = spinbtn_mark_as_read_delay;
prefs_common.date_format = gtk_editable_get_chars(
GTK_EDITABLE(page->entry_datefmt), 0, -1);
+ prefs_common.goto_last_folder_on_startup = gtk_toggle_button_get_active(
+ GTK_TOGGLE_BUTTON(page->checkbtn_reopen_last_folder));
prefs_common.always_show_msg = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(page->checkbtn_always_show_msg));
prefs_common.mark_as_read_on_new_window = gtk_toggle_button_get_active(
node = summary_find_next_flagged_msg(summaryview, NULL,
MSG_NEW, FALSE);
break;
+ case SELECTONENTRY_LAST:
+ if (summaryview->folder_item) {
+ node = summary_find_msg_by_msgnum(summaryview,
+ summaryview->folder_item->last_seen);
+ }
+ break;
default:
node = NULL;
}