Mon Oct 27 18:31:41 2014: Request 99607 was acted upon. Transaction: Correspondence added by pwnbusiness2...@centurylink.net Queue: Wx Subject: Re: [rt.cpan.org #99607] Issue using wxTextEntryBox Broken in: (no value) Severity: (no value) Owner: Nobody Requestors: pwnbusiness2...@centurylink.net Status: rejected Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=99607 >
Thanks. Yes that helps. So you are saying that I should wait until I call a subroutine to actually create a new instance of the TextEntryDialog. That way the panel would already be visible and would therefore be a valid parent? ----- Original Message ----- From: "Mark Dootson via RT" <bug...@rt.cpan.org> To: <pwnbusiness2...@centurylink.net> Sent: Monday, October 27, 2014 3:05 PM Subject: [rt.cpan.org #99607] Issue using wxTextEntryBox > <URL: https://rt.cpan.org/Ticket/Display.html?id=99607 > > > Hi, > > Your issue with Wx::TextEntryBox arises from the basic way wxWidgets > handles applications and windows. > > The basic rule is that the main application loop will exit when no more > instances of Wx::TopLevelWindow ( e.g. Wx::Frame and Wx::Dialog ) exist in > the application. > > Top level windows (Frames and Dialogs) must be explicitly destroyed. > > $dialog_>Destroy; > > unless your code causes them to be destroyed by some other method (such as > being a child of another TopLevelWindow when it is destroyed or the > automatic behaviour when you close the window using system menus / > buttons). > > In your example, none of these things happens so the application loop > never exits. Your Wx::TextEntryDialog has no parent so continues to exist > after you close your Frame. > > Dialogs designed for modal usage, such as Wx::TextEntryDialog, need to > have a valid parent to work properly, or be created as a special case > without a parent. > > When you create the dialog and pass in the Wx::Panel as the parent the > following things happen. > > Dialogs need top level parents so the wxWidgets code determines the parent > of Wx::Panel - your frame - and checks if that is a valid parent. It > isn't - a parent top level window needs to be visible on the display to be > a valid parent for a dialog. So the dialog is created without a parent. > When you close the $frame, the TextEntryDialog is left hanging around so > the main application loop never exits. > > In this situation, wxWidgets will use anything you have set as the top > window (wxTheApp->SetTopWindow) but your example does not do this. > > In standard usage you would always do: > > my $dialog = Wx::textEntryDialog->new(....); > my $result = $dialog->ShowModal; > # .. get stuff from dialog > $dialog->Destroy; > > so your particular issue would not arise. > > With regard to the different in implementation between Wx:TextEntryDialog > and Wx::SingleChoiceDialog, it is indeed because of the use of client > data. The wxPerl implementation allows you to pass a reference to an array > of anything (so maybe references to objects) so a C++ class is required to > maintain the correct reference counts on the Perl SVs for the array ref. > > Hope it helps > > Mark > > > > > > > > > > > > > > > > > > > > > --- This email is free from viruses and malware because avast! Antivirus protection is active. http://www.avast.com