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


Reply via email to