[9623] in The GTK GIMP ToolKit mailing list archive
[gtk-list] style usage
daemon@ATHENA.MIT.EDU (Robert Roebling)
Wed Oct 28 18:14:18 1998
Date: Thu, 29 Oct 1998 01:07:08 +0100
From: Robert Roebling <roebling@sun2.ruf.uni-freiburg.de>
To: gtk-list@redhat.com
Resent-From: gtk-list@redhat.com
Reply-To: gtk-list@redhat.com
This is a multi-part message in MIME format.
--------------46B3F9389F86C38DE27B04EF
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
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
--------------46B3F9389F86C38DE27B04EF
Content-Type: text/plain; charset=us-ascii; name="buttons.c"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="buttons.c"
#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;
}
--------------46B3F9389F86C38DE27B04EF--
--
To unsubscribe: mail -s unsubscribe gtk-list-request@redhat.com < /dev/null