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

Re: dialog response signal class closure



muppet <scott asofyet org> writes:
>
> The problem you are seeing results from the fact that user callbacks
> (e.g.  $dialog->signal_connect (...)) go through the function
> gperl_signal_connect(), which checks with the registry of custom
> marshalers, while using a class closure through
> Glib::Type::register_object()

I thought it had to be something like that, wasn't sure if the two were
meant to take the same route.

>     return $self->signal_chain_from_overridden ($resp);
>
> causes the warning
>
>     Argument "ok" isn't numeric in subroutine entry at response-
> marshaler.pl line 17.

I didn't think of that.

> Now, one other caveat is that you're returning the value from chaining
> up in a signal that returns no value and doesn't have an
> implementation in the parent.  So, you don't actually need to chain up
> from "response".

Ah yes.  That was sorta to preserve default behaviour like "delete-event
destroy by default", but I see that magic comes under the delete-event
event handler, rather than the response handler as such.

> So, it's apparent that overriding the marshaler causes problems for
> signal_chain_from_overridden().  I'm not really sure how we missed
> that before.  A proper fix for this likely involves having a custom
> "chain marshaler" to bookend with the custom signal marshaler, and
> setting up signal_chain_from_overridden() to look for these.

g_signal_get_invocation_hint gives the current active signal does it, to
know what/how to "unmarshall".

> - do the somewhat dirty signal_connect-to-self-in-INIT_INSTANCE so
> that the custom marshaler fires, OR

Yep.  That's where I started, then realized a class default ought to be
cleaner.

>   unless you don't mind simply requiring bindings new enough not to
> have the problem.

That'd be ok, in the fullness of time.

> - define a special set of positive values as custom return codes for
> your module's dialog, and use those constants in both your class
> closure and in external handlers connected to the response signal.
> This one is kinda icky.

I guess it's not too nice if anyone wants to hook the signal or further
subclass and has to put up with non-standard numbers for standard
looking buttons.  Though in what I'm tinkering with that's both unlikely
and anyway I've already got a couple of buttons like "refresh" with
their own numbers where none of the GtkResponseType names correspond.

If I'm interested in delete-event I probably have know what that's going
to come back as in any case, since it comes out of gtk rather than a
specified button id of course.  (Some dialog classes I want to hide on
delete/close and some should destroy.)


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