Rewrote to use gtk_widget_modify_text() and gtk_widget_modify_base()

to change the background color for filter text edit boxes, because
gtk_widget_set_style() interacts badly with themes.

Go back to default values when filter is empty (instead of white).

Also rewrote the same in the "Edit Color Filter" dialog.

svn path=/trunk/; revision=26421
This commit is contained in:
Stig Bjørlykke 2008-10-12 13:41:04 +00:00
parent b49434dcd2
commit 2046b2731d
2 changed files with 20 additions and 21 deletions

View File

@ -96,7 +96,7 @@ edit_color_filter_dialog(GtkWidget *color_filters,
GtkWidget *edit_dialog;
GtkWidget *dialog_vbox;
GtkTooltips *tooltips;
GtkStyle *style;
GdkColor bg_color, fg_color;
GtkWidget *filter_fr;
GtkWidget *filter_fr_vbox;
@ -164,10 +164,11 @@ edit_color_filter_dialog(GtkWidget *color_filters,
filt_name_entry = gtk_entry_new ();
gtk_entry_set_text(GTK_ENTRY(filt_name_entry), colorf->filter_name);
style = gtk_style_copy(gtk_widget_get_style(filt_name_entry));
color_t_to_gdkcolor(&style->base[GTK_STATE_NORMAL], &colorf->bg_color);
color_t_to_gdkcolor(&style->text[GTK_STATE_NORMAL], &colorf->fg_color);
gtk_widget_set_style(filt_name_entry, style);
color_t_to_gdkcolor(&bg_color, &colorf->bg_color);
color_t_to_gdkcolor(&fg_color, &colorf->fg_color);
gtk_widget_modify_base(filt_name_entry, GTK_STATE_NORMAL, &bg_color);
gtk_widget_modify_text(filt_name_entry, GTK_STATE_NORMAL, &fg_color);
gtk_box_pack_start (GTK_BOX (filter_name_hbox), filt_name_entry, TRUE, TRUE, 0);
gtk_tooltips_set_tip (tooltips, filt_name_entry, ("This is the editable name of the filter. (No @ characters allowed.)"), NULL);
@ -184,7 +185,6 @@ edit_color_filter_dialog(GtkWidget *color_filters,
g_signal_connect(filt_text_entry, "changed", G_CALLBACK(filter_te_syntax_check_cb), NULL);
gtk_entry_set_text(GTK_ENTRY(filt_text_entry), colorf->filter_text);
gtk_style_unref(style);
gtk_box_pack_start (GTK_BOX (filter_string_hbox), filt_text_entry, TRUE, TRUE, 0);
gtk_tooltips_set_tip (tooltips, filt_text_entry, ("This is the editable text of the filter"), NULL);
@ -527,7 +527,6 @@ color_sel_ok_cb (GtkButton *button _U_,
{
GdkColor new_color; /* Color from color selection dialog */
GtkWidget *color_dialog;
GtkStyle *style;
GtkWidget *parent;
GtkWidget *color_selection_fg, *color_selection_bg;
gboolean is_bg;
@ -554,15 +553,10 @@ color_sel_ok_cb (GtkButton *button _U_,
color_sel_win_destroy(color_dialog);
/* now apply the change to the fore/background */
style = gtk_style_copy(gtk_widget_get_style(filt_name_entry));
if (is_bg)
style->base[GTK_STATE_NORMAL] = new_color;
gtk_widget_modify_base(filt_name_entry, GTK_STATE_NORMAL, &new_color);
else
style->text[GTK_STATE_NORMAL] = new_color;
gtk_widget_set_style(filt_name_entry, style);
gtk_style_unref(style);
gtk_widget_modify_text(filt_name_entry, GTK_STATE_NORMAL, &new_color);
}
}

View File

@ -1246,25 +1246,30 @@ filter_add_expr_bt_cb(GtkWidget *w _U_, gpointer main_w_arg)
static void
color_filter_te(GtkWidget *w, guint16 red, guint16 green, guint16 blue)
{
static GdkColor black = { 0, 0, 0, 0 };
GdkColor bg;
GtkStyle *style;
bg.pixel = 0;
bg.red = red;
bg.green = green;
bg.blue = blue;
style = gtk_style_copy(gtk_widget_get_style(w));
style->base[GTK_STATE_NORMAL] = bg;
gtk_widget_set_style(w, style);
gtk_style_unref(style);
gtk_widget_modify_text(w, GTK_STATE_NORMAL, &black);
gtk_widget_modify_base(w, GTK_STATE_NORMAL, &bg);
#if GTK_CHECK_VERSION(2,12,0)
gtk_widget_modify_cursor(w, &black, &black);
#endif
}
void
colorize_filter_te_as_empty(GtkWidget *w)
{
/* white */
color_filter_te(w, 0xFFFF, 0xFFFF, 0xFFFF);
/* use defaults */
gtk_widget_modify_text(w, GTK_STATE_NORMAL, NULL);
gtk_widget_modify_base(w, GTK_STATE_NORMAL, NULL);
#if GTK_CHECK_VERSION(2,12,0)
gtk_widget_modify_cursor(w, NULL, NULL);
#endif
}
void