From 4a41c655e85ee535e3ac20ac863d219611857ef2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Sun, 27 May 2001 14:01:18 +0000 Subject: [PATCH] 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 --- include/wx/msw/frame.h | 6 ++++-- src/msw/frame.cpp | 7 ------- src/msw/window.cpp | 12 ++++++++++++ 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/include/wx/msw/frame.h b/include/wx/msw/frame.h index 91c11c01c1..fbdad9c886 100644 --- a/include/wx/msw/frame.h +++ b/include/wx/msw/frame.h @@ -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(); diff --git a/src/msw/frame.cpp b/src/msw/frame.cpp index 7f82254fad..9a699cfebc 100644 --- a/src/msw/frame.cpp +++ b/src/msw/frame.cpp @@ -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 // ---------------------------------------------------------------------------- diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 184d7da24b..02d6431d79 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -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); -- 2.45.2