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.