]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/textctrl.cpp
wxUSE_TOOLTIPS fix (good grief I think I just did this a couple days ago...)
[wxWidgets.git] / src / mac / carbon / textctrl.cpp
index 0cf2f1696dc9967287d613418956bb0dd4138a71..59acc5cc7519102baf47853075e256b68afd64a7 100644 (file)
@@ -214,7 +214,7 @@ public :
 class wxMacMLTEControl : public wxMacTextControl
 {
 public :
-    wxMacMLTEControl( wxTextCtrl *peer ) : wxMacTextControl( peer ) {}
+    wxMacMLTEControl( wxTextCtrl *peer ) ;
     virtual wxString GetStringValue() const ;
     virtual void SetStringValue( const wxString &str) ;
 
@@ -271,7 +271,6 @@ public :
                              const wxSize& size, long style ) ;
     virtual OSStatus SetFocus( ControlFocusPart focusPart ) ;
     virtual bool HasFocus() const ;
-    virtual bool NeedsFocusRect() const;
 protected :
     HIViewRef m_scrollView ;
     HIViewRef m_textView ;
@@ -318,7 +317,6 @@ public :
     ~wxMacMLTEClassicControl() ;
     virtual void VisibilityChanged(bool shown) ;
     virtual void SuperChangedPosition() ;
-    virtual bool NeedsFocusRect() const;
 
     virtual void            MacControlUserPaneDrawProc(wxInt16 part) ;
     virtual wxInt16         MacControlUserPaneHitTestProc(wxInt16 x, wxInt16 y) ;
@@ -410,8 +408,6 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id,
     if ( !wxTextCtrlBase::Create(parent, id, pos, size, style & ~(wxHSCROLL|wxVSCROLL), validator, name) )
         return false;
 
-    Rect bounds = wxMacGetBoundsForControl( this , pos , size ) ;
-
     if ( m_windowStyle & wxTE_MULTILINE )
     {
         wxASSERT_MSG( !(m_windowStyle & wxTE_PROCESS_ENTER),
@@ -1377,6 +1373,11 @@ public :
         TXNControlData m_data[1] ;
 } ;
 
+wxMacMLTEControl::wxMacMLTEControl( wxTextCtrl *peer ) : wxMacTextControl( peer ) 
+{
+    SetNeedsFocusRect( true ) ; 
+}
+
 wxString wxMacMLTEControl::GetStringValue() const
 {
     wxString result ;
@@ -2092,7 +2093,13 @@ void wxMacMLTEClassicControl::MacFocusPaneText(Boolean setFocus)
 
 void wxMacMLTEClassicControl::MacSetObjectVisibility(Boolean vis)
 {
-
+    ControlRef controlFocus = 0 ;
+    GetKeyboardFocus( m_txnWindow , &controlFocus ) ;
+    
+    if ( controlFocus == m_controlRef && vis == false )
+    {
+        SetKeyboardFocus( m_txnWindow , m_controlRef , kControlFocusNoPart ) ;
+    }
     // we right now are always clipping as partial visibility (overlapped) visibility
     // is also a problem, if we run into further problems we might set the FrameBounds to an empty
     // rect here
@@ -2117,6 +2124,7 @@ void wxMacMLTEClassicControl::MacUpdatePosition()
         wxMacWindowClipper cl(textctrl) ;
 
 #ifdef __WXMAC_OSX__
+        bool isCompositing = textctrl->MacGetTopLevelWindow()->MacUsesCompositing() ;
         if ( m_sbHorizontal || m_sbVertical )
         {
             int w = bounds.right - bounds.left ;
@@ -2130,6 +2138,10 @@ void wxMacMLTEClassicControl::MacUpdatePosition()
                 sbBounds.top = h - 14 ;
                 sbBounds.right = w + 1 ;
                 sbBounds.bottom = h + 1 ;
+                
+                if ( !isCompositing )
+                    OffsetRect( &sbBounds , m_txnControlBounds.left , m_txnControlBounds.top ) ;
+                
                 SetControlBounds( m_sbHorizontal , &sbBounds ) ;
                 SetControlViewSize( m_sbHorizontal , w ) ;
             }
@@ -2142,6 +2154,9 @@ void wxMacMLTEClassicControl::MacUpdatePosition()
                 sbBounds.right = w + 1 ;
                 sbBounds.bottom = m_sbHorizontal ? h - 14 : h + 1  ;
                 
+                if ( !isCompositing )
+                    OffsetRect( &sbBounds , m_txnControlBounds.left , m_txnControlBounds.top ) ;
+
                 SetControlBounds( m_sbVertical , &sbBounds ) ;
                 SetControlViewSize( m_sbVertical , h ) ;
             }
@@ -2327,7 +2342,7 @@ wxInt16 wxMacMLTEClassicControl::MacControlUserPaneFocusProc(wxInt16 action)
         case kControlFocusPrevPart:
         case kControlFocusNextPart:
             MacFocusPaneText( ( !wasFocused));
-            focusResult = (!wasFocused) ? kControlEditTextPart : kControlFocusNoPart;
+            focusResult = (!wasFocused) ? (ControlPartCode) kControlEditTextPart : (ControlPartCode) kControlFocusNoPart;
             break;
             
         case kControlFocusNoPart:
@@ -2358,7 +2373,7 @@ wxMacMLTEClassicControl::wxMacMLTEClassicControl( wxTextCtrl *wxPeer,
     short featurSet;
 
     featurSet = kControlSupportsEmbedding | kControlSupportsFocus  | kControlWantsIdle
-            | kControlWantsActivate  | kControlHandlesTracking | kControlHasSpecialBackground
+            | kControlWantsActivate  | kControlHandlesTracking // | kControlHasSpecialBackground
             | kControlGetsFocusOnClick | kControlSupportsLiveFeedback;
 
     verify_noerr( ::CreateUserPaneControl( MAC_WXHWND(wxPeer->GetParent()->MacGetTopLevelWindowRef()), &bounds, featurSet, &m_controlRef ) );
@@ -2392,11 +2407,6 @@ void wxMacMLTEClassicControl::SuperChangedPosition()
     wxMacControl::SuperChangedPosition() ;
 }
 
-bool wxMacMLTEClassicControl::NeedsFocusRect() const
-{
-    return true;
-}
-
 #ifdef __WXMAC_OSX__
 
 ControlUserPaneDrawUPP gTPDrawProc = NULL;
@@ -2410,7 +2420,7 @@ ControlUserPaneFocusUPP gTPFocusProc = NULL;
 static pascal void wxMacControlUserPaneDrawProc(ControlRef control, SInt16 part)
 {
     wxTextCtrl *textCtrl =  wxDynamicCast( wxFindControlFromMacControl(control) , wxTextCtrl ) ;
-    wxMacMLTEClassicControl * win = textCtrl ? dynamic_cast<wxMacMLTEClassicControl*>(textCtrl->GetPeer()) : NULL ;
+    wxMacMLTEClassicControl * win = textCtrl ? (wxMacMLTEClassicControl*)(textCtrl->GetPeer()) : NULL ;
     if ( win )
         win->MacControlUserPaneDrawProc(part) ;
 }
@@ -2418,7 +2428,7 @@ static pascal void wxMacControlUserPaneDrawProc(ControlRef control, SInt16 part)
 static pascal ControlPartCode wxMacControlUserPaneHitTestProc(ControlRef control, Point where)
 {
     wxTextCtrl *textCtrl =  wxDynamicCast( wxFindControlFromMacControl(control) , wxTextCtrl ) ;
-    wxMacMLTEClassicControl * win = textCtrl ? dynamic_cast<wxMacMLTEClassicControl*>(textCtrl->GetPeer()) : NULL ;
+    wxMacMLTEClassicControl * win = textCtrl ? (wxMacMLTEClassicControl*)(textCtrl->GetPeer()) : NULL ;
     if ( win )
         return win->MacControlUserPaneHitTestProc(where.h , where.v) ;
     else
@@ -2428,7 +2438,7 @@ static pascal ControlPartCode wxMacControlUserPaneHitTestProc(ControlRef control
 static pascal ControlPartCode wxMacControlUserPaneTrackingProc(ControlRef control, Point startPt, ControlActionUPP actionProc)
 {
     wxTextCtrl *textCtrl =  wxDynamicCast( wxFindControlFromMacControl(control) , wxTextCtrl ) ;
-    wxMacMLTEClassicControl * win = textCtrl ? dynamic_cast<wxMacMLTEClassicControl*>(textCtrl->GetPeer()) : NULL ;
+    wxMacMLTEClassicControl * win = textCtrl ? (wxMacMLTEClassicControl*)(textCtrl->GetPeer()) : NULL ;
     if ( win )
         return win->MacControlUserPaneTrackingProc( startPt.h , startPt.v , (void*) actionProc) ;
     else
@@ -2438,7 +2448,7 @@ static pascal ControlPartCode wxMacControlUserPaneTrackingProc(ControlRef contro
 static pascal void wxMacControlUserPaneIdleProc(ControlRef control)
 {
     wxTextCtrl *textCtrl =  wxDynamicCast( wxFindControlFromMacControl(control) , wxTextCtrl ) ;
-    wxMacMLTEClassicControl * win = textCtrl ? dynamic_cast<wxMacMLTEClassicControl*>(textCtrl->GetPeer()) : NULL ;
+    wxMacMLTEClassicControl * win = textCtrl ? (wxMacMLTEClassicControl*)(textCtrl->GetPeer()) : NULL ;
     if ( win )
         win->MacControlUserPaneIdleProc() ;
 }
@@ -2446,7 +2456,7 @@ static pascal void wxMacControlUserPaneIdleProc(ControlRef control)
 static pascal ControlPartCode wxMacControlUserPaneKeyDownProc(ControlRef control, SInt16 keyCode, SInt16 charCode, SInt16 modifiers)
 {
     wxTextCtrl *textCtrl =  wxDynamicCast( wxFindControlFromMacControl(control) , wxTextCtrl ) ;
-    wxMacMLTEClassicControl * win = textCtrl ? dynamic_cast<wxMacMLTEClassicControl*>(textCtrl->GetPeer()) : NULL ;
+    wxMacMLTEClassicControl * win = textCtrl ? (wxMacMLTEClassicControl*)(textCtrl->GetPeer()) : NULL ;
     if ( win )
         return win->MacControlUserPaneKeyDownProc(keyCode,charCode,modifiers) ;
     else
@@ -2456,7 +2466,7 @@ static pascal ControlPartCode wxMacControlUserPaneKeyDownProc(ControlRef control
 static pascal void wxMacControlUserPaneActivateProc(ControlRef control, Boolean activating)
 {
     wxTextCtrl *textCtrl =  wxDynamicCast( wxFindControlFromMacControl(control) , wxTextCtrl ) ;
-    wxMacMLTEClassicControl * win = textCtrl ? dynamic_cast<wxMacMLTEClassicControl*>(textCtrl->GetPeer()) : NULL ;
+    wxMacMLTEClassicControl * win = textCtrl ? (wxMacMLTEClassicControl*)(textCtrl->GetPeer()) : NULL ;
     if ( win )
         win->MacControlUserPaneActivateProc(activating) ;
 }
@@ -2464,20 +2474,22 @@ static pascal void wxMacControlUserPaneActivateProc(ControlRef control, Boolean
 static pascal ControlPartCode wxMacControlUserPaneFocusProc(ControlRef control, ControlFocusPart action)
 {
     wxTextCtrl *textCtrl =  wxDynamicCast( wxFindControlFromMacControl(control) , wxTextCtrl ) ;
-    wxMacMLTEClassicControl * win = textCtrl ? dynamic_cast<wxMacMLTEClassicControl*>(textCtrl->GetPeer()) : NULL ;
+    wxMacMLTEClassicControl * win = textCtrl ? (wxMacMLTEClassicControl*)(textCtrl->GetPeer()) : NULL ;
     if ( win )
         return win->MacControlUserPaneFocusProc(action) ;
     else
         return kControlNoPart ;
 }
 
+/*
 static pascal void wxMacControlUserPaneBackgroundProc(ControlRef control, ControlBackgroundPtr info)
 {
     wxTextCtrl *textCtrl =  wxDynamicCast( wxFindControlFromMacControl(control) , wxTextCtrl ) ;
-    wxMacMLTEClassicControl * win = textCtrl ? dynamic_cast<wxMacMLTEClassicControl*>(textCtrl->GetPeer()) : NULL ;
+    wxMacMLTEClassicControl * win = textCtrl ? (wxMacMLTEClassicControl*)(textCtrl->GetPeer()) : NULL ;
     if ( win )
         win->MacControlUserPaneBackgroundProc(info) ;
 }
+*/
 #endif
 
 // TXNRegisterScrollInfoProc
@@ -2650,11 +2662,6 @@ bool wxMacMLTEHIViewControl::HasFocus() const
     return control == m_textView ;
 }
 
-bool wxMacMLTEHIViewControl::NeedsFocusRect() const
-{
-    return m_windowStyle & wxNO_BORDER ? false : true;
-}
-
 #endif // MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_2