X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ef4a634b1b90cb13426b9006d8e18380b9809fdb..17f8d2a701c9d0321a3b37c3c0b1d2ddc9ec91d1:/src/mac/textctrl.cpp diff --git a/src/mac/textctrl.cpp b/src/mac/textctrl.cpp index 5f71de9973..b79f2fc5d3 100644 --- a/src/mac/textctrl.cpp +++ b/src/mac/textctrl.cpp @@ -60,7 +60,6 @@ #define TE_UNLIMITED_LENGTH 0xFFFFFFFFUL -extern wxApp *wxTheApp ; extern wxControl *wxFindControlFromMacControl(ControlHandle inControl ) ; // CS:TODO we still have a problem getting properly at the text events of a control because under Carbon @@ -576,6 +575,13 @@ OSStatus mUPOpenControl(ControlHandle theControl, long wxStyle ) kTXNSystemDefaultEncoding, &varsp->fTXNRec, &varsp->fTXNFrame, (TXNObjectRefcon) tpvars); + if ( (wxStyle & wxTE_MULTILINE) && (wxStyle & wxTE_DONTWRAP) ) + { + TXNControlTag tag = kTXNWordWrapStateTag ; + TXNControlData dat ; + dat.uValue = kTXNNoAutoWrap ; + TXNSetTXNObjectControls( varsp->fTXNRec , false , 1 , &tag , &dat ) ; + } Str255 fontName ; SInt16 fontSize ; Style fontStyle ; @@ -722,7 +728,7 @@ bool wxTextCtrl::Create(wxWindow *parent, wxWindowID id, m_macControl = ::NewControl( MAC_WXHWND(parent->MacGetRootWindow()) , &bounds , "\p" , true , 0 , 0 , 1, (style & wxTE_PASSWORD) ? kControlEditTextPasswordProc : kControlEditTextProc , (long) this ) ; long size ; - ::GetControlData((ControlHandle) m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*) &((TEHandle) m_macTE) , &size ) ; + ::GetControlData((ControlHandle) m_macControl , 0, kControlEditTextTEHandleTag , sizeof( TEHandle ) , (char*)((TEHandle *)&m_macTE) , &size ) ; } else @@ -859,7 +865,7 @@ void wxTextCtrl::SetValue(const wxString& st) } else { - bool formerEditable = IsEditable() ; + bool formerEditable = m_editable ; if ( !formerEditable ) SetEditable(true) ; #if wxUSE_UNICODE @@ -887,7 +893,7 @@ bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style) { if ( m_macUsesTXN ) { - bool formerEditable = IsEditable() ; + bool formerEditable = m_editable ; if ( !formerEditable ) SetEditable(true) ; TXNTypeAttributes typeAttr[4] ; @@ -931,8 +937,10 @@ bool wxTextCtrl::SetStyle(long start, long end, const wxTextAttr& style) if ( attrCounter > 0 ) { - OSStatus status = TXNSetTypeAttributes ((TXNObject)m_macTXN, attrCounter , typeAttr, - start,end); +#ifdef __WXDEBUG__ + OSStatus status = +#endif // __WXDEBUG__ + TXNSetTypeAttributes ((TXNObject)m_macTXN, attrCounter , typeAttr, start,end); wxASSERT_MSG( status == noErr , wxT("Couldn't set text attributes") ) ; } if ( !formerEditable ) @@ -1150,7 +1158,7 @@ void wxTextCtrl::Replace(long from, long to, const wxString& value) } else { - bool formerEditable = IsEditable() ; + bool formerEditable = m_editable ; if ( !formerEditable ) SetEditable(true) ; TXNSetSelection( ((TXNObject) m_macTXN) , from , to ) ; @@ -1181,7 +1189,7 @@ void wxTextCtrl::Remove(long from, long to) } else { - bool formerEditable = IsEditable() ; + bool formerEditable = m_editable ; if ( !formerEditable ) SetEditable(true) ; TXNSetSelection( ((TXNObject) m_macTXN) , from , to ) ; @@ -1242,7 +1250,7 @@ void wxTextCtrl::WriteText(const wxString& st) } else { - bool formerEditable = IsEditable() ; + bool formerEditable = m_editable ; if ( !formerEditable ) SetEditable(true) ; long start , end , dummy ; @@ -1344,6 +1352,10 @@ void wxTextCtrl::Undo() { if (CanUndo()) { + if ( m_macUsesTXN ) + { + TXNUndo((TXNObject)m_macTXN); + } } } @@ -1351,16 +1363,36 @@ void wxTextCtrl::Redo() { if (CanRedo()) { + if ( m_macUsesTXN ) + { + TXNRedo((TXNObject)m_macTXN); + } } } bool wxTextCtrl::CanUndo() const { + if ( !IsEditable() ) + { + return false ; + } + if ( m_macUsesTXN ) + { + return TXNCanUndo((TXNObject)m_macTXN,NULL); + } return FALSE ; } bool wxTextCtrl::CanRedo() const { + if ( !IsEditable() ) + { + return false ; + } + if ( m_macUsesTXN ) + { + return TXNCanRedo((TXNObject)m_macTXN,NULL); + } return FALSE ; } @@ -1566,8 +1598,25 @@ void wxTextCtrl::OnChar(wxKeyEvent& event) if (!eat_key) { - // default handling - event.Skip() ; + // perform keystroke handling +#if TARGET_CARBON + if ( m_macUsesTXN && wxTheApp->MacGetCurrentEvent() != NULL && wxTheApp->MacGetCurrentEventHandlerCallRef() != NULL ) + CallNextEventHandler((EventHandlerCallRef)wxTheApp->MacGetCurrentEventHandlerCallRef() , (EventRef) wxTheApp->MacGetCurrentEvent() ) ; + else +#endif + { + EventRecord rec ; + if ( wxMacConvertEventToRecord( (EventRef) wxTheApp->MacGetCurrentEvent() , &rec ) ) + { + EventRecord *ev = &rec ; + short keycode ; + short keychar ; + keychar = short(ev->message & charCodeMask); + keycode = short(ev->message & keyCodeMask) >> 8 ; + + ::HandleControlKey( (ControlHandle) m_macControl , keycode , keychar , ev->modifiers ) ; + } + } } if ( ( key >= 0x20 && key < WXK_START ) || key == WXK_RETURN ||