2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 2004-2006 Hiroyuki Yamamoto & The Sylpheed-Claws Team
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 2 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, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
30 #include <glib/gi18n.h>
32 #include <gdk/gdkkeysyms.h>
34 #include "prefs_common.h"
35 #include "prefs_gtk.h"
37 #include "gtk/gtkutils.h"
38 #include "gtk/prefswindow.h"
40 #include "manage_window.h"
41 #include "mainwindow.h"
42 #include "colorlabel.h"
44 #define SAFE_STRING(str) \
47 static struct MessageColorButtons {
48 GtkWidget *quote_level1_btn;
49 GtkWidget *quote_level2_btn;
50 GtkWidget *quote_level3_btn;
51 GtkWidget *quote_level1_bg_btn;
52 GtkWidget *quote_level2_bg_btn;
53 GtkWidget *quote_level3_bg_btn;
55 GtkWidget *tgt_folder_btn;
56 GtkWidget *signature_btn;
57 GtkWidget *color_new_btn;
59 GtkWidget *custom_color[COLORLABELS];
62 typedef struct _MsgColorsPage
68 GtkWidget *chkbtn_enablecol;
69 GtkWidget *chkbtn_enablebgcol;
70 GtkWidget *chkbtn_recycle_colors;
73 GtkWidget *custom_colorlabel_entry[COLORLABELS];
76 static GtkWidget *color_dialog;
78 static void quote_color_set_dialog (GtkWidget *widget,
80 static void quote_colors_set_dialog_ok (GtkWidget *widget,
82 static void quote_colors_set_dialog_cancel (GtkWidget *widget,
84 static gboolean quote_colors_set_dialog_key_pressed (GtkWidget *widget,
87 static void set_button_bg_color (GtkWidget *widget,
89 static void prefs_msg_colors_reset_custom_colors(GtkWidget *widget,
92 void prefs_msg_colors_create_widget(PrefsPage *_page, GtkWindow *window,
95 MsgColorsPage *prefs_msg_colors = (MsgColorsPage *) _page;
99 GtkWidget *chkbtn_enablecol;
100 GtkWidget *quotelevel1_label;
101 GtkWidget *quotelevel2_label;
102 GtkWidget *quotelevel3_label;
103 GtkWidget *chkbtn_enablebgcol;
104 GtkWidget *quotelevel1_bglabel;
105 GtkWidget *quotelevel2_bglabel;
106 GtkWidget *quotelevel3_bglabel;
107 GtkWidget *uri_label;
108 GtkWidget *signature_label;
109 GtkWidget *tgt_folder_label;
110 GtkWidget *chkbtn_recycle_colors;
112 GtkWidget *color_new_label;
113 GtkWidget *msg_frame;
114 GtkWidget *folder_frame;
115 GtkWidget *hbox_quote;
116 GtkWidget *vbox_quotefg;
117 GtkWidget *vbox_quotebg;
119 GtkWidget *vbox_custom_colors;
120 GtkWidget *frame_custom_colors;
121 GtkWidget *hbox_reset_custom_colors;
122 GtkWidget *reset_custom_colors_btn;
123 GtkWidget *hbox_custom_color[COLORLABELS];
124 GtkWidget *custom_colorlabel_entry[COLORLABELS];
127 vbox1 = gtk_vbox_new (FALSE, VSPACING_NARROW);
128 gtk_widget_show (vbox1);
129 gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER);
131 PACK_FRAME(vbox1, msg_frame, _("Message view"));
133 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
134 gtk_widget_show (vbox2);
135 gtk_container_add (GTK_CONTAINER (msg_frame), vbox2);
136 gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
139 hbox = gtk_hbox_new(FALSE, 8);
140 gtk_widget_show (hbox);
141 hbox_quote = gtk_hbox_new(FALSE, 8);
142 gtk_widget_show (hbox_quote);
143 vbox_quotefg = gtk_vbox_new(FALSE, 8);
144 gtk_widget_show (vbox_quotefg);
145 vbox_quotebg = gtk_vbox_new(FALSE, 8);
146 #if GTK_CHECK_VERSION(2, 8, 0)
147 gtk_widget_show (vbox_quotebg);
150 gtk_box_pack_start (GTK_BOX (vbox2), hbox_quote, FALSE, TRUE, 0);
151 gtk_box_pack_start (GTK_BOX (hbox_quote), vbox_quotefg, FALSE, TRUE, 0);
152 gtk_box_pack_start (GTK_BOX (hbox_quote), vbox_quotebg, FALSE, TRUE, 0);
154 gtk_box_pack_start (GTK_BOX (vbox_quotefg), hbox, FALSE, TRUE, 0);
155 PACK_CHECK_BUTTON (hbox, chkbtn_enablecol,
156 _("Enable coloration of message text"));
158 hbox = gtk_hbox_new(FALSE, 8);
159 gtk_widget_show (hbox);
160 gtk_box_pack_start (GTK_BOX (vbox_quotefg), hbox, FALSE, TRUE, 0);
162 color_buttons.quote_level1_btn = gtk_button_new();
163 gtk_widget_show(color_buttons.quote_level1_btn);
164 gtk_widget_set_size_request (color_buttons.quote_level1_btn, 30, 20);
165 gtk_box_pack_start (GTK_BOX(hbox), color_buttons.quote_level1_btn,
167 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, color_buttons.quote_level1_btn);
169 quotelevel1_label = gtk_label_new (_("Quoted Text - First Level"));
170 gtk_widget_show(quotelevel1_label);
171 gtk_box_pack_start (GTK_BOX(hbox), quotelevel1_label,
173 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, quotelevel1_label);
175 hbox = gtk_hbox_new(FALSE, 8);
176 gtk_widget_show (hbox);
177 gtk_box_pack_start (GTK_BOX (vbox_quotefg), hbox, FALSE, TRUE, 0);
179 color_buttons.quote_level2_btn = gtk_button_new();
180 gtk_widget_show(color_buttons.quote_level2_btn);
181 gtk_widget_set_size_request (color_buttons.quote_level2_btn, 30, 20);
182 gtk_box_pack_start (GTK_BOX(hbox), color_buttons.quote_level2_btn,
184 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, color_buttons.quote_level2_btn);
186 quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level"));
187 gtk_widget_show(quotelevel2_label);
188 gtk_box_pack_start (GTK_BOX(hbox), quotelevel2_label,
190 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, quotelevel2_label);
192 hbox = gtk_hbox_new(FALSE, 8);
193 gtk_widget_show (hbox);
194 gtk_box_pack_start (GTK_BOX (vbox_quotefg), hbox, FALSE, TRUE, 0);
196 color_buttons.quote_level3_btn = gtk_button_new();
197 gtk_widget_show(color_buttons.quote_level3_btn);
198 gtk_widget_set_size_request (color_buttons.quote_level3_btn, 30, 20);
199 gtk_box_pack_start (GTK_BOX(hbox), color_buttons.quote_level3_btn,
201 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, color_buttons.quote_level3_btn);
203 quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level"));
204 gtk_widget_show(quotelevel3_label);
205 gtk_box_pack_start (GTK_BOX(hbox), quotelevel3_label,
207 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, quotelevel3_label);
210 hbox = gtk_hbox_new(FALSE, 8);
211 gtk_widget_show (hbox);
212 gtk_box_pack_start (GTK_BOX (vbox_quotebg), hbox, FALSE, TRUE, 0);
214 PACK_CHECK_BUTTON (hbox, chkbtn_enablebgcol,
215 _("Enable coloration of background text"));
216 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, chkbtn_enablebgcol);
218 hbox = gtk_hbox_new(FALSE, 8);
219 gtk_widget_show (hbox);
220 gtk_box_pack_start (GTK_BOX (vbox_quotebg), hbox, FALSE, TRUE, 0);
222 color_buttons.quote_level1_bg_btn = gtk_button_new();
223 gtk_widget_show(color_buttons.quote_level1_bg_btn);
224 gtk_widget_set_size_request (color_buttons.quote_level1_bg_btn, 30, 20);
225 gtk_box_pack_start (GTK_BOX(hbox), color_buttons.quote_level1_bg_btn,
227 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, color_buttons.quote_level1_bg_btn);
229 quotelevel1_bglabel = gtk_label_new (_(" Background"));
230 gtk_widget_show(quotelevel1_bglabel);
231 gtk_box_pack_start (GTK_BOX(hbox), quotelevel1_bglabel,
233 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, quotelevel1_bglabel);
235 hbox = gtk_hbox_new(FALSE, 8);
236 gtk_widget_show (hbox);
237 gtk_box_pack_start (GTK_BOX (vbox_quotebg), hbox, FALSE, TRUE, 0);
239 color_buttons.quote_level2_bg_btn = gtk_button_new();
240 gtk_widget_show(color_buttons.quote_level2_bg_btn);
241 gtk_widget_set_size_request (color_buttons.quote_level2_bg_btn, 30, 20);
242 gtk_box_pack_start (GTK_BOX(hbox), color_buttons.quote_level2_bg_btn,
244 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, color_buttons.quote_level2_bg_btn);
246 quotelevel2_bglabel = gtk_label_new (_(" Background"));
247 gtk_widget_show(quotelevel2_bglabel);
248 gtk_box_pack_start (GTK_BOX(hbox), quotelevel2_bglabel,
250 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, quotelevel2_bglabel);
252 hbox = gtk_hbox_new(FALSE, 8);
253 gtk_widget_show (hbox);
254 gtk_box_pack_start (GTK_BOX (vbox_quotebg), hbox, FALSE, TRUE, 0);
256 color_buttons.quote_level3_bg_btn = gtk_button_new();
257 gtk_widget_show(color_buttons.quote_level3_bg_btn);
258 gtk_widget_set_size_request (color_buttons.quote_level3_bg_btn, 30, 20);
259 gtk_box_pack_start (GTK_BOX(hbox), color_buttons.quote_level3_bg_btn,
261 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, color_buttons.quote_level3_bg_btn);
263 quotelevel3_bglabel = gtk_label_new (_(" Background"));
264 gtk_widget_show(quotelevel3_bglabel);
265 gtk_box_pack_start (GTK_BOX(hbox), quotelevel3_bglabel,
267 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, quotelevel3_bglabel);
269 hbox = gtk_hbox_new(FALSE, 8);
270 gtk_widget_show (hbox);
271 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, TRUE, 0);
273 PACK_CHECK_BUTTON (hbox, chkbtn_recycle_colors,
274 _("Cycle quote colors"));
275 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, chkbtn_recycle_colors);
277 hbox = gtk_hbox_new(FALSE, 8);
278 gtk_widget_show (hbox);
279 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, TRUE, 0);
281 color_buttons.uri_btn = gtk_button_new();
282 gtk_widget_show(color_buttons.uri_btn);
283 gtk_widget_set_size_request (color_buttons.uri_btn, 30, 20);
284 gtk_box_pack_start (GTK_BOX(hbox), color_buttons.uri_btn,
286 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, color_buttons.uri_btn);
288 uri_label = gtk_label_new (_("URI link"));
289 gtk_widget_show(uri_label);
290 gtk_box_pack_start (GTK_BOX(hbox), uri_label, FALSE, FALSE, 0);
291 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, uri_label);
293 hbox = gtk_hbox_new(FALSE, 8);
294 gtk_widget_show (hbox);
295 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, TRUE, 0);
297 color_buttons.signature_btn = gtk_button_new();
298 gtk_widget_show(color_buttons.signature_btn);
299 gtk_widget_set_size_request (color_buttons.signature_btn, 30, 20);
300 gtk_box_pack_start (GTK_BOX(hbox), color_buttons.signature_btn,
302 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, color_buttons.signature_btn);
304 signature_label = gtk_label_new (_("Signatures"));
305 gtk_widget_show(signature_label);
306 gtk_box_pack_start (GTK_BOX(hbox), signature_label, FALSE, FALSE, 0);
307 SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, signature_label);
309 PACK_FRAME(vbox1, folder_frame, _("Folder list"));
311 vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW);
312 gtk_widget_show (vbox2);
313 gtk_container_add (GTK_CONTAINER (folder_frame), vbox2);
314 gtk_container_set_border_width (GTK_CONTAINER (vbox2), VBOX_BORDER);
316 hbox = gtk_hbox_new(FALSE, 8);
317 gtk_widget_show (hbox);
318 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, TRUE, 0);
320 color_buttons.tgt_folder_btn = gtk_button_new();
321 gtk_widget_show(color_buttons.tgt_folder_btn);
322 gtk_widget_set_size_request (color_buttons.tgt_folder_btn, 30, 20);
323 gtk_box_pack_start (GTK_BOX(hbox), color_buttons.tgt_folder_btn,
326 tgt_folder_label = gtk_label_new (_("Target folder"));
327 gtk_widget_show(tgt_folder_label);
328 gtk_box_pack_start (GTK_BOX(hbox), tgt_folder_label, FALSE, FALSE, 0);
330 hbox = gtk_hbox_new(FALSE, 8);
331 gtk_widget_show (hbox);
332 gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
334 color_buttons.color_new_btn = gtk_button_new();
335 gtk_widget_show (color_buttons.color_new_btn);
336 gtk_widget_set_size_request (color_buttons.color_new_btn, 30, 20);
337 gtk_box_pack_start (GTK_BOX(hbox), color_buttons.color_new_btn,
340 color_new_label = gtk_label_new (_("Folder containing new messages"));
341 gtk_widget_show(color_new_label);
342 gtk_box_pack_start (GTK_BOX(hbox), color_new_label, FALSE, FALSE, 0);
345 PACK_FRAME (vbox1, frame_custom_colors, _("Color labels"));
347 vbox_custom_colors = gtk_vbox_new (FALSE, VSPACING_NARROW);
348 gtk_widget_show (vbox_custom_colors);
349 gtk_container_add (GTK_CONTAINER (frame_custom_colors), vbox_custom_colors);
350 gtk_container_set_border_width (GTK_CONTAINER (vbox_custom_colors), VBOX_BORDER);
352 for (c = 0; c < COLORLABELS; c++) {
353 hbox_custom_color[c] = gtk_hbox_new(FALSE, 8);
354 gtk_widget_show (hbox_custom_color[c]);
355 gtk_box_pack_start (GTK_BOX (vbox_custom_colors), hbox_custom_color[c],
357 color_buttons.custom_color[c] = gtk_button_new();
358 gtk_widget_show (color_buttons.custom_color[c]);
359 gtk_widget_set_size_request (color_buttons.custom_color[c], 30, 20);
360 gtk_box_pack_start (GTK_BOX (hbox_custom_color[c]), color_buttons.custom_color[c],
362 custom_colorlabel_entry[c] = gtk_entry_new();
363 gtk_widget_show (custom_colorlabel_entry[c]);
364 gtk_box_pack_start (GTK_BOX (hbox_custom_color[c]), custom_colorlabel_entry[c],
368 hbox_reset_custom_colors = gtk_hbox_new(FALSE, 8);
369 gtk_widget_show (hbox_reset_custom_colors);
370 gtk_box_pack_start (GTK_BOX (vbox_custom_colors), hbox_reset_custom_colors,
373 reset_custom_colors_btn = gtk_button_new_with_label (_(" Use default "));
374 gtk_widget_show (reset_custom_colors_btn);
375 gtk_box_pack_start (GTK_BOX (hbox_reset_custom_colors), reset_custom_colors_btn,
378 g_signal_connect(G_OBJECT(color_buttons.quote_level1_btn), "clicked",
379 G_CALLBACK(quote_color_set_dialog), "LEVEL1");
380 g_signal_connect(G_OBJECT(color_buttons.quote_level2_btn), "clicked",
381 G_CALLBACK(quote_color_set_dialog), "LEVEL2");
382 g_signal_connect(G_OBJECT(color_buttons.quote_level3_btn), "clicked",
383 G_CALLBACK(quote_color_set_dialog), "LEVEL3");
384 g_signal_connect(G_OBJECT(color_buttons.quote_level1_bg_btn), "clicked",
385 G_CALLBACK(quote_color_set_dialog), "LEVEL1BG");
386 g_signal_connect(G_OBJECT(color_buttons.quote_level2_bg_btn), "clicked",
387 G_CALLBACK(quote_color_set_dialog), "LEVEL2BG");
388 g_signal_connect(G_OBJECT(color_buttons.quote_level3_bg_btn), "clicked",
389 G_CALLBACK(quote_color_set_dialog), "LEVEL3BG");
390 g_signal_connect(G_OBJECT(color_buttons.uri_btn), "clicked",
391 G_CALLBACK(quote_color_set_dialog), "URI");
392 g_signal_connect(G_OBJECT(color_buttons.tgt_folder_btn), "clicked",
393 G_CALLBACK(quote_color_set_dialog), "TGTFLD");
394 g_signal_connect(G_OBJECT(color_buttons.signature_btn), "clicked",
395 G_CALLBACK(quote_color_set_dialog), "SIGNATURE");
396 g_signal_connect(G_OBJECT(color_buttons.color_new_btn), "clicked",
397 G_CALLBACK(quote_color_set_dialog), "NEW");
399 for (c = 0; c < COLORLABELS; c++) {
400 g_signal_connect(G_OBJECT(color_buttons.custom_color[c]), "clicked",
401 G_CALLBACK(quote_color_set_dialog), GINT_TO_POINTER(c));
404 g_signal_connect(G_OBJECT(reset_custom_colors_btn), "clicked",
405 G_CALLBACK(prefs_msg_colors_reset_custom_colors), prefs_msg_colors);
407 set_button_bg_color(color_buttons.quote_level1_btn,
408 prefs_common.quote_level1_col);
409 set_button_bg_color(color_buttons.quote_level2_btn,
410 prefs_common.quote_level2_col);
411 set_button_bg_color(color_buttons.quote_level3_btn,
412 prefs_common.quote_level3_col);
413 set_button_bg_color(color_buttons.quote_level1_bg_btn,
414 prefs_common.quote_level1_bgcol);
415 set_button_bg_color(color_buttons.quote_level2_bg_btn,
416 prefs_common.quote_level2_bgcol);
417 set_button_bg_color(color_buttons.quote_level3_bg_btn,
418 prefs_common.quote_level3_bgcol);
419 set_button_bg_color(color_buttons.uri_btn,
420 prefs_common.uri_col);
421 set_button_bg_color(color_buttons.tgt_folder_btn,
422 prefs_common.tgt_folder_col);
423 set_button_bg_color(color_buttons.signature_btn,
424 prefs_common.signature_col);
425 set_button_bg_color(color_buttons.color_new_btn,
426 prefs_common.color_new);
428 for (c = 0; c < COLORLABELS; c++) {
429 set_button_bg_color(color_buttons.custom_color[c],
430 prefs_common.custom_colorlabel[c].color);
431 gtk_entry_set_text(GTK_ENTRY (custom_colorlabel_entry[c]),
432 SAFE_STRING (prefs_common.custom_colorlabel[c].label));
435 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_enablecol),
436 prefs_common.enable_color);
437 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_enablebgcol),
438 prefs_common.enable_bgcolor);
439 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(chkbtn_recycle_colors),
440 prefs_common.recycle_quote_colors);
442 prefs_msg_colors->chkbtn_enablecol = chkbtn_enablecol;
443 prefs_msg_colors->chkbtn_enablebgcol = chkbtn_enablebgcol;
444 prefs_msg_colors->chkbtn_recycle_colors = chkbtn_recycle_colors;
446 for (c = 0; c < COLORLABELS; c++) {
447 prefs_msg_colors->custom_colorlabel_entry[c] = custom_colorlabel_entry[c];
450 prefs_msg_colors->page.widget = vbox1;
453 static void quote_color_set_dialog(GtkWidget *widget, gpointer data)
455 gchar *type = (gchar *)data;
457 gdouble color[4] = {0.0, 0.0, 0.0, 0.0};
459 GtkColorSelectionDialog *dialog;
463 for (c = 0; c < COLORLABELS; c++) {
464 if (GPOINTER_TO_INT(type) == c) {
465 title = g_strdup_printf(_("Pick color for color #%d"), c+1);
466 rgbvalue = prefs_common.custom_colorlabel[c].color;
471 if (c == COLORLABELS) {
472 if(g_ascii_strcasecmp(type, "LEVEL1") == 0) {
473 title = g_strdup(_("Pick color for quotation level 1"));
474 rgbvalue = prefs_common.quote_level1_col;
475 } else if(g_ascii_strcasecmp(type, "LEVEL2") == 0) {
476 title = g_strdup(_("Pick color for quotation level 2"));
477 rgbvalue = prefs_common.quote_level2_col;
478 } else if(g_ascii_strcasecmp(type, "LEVEL3") == 0) {
479 title = g_strdup(_("Pick color for quotation level 3"));
480 rgbvalue = prefs_common.quote_level3_col;
481 } else if(g_ascii_strcasecmp(type, "LEVEL1BG") == 0) {
482 title = g_strdup(_("Pick color for quotation level 1 background"));
483 rgbvalue = prefs_common.quote_level1_bgcol;
484 } else if(g_ascii_strcasecmp(type, "LEVEL2BG") == 0) {
485 title = g_strdup(_("Pick color for quotation level 2 background"));
486 rgbvalue = prefs_common.quote_level2_bgcol;
487 } else if(g_ascii_strcasecmp(type, "LEVEL3BG") == 0) {
488 title = g_strdup(_("Pick color for quotation level 3 background"));
489 rgbvalue = prefs_common.quote_level3_bgcol;
490 } else if(g_ascii_strcasecmp(type, "URI") == 0) {
491 title = g_strdup(_("Pick color for URI"));
492 rgbvalue = prefs_common.uri_col;
493 } else if(g_ascii_strcasecmp(type, "TGTFLD") == 0) {
494 title = g_strdup(_("Pick color for target folder"));
495 rgbvalue = prefs_common.tgt_folder_col;
496 } else if(g_ascii_strcasecmp(type, "SIGNATURE") == 0) {
497 title = g_strdup(_("Pick color for signatures"));
498 rgbvalue = prefs_common.signature_col;
499 } else if(g_ascii_strcasecmp(type, "NEW") == 0) {
500 title = g_strdup(_("Pick color for folder"));
501 rgbvalue = prefs_common.color_new;
503 /* Should never be called */
504 g_warning("Unrecognized datatype '%s' in quote_color_set_dialog\n", type);
509 color_dialog = gtk_color_selection_dialog_new(title);
511 gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER);
512 gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE);
513 gtk_window_set_resizable(GTK_WINDOW(color_dialog), FALSE);
514 manage_window_set_transient(GTK_WINDOW(color_dialog));
516 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->cancel_button),
517 "clicked", G_CALLBACK(quote_colors_set_dialog_cancel), data);
518 g_signal_connect(G_OBJECT(GTK_COLOR_SELECTION_DIALOG(color_dialog)->ok_button),
519 "clicked", G_CALLBACK(quote_colors_set_dialog_ok), data);
520 g_signal_connect(G_OBJECT(color_dialog), "key_press_event",
521 G_CALLBACK(quote_colors_set_dialog_key_pressed),data);
523 /* preselect the previous color in the color selection dialog */
524 color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0;
525 color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0;
526 color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0;
527 dialog = GTK_COLOR_SELECTION_DIALOG(color_dialog);
528 gtk_color_selection_set_color
529 (GTK_COLOR_SELECTION(dialog->colorsel), color);
531 gtk_widget_show(color_dialog);
534 static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data)
536 GtkColorSelection *colorsel = (GtkColorSelection *)
537 ((GtkColorSelectionDialog *)color_dialog)->colorsel;
539 gint red, green, blue, rgbvalue;
540 gchar *type = (gchar *)data;
543 gtk_color_selection_get_color(colorsel, color);
545 red = (gint) (color[0] * 255.0);
546 green = (gint) (color[1] * 255.0);
547 blue = (gint) (color[2] * 255.0);
548 rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue);
552 for (c = 0; c < COLORLABELS; c++) {
553 if (GPOINTER_TO_INT(type) == c) {
554 prefs_common.custom_colorlabel[c].color = rgbvalue;
555 set_button_bg_color(color_buttons.custom_color[c], rgbvalue);
560 if (c == COLORLABELS) {
561 if (g_ascii_strcasecmp(type, "LEVEL1") == 0) {
562 prefs_common.quote_level1_col = rgbvalue;
563 set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue);
564 } else if (g_ascii_strcasecmp(type, "LEVEL2") == 0) {
565 prefs_common.quote_level2_col = rgbvalue;
566 set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue);
567 } else if (g_ascii_strcasecmp(type, "LEVEL3") == 0) {
568 prefs_common.quote_level3_col = rgbvalue;
569 set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue);
570 } else if (g_ascii_strcasecmp(type, "LEVEL1BG") == 0) {
571 prefs_common.quote_level1_bgcol = rgbvalue;
572 set_button_bg_color(color_buttons.quote_level1_bg_btn, rgbvalue);
573 } else if (g_ascii_strcasecmp(type, "LEVEL2BG") == 0) {
574 prefs_common.quote_level2_bgcol = rgbvalue;
575 set_button_bg_color(color_buttons.quote_level2_bg_btn, rgbvalue);
576 } else if (g_ascii_strcasecmp(type, "LEVEL3BG") == 0) {
577 prefs_common.quote_level3_bgcol = rgbvalue;
578 set_button_bg_color(color_buttons.quote_level3_bg_btn, rgbvalue);
579 } else if (g_ascii_strcasecmp(type, "URI") == 0) {
580 prefs_common.uri_col = rgbvalue;
581 set_button_bg_color(color_buttons.uri_btn, rgbvalue);
582 } else if (g_ascii_strcasecmp(type, "TGTFLD") == 0) {
583 prefs_common.tgt_folder_col = rgbvalue;
584 set_button_bg_color(color_buttons.tgt_folder_btn, rgbvalue);
585 folderview_set_target_folder_color(prefs_common.tgt_folder_col);
586 } else if (g_ascii_strcasecmp(type, "SIGNATURE") == 0) {
587 prefs_common.signature_col = rgbvalue;
588 set_button_bg_color(color_buttons.signature_btn, rgbvalue);
589 } else if (g_ascii_strcasecmp(type, "NEW") == 0) {
590 prefs_common.color_new = rgbvalue;
591 set_button_bg_color(color_buttons.color_new_btn, rgbvalue);
593 fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type);
597 gtk_widget_destroy(color_dialog);
600 static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data)
602 gtk_widget_destroy(color_dialog);
605 static gboolean quote_colors_set_dialog_key_pressed(GtkWidget *widget,
610 switch (event->keyval) {
612 gtk_button_clicked(GTK_BUTTON(GTK_COLOR_SELECTION_DIALOG
613 (widget)->cancel_button));
617 /* NOTE: changing focus makes widget accept all currently
618 * changed settings! */
619 gtk_widget_grab_focus
620 (GTK_COLOR_SELECTION_DIALOG
621 (widget)->ok_button);
622 /* call ok handler */
623 gtk_button_clicked(GTK_BUTTON
624 (GTK_COLOR_SELECTION_DIALOG
625 (widget)->ok_button));
634 static void set_button_bg_color(GtkWidget *widget, gint rgbvalue)
639 gtkut_convert_int_to_gdk_color(rgbvalue, &color);
640 newstyle = gtk_style_copy(gtk_widget_get_default_style());
641 newstyle->bg[GTK_STATE_NORMAL] = color;
642 newstyle->bg[GTK_STATE_PRELIGHT] = color;
643 newstyle->bg[GTK_STATE_ACTIVE] = color;
645 gtk_widget_set_style(GTK_WIDGET(widget), newstyle);
648 void prefs_msg_colors_save(PrefsPage *_page)
650 MsgColorsPage *page = (MsgColorsPage *) _page;
653 prefs_common.enable_color =
654 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->chkbtn_enablecol));
655 prefs_common.enable_bgcolor =
656 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->chkbtn_enablebgcol));
657 prefs_common.recycle_quote_colors =
658 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(page->chkbtn_recycle_colors));
661 for (c = 0; c < COLORLABELS; c++) {
662 g_free(prefs_common.custom_colorlabel[c].label);
663 prefs_common.custom_colorlabel[c].label =
664 gtk_editable_get_chars(GTK_EDITABLE(page->custom_colorlabel_entry[c]), 0, -1);
666 colorlabel_update_colortable_from_prefs();
668 main_window_reflect_prefs_all();
669 main_window_reflect_prefs_custom_colors(mainwindow_get_mainwindow());
672 static void prefs_msg_colors_reset_custom_colors(GtkWidget *widget, gpointer data)
674 #define CL(x) (((gulong) (x) >> (gulong) 8) & 0xFFUL)
675 #define CR(r, g, b) ((CL(r) << (gulong) 16) | \
676 (CL(g) << (gulong) 8) | \
678 MsgColorsPage *page = (MsgColorsPage *) data;
682 for (c = 0; c < COLORLABELS; c++) {
683 color = colorlabel_get_default_color(c);
684 prefs_common.custom_colorlabel[c].color =
685 (gint)CR(color.red, color.green, color.blue);
686 set_button_bg_color(color_buttons.custom_color[c],
687 prefs_common.custom_colorlabel[c].color);
688 gtk_entry_set_text(GTK_ENTRY (page->custom_colorlabel_entry[c]),
689 SAFE_STRING (colorlabel_get_color_default_text(c)));
696 static void prefs_msg_colors_destroy_widget(PrefsPage *_page)
700 MsgColorsPage *prefs_msg_colors;
702 void prefs_msg_colors_init(void)
705 static gchar *path[3];
707 path[0] = _("Display");
708 path[1] = _("Colors");
711 page = g_new0(MsgColorsPage, 1);
712 page->page.path = path;
713 page->page.create_widget = prefs_msg_colors_create_widget;
714 page->page.destroy_widget = prefs_msg_colors_destroy_widget;
715 page->page.save_page = prefs_msg_colors_save;
716 page->page.weight = 165.0;
717 prefs_gtk_register_page((PrefsPage *) page);
718 prefs_msg_colors = page;
721 void prefs_msg_colors_done(void)
723 prefs_gtk_unregister_page((PrefsPage *) prefs_msg_colors);
724 g_free(prefs_msg_colors);