[Gtk-sharp-list] Problem loading icons: is this a bug?

Raúl Moratalla raul.moratalla@ono.com
Sat, 17 Jul 2004 02:21:30 +0200

Fredrik Nilsson escribió:

>On fre, 2004-07-16 at 20:42 +0200, Raúl Moratalla wrote:
>>I use glade for edit the interface of my application and I add to a form 
>>or to a button an icon: When I execute the application I get the 
>>following error and it crashes:
>>(<unknown>:31877): GLib-CRITICAL **: file gutils.c: line 577 
>>(g_path_get_dirname): assertion `file_name != NULL' failed
>>(<unknown>:31877): GdkPixbuf-CRITICAL **: file gdk-pixbuf-io.c: line 761 
>>(gdk_pixbuf_new_from_file): assertion `filename != NULL' failed
>>Unhandled Exception: System.NullReferenceException: Object reference not 
>>set to an instance of an object
>>in (unmanaged) (wrapper managed-to-native) 
>>Glade.XML:glade_xml_new_from_buffer (byte[],int,string,string)
>>in <0x00004> (wrapper managed-to-native) 
>>Glade.XML:glade_xml_new_from_buffer (byte[],int,string,string)
>>in <0x00133> Glade.XML:.ctor 
>>in [0x00017] (at /home/raul/MonoDevelopProjects/glade1/Main.cs:21) 
>>GladeApp:.ctor (string[])
>>in [0x00001] (at /home/raul/MonoDevelopProjects/glade1/Main.cs:11) 
>>GladeApp:Main (string[])
>>press any key to continue...
>>It seems that can't load the icon. I looked into the xml file and I can 
>>see the following line:
>>  <property name="icon">App.png</property>
>>I changed it with the complete path to the image and the application now 
>>loads and shows the icon, but if I want to distribute the source code 
>>this is a problem. Is this a bug or am I doing something wrong?
>>I tried to load and assign the icons to my window or my buttons using 
>>code but I am a bit confused and I don't know how to do it :( (I think 
>>that I should use Gdk.Pixbuf) Anyone could explain to me how to do it? I 
>>would to knowt if the application crashes if I assign the icon by code.
>>Best regards,
>Hi Raúl!
>Guess who... yes, it's me again! ;)
>I'm not an expert on this, but this is one way to do it...
>Don't set the icons in glade, instead do it in the program.
>In Monodevelop, add the icons to 'Resource Files', and it will be
>embedded in the exe.
>For the window, use this:
>window1.Icon = new Gdk.Pixbuf (null, "icon-file-name.png");
>For the button you can do this:
>In glade, set a random Icon from the defaults (e.g. Cancel), click on
>the Icon in the button and notice it's name (or change it to what you
>want), e.g. image1.
>In the program, use this code:
>image1.Pixbuf = new Gdk.Pixbuf (null, "other-icon-file-name.png");
>Of course you need to 'auto-define' window1 and image1 with the usual:
>[Widget] Gtk.Window window1;
>[Widget] Gtk.Image image1;
>But that you propably already know...
>Now I have to go and paint a roof :)
>Good luck,
>Gtk-sharp-list maillist  -  Gtk-sharp-list@lists.ximian.com
Thanks Fredrik, I coded something like this:

Gdk.Pixbuf test = new Gdk.Pixbuf ("App.ico");

but this didn't work. I read the documentation but I should be sleeping 
because I didn't try to call the constructor with those parameters ;)
Now it works without any problem, and I will not use glade for assign 
the icons :)

Thanks again for all your useful information, you're helping me a lot to 
learn and improve my (little) knowledge of C#/MONO/GTK.