jryan | 2 May 2011 07:13
Gravatar

Re: [Vala] Struct property bug: get, but not set

Excerpts from Nor Jaidi Tuah's message of 2011-05-01 23:32:19 -0400:
> The following displays 0 for button.color.red.
> Expected: 100.
> 
>     void main (string[] args) {
>         Gtk.init (ref args);
>         var button = new Gtk.ColorButton ();
>         button.color.red = 100; /*1*/
>         debug ("%d", button.color.red);
>     }
> 
> Line /*1*/ is compiled to:
>     gtk_color_button_get_color (button, &_tmp1_);
>     _tmp1_.red = (guint16) 100;
> 
> There is no set access to button.color at all!
> 
> Is this a known bug?
> 
> hand
> Nor Jaidi Tuah
> 

Not a bug.

Explanation:
http://bugzilla.gnome.org/show_bug.cgi?id=621787

I think you're going to have to create a new Color:

	using Gtk;
	void main(string[] args) {
		Gtk.init(ref args);
		var color = Color() { pixel=0, red=100, green=0, blue=0 };
		var button = new Gtk.ColorButton.with_color(color);
		debug( <at> "$(button.color.red)");
	}

I think this is because structs are passed by value,
and not by reference, so it creates a temporary struct
(a shallow copy) when using the getter, then you are setting
the red of that temporary struct, not actually changing
the button's color struct.
--

-- 
Jonathan Ryan

Gmane