X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/75c25a8219701b4e8e9c521c3c18e22fd2bd8b09..4813bb8d72d4e6821e031f2b19baaa338b714d39:/src/mac/carbon/toolbar.cpp diff --git a/src/mac/carbon/toolbar.cpp b/src/mac/carbon/toolbar.cpp index 88c664f9bc..627cb2aa1f 100644 --- a/src/mac/carbon/toolbar.cpp +++ b/src/mac/carbon/toolbar.cpp @@ -22,23 +22,15 @@ #include "wx/app.h" #include "wx/mac/uma.h" #include "wx/geometry.h" +#include "wx/sysopt.h" -#ifdef __WXMAC_OSX__ const short kwxMacToolBarToolDefaultWidth = 16; const short kwxMacToolBarToolDefaultHeight = 16; const short kwxMacToolBarTopMargin = 4; const short kwxMacToolBarLeftMargin = 4; const short kwxMacToolBorder = 0; const short kwxMacToolSpacing = 6; -#else -const short kwxMacToolBarToolDefaultWidth = 24; -const short kwxMacToolBarToolDefaultHeight = 22; -const short kwxMacToolBarTopMargin = 2; -const short kwxMacToolBarLeftMargin = 2; -const short kwxMacToolBorder = 4; -const short kwxMacToolSpacing = 0; -#endif IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl) @@ -66,7 +58,8 @@ END_EVENT_TABLE() // when this view is removed from the native toolbar its count gets decremented again // and when the HITooolbarItem wrapper object gets destroyed it is decremented as well // so in the end the control lives with a refcount of one and can be disposed of by the -// wxControl code +// wxControl code. For embedded controls on a non-native toolbar this ref count is less +// so we can only test against a range, not a specific value of the refcount. class wxToolBarTool : public wxToolBarToolBase { @@ -115,9 +108,8 @@ public: DisposeControl( m_controlHandle ); else { - // the embedded control is not under the responsibility of the tool, it will be disposed of in the + // the embedded control is not under the responsibility of the tool, it gets disposed of in the // proper wxControl destructor - wxASSERT( IsValidControlHandle(GetControl()->GetPeer()->GetControlRef() )) ; } m_controlHandle = NULL ; } @@ -127,7 +119,11 @@ public: if ( m_toolbarItemRef ) { CFIndex count = CFGetRetainCount( m_toolbarItemRef ) ; - wxASSERT_MSG( count == 1 , wxT("Reference Count of native tool was not 1 in wxToolBarTool destructor") ); + // different behaviour under Leopard + if ( UMAGetSystemVersion() < 0x1050 ) + { + wxASSERT_MSG( count == 1 , wxT("Reference Count of native tool was not 1 in wxToolBarTool destructor") ); + } wxTheApp->MacAddToAutorelease(m_toolbarItemRef); CFRelease(m_toolbarItemRef); m_toolbarItemRef = NULL; @@ -191,8 +187,8 @@ public: HIToolbarItemSetHelpText( m_toolbarItemRef, - wxMacCFStringHolder( GetShortHelp(), enc ), - wxMacCFStringHolder( GetLongHelp(), enc ) ); + wxCFStringRef( GetShortHelp(), enc ), + wxCFStringRef( GetLongHelp(), enc ) ); } } @@ -237,12 +233,10 @@ private: static const EventTypeSpec eventList[] = { { kEventClassControl, kEventControlHit }, -#ifdef __WXMAC_OSX__ { kEventClassControl, kEventControlHitTest }, -#endif }; -static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef handler, EventRef event, void *data ) +static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef WXUNUSED(handler), EventRef event, void *data ) { OSStatus result = eventNotHandledErr; ControlRef controlRef; @@ -260,11 +254,7 @@ static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef { bool shouldToggle; -#ifdef __WXMAC_OSX__ shouldToggle = !tbartool->IsToggled(); -#else - shouldToggle = (GetControl32BitValue( (ControlRef)(tbartool->GetControlHandle()) ) != 0); -#endif tbar->ToggleTool( tbartool->GetId(), shouldToggle ); } @@ -275,7 +265,6 @@ static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef } break; -#ifdef __WXMAC_OSX__ case kEventControlHitTest: { HIPoint pt = cEvent.GetParameter(kEventParamMouseLocation); @@ -289,7 +278,6 @@ static pascal OSStatus wxMacToolBarToolControlEventHandler( EventHandlerCallRef result = noErr; } break; -#endif default: break; @@ -324,7 +312,7 @@ static const EventTypeSpec toolBarEventList[] = { kEventClassToolbarItem, kEventToolbarItemPerformAction }, }; -static pascal OSStatus wxMacToolBarCommandEventHandler( EventHandlerCallRef handler, EventRef event, void *data ) +static pascal OSStatus wxMacToolBarCommandEventHandler( EventHandlerCallRef WXUNUSED(handler), EventRef event, void *data ) { OSStatus result = eventNotHandledErr; @@ -394,17 +382,10 @@ bool wxToolBarTool::DoEnable( bool enable ) if ( m_controlHandle != NULL ) { -#if TARGET_API_MAC_OSX if ( enable ) EnableControl( m_controlHandle ); else DisableControl( m_controlHandle ); -#else - if ( enable ) - ActivateControl( m_controlHandle ); - else - DeactivateControl( m_controlHandle ); -#endif } } @@ -429,7 +410,7 @@ void wxToolBarTool::SetPosition( const wxPoint& position ) if ( mac_x != former_mac_x || mac_y != former_mac_y ) { - UMAMoveControl( m_controlHandle, mac_x, mac_y ); + ::MoveControl( m_controlHandle, mac_x, mac_y ); } } else if ( IsControl() ) @@ -445,21 +426,18 @@ void wxToolBarTool::SetPosition( const wxPoint& position ) else { // separator -#ifdef __WXMAC_OSX__ Rect contrlRect; GetControlBounds( m_controlHandle, &contrlRect ); int former_mac_x = contrlRect.left; int former_mac_y = contrlRect.top; if ( mac_x != former_mac_x || mac_y != former_mac_y ) - UMAMoveControl( m_controlHandle, mac_x, mac_y ); -#endif + ::MoveControl( m_controlHandle, mac_x, mac_y ); } } void wxToolBarTool::UpdateToggleImage( bool toggle ) { -#ifdef __WXMAC_OSX__ if ( toggle ) { int w = m_bmpNormal.GetWidth(); @@ -474,12 +452,15 @@ void wxToolBarTool::UpdateToggleImage( bool toggle ) dc.DrawBitmap( m_bmpNormal, 0, 0, true ); dc.SelectObject( wxNullBitmap ); ControlButtonContentInfo info; - wxMacCreateBitmapButton( &info, bmp, kControlContentIconRef ); + wxMacCreateBitmapButton( &info, bmp ); SetControlData( m_controlHandle, 0, kControlIconContentTag, sizeof(info), (Ptr)&info ); #if wxMAC_USE_NATIVE_TOOLBAR if (m_toolbarItemRef != NULL) { - HIToolbarItemSetIconRef( m_toolbarItemRef, info.u.iconRef ); + ControlButtonContentInfo info2; + wxMacCreateBitmapButton( &info2, bmp, kControlContentCGImageRef); + HIToolbarItemSetImage( m_toolbarItemRef, info2.u.imageRef ); + wxMacReleaseBitmapButton( &info2 ); } #endif wxMacReleaseBitmapButton( &info ); @@ -487,12 +468,15 @@ void wxToolBarTool::UpdateToggleImage( bool toggle ) else { ControlButtonContentInfo info; - wxMacCreateBitmapButton( &info, m_bmpNormal, kControlContentIconRef ); + wxMacCreateBitmapButton( &info, m_bmpNormal ); SetControlData( m_controlHandle, 0, kControlIconContentTag, sizeof(info), (Ptr)&info ); #if wxMAC_USE_NATIVE_TOOLBAR if (m_toolbarItemRef != NULL) { - HIToolbarItemSetIconRef( m_toolbarItemRef, info.u.iconRef ); + ControlButtonContentInfo info2; + wxMacCreateBitmapButton( &info2, m_bmpNormal, kControlContentCGImageRef); + HIToolbarItemSetImage( m_toolbarItemRef, info2.u.imageRef ); + wxMacReleaseBitmapButton( &info2 ); } #endif wxMacReleaseBitmapButton( &info ); @@ -504,9 +488,6 @@ void wxToolBarTool::UpdateToggleImage( bool toggle ) sizeof(transform), (Ptr)&transform ); HIViewSetNeedsDisplay( m_controlHandle, true ); -#else - ::SetControl32BitValue( m_controlHandle, toggle ); -#endif } wxToolBarTool::wxToolBarTool( @@ -607,6 +588,7 @@ static pascal OSStatus ControlToolbarItemHandler( EventHandlerCallRef inCallRef, item = (ControlToolbarItem*) malloc(sizeof(ControlToolbarItem)) ; item->toolbarItem = toolbarItem ; + item->lastValidSize = wxSize(-1,-1); item->viewRef = NULL ; SetEventParameter( inEvent, kEventParamHIObjectInstance, typeVoidPtr, sizeof( void * ), &item ); @@ -641,7 +623,6 @@ static pascal OSStatus ControlToolbarItemHandler( EventHandlerCallRef inCallRef, case kEventHIObjectDestruct: { HIViewRef viewRef = object->viewRef ; - wxASSERT( IsValidControlHandle(viewRef) ) ; if( viewRef && IsValidControlHandle( viewRef) ) { // depending whether the wxControl corresponding to this HIView has already been destroyed or @@ -681,17 +662,25 @@ static pascal OSStatus ControlToolbarItemHandler( EventHandlerCallRef inCallRef, wxWindow* wxwindow = wxFindControlFromMacControl(object->viewRef ) ; if ( wxwindow ) { - wxSize sz = wxwindow->GetSize() ; - sz.x -= wxwindow->MacGetLeftBorderSize() + wxwindow->MacGetRightBorderSize(); - sz.y -= wxwindow->MacGetTopBorderSize() + wxwindow->MacGetBottomBorderSize(); - // during toolbar layout the native window sometimes gets negative sizes - // so we always keep the last valid size here, to make sure we survive the - // shuffle ... - if ( sz.x > 0 && sz.y > 0 ) - object->lastValidSize = sz ; - else - sz = object->lastValidSize ; + // during toolbar layout the native window sometimes gets negative sizes, + // sometimes it just gets shrunk behind our back, so in order to avoid + // ever shrinking more, once a valid size is captured, we keep it + + wxSize sz = object->lastValidSize; + if ( sz.x <= 0 || sz.y <= 0 ) + { + sz = wxwindow->GetSize() ; + sz.x -= wxwindow->MacGetLeftBorderSize() + wxwindow->MacGetRightBorderSize(); + sz.y -= wxwindow->MacGetTopBorderSize() + wxwindow->MacGetBottomBorderSize(); + if ( sz.x > 0 && sz.y > 0 ) + object->lastValidSize = sz ; + else + sz = wxSize(0,0) ; + } + // Extra width to avoid edge of combobox being cut off + sz.x += 3; + HISize min, max; min.width = max.width = sz.x ; min.height = max.height = sz.y ; @@ -759,7 +748,9 @@ static const EventTypeSpec kToolbarEvents[] = { kEventClassToolbar, kEventToolbarCreateItemWithIdentifier }, }; -static OSStatus ToolbarDelegateHandler( EventHandlerCallRef inCallRef, EventRef inEvent, void* inUserData ) +static OSStatus ToolbarDelegateHandler(EventHandlerCallRef WXUNUSED(inCallRef), + EventRef inEvent, + void* WXUNUSED(inUserData)) { OSStatus result = eventNotHandledErr; // Not yet needed @@ -836,28 +827,31 @@ bool wxToolBar::Create( OSStatus err = noErr; #if wxMAC_USE_NATIVE_TOOLBAR - wxString labelStr = wxString::Format( wxT("%xd"), (int)this ); - err = HIToolbarCreate( - wxMacCFStringHolder( labelStr, wxFont::GetDefaultEncoding() ), 0, - (HIToolbarRef*) &m_macHIToolbarRef ); - - if (m_macHIToolbarRef != NULL) + if (parent->IsKindOf(CLASSINFO(wxFrame)) && wxSystemOptions::GetOptionInt(wxT("mac.toolbar.no-native")) != 1) { - InstallEventHandler( HIObjectGetEventTarget((HIToolbarRef)m_macHIToolbarRef ), ToolbarDelegateHandler, - GetEventTypeCount( kToolbarEvents ), kToolbarEvents, this, NULL ); + wxString labelStr = wxString::Format( wxT("%p"), this ); + err = HIToolbarCreate( + wxCFStringRef( labelStr, wxFont::GetDefaultEncoding() ), 0, + (HIToolbarRef*) &m_macHIToolbarRef ); - HIToolbarDisplayMode mode = kHIToolbarDisplayModeDefault; - HIToolbarDisplaySize displaySize = kHIToolbarDisplaySizeSmall; + if (m_macHIToolbarRef != NULL) + { + InstallEventHandler( HIObjectGetEventTarget((HIToolbarRef)m_macHIToolbarRef ), ToolbarDelegateHandler, + GetEventTypeCount( kToolbarEvents ), kToolbarEvents, this, NULL ); - if ( style & wxTB_NOICONS ) - mode = kHIToolbarDisplayModeLabelOnly; - else if ( style & wxTB_TEXT ) - mode = kHIToolbarDisplayModeIconAndLabel; - else - mode = kHIToolbarDisplayModeIconOnly; + HIToolbarDisplayMode mode = kHIToolbarDisplayModeDefault; + HIToolbarDisplaySize displaySize = kHIToolbarDisplaySizeSmall; - HIToolbarSetDisplayMode( (HIToolbarRef) m_macHIToolbarRef, mode ); - HIToolbarSetDisplaySize( (HIToolbarRef) m_macHIToolbarRef, displaySize ); + if ( style & wxTB_NOICONS ) + mode = kHIToolbarDisplayModeLabelOnly; + else if ( style & wxTB_TEXT ) + mode = kHIToolbarDisplayModeIconAndLabel; + else + mode = kHIToolbarDisplayModeIconOnly; + + HIToolbarSetDisplayMode( (HIToolbarRef) m_macHIToolbarRef, mode ); + HIToolbarSetDisplaySize( (HIToolbarRef) m_macHIToolbarRef, displaySize ); + } } #endif // wxMAC_USE_NATIVE_TOOLBAR @@ -874,8 +868,11 @@ wxToolBar::~wxToolBar() MacInstallNativeToolbar( false ); CFIndex count = CFGetRetainCount( m_macHIToolbarRef ) ; - wxASSERT_MSG( count == 1 , wxT("Reference Count of native control was not 1 in wxToolBar destructor") ); - + // Leopard seems to have one refcount more, so we cannot check reliably at the moment + if ( UMAGetSystemVersion() < 0x1050 ) + { + wxASSERT_MSG( count == 1 , wxT("Reference Count of native control was not 1 in wxToolBar destructor") ); + } CFRelease( (HIToolbarRef)m_macHIToolbarRef ); m_macHIToolbarRef = NULL; } @@ -1096,7 +1093,7 @@ bool wxToolBar::Realize() // find the maximum tool width and height wxToolBarTool *tool; wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); - while ( node != NULL ) + while ( node ) { tool = (wxToolBarTool *) node->GetData(); if ( tool != NULL ) @@ -1123,7 +1120,7 @@ bool wxToolBar::Realize() #endif node = m_tools.GetFirst(); - while ( node != NULL ) + while ( node ) { tool = (wxToolBarTool*) node->GetData(); if ( tool == NULL ) @@ -1186,7 +1183,7 @@ bool wxToolBar::Realize() if ( tool2->IsControl() ) { CFIndex count = CFGetRetainCount( tool2->GetControl()->GetPeer()->GetControlRef() ) ; - wxASSERT_MSG( count == 3 , wxT("Reference Count of native tool was not 3 before removal") ); + wxASSERT_MSG( count == 3 || count == 2 , wxT("Reference Count of native tool was illegal before removal") ); wxASSERT( IsValidControlHandle(tool2->GetControl()->GetPeer()->GetControlRef() )) ; } err = HIToolbarRemoveItemAtIndex(refTB, idx); @@ -1217,7 +1214,7 @@ bool wxToolBar::Realize() if ( tool->IsControl() ) { CFIndex count = CFGetRetainCount( tool->GetControl()->GetPeer()->GetControlRef() ) ; - wxASSERT_MSG( count == 3 , wxT("Reference Count of native tool was not 3 after insertion") ); + wxASSERT_MSG( count == 3 || count == 2, wxT("Reference Count of native tool was illegal after insertion") ); wxASSERT( IsValidControlHandle(tool->GetControl()->GetPeer()->GetControlRef() )) ; } } @@ -1251,7 +1248,7 @@ bool wxToolBar::Realize() DoToggleTool( tool, true ); wxToolBarToolsList::compatibility_iterator nodePrev = node->GetPrevious(); - while ( nodePrev != NULL ) + while ( nodePrev ) { wxToolBarToolBase *toggleTool = nodePrev->GetData(); if ( (toggleTool == NULL) || !toggleTool->IsButton() || (toggleTool->GetKind() != wxITEM_RADIO) ) @@ -1395,7 +1392,7 @@ wxToolBarToolBase *wxToolBar::FindToolForPosition(wxCoord x, wxCoord y) const { wxToolBarTool *tool; wxToolBarToolsList::compatibility_iterator node = m_tools.GetFirst(); - while ( node != NULL ) + while ( node ) { tool = (wxToolBarTool *)node->GetData(); if (tool != NULL) @@ -1447,8 +1444,14 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) tool->Attach( this ); #if wxMAC_USE_NATIVE_TOOLBAR - HIToolbarItemRef item; -#endif + wxString label = tool->GetLabel(); + if (m_macHIToolbarRef && !label.empty() ) + { + // strip mnemonics from the label for compatibility + // with the usual labels in wxStaticText sense + label = wxStripMenuCodes(label); + } +#endif // wxMAC_USE_NATIVE_TOOLBAR switch (tool->GetStyle()) { @@ -1464,12 +1467,18 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) // in flat style we need a visual separator #if wxMAC_USE_NATIVE_TOOLBAR - err = HIToolbarItemCreate( - kHIToolbarSeparatorIdentifier, - kHIToolbarItemCantBeRemoved | kHIToolbarItemIsSeparator | kHIToolbarItemAllowDuplicates, - &item ); - if (err == noErr) - tool->SetToolbarItemRef( item ); + if (m_macHIToolbarRef != NULL) + { + HIToolbarItemRef item; + err = HIToolbarItemCreate( + kHIToolbarSeparatorIdentifier, + kHIToolbarItemCantBeRemoved | kHIToolbarItemIsSeparator | kHIToolbarItemAllowDuplicates, + &item ); + if (err == noErr) + tool->SetToolbarItemRef( item ); + } + else + err = noErr; #endif // wxMAC_USE_NATIVE_TOOLBAR CreateSeparatorControl( window, &toolrect, &controlHandle ); @@ -1481,11 +1490,15 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) { wxASSERT( tool->GetControlHandle() == NULL ); ControlButtonContentInfo info; - wxMacCreateBitmapButton( &info, tool->GetNormalBitmap(), kControlContentIconRef ); + wxMacCreateBitmapButton( &info, tool->GetNormalBitmap() ); if ( UMAGetSystemVersion() >= 0x1000) { + // contrary to the docs this control only works with iconrefs + ControlButtonContentInfo info; + wxMacCreateBitmapButton( &info, tool->GetNormalBitmap(), kControlContentIconRef ); CreateIconControl( window, &toolrect, &info, false, &controlHandle ); + wxMacReleaseBitmapButton( &info ); } else { @@ -1498,27 +1511,38 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) } #if wxMAC_USE_NATIVE_TOOLBAR - wxString labelStr = wxString::Format(wxT("%xd"), (int)tool); - err = HIToolbarItemCreate( - wxMacCFStringHolder(labelStr, wxFont::GetDefaultEncoding()), - kHIToolbarItemCantBeRemoved | kHIToolbarItemAnchoredLeft | kHIToolbarItemAllowDuplicates, &item ); - if (err == noErr) + if (m_macHIToolbarRef != NULL) { - InstallEventHandler( - HIObjectGetEventTarget(item), GetwxMacToolBarEventHandlerUPP(), - GetEventTypeCount(toolBarEventList), toolBarEventList, tool, NULL ); - - HIToolbarItemSetIconRef( item, info.u.iconRef ); - HIToolbarItemSetCommandID( item, kHIToolbarCommandPressAction ); - tool->SetToolbarItemRef( item ); + HIToolbarItemRef item; + wxString labelStr = wxString::Format(wxT("%p"), tool); + err = HIToolbarItemCreate( + wxCFStringRef(labelStr, wxFont::GetDefaultEncoding()), + kHIToolbarItemCantBeRemoved | kHIToolbarItemAnchoredLeft | kHIToolbarItemAllowDuplicates, &item ); + if (err == noErr) + { + ControlButtonContentInfo info2; + wxMacCreateBitmapButton( &info2, tool->GetNormalBitmap(), kControlContentCGImageRef); + + InstallEventHandler( + HIObjectGetEventTarget(item), GetwxMacToolBarEventHandlerUPP(), + GetEventTypeCount(toolBarEventList), toolBarEventList, tool, NULL ); + HIToolbarItemSetLabel( item, wxCFStringRef(label, m_font.GetEncoding()) ); + HIToolbarItemSetImage( item, info2.u.imageRef ); + HIToolbarItemSetCommandID( item, kHIToolbarCommandPressAction ); + tool->SetToolbarItemRef( item ); + + wxMacReleaseBitmapButton( &info2 ); + } } + else + err = noErr; #endif // wxMAC_USE_NATIVE_TOOLBAR wxMacReleaseBitmapButton( &info ); #if 0 SetBevelButtonTextPlacement( m_controlHandle, kControlBevelButtonPlaceBelowGraphic ); - UMASetControlTitle( m_controlHandle, label, wxFont::GetDefaultEncoding() ); + SetControlTitleWithCFString( m_controlHandle , wxCFStringRef( label, wxFont::GetDefaultEncoding() ); #endif InstallControlEventHandler( @@ -1532,9 +1556,10 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) case wxTOOL_STYLE_CONTROL: #if wxMAC_USE_NATIVE_TOOLBAR + if (m_macHIToolbarRef != NULL) { wxCHECK_MSG( tool->GetControl(), false, _T("control must be non-NULL") ); - + HIToolbarItemRef item; HIViewRef viewRef = (HIViewRef) tool->GetControl()->GetHandle() ; CFDataRef data = CFDataCreate( kCFAllocatorDefault , (UInt8*) &viewRef , sizeof(viewRef) ) ; err = HIToolbarCreateItemWithIdentifier((HIToolbarRef) m_macHIToolbarRef,kControlToolbarItemClassID, @@ -1546,7 +1571,11 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) } CFRelease( data ) ; } - + else + { + err = noErr; + break; + } #else // right now there's nothing to do here #endif @@ -1556,19 +1585,6 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) break; } -#if wxMAC_USE_NATIVE_TOOLBAR - wxString label = tool->GetLabel(); - if ( !label.empty() ) - { - // strip mnemonics from the label for compatibility - // with the usual labels in wxStaticText sense - label = wxStripMenuCodes(label); - - HIToolbarItemSetLabel(item, - wxMacCFStringHolder(label, m_font.GetEncoding())); - } -#endif // wxMAC_USE_NATIVE_TOOLBAR - if ( err == noErr ) { if ( controlHandle ) @@ -1576,7 +1592,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) ControlRef container = (ControlRef) GetHandle(); wxASSERT_MSG( container != NULL, wxT("No valid Mac container control") ); - UMAShowControl( controlHandle ); + SetControlVisibility( controlHandle, true, true ); ::EmbedControl( controlHandle, container ); } @@ -1588,8 +1604,7 @@ bool wxToolBar::DoInsertTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolBase) } else { - wxString errMsg = wxString::Format( wxT("wxToolBar::DoInsertTool - failure [%ld]"), (long)err ); - wxFAIL_MSG( errMsg.c_str() ); + wxFAIL_MSG( wxString::Format( wxT("wxToolBar::DoInsertTool - failure [%ld]"), (long)err ) ); } return (err == noErr); @@ -1625,10 +1640,13 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolbase) #endif #if wxMAC_USE_NATIVE_TOOLBAR - if ( removeIndex != -1 && m_macHIToolbarRef ) + if (m_macHIToolbarRef != NULL) { - HIToolbarRemoveItemAtIndex( (HIToolbarRef) m_macHIToolbarRef, removeIndex ); - tool->SetIndex( -1 ); + if ( removeIndex != -1 && m_macHIToolbarRef ) + { + HIToolbarRemoveItemAtIndex( (HIToolbarRef) m_macHIToolbarRef, removeIndex ); + tool->SetIndex( -1 ); + } } #endif switch ( tool->GetStyle() ) @@ -1663,8 +1681,11 @@ bool wxToolBar::DoDeleteTool(size_t WXUNUSED(pos), wxToolBarToolBase *toolbase) tool2->SetPosition( pt ); #if wxMAC_USE_NATIVE_TOOLBAR - if ( removeIndex != -1 && tool2->GetIndex() > removeIndex ) - tool2->SetIndex( tool2->GetIndex() - 1 ); + if (m_macHIToolbarRef != NULL) + { + if ( removeIndex != -1 && tool2->GetIndex() > removeIndex ) + tool2->SetIndex( tool2->GetIndex() - 1 ); + } #endif } @@ -1689,10 +1710,8 @@ void wxToolBar::OnPaint(wxPaintEvent& event) GetSize( &w, &h ); bool drawMetalTheme = MacGetTopLevelWindow()->MacGetMetalAppearance(); - bool minimumUmaAvailable = (UMAGetSystemVersion() >= 0x1030); -#if wxMAC_USE_CORE_GRAPHICS && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_3 - if ( !drawMetalTheme && minimumUmaAvailable ) + if ( !drawMetalTheme ) { HIThemePlacardDrawInfo info; memset( &info, 0, sizeof(info) ); @@ -1708,57 +1727,6 @@ void wxToolBar::OnPaint(wxPaintEvent& event) // leave the background as it is (striped or metal) } -#else - - const bool drawBorder = true; - - if (drawBorder) - { - wxMacPortSetter helper( &dc ); - - if ( !drawMetalTheme || !minimumUmaAvailable ) - { - Rect toolbarrect = { dc.YLOG2DEVMAC(0), dc.XLOG2DEVMAC(0), - dc.YLOG2DEVMAC(h), dc.XLOG2DEVMAC(w) }; - -#if 0 - if ( toolbarrect.left < 0 ) - toolbarrect.left = 0; - if ( toolbarrect.top < 0 ) - toolbarrect.top = 0; -#endif - - UMADrawThemePlacard( &toolbarrect, IsEnabled() ? kThemeStateActive : kThemeStateInactive ); - } - else - { -#if TARGET_API_MAC_OSX - HIRect hiToolbarrect = CGRectMake( - dc.YLOG2DEVMAC(0), dc.XLOG2DEVMAC(0), - dc.YLOG2DEVREL(h), dc.XLOG2DEVREL(w) ); - CGContextRef cgContext; - Rect bounds; - - GetPortBounds( (CGrafPtr) dc.m_macPort, &bounds ); - QDBeginCGContext( (CGrafPtr) dc.m_macPort, &cgContext ); - - CGContextTranslateCTM( cgContext, 0, bounds.bottom - bounds.top ); - CGContextScaleCTM( cgContext, 1, -1 ); - - HIThemeBackgroundDrawInfo drawInfo; - drawInfo.version = 0; - drawInfo.state = kThemeStateActive; - drawInfo.kind = kThemeBackgroundMetal; - HIThemeApplyBackground( &hiToolbarrect, &drawInfo, cgContext, kHIThemeOrientationNormal ); - -#ifndef __LP64__ - QDEndCGContext( (CGrafPtr) dc.m_macPort, &cgContext ); -#endif -#endif - } - } -#endif - event.Skip(); }