[Gtk-sharp-list] Gtk.SpinButton recursive signals create segfault

Fabian Sturm f@rtfs.org
Tue, 08 Mar 2005 20:00:49 +0100


Hi!

I have some trouble with a Gtk.SpinButton and its signals.
A recursive call of the changed signal leads to a segfault.

I guess I should describe my class structure a little bit:
(all in pseudo code, I actually use glade to load the gui)

I have one class holding data

class data {
  public EventHandler Changed;
  private int number;

  public int Number
  {
    get { return Number; }
    set { Number = value; OnChanged (); }
  }

  void OnChanged () {
    if (Changed != null)
      Changed (this);
  }
}

and one class creating a gui for this data

class gui {

  public void gui (data d, vbox v) {
    SpinButton number_sb = new SpinButton ();
    v.add (number_sb);
    // connect signal handler
    number_sb.Value = d.number;
    d.Changed = new EventHandler (OnDChanged);
  }

  OnDChanged (data d) {
    number_sb.Value = d.name;
  }

  on_name_entry_changed (object o, EventArgs args) {
    d.Number = ((SpinButton)o).ValueAsInt;
  }
}

So the recursion is that If I click the up arrow on the SpinButton which
triggers an "on_number_sb_changed" signal which changes "d.Number = "
which triggers a Changed Event....


So is my class structure wrong? The reason why I seperated data and gui
is that I might have two different guis at the same time showing the
same data.

Hope anyone can help me with this. Btw. this is more a Gtk+ problem than
gtk-sharp but the solutions I got there using
g_signal_handlers_block_by_func() failed because I could not find this
method in the gtk# docu.

Btw. the recursion does not appear for Gtk.Entry widgets!?

Thanks a lot, Fabian