Continued: Popup edit in a dialog

ATS asteinarson at gmail.com
Tue Mar 11 17:32:30 PDT 2008


> A> With 2, the dialog does not close, but neither does the popup text!
> A> The function wxKeyboardHook then just drops the key event and it never 
> A> reaches the edit control. So it stays open. 
> 
>  This looks like a bug but I don't see any good way to make this work, it
> looks like we need to add Allow() or Veto() method to wxKeyEvent to make it
> possible to specify what should happen next but I'm not especially happy
> about it...

The situation is not so common, so maybe better to fix at wxDialog level. 

 
> A> A 3rd alternative would bo useful: 
> A> 3 - Stop processing EVT_CHAR_HOOK but give the key event to 
> A> the control that has the focus. 
> 
>  Yes, definitely. The question is what would be the best API for it?
> 

One can choose between:

A - wxDialogCmn being very smart and detecting the obvious cases.
Possible algorithm: Assume that _only_ direct children of the dialog 
and any child wxPanel will want to be closed when WXK_ESCAPE is 
pressed. Obviously this would only work for combinations of:

  wxDialog : wxPanel* : wxSomeCtrl* : wxTextCtrl 

(parent to child relations, * means can be nested several times). 

But that would cover some ground and leave other file non-modified. 


B - A style flag for wxWindow (say wxWANTS_ESCAPE). It's fairly easy 
and to implement and logically clear. A number of files need to be 
modified. 


C - A virtual function: 

   bool wxWindow::WantsEscape() 


D - Managing a pointer to the current editing window. The situation
is similar to that of popup menus (there can only be one active). 
Something like:

   static wxTLW::SetPopupEditWindow( wxWindow *wnd ) 

In wxWindow destructor, check if we need to reset this pointer.
(in a way it's a harmless pointer since we only use it to compare
with a real living one). It would require some changes wherever 
edit popup windows are used (wxListCtrl, wxTreeCtrl, ...)?. 


My preference would be: 

A or D - I think A is good enough and covers known cases. 
D - Is a a nice general solution that extends more easily to 
new cases. 

B - Better than C but flags can be messy. Implicit handling or 
an API is more clear.

C - I'm not a fan of virtual functions for very limited things 
like this. They add space to each type derived from wxWindow. 

Thoughts? 


> A>   wxListCtrl::EndEditlabel( )
> A> 
> A> However... that function is broken on MSW.
> 
>  Hmm, it worked for me the last time I tested, did you test it outside of
> your application?

No. But calling ::DestroyWindow( HWND hwnd ) with the handle from the 
popup text ctrl solved the matter. 


Regards
// ATS. 

> 
>  Regards,
> VZ
> 








More information about the wx-users mailing list