+2001-07-31 [darko]
+
+ * src/folder.[ch]
+ * src/folderview.[ch]
+ * src/mainwindow.c
+ * src/mh.c
+ * src/prefs_common.[ch]
+ * src/summaryview.c
+ target folder colourization
+
2001-07-30 [paul]
more sync with Sylpheed 0.5.1cvs6
#include "intl.h"
#include "folder.h"
+#include "folderview.h"
#include "session.h"
#include "imap.h"
#include "news.h"
static gchar *folder_get_list_path (void);
static void folder_write_list_recursive (GNode *node,
gpointer data);
+static void folder_update_op_count_rec (GNode *node);
Folder *folder_new(FolderType type, const gchar *name, const gchar *path)
num = folder->move_msgs_with_dest(folder, dest, msglist);
if (num > 0) dest->last_num = num;
+ else dest->op_count = 0;
return num;
}
num = folder->copy_msgs_with_dest(folder, dest, msglist);
if (num > 0) dest->last_num = num;
+ else dest->op_count = 0;
return num;
}
fputs(" />\n", fp);
}
+static void folder_update_op_count_rec(GNode *node) {
+ FolderItem *fitem = FOLDER_ITEM(node->data);
+
+ if (g_node_depth(node) > 0) {
+ if (fitem->op_count > 0) {
+ fitem->op_count = 0;
+ folderview_update_item(fitem, 0);
+ }
+ if (node->children) {
+ GNode *child;
+
+ child = node->children;
+ while (child) {
+ GNode *cur;
+
+ cur = child;
+ child = cur->next;
+ folder_update_op_count_rec(cur);
+ }
+ }
+ }
+}
+
+void folder_update_op_count() {
+ GList *cur;
+ Folder *folder;
+
+ for (cur = folder_list; cur != NULL; cur = cur->next) {
+ folder = cur->data;
+ folder_update_op_count_rec(folder->node);
+ }
+}
+
typedef struct _type_str {
gchar * str;
gint type;
guint no_select : 1; /* not selectable? */
guint collapsed : 1; /* collapsed item */
+ gint op_count;
+
FolderItem *parent;
Folder *folder;
GList *folder_get_list (void);
gint folder_read_list (void);
void folder_write_list (void);
+void folder_update_op_count (void);
Folder *folder_find_from_path (const gchar *path);
FolderItem *folder_find_item_from_path (const gchar *path);
{
GtkCTree *ctree = GTK_CTREE(folderview->ctree);
GtkCTreeNode *node;
+ GtkCTreeNode *old_selected = folderview->selected;
if (!item) return;
node = gtk_ctree_find_by_row_data(ctree, NULL, item);
if (node) folderview_select_node(folderview, node);
+
+ if (old_selected != node)
+ folder_update_op_count();
}
static void folderview_select_node(FolderView *folderview, GtkCTreeNode *node)
style->fg[GTK_STATE_NORMAL] = folderview->color_new;
style->fg[GTK_STATE_SELECTED] = folderview->color_new;
} else {
- style->fg[GTK_STATE_NORMAL] =
- ctree_style->fg[GTK_STATE_NORMAL];
- style->fg[GTK_STATE_SELECTED] =
- ctree_style->fg[GTK_STATE_SELECTED];
+ if (item->op_count > 0) {
+ if (boldfont)
+ style->font = boldfont;
+ style->fg[GTK_STATE_NORMAL] =
+ folderview->color_op;
+ style->fg[GTK_STATE_SELECTED] =
+ folderview->color_op;
+ } else {
+ style->fg[GTK_STATE_NORMAL] =
+ ctree_style->fg[GTK_STATE_NORMAL];
+ style->fg[GTK_STATE_SELECTED] =
+ ctree_style->fg[GTK_STATE_SELECTED];
+ }
}
gtk_ctree_node_set_row_style(ctree, node, style);
g_return_if_fail(item->folder != NULL);
prefs_folder_item_create(item);
-}
\ No newline at end of file
+}
+
+void folderview_set_target_folder_color(gint color_op) {
+ GList *list;
+ FolderView *folderview;
+
+ for (list = folderview_list; list != NULL; list = list->next) {
+ folderview = (FolderView *)list->data;
+ gtkut_convert_int_to_gdk_color(color_op, &folderview->color_op);
+ }
+}
gboolean open_folder;
GdkColor color_new;
+ GdkColor color_op;
MainWindow *mainwin;
SummaryView *summaryview;
void folderview_rename_folder (FolderView *folderview);
void folderview_delete_folder (FolderView *folderview);
+void folderview_set_target_folder_color (gint color_op);
#endif /* __FOLDERVIEW_H__ */
SummaryView *summaryview;
MessageView *messageview;
GdkColormap *colormap;
- GdkColor color[3];
- gboolean success[3];
+ GdkColor color[4];
+ gboolean success[4];
guint n_menu_entries;
GtkItemFactory *ifactory;
GtkWidget *ac_menu;
folderview->color_new.red = (guint16)55000;
folderview->color_new.green = folderview->color_new.blue = 15000;
+ gtkut_convert_int_to_gdk_color(prefs_common.tgt_folder_col,
+ &folderview->color_op);
+
summaryview->color_important.red = 0;
summaryview->color_marked.green = 0;
summaryview->color_important.blue = (guint16)65535;
color[0] = summaryview->color_marked;
color[1] = summaryview->color_dim;
color[2] = folderview->color_new;
+ color[3] = folderview->color_op;
colormap = gdk_window_get_colormap(window->window);
- gdk_colormap_alloc_colors(colormap, color, 3, FALSE, TRUE, success);
- for (i = 0; i < 3; i++) {
+ gdk_colormap_alloc_colors(colormap, color, 4, FALSE, TRUE, success);
+ for (i = 0; i < 4; i++) {
if (success[i] == FALSE)
g_warning(_("MainWindow: color allocation %d failed\n"), i);
}
if (!mainwin->summaryview->folder_item) return;
if (!folderview->opened) return;
+ folder_update_op_count();
+
fitem = gtk_ctree_node_get_row_data(GTK_CTREE(folderview->ctree),
folderview->opened);
if (!fitem) return;
dest->last_num + 1);
g_free(destdir);
+ dest->op_count--;
+
if (is_file_exist(destfile)) {
g_warning(_("%s already exists."), destfile);
g_free(srcfile);
#include "gtkutils.h"
#include "alertpanel.h"
#include "folder.h"
+#include "folderview.h"
PrefsCommon prefs_common;
GtkWidget *quote_level2_btn;
GtkWidget *quote_level3_btn;
GtkWidget *uri_btn;
+ GtkWidget *tgt_folder_btn;
} color_buttons;
static GtkWidget *quote_desc_win;
NULL, NULL, NULL},
{"uri_color", "32512", &prefs_common.uri_col, P_INT,
NULL, NULL, NULL},
+ {"target_folder_color", "14294218", &prefs_common.tgt_folder_col, P_INT,
+ NULL, NULL, NULL},
{"signature_color", "0", &prefs_common.sig_col, P_USHORT,
NULL, NULL, NULL},
{"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors,
GtkWidget *quotelevel2_label;
GtkWidget *quotelevel3_label;
GtkWidget *uri_label;
+ GtkWidget *tgt_folder_label;
GtkWidget *hbbox;
GtkWidget *ok_btn;
//GtkWidget *cancel_btn;
gtk_container_add (GTK_CONTAINER (frame_colors), table);
gtk_container_set_border_width (GTK_CONTAINER (table), 8);
gtk_table_set_row_spacings (GTK_TABLE (table), 2);
- gtk_table_set_col_spacings (GTK_TABLE (table), 4);
+ gtk_table_set_col_spacings (GTK_TABLE (table), 5);
color_buttons.quote_level1_btn = gtk_button_new();
gtk_table_attach (GTK_TABLE (table), color_buttons.quote_level1_btn,
gtk_widget_set_usize (color_buttons.uri_btn, 40, 30);
gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5);
+ color_buttons.tgt_folder_btn = gtk_button_new_with_label ("");
+ gtk_table_attach (GTK_TABLE (table), color_buttons.tgt_folder_btn,
+ 0, 1, 4, 5, 0, 0, 0, 0);
+ gtk_widget_set_usize (color_buttons.tgt_folder_btn, 40, 30);
+ gtk_container_set_border_width (GTK_CONTAINER (color_buttons.tgt_folder_btn), 5);
+
quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
gtk_table_attach (GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1,
(GTK_EXPAND | GTK_FILL), 0, 0, 0);
gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT);
gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5);
+ tgt_folder_label = gtk_label_new (_("Target folder"));
+ gtk_table_attach (GTK_TABLE (table), tgt_folder_label, 1, 2, 4, 5,
+ (GTK_EXPAND | GTK_FILL), 0, 0, 0);
+ gtk_label_set_justify (GTK_LABEL (tgt_folder_label), GTK_JUSTIFY_LEFT);
+ gtk_misc_set_alignment (GTK_MISC (tgt_folder_label), 0, 0.5);
+
PACK_CHECK_BUTTON (vbox, recycle_colors_btn,
_("Recycle quote colors"));
GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3");
gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked",
GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI");
+ gtk_signal_connect(GTK_OBJECT(color_buttons.tgt_folder_btn), "clicked",
+ GTK_SIGNAL_FUNC(quote_color_set_dialog), "TGTFLD");
gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled",
GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL);
gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked",
prefs_common.quote_level3_col);
set_button_bg_color(color_buttons.uri_btn,
prefs_common.uri_col);
+ set_button_bg_color(color_buttons.tgt_folder_btn,
+ prefs_common.tgt_folder_col);
gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn,
prefs_common.recycle_quote_colors);
} else if(g_strcasecmp(type, "URI") == 0) {
title = _("Pick color for URI");
rgbvalue = prefs_common.uri_col;
+ } else if(g_strcasecmp(type, "TGTFLD") == 0) {
+ title = _("Pick color for target folder");
+ rgbvalue = prefs_common.tgt_folder_col;
} else { /* Should never be called */
g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
return;
} else if (g_strcasecmp(type, "URI") == 0) {
prefs_common.uri_col = rgbvalue;
set_button_bg_color(color_buttons.uri_btn, rgbvalue);
+ } else if (g_strcasecmp(type, "TGTFLD") == 0) {
+ prefs_common.tgt_folder_col = rgbvalue;
+ set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
+ folderview_set_target_folder_color(prefs_common.tgt_folder_col);
} else
fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type );
gint quote_level2_col;
gint quote_level3_col;
gint uri_col;
+ gint tgt_folder_col;
gushort sig_col;
gboolean recycle_quote_colors;
gboolean conv_mb_alnum;
static void summary_mark_row(SummaryView *summaryview, GtkCTreeNode *row)
{
+ gboolean changed = FALSE;
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
MsgInfo *msginfo;
msginfo = gtk_ctree_node_get_row_data(ctree, row);
- msginfo->to_folder = NULL;
if (MSG_IS_DELETED(msginfo->flags))
summaryview->deleted--;
- if (MSG_IS_MOVE(msginfo->flags))
+ if (MSG_IS_MOVE(msginfo->flags)) {
summaryview->moved--;
- if (MSG_IS_COPY(msginfo->flags))
+ changed = TRUE;
+ }
+ if (MSG_IS_COPY(msginfo->flags)) {
summaryview->copied--;
+ changed = TRUE;
+ }
+ if (changed && !prefs_common.immediate_exec) {
+ msginfo->to_folder->op_count--;
+ if (msginfo->to_folder->op_count == 0)
+ folderview_update_item(msginfo->to_folder, 0);
+ }
+ msginfo->to_folder = NULL;
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
MSG_SET_PERM_FLAGS(msginfo->flags, MSG_MARKED);
static void summary_delete_row(SummaryView *summaryview, GtkCTreeNode *row)
{
+ gboolean changed = FALSE;
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
MsgInfo *msginfo;
if (MSG_IS_DELETED(msginfo->flags)) return;
- msginfo->to_folder = NULL;
- if (MSG_IS_MOVE(msginfo->flags))
+ if (MSG_IS_MOVE(msginfo->flags)) {
summaryview->moved--;
- if (MSG_IS_COPY(msginfo->flags))
+ changed = TRUE;
+ }
+ if (MSG_IS_COPY(msginfo->flags)) {
summaryview->copied--;
+ changed = TRUE;
+ }
+ if (changed && !prefs_common.immediate_exec) {
+ msginfo->to_folder->op_count--;
+ if (msginfo->to_folder->op_count == 0)
+ folderview_update_item(msginfo->to_folder, 0);
+ }
+ msginfo->to_folder = NULL;
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
MSG_SET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
static void summary_unmark_row(SummaryView *summaryview, GtkCTreeNode *row)
{
+ gboolean changed = FALSE;
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
MsgInfo *msginfo;
msginfo = gtk_ctree_node_get_row_data(ctree, row);
- msginfo->to_folder = NULL;
if (MSG_IS_DELETED(msginfo->flags))
summaryview->deleted--;
- if (MSG_IS_MOVE(msginfo->flags))
+ if (MSG_IS_MOVE(msginfo->flags)) {
summaryview->moved--;
- if (MSG_IS_COPY(msginfo->flags))
+ changed = TRUE;
+ }
+ if (MSG_IS_COPY(msginfo->flags)) {
summaryview->copied--;
+ changed = TRUE;
+ }
+ if (changed && !prefs_common.immediate_exec) {
+ msginfo->to_folder->op_count--;
+ if (msginfo->to_folder->op_count == 0)
+ folderview_update_item(msginfo->to_folder, 0);
+ }
+ msginfo->to_folder = NULL;
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED | MSG_DELETED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
CHANGE_FLAGS(msginfo);
static void summary_move_row_to(SummaryView *summaryview, GtkCTreeNode *row,
FolderItem *to_folder)
{
+ gboolean changed = FALSE;
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
MsgInfo *msginfo;
g_return_if_fail(to_folder != NULL);
msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ if (MSG_IS_MOVE(msginfo->flags)) {
+ if (!prefs_common.immediate_exec) {
+ msginfo->to_folder->op_count--;
+ if (msginfo->to_folder->op_count == 0) {
+ folderview_update_item(msginfo->to_folder, 0);
+ changed = TRUE;
+ }
+ }
+ }
msginfo->to_folder = to_folder;
if (MSG_IS_DELETED(msginfo->flags))
summaryview->deleted--;
+ if (MSG_IS_COPY(msginfo->flags)) {
+ summaryview->copied--;
+ if (!prefs_common.immediate_exec)
+ msginfo->to_folder->op_count--;
+ }
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED | MSG_DELETED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_COPY);
if (!MSG_IS_MOVE(msginfo->flags)) {
MSG_SET_TMP_FLAGS(msginfo->flags, MSG_MOVE);
summaryview->moved++;
+ changed = TRUE;
}
- if (!prefs_common.immediate_exec)
+ if (!prefs_common.immediate_exec) {
summary_set_row_marks(summaryview, row);
+ if (changed) {
+ msginfo->to_folder->op_count++;
+ if (msginfo->to_folder->op_count == 1)
+ folderview_update_item(msginfo->to_folder, 0);
+ }
+ }
debug_print(_("Message %d is set to move to %s\n"),
msginfo->msgnum, to_folder->path);
if (prefs_common.immediate_exec)
summary_execute(summaryview);
- else
+ else {
summary_status_show(summaryview);
+
+ folderview_update_item(to_folder, 0);
+ }
}
void summary_move_to(SummaryView *summaryview)
static void summary_copy_row_to(SummaryView *summaryview, GtkCTreeNode *row,
FolderItem *to_folder)
{
+ gboolean changed = FALSE;
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
MsgInfo *msginfo;
g_return_if_fail(to_folder != NULL);
msginfo = gtk_ctree_node_get_row_data(ctree, row);
+ if (MSG_IS_COPY(msginfo->flags)) {
+ if (!prefs_common.immediate_exec) {
+ msginfo->to_folder->op_count--;
+ if (msginfo->to_folder->op_count == 0) {
+ folderview_update_item(msginfo->to_folder, 0);
+ changed = TRUE;
+ }
+ }
+ }
msginfo->to_folder = to_folder;
if (MSG_IS_DELETED(msginfo->flags))
summaryview->deleted--;
+ if (MSG_IS_MOVE(msginfo->flags)) {
+ summaryview->moved--;
+ if (!prefs_common.immediate_exec)
+ msginfo->to_folder->op_count--;
+ }
MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_MARKED | MSG_DELETED);
MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE);
if (!MSG_IS_COPY(msginfo->flags)) {
MSG_SET_TMP_FLAGS(msginfo->flags, MSG_COPY);
summaryview->copied++;
+ changed = TRUE;
}
- if (!prefs_common.immediate_exec)
+ if (!prefs_common.immediate_exec) {
summary_set_row_marks(summaryview, row);
+ if (changed) {
+ msginfo->to_folder->op_count++;
+ if (msginfo->to_folder->op_count == 1)
+ folderview_update_item(msginfo->to_folder, 0);
+ }
+ }
debug_print(_("Message %d is set to copy to %s\n"),
msginfo->msgnum, to_folder->path);
if (prefs_common.immediate_exec)
summary_execute(summaryview);
- else
+ else {
summary_status_show(summaryview);
+
+ folderview_update_item(to_folder, 0);
+ }
}
void summary_copy_to(SummaryView *summaryview)