Re: GTK signals question.



On Tue, Mar 4, 2014 at 10:43 PM, Chris Moller <moller mollerware com> wrote:

Okay, I'm out of ideas...

I'm writing an app, that among a lot of other stuff, has three mutually
interacting spinbuttuns, i.e., if I increment spinbutton A, its callback
then updates values in B and C.  B and then would try to update A, and C,
etc., resulting in a bottomless recursion.  So, what I need to do is, while
I'm in A's callback, block the B and C callbacks; while in in B, block A
and C and so on.

Every combination of g_signal_handler_block(), g_signal_handlers_block_matched(),
etc, I've tried just results in seg faults--all that stuff works fine
outside the callbacks, but the moment I stick them in a callback, death
happens.

Any suggestions?


I'm surprised g_signal_handler_block() or g_signal_stop_emission() didn't
work. This was actually a concern when we added the GBinding code to
GObject - making sure that these kinds of signal loops were well documented
and that you have to prevent against them yourself using one of these
methods.

My first suggestion would be to post a minimal test case demonstrating how
this failed for you - might have stepped on a bug, but either way it'd make
it easier to see why it failed for you.

My second suggestion is along the same line as Tristan's suggestion: create
a GObject that holds the value as a property (the model), and bind the
property to the views instead of binding the views' values together. (I
think this object would be more boilerplate than code, woe is our lives as
Gtk+ C developers.) You can use the GBinding code with an appropriate
GBindingTransformFunc applied to scale the value correctly for each view,
which cuts down the amount of code this approach would take. If these
controls are in the same place in the UI, you could bake it all (the three
spin buttons, any labels, and the one true value property) into one
composite GtkWidget and save yourself a bit of boilerplate too.

-A. Walton


Thanks.
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]