yet another attempt to fix LastFocus bug in wxFrame

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10349 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík 2001-05-27 14:01:18 +00:00
parent 86f65864f9
commit 4a41c655e8
3 changed files with 16 additions and 9 deletions

View File

@ -61,8 +61,6 @@ public:
// override some more virtuals
virtual bool Show(bool show = TRUE);
virtual void RemoveChild( wxWindowBase *child );
// event handlers
void OnActivate(wxActivateEvent& event);
void OnSysColourChanged(wxSysColourChangedEvent& event);
@ -118,6 +116,10 @@ public:
// current size - this has an effect of refreshing the window layout
void SendSizeEvent();
// called by wxWindow whenever it gets focus
void SetLastFocus(wxWindow *win) { m_winLastFocused = win; }
wxWindow *GetLastFocus() const { return m_winLastFocused; }
protected:
// common part of all ctors
void Init();

View File

@ -799,13 +799,6 @@ void wxFrame::OnActivate(wxActivateEvent& event)
}
}
void wxFrame::RemoveChild( wxWindowBase *child )
{
if ( child == m_winLastFocused )
m_winLastFocused = NULL;
wxFrameBase::RemoveChild(child);
}
// ----------------------------------------------------------------------------
// tool/status bar stuff
// ----------------------------------------------------------------------------

View File

@ -288,6 +288,18 @@ wxWindow::~wxWindow()
m_isBeingDeleted = TRUE;
MSWDetachWindowMenu();
// VS: make sure there's no wxFrame with last focus set to us:
for (wxWindow *win = GetParent(); win; win = win->GetParent())
{
wxFrame *frame = wxDynamicCast(win, wxFrame);
if ( frame )
{
if ( frame->GetLastFocus() == this )
frame->SetLastFocus((wxWindow*)NULL);
break;
}
}
if ( m_parent )
m_parent->RemoveChild(this);