]> git.saurik.com Git - wxWidgets.git/blobdiff - src/univ/control.cpp
Applied [ 1867939 ] fixes for wxTreeCtrl crashes when exiting from label editing...
[wxWidgets.git] / src / univ / control.cpp
index 9c7c0c7bfc6d128e817a8d1424cf073acb236c15..8e2a06e9de8a2f6a1042af3dafb0f60a95cc842d 100644 (file)
 // declarations
 // ============================================================================
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-    #pragma implementation "control.h"
-#endif
-
 // ----------------------------------------------------------------------------
 // headers
 // ----------------------------------------------------------------------------
 
 #if wxUSE_CONTROLS
 
+#include "wx/control.h"
+
 #ifndef WX_PRECOMP
     #include "wx/app.h"
-    #include "wx/control.h"
     #include "wx/dcclient.h"
 #endif
 
@@ -55,29 +52,9 @@ WX_FORWARD_TO_INPUT_CONSUMER(wxControl)
 // creation
 // ----------------------------------------------------------------------------
 
-wxControl::wxControl()
-{
-    Init();
-}
-
-wxControl::wxControl(wxWindow *parent,
-                     wxWindowID id,
-                     const wxPoint& pos,
-                     const wxSize& size,
-                     long style,
-                     const wxValidator& validator,
-                     const wxString& name)
-{
-    Init();
-
-    Create(parent, id, pos, size, style, validator, name);
-}
-
 void wxControl::Init()
 {
     m_indexAccel = -1;
-
-    m_inputHandler = (wxInputHandler *)NULL;
 }
 
 bool wxControl::Create(wxWindow *parent,
@@ -91,10 +68,10 @@ bool wxControl::Create(wxWindow *parent,
     if ( !wxControlBase::Create(parent, id, pos, size, style, validator, name) )
     {
         // underlying window creation failed?
-        return FALSE;
+        return false;
     }
 
-    return TRUE;
+    return true;
 }
 
 // ----------------------------------------------------------------------------
@@ -116,17 +93,19 @@ int wxControl::FindAccelIndex(const wxString& label, wxString *labelOnly)
     }
 
     int indexAccel = -1;
-    for ( const wxChar *pc = label; *pc != wxT('\0'); pc++ )
+    for ( wxString::const_iterator pc = label.begin(); pc != label.end(); ++pc )
     {
         if ( *pc == MNEMONIC_PREFIX )
         {
-            pc++; // skip it
-            if ( *pc != MNEMONIC_PREFIX )
+            ++pc; // skip it
+            if ( pc == label.end() )
+                break;
+            else if ( *pc != MNEMONIC_PREFIX )
             {
                 if ( indexAccel == -1 )
                 {
                     // remember it (-1 is for MNEMONIC_PREFIX itself
-                    indexAccel = pc - label.c_str() - 1;
+                    indexAccel = pc - label.begin() - 1;
                 }
                 else
                 {
@@ -145,6 +124,14 @@ int wxControl::FindAccelIndex(const wxString& label, wxString *labelOnly)
 }
 
 void wxControl::SetLabel(const wxString& label)
+{
+    // save original label
+    wxControlBase::SetLabel(label);
+
+    UnivDoSetLabel(label);
+}
+
+void wxControl::UnivDoSetLabel(const wxString& label)
 {
     wxString labelOld = m_label;
     m_indexAccel = FindAccelIndex(label, &m_label);
@@ -155,9 +142,4 @@ void wxControl::SetLabel(const wxString& label)
     }
 }
 
-wxString wxControl::GetLabel() const
-{
-    return m_label;
-}
-
 #endif // wxUSE_CONTROLS