http://www.perlmonks.org?node_id=290550


in reply to Re: WxPerl Login Dialog
in thread WxPerl Login Dialog

Thanks for your comments. As you may guess, I've barely started with Wx, so I didn't even notice Wx::Dialog yet :-) Now that I've tried it, there seems to be a problem with not creating any top level window within Wx::App::OnInit. I have this:
sub OnInit { my $self = shift; $$cancel = LoginWindow->new( $user, $passwd, undef, # Parent window -1, # Window id 'Login', # Title [200,200], # position X, Y [200,150], # size X, Y wxCAPTION | wxSYSTEM_MENU )->ShowModal; }
If ShowModal returns true, the app hangs, if it returns false, then I get this error from this code within Wx::App:
my $ret = Wx::_App::Start($this,$this->can('OnInit')); Wx::_croak( 'OnInit must return a true return value' ) unless $ret || Wx::wxMAC(); # why does OnInit always return 0 on M +ac?
In the WxWindows documentation, it says to return a false value from OnInit to exit the application. I don't know why WxPerl would require a true value; it seems like a bug to me. I think I would like to just set $$cancel and then return false from OnInit unconditionally.

Update: Ahh, if I wrap the call to the App constructor in an eval, I don't get the error message, and I can filter for that particular message in $@, but I still think returning false from OnInit should be perfectly valid.