]> git.saurik.com Git - wxWidgets.git/commitdiff
Take care of some focus issues with the AutoComp list box and also a
authorRobin Dunn <robin@alldunn.com>
Thu, 10 Jun 2004 00:09:27 +0000 (00:09 +0000)
committerRobin Dunn <robin@alldunn.com>
Thu, 10 Jun 2004 00:09:27 +0000 (00:09 +0000)
crash at exit when losing focus.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27723 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

contrib/src/stc/PlatWX.cpp
contrib/src/stc/stc.cpp
contrib/src/stc/stc.cpp.in
src/stc/PlatWX.cpp
src/stc/stc.cpp
src/stc/stc.cpp.in

index ab3e95c9d52a8ea2d5a9cbbaac21e6c7dcee4231..43b6a2a44335c02ad2a0fe6cdde33a0fba72162f 100644 (file)
@@ -684,6 +684,7 @@ public:
         : wxListView(parent, id, pos, size, style)
     {}
 
+    
     void OnFocus(wxFocusEvent& event) {
         GetParent()->SetFocus();
         event.Skip();
@@ -692,7 +693,24 @@ public:
     void OnKillFocus(wxFocusEvent& WXUNUSED(event)) {
         // Do nothing.  Prevents base class from resetting the colors...
     }
+    
+#ifdef __WXMAC__
+    // For some reason I don't understand yet the focus doesn't really leave
+    // the listbox like it should, so if we get any events feed them back to
+    // the wxSTC
+    void OnKeyDown(wxKeyEvent& event) {
+        GetGrandParent()->GetEventHandler()->ProcessEvent(event);
+    }
+    void OnChar(wxKeyEvent& event) {
+        GetGrandParent()->GetEventHandler()->ProcessEvent(event);
+    }
 
+    // And we need to force the focus back when being destroyed
+    ~wxSTCListBox() {
+        GetGrandParent()->SetFocus();
+    }    
+#endif    
+    
 private:
     DECLARE_EVENT_TABLE()
 };
@@ -700,6 +718,10 @@ private:
 BEGIN_EVENT_TABLE(wxSTCListBox, wxListView)
     EVT_SET_FOCUS( wxSTCListBox::OnFocus)
     EVT_KILL_FOCUS(wxSTCListBox::OnKillFocus)
+#ifdef __WXMAC__
+    EVT_KEY_DOWN(  wxSTCListBox::OnKeyDown)
+    EVT_CHAR(      wxSTCListBox::OnChar)
+#endif
 END_EVENT_TABLE()
 
 
@@ -736,7 +758,7 @@ public:
     // immediately.
     bool Destroy() {
 #ifdef __WXMAC__
-        // There bottom edge of this window is not getting properly
+        // The bottom edge of this window is not getting properly
         // refreshed upon deletion, so help it out...
         wxWindow* p = GetParent();
         wxRect r(GetPosition(), GetSize());
index f96e8ffadc0e605261ab7a2ce4813ecb30427a6d..83a9e24895742318a4b017df19904f2a5dd0b4de 100644 (file)
@@ -2720,7 +2720,10 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
 
 
 void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
-    m_swx->DoLoseFocus();
+#ifdef __WXMAC__
+    if (! (IsBeingDeleted() || GetParent()->IsBeingDeleted()))
+#endif
+        m_swx->DoLoseFocus();
     evt.Skip();
 }
 
index 11f590c9a47e392a6e2075454dee23bf7d730b82..a52798705e5e8a8a8d66dfc1a80e626d71e4631a 100644 (file)
@@ -529,7 +529,10 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
 
 
 void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
-    m_swx->DoLoseFocus();
+#ifdef __WXMAC__
+    if (! (IsBeingDeleted() || GetParent()->IsBeingDeleted()))
+#endif
+        m_swx->DoLoseFocus();
     evt.Skip();
 }
 
index ab3e95c9d52a8ea2d5a9cbbaac21e6c7dcee4231..43b6a2a44335c02ad2a0fe6cdde33a0fba72162f 100644 (file)
@@ -684,6 +684,7 @@ public:
         : wxListView(parent, id, pos, size, style)
     {}
 
+    
     void OnFocus(wxFocusEvent& event) {
         GetParent()->SetFocus();
         event.Skip();
@@ -692,7 +693,24 @@ public:
     void OnKillFocus(wxFocusEvent& WXUNUSED(event)) {
         // Do nothing.  Prevents base class from resetting the colors...
     }
+    
+#ifdef __WXMAC__
+    // For some reason I don't understand yet the focus doesn't really leave
+    // the listbox like it should, so if we get any events feed them back to
+    // the wxSTC
+    void OnKeyDown(wxKeyEvent& event) {
+        GetGrandParent()->GetEventHandler()->ProcessEvent(event);
+    }
+    void OnChar(wxKeyEvent& event) {
+        GetGrandParent()->GetEventHandler()->ProcessEvent(event);
+    }
 
+    // And we need to force the focus back when being destroyed
+    ~wxSTCListBox() {
+        GetGrandParent()->SetFocus();
+    }    
+#endif    
+    
 private:
     DECLARE_EVENT_TABLE()
 };
@@ -700,6 +718,10 @@ private:
 BEGIN_EVENT_TABLE(wxSTCListBox, wxListView)
     EVT_SET_FOCUS( wxSTCListBox::OnFocus)
     EVT_KILL_FOCUS(wxSTCListBox::OnKillFocus)
+#ifdef __WXMAC__
+    EVT_KEY_DOWN(  wxSTCListBox::OnKeyDown)
+    EVT_CHAR(      wxSTCListBox::OnChar)
+#endif
 END_EVENT_TABLE()
 
 
@@ -736,7 +758,7 @@ public:
     // immediately.
     bool Destroy() {
 #ifdef __WXMAC__
-        // There bottom edge of this window is not getting properly
+        // The bottom edge of this window is not getting properly
         // refreshed upon deletion, so help it out...
         wxWindow* p = GetParent();
         wxRect r(GetPosition(), GetSize());
index f96e8ffadc0e605261ab7a2ce4813ecb30427a6d..83a9e24895742318a4b017df19904f2a5dd0b4de 100644 (file)
@@ -2720,7 +2720,10 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
 
 
 void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
-    m_swx->DoLoseFocus();
+#ifdef __WXMAC__
+    if (! (IsBeingDeleted() || GetParent()->IsBeingDeleted()))
+#endif
+        m_swx->DoLoseFocus();
     evt.Skip();
 }
 
index 11f590c9a47e392a6e2075454dee23bf7d730b82..a52798705e5e8a8a8d66dfc1a80e626d71e4631a 100644 (file)
@@ -529,7 +529,10 @@ void wxStyledTextCtrl::OnKeyDown(wxKeyEvent& evt) {
 
 
 void wxStyledTextCtrl::OnLoseFocus(wxFocusEvent& evt) {
-    m_swx->DoLoseFocus();
+#ifdef __WXMAC__
+    if (! (IsBeingDeleted() || GetParent()->IsBeingDeleted()))
+#endif
+        m_swx->DoLoseFocus();
     evt.Skip();
 }