Re: [gtk-list] style usage
- From: Eric Harlow <linuxgeek yahoo com>
- To: gtk-list redhat com
- Subject: Re: [gtk-list] style usage
- Date: Wed, 28 Oct 1998 18:03:33 -0800 (PST)
Some more notes for you - just changing the style color after it's
been assigned to a widget causes the same behavior. Comment out the
second gtk_widget_set_style and see for yourself.
I don't think that directly modifying the style of a widget is good
practice. You really should set the colors first, and then call
gtk_widget_set_style.
Also, the second gtk_widget_set_style is trying to set the style of
the widget to the style it already has - and is ignored. (See
gtkwidget.c, gtk_widget_set_style_internal ())
-Eric
> style->fg[GTK_STATE_NORMAL] = color;
> gtk_widget_set_style( button, style );
---Robert Roebling <roebling@sun2.ruf.uni-freiburg.de> wrote:
>
> Hi,
>
> I'm writing a C++ library with the GTK+ and
> I'd like to be able to set the foreground and
> background colour directly, not using resources.
> As I haven't managed to do this without segfaulting
> sooner or later, I have written a mini-program
> that reproduces the segv with GTK+ 1.0.6. What
> I do is to create a new style with
> gtk_style_copy()
> give it a new colour and assign it to a button.
> No problem.
>
> But when I then reuse this style to change another
> colour of the style and assign the style to
> the button it will give a segv upon destruction
> of the button. I tried to use gtk_style_ref()
> but that didn't change anything. It is possble to
> do what I want by using gtk_style_copy() everytime,
> but I wonder if that is not a memory leak.
>
> Also, in order to set the colour of the text of
> a button, I have to change the label's style as
> well. As you can easily test with my program, it
> is possible without segfaulting to assign the
> same style to two widgets, the label and the
> button. Is that correct or do I have to fear
> memory garbage later on?
>
> Thanks and regards,
>
> Robert Roebling>
>
> #include <gtk/gtk.h>
>
> int main (int argc, char *argv[])
> {
> GtkWidget *window;
> GtkWidget *menu;
> GtkWidget *button;
> GdkColor color;
> GdkColormap *colormap;
> GtkStyle *style;
>
> gtk_init (&argc, &argv);
> window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
> gtk_window_set_title (GTK_WINDOW (window), "Style usage?");
>
> gtk_container_border_width (GTK_CONTAINER (window), 10);
> gtk_widget_realize(window);
>
> /*
> create simple button
> */
>
> button = gtk_button_new_with_label( "Hallo" );
>
> gtk_container_add (GTK_CONTAINER (window), button );
>
> gtk_widget_realize( button );
> gtk_widget_show( button );
>
> /*
> create style by copying an existing one
> */
>
> style = gtk_style_copy( gtk_widget_get_style( button ) );
>
> /*
> create color and assign it to style's background
> */
>
> color.red = 40000;
> color.green = 40000;
> color.blue = 40000;
> colormap = gdk_window_get_colormap( button->window );
> gdk_color_alloc( colormap, &color );
> style->bg[GTK_STATE_NORMAL] = color;
>
> /*
> assign style to button
> */
>
> gtk_widget_set_style( button, style );
>
> /*
> assign same color to style's foreground
> if this is not done -> no SEGFAULT
> if I do another gtk_style_copy(...) -> no SEGFAULT
> */
>
> style->fg[GTK_STATE_NORMAL] = color;
> gtk_widget_set_style( button, style );
>
>
> gtk_widget_show (window);
>
> /*
> destruction will produce SEGFAULT
> */
>
> gtk_widget_destroy( window );
>
> return 0;
> }
>
>
>
_________________________________________________________
DO YOU YAHOO!?
Get your free @yahoo.com address at http://mail.yahoo.com
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]