[Glade-users] Changing the image of a pixmap

Damon Chaplin damon@helixcode.com
Thu, 05 Oct 2000 00:46:14 +0100


Chris Freeze wrote:
> 
> I'm creating a dialog in glade that has a few buttons and a pixmap.  I've been
> able to change the text of the buttons but not able to change the image that's
> displayed.
> 
> The following code segfaults inside of gdk_bitmap_ref.  I've seen how to do
> this using just Gtk code, but not with a glade generated object.  Any
> suggestions on where I am going wrong?
> 
> GtkWidget *Pixmap;
> GtkStyle *Style;
> GdkPixmap *Image;
> GdkBitmap *ImageMask;
> 
> Style = gtk_widget_get_style(lookup_widget(Dialog,"dialog_widget"));
> 
> Image =
>   gdk_pixmap_create_from_xpm(lookup_widget(Dialog,"dialog_widget")->window,
>   ImageMask,
>   &lookup_widget(Dialog,"dialog_widget")->style->bg[GTK_STATE_NORMAL],
>   "error32.xpm");
> 
> //image is the name given to the pixmap entry in glade
> gtk_pixmap_set(GTK_PIXMAP(lookup_widget(Dialog,"image")),Image,ImageMask);


The mask argument to gdk_pixmap_create_from_xpm() should be a GdkBitmap **mask
rather than a GdkBitmap *mask. Didn't the compiler warn about this?

Also if you are using the mask, you don't need to worry about the transparent
color.

So this may be better:

 dialog_widget = lookup_widget(Dialog,"dialog_widget")
 Image = gdk_pixmap_create_from_xpm (dialog_widget->window, &ImageMask,
                                     NULL, "error32.xpm");

 //image is the name given to the pixmap entry in glade
 gtk_pixmap_set(GTK_PIXMAP(lookup_widget(Dialog,"image")),Image,ImageMask);


Damon