On 28/12/05, Tristan Van Berkom <tristan.van.berkom@xxxxxxxxx
> wrote:
I don't expect answers out of the box.... :). I do check with the documentation and the source code.... :) So here we go..... Firstly let me paste Tristan's previous reply to this email too:
Tristan said:
you can:
o Create a sample GtkToggleButton
o Make copies of the GdkColor structs on widget->style.bg[GTK_STATE_NORMAL]
(or is it ACTIVE ?), you might also want the .fg, .base & .text members.
you'd want to do this post gtk_rc_parse().
o Use gtk_widget_modify_bg (widget, GTK_STATE_INSENSITIVE, sensitive_bg)
(and friends) to set the sensitive graphic state onto the insensitive state.
o gtk_widget_set_sensitive (widget, FASLE);
Heh,
I was just jotting it down from memory; I didn't actually
expect it to compile out of the box ;-)
I don't expect answers out of the box.... :). I do check with the documentation and the source code.... :) So here we go..... Firstly let me paste Tristan's previous reply to this email too:
Tristan said:
you can:
o Create a sample GtkToggleButton
o Make copies of the GdkColor structs on widget->style.bg[GTK_STATE_NORMAL]
(or is it ACTIVE ?), you might also want the .fg, .base & .text members.
you'd want to do this post gtk_rc_parse().
o Use gtk_widget_modify_bg (widget, GTK_STATE_INSENSITIVE, sensitive_bg)
(and friends) to set the sensitive graphic state onto the insensitive state.
o gtk_widget_set_sensitive (widget, FASLE);
Now, what I tried so far has failed. Here we go:
Modifying directly the values of widget->style:
widget->style->bg[GTK_STATE_INSENSITIVE] = widget->style->bg[GTK_STATE_NORMAL];
widget->style->fg[GTK_STATE_INSENSITIVE] = widget->style->fg[GTK_STATE_NORMAL];
widget->style->base[GTK_STATE_INSENSITIVE] = widget->style->base[GTK_STATE_NORMAL];
widget->style->fg_rc[GTK_STATE_INSENSITIVE] = widget->style->fg_rc[GTK_STATE_NORMAL];
using the gtk_widget_modify_xx functions:
gtk_widget_modify_bg(widget, GTK_STATE_INSENSITIVE, &(widget->style->bg[GTK_STATE_NORMAL]));
gtk_widget_modify_fg(widget, GTK_STATE_INSENSITIVE, &(widget->style->fg[GTK_STATE_NORMAL]));
gtk_widget_modify_base(widget, GTK_STATE_INSENSITIVE, &(widget->style->base[GTK_STATE_NORMAL]));
gtk_widget_modify_text(widget, GTK_STATE_INSENSITIVE, &(widget->style->text[GTK_STATE_NORMAL]));
Copying firstly the GtkStyle, modifying the new one and passing it back to the widget (using gtk_widget_set_style...) even if this method is not recommended in the API:
GtkStyle *style = gtk_style_copy(widget->style);
style->fg[GTK_STATE_INSENSITIVE] = style->fg[GTK_STATE_NORMAL];
style->bg[GTK_STATE_INSENSITIVE] = style->bg[GTK_STATE_NORMAL];
style->base[GTK_STATE_INSENSITIVE] = style->base[GTK_STATE_NORMAL];
gtk_widget_set_style(widget, style);
Copying the GtkRcStyle and then using gtk_widget_modify_style to pass it back... according to the API this is the "recommended" method as subsequent calls to gtk_widget_modify_XX are cummulative leaving the rest of the attributes unchanged.
GtkRcStyle *rcstyle = gtk_widget_get_modifier_style(widget);
rcstyle->bg[GTK_STATE_INSENSITIVE] = rcstyle->bg[GTK_STATE_NORMAL];
rcstyle->fg[GTK_STATE_INSENSITIVE] = rcstyle->fg[GTK_STATE_NORMAL];
rcstyle->base[GTK_STATE_INSENSITIVE] = rcstyle->base[GTK_STATE_NORMAL];
gtk_widget_modify_style(widget, rcstyle);
In all cases I call thereafter
gtk_widget_set_sensitive(widget, FALSE);
to make the widget insensitive.
However, none of the above works.... the colours of the insensitive widget are still the ones of an insensitive widget....
Any clues?
The only thing I can think of is that I am not using the right attributes.... bg, fg, base.... however, I cannot find any documentation explaining each one of the members in the GtkStyle structure.... but the names are self-explanatory so they should be the correct ones.... One more thing I am not fully sure about is the RcStyle.... This is supposed some kind of file that is used to define a theme.... Does this affect the GtkStyle? Ie when I call
GtkRcStyle *rcstyle = gtk_widget_get_modifier_style(widget);
what I am copying is the widget->style data structure or something else??? Because the function return GtkRcStyle* but I cannot find any GtkRcStyle structure in the gtkwidget.h definition.
--
-- Yiannis
_______________________________________________ gtk-list@xxxxxxxxx http://mail.gnome.org/mailman/listinfo/gtk-list