aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mail/ChangeLog6
-rw-r--r--mail/folder-browser.c104
-rw-r--r--mail/mail-accounts.c3
-rw-r--r--mail/mail-config.c10
4 files changed, 108 insertions, 15 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 6812a1bfe1..c33e4ba7b4 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,5 +1,11 @@
2002-03-15 Jeffrey Stedfast <fejj@ximian.com>
+ * folder-browser.c (on_right_click): Draw colour rectangles for
+ each of the colour items and set a closure on each.
+ (colourise_msg): colourise the message, yo.
+
+2002-03-15 Jeffrey Stedfast <fejj@ximian.com>
+
* mail-callbacks.c (colour_msg): New callback to set a colour on a
message.
diff --git a/mail/folder-browser.c b/mail/folder-browser.c
index c472eb7592..73f3ec0ed5 100644
--- a/mail/folder-browser.c
+++ b/mail/folder-browser.c
@@ -1442,6 +1442,36 @@ hide_sender(GtkWidget *w, FolderBrowser *fb)
}
}
+struct _colour_data {
+ FolderBrowser *fb;
+ guint32 rgb;
+};
+
+#define COLOUR_NONE (~0)
+
+static void
+colourise_msg (GtkWidget *widget, gpointer user_data)
+{
+ struct _colour_data *data = user_data;
+ char *colour = NULL;
+ GPtrArray *uids;
+ int i;
+
+ if (data->rgb != COLOUR_NONE) {
+ colour = alloca (8);
+ sprintf (colour, "#%.2x%.2x%.2x", (data->rgb & 0xff0000) >> 16,
+ (data->rgb & 0xff00) >> 8, data->rgb & 0xff);
+ }
+
+ uids = g_ptr_array_new ();
+ message_list_foreach (data->fb->message_list, enumerate_msg, uids);
+ for (i = 0; i < uids->len; i++) {
+ camel_folder_set_message_user_tag (data->fb->folder, uids->pdata[i], "colour", colour);
+ }
+ g_ptr_array_free (uids, TRUE);
+}
+
+
enum {
SELECTION_SET = 1<<1,
CAN_MARK_READ = 1<<2,
@@ -1477,11 +1507,13 @@ static EPopupMenu filter_menu[] = {
};
static EPopupMenu label_menu[] = {
- { NULL, NULL, GTK_SIGNAL_FUNC (colour_msg), NULL, NULL, SELECTION_SET },
- { NULL, NULL, GTK_SIGNAL_FUNC (colour_msg), NULL, NULL, SELECTION_SET },
- { NULL, NULL, GTK_SIGNAL_FUNC (colour_msg), NULL, NULL, SELECTION_SET },
- { NULL, NULL, GTK_SIGNAL_FUNC (colour_msg), NULL, NULL, SELECTION_SET },
- { NULL, NULL, GTK_SIGNAL_FUNC (colour_msg), NULL, NULL, SELECTION_SET },
+ { N_("None"), NULL, GTK_SIGNAL_FUNC (colourise_msg), NULL, NULL, 0 },
+ E_POPUP_SEPARATOR,
+ { NULL, NULL, GTK_SIGNAL_FUNC (colourise_msg), NULL, NULL, 0 },
+ { NULL, NULL, GTK_SIGNAL_FUNC (colourise_msg), NULL, NULL, 0 },
+ { NULL, NULL, GTK_SIGNAL_FUNC (colourise_msg), NULL, NULL, 0 },
+ { NULL, NULL, GTK_SIGNAL_FUNC (colourise_msg), NULL, NULL, 0 },
+ { NULL, NULL, GTK_SIGNAL_FUNC (colourise_msg), NULL, NULL, 0 },
E_POPUP_TERMINATOR
};
@@ -1523,7 +1555,7 @@ static EPopupMenu context_menu[] = {
E_POPUP_SEPARATOR,
- { N_("Label"), NULL, GTK_SIGNAL_FUNC (NULL), NULL, label_menu, SELECTION_SET },
+ { N_("Label"), NULL, GTK_SIGNAL_FUNC (NULL), NULL, label_menu, 0 },
E_POPUP_SEPARATOR,
@@ -1623,13 +1655,27 @@ setup_popup_icons (void)
}
}
+static void
+colour_closures_free (GPtrArray *closures)
+{
+ struct _colour_data *data;
+ int i;
+
+ for (i = 0; i < closures->len; i++) {
+ data = closures->pdata[i];
+ gtk_object_unref (GTK_OBJECT (data->fb));
+ g_free (data);
+ }
+ g_ptr_array_free (closures, TRUE);
+}
+
/* handle context menu over message-list */
static int
on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event, FolderBrowser *fb)
{
extern CamelFolder *sent_folder;
CamelMessageInfo *info;
- GPtrArray *uids;
+ GPtrArray *uids, *closures;
int enable_mask = 0;
int hide_mask = 0;
int i;
@@ -1784,8 +1830,45 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event
}
/* create the label/colour menu */
+ closures = g_ptr_array_new ();
+ label_menu[0].closure = g_new (struct _colour_data, 1);
+ g_ptr_array_add (closures, label_menu[0].closure);
+ gtk_object_ref (GTK_OBJECT (fb));
+ ((struct _colour_data *) label_menu[0].closure)->fb = fb;
+ ((struct _colour_data *) label_menu[0].closure)->rgb = COLOUR_NONE;
+
for (i = 0; i < 5; i++) {
- label_menu[i].name = e_utf8_to_locale_string (mail_config_get_label_name (i));
+ struct _colour_data *closure;
+ GdkPixmap *pixmap;
+ GdkColormap *map;
+ GdkColor color;
+ guint32 rgb;
+ GdkGC *gc;
+
+ rgb = mail_config_get_label_color (i);
+
+ color.red = ((rgb & 0xff0000) >> 8) | 0xff;
+ color.green = (rgb & 0xff00) | 0xff;
+ color.blue = ((rgb & 0xff) << 8) | 0xff;
+
+ map = gdk_colormap_get_system ();
+ gdk_color_alloc (map, &color);
+
+ pixmap = gdk_pixmap_new (GTK_WIDGET (fb)->window, 16, 16, -1);
+ gc = gdk_gc_new (GTK_WIDGET (fb)->window);
+ gdk_gc_set_foreground (gc, &color);
+ gdk_draw_rectangle (pixmap, gc, TRUE, 0, 0, 16, 16);
+
+ closure = g_new (struct _colour_data, 1);
+ gtk_object_ref (GTK_OBJECT (fb));
+ closure->fb = fb;
+ closure->rgb = rgb;
+
+ g_ptr_array_add (closures, closure);
+
+ label_menu[i + 2].name = e_utf8_to_locale_string (mail_config_get_label_name (i));
+ label_menu[i + 2].pixmap = gtk_pixmap_new (pixmap, NULL);
+ label_menu[i + 2].closure = closure;
}
setup_popup_icons ();
@@ -1793,6 +1876,9 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event
menu = e_popup_menu_create (context_menu, enable_mask, hide_mask, fb);
e_auto_kill_popup_menu_on_hide (menu);
+ gtk_object_set_data_full (GTK_OBJECT (menu), "colour_closures",
+ (GtkDestroyNotify) closures, colour_closures_free);
+
if (event->type == GDK_KEY_PRESS) {
struct cmpf_data closure;
@@ -1811,7 +1897,7 @@ on_right_click (ETree *tree, gint row, ETreePath path, gint col, GdkEvent *event
/* free the label/colour menu */
for (i = 0; i < 5; i++) {
- g_free (label_menu[i].name);
+ g_free (label_menu[i + 2].name);
}
return TRUE;
diff --git a/mail/mail-accounts.c b/mail/mail-accounts.c
index 6b8d654f99..c5a1c208b0 100644
--- a/mail/mail-accounts.c
+++ b/mail/mail-accounts.c
@@ -658,7 +658,7 @@ static void
label_color_set (GnomeColorPicker *cp, guint r, guint g, guint b, guint a, gpointer user_data)
{
MailAccountsDialog *dialog = user_data;
- guint32 rgb;
+ guint32 rgb = 0;
int label;
for (label = 0; label < 5; label++) {
@@ -692,6 +692,7 @@ restore_labels_clicked (GtkButton *button, gpointer user_data)
for (i = 0; i < 5; i++) {
e_utf8_gtk_entry_set_text (dialog->labels[i].name, U_(label_defaults[i].name));
set_color (dialog->labels[i].color, label_defaults[i].color);
+ mail_config_set_label_color (i, label_defaults[i].color);
}
}
diff --git a/mail/mail-config.c b/mail/mail-config.c
index b036e389da..e6396ab7cf 100644
--- a/mail/mail-config.c
+++ b/mail/mail-config.c
@@ -71,11 +71,11 @@
MailConfigLabel label_defaults[5] = {
- { N_("Important"), 0xff0000 }, /* red */
- { N_("Work"), 0xff8c00 }, /* orange */
- { N_("Personal"), 0x008b00 }, /* forest green */
- { N_("To Do"), 0x0000ff }, /* blue */
- { N_("Later"), 0x8b008b } /* magenta */
+ { N_("Important"), 0x00ff0000 }, /* red */
+ { N_("Work"), 0x00ff8c00 }, /* orange */
+ { N_("Personal"), 0x00008b00 }, /* forest green */
+ { N_("To Do"), 0x000000ff }, /* blue */
+ { N_("Later"), 0x008b008b } /* magenta */
};
typedef struct {