]> git.saurik.com Git - wxWidgets.git/commitdiff
yet another attempt to fix LastFocus bug in wxFrame
authorVáclav Slavík <vslavik@fastmail.fm>
Sun, 27 May 2001 14:01:18 +0000 (14:01 +0000)
committerVáclav Slavík <vslavik@fastmail.fm>
Sun, 27 May 2001 14:01:18 +0000 (14:01 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@10349 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/frame.h
src/msw/frame.cpp
src/msw/window.cpp

index 91c11c01c16173922228257c32ff0737ec2e3d0b..fbdad9c8860447f366c975a4298fad144bb87ebd 100644 (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();
index 7f82254fad492fc597f10c58720b03c71e4f5c07..9a699cfebc7b61649e10447055705ef20e0700cb 100644 (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
 // ----------------------------------------------------------------------------
index 184d7da24b96da2eece9c6c087d35d04126f95c0..02d6431d796c73d5b037861a39fb4c6dda9d7c1f 100644 (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);