Re: Build problem Gtk2-1.037
- From: muppet <scott asofyet org>
- To: Gtk-Perl-List <gtk-perl-list gnome org>
- Subject: Re: Build problem Gtk2-1.037
- Date: Mon, 1 Mar 2004 13:20:34 -0500
BIG NOTE: we are freezing API presently. If you want to propose any
changes to the gtk2-perl API or to the way gtk2-perl behaves, we must
talk about them NOW.
On Monday, March 1, 2004, at 10:49 AM, Thierry Vignaud wrote:
Ross McFarland <rwmcfa1 neces com> writes:
to get it to work with some of their tools.
one shot exception handlers are just insane in big apps.
do you expect us to set us an handler that manage all kind of
exceptions on every callbacks?
this is a totally insane policy.
you want exception throwed from callbacks to go up until sg care about
them.
you do not want every piece of code to deal with thousands of possible
problems totally unrelated to what they do and which they do not know
what do to do about.
a few technical points:
- Glib's GClosure exception handlers are not one-shots --- you can have
them act like one-shots if you return FALSE. If you return TRUE, the
handler stays installed. The fact that they are global and all of them
run allows you to implement fine-grained handling.
- The idea of trapping exceptions during main loops has precedent
(Event.pm). There are also technical reasons (if you jump past a
gtk_main() stack frame you can't get out of it).
- Given the above, you can very easily install an exception handler
that kills the main loop and cleans up properly. It's difficult to the
point of senselessness to get the semantics of this right in a library,
because it's truly the app's responsibility.
For the case of a click on a cancel button in a wizard as something to
jump you back to the calling context (if i'm recalling that thread
correctly), you could do this:
# in library code that launches the wizard
Glib->install_exception_handler (sub {
if ($_[0] =~ /wizcancel/) {
Gtk2->main_quit; # stop the enclosing main loop
${$_[1]} = $_[0]; # let the owner know
# uninstall yourself; we'll reinstall before the next wizard launch.
FALSE;
}
return TRUE; # try again
}, \$wizard_canceled);
Checking $wizard_canceled is no different from checking $@, after all.
Of course, how you implement that depends completely on how your app is
defined and how you do things.
our solution did fix quite some issues like gratuitous ERRSV clobberin
and the like that i'd to send fixes again.
i applied your patch that avoids clobbering $@, and the most recent
change was to avoid clobbering $_. if there are others, please send
them.
you choose to ignore all errors by default which is an insane policy
as far as i'm concerned.
Technically, we don't ignore all errors by default. We *trap*
exceptions that go uncaught and would otherwise cause extreme breakage;
by precedent for event-based system we do not kill the event loop, but
we do also give you a hook to handle those exceptions, so they are far
from ignored.
The one failing i see is that if you have any exception handlers
installed, you won't get warnings, regardless of whether the exception
is "handled". I'm open to proposals for fixing that, but be quick, as
our freeze date is *today*.
--
I don't have a drinking problem,
'cept when i can't get drink.
-- Tom Waits
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]