X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8e181eae04877c1369a3ad01160f889ddc48971b..8064223b7b1b3657363b7a635c381b9269d95e55:/src/mac/carbon/toplevel.cpp diff --git a/src/mac/carbon/toplevel.cpp b/src/mac/carbon/toplevel.cpp index 6f7d252499..12e9408f9b 100644 --- a/src/mac/carbon/toplevel.cpp +++ b/src/mac/carbon/toplevel.cpp @@ -211,25 +211,25 @@ static pascal OSStatus KeyboardEventHandler( EventHandlerCallRef handler , Event { event.m_keyCode = WXK_CONTROL ; event.SetEventType( ( modifiers & controlKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ; - focus->GetEventHandler()->ProcessEvent( event ) ; + focus->HandleWindowEvent( event ) ; } if ( /* focus && */ (modifiers ^ wxApp::s_lastModifiers ) & shiftKey ) { event.m_keyCode = WXK_SHIFT ; event.SetEventType( ( modifiers & shiftKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ; - focus->GetEventHandler()->ProcessEvent( event ) ; + focus->HandleWindowEvent( event ) ; } if ( /* focus && */ (modifiers ^ wxApp::s_lastModifiers ) & optionKey ) { event.m_keyCode = WXK_ALT ; event.SetEventType( ( modifiers & optionKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ; - focus->GetEventHandler()->ProcessEvent( event ) ; + focus->HandleWindowEvent( event ) ; } if ( /* focus && */ (modifiers ^ wxApp::s_lastModifiers ) & cmdKey ) { event.m_keyCode = WXK_COMMAND ; event.SetEventType( ( modifiers & cmdKey ) ? wxEVT_KEY_DOWN : wxEVT_KEY_UP ) ; - focus->GetEventHandler()->ProcessEvent( event ) ; + focus->HandleWindowEvent( event ) ; } wxApp::s_lastModifiers = modifiers ; @@ -390,59 +390,6 @@ void SetupMouseEvent( wxMouseEvent &wxevent , wxMacCarbonEvent &cEvent ) } } -ControlRef wxMacFindSubControl( wxTopLevelWindowMac* toplevelWindow, const Point& location , ControlRef superControl , ControlPartCode *outPart ) -{ - if ( superControl ) - { - UInt16 childrenCount = 0 ; - ControlHandle sibling ; - Rect r ; - OSStatus err = CountSubControls( superControl , &childrenCount ) ; - if ( err == errControlIsNotEmbedder ) - return NULL ; - - wxASSERT_MSG( err == noErr , wxT("Unexpected error when accessing subcontrols") ) ; - - for ( UInt16 i = childrenCount ; i >=1 ; --i ) - { - err = GetIndexedSubControl( superControl , i , & sibling ) ; - if ( err == errControlIsNotEmbedder ) - return NULL ; - - wxASSERT_MSG( err == noErr , wxT("Unexpected error when accessing subcontrols") ) ; - if ( IsControlVisible( sibling ) ) - { - UMAGetControlBoundsInWindowCoords( sibling , &r ) ; - if ( MacPtInRect( location , &r ) ) - { - ControlHandle child = wxMacFindSubControl( toplevelWindow , location , sibling , outPart ) ; - if ( child ) - { - return child ; - } - else - { - Point testLocation = location ; - - if ( toplevelWindow ) - { - testLocation.h -= r.left ; - testLocation.v -= r.top ; - } - - *outPart = TestControl( sibling , testLocation ) ; - - return sibling ; - } - } - } - } - } - - return NULL ; -} - - #define NEW_CAPTURE_HANDLING 1 pascal OSStatus @@ -538,7 +485,7 @@ wxMacTopLevelMouseEventHandler(EventHandlerCallRef WXUNUSED(handler), wxToolTip::RelayEvent( g_MacLastWindow , eventleave); #endif - g_MacLastWindow->GetEventHandler()->ProcessEvent(eventleave); + g_MacLastWindow->HandleWindowEvent(eventleave); } if ( currentMouseWindow ) @@ -553,7 +500,7 @@ wxMacTopLevelMouseEventHandler(EventHandlerCallRef WXUNUSED(handler), wxToolTip::RelayEvent( currentMouseWindow , evententer ); #endif - currentMouseWindow->GetEventHandler()->ProcessEvent(evententer); + currentMouseWindow->HandleWindowEvent(evententer); } g_MacLastWindow = currentMouseWindow ; @@ -585,7 +532,7 @@ wxMacTopLevelMouseEventHandler(EventHandlerCallRef WXUNUSED(handler), wxToolTip::RelayEvent( currentMouseWindow , wxevent ); #endif - if ( currentMouseWindow->GetEventHandler()->ProcessEvent(wxevent) ) + if ( currentMouseWindow->HandleWindowEvent(wxevent) ) { if ((currentMouseWindowParent != NULL) && (currentMouseWindowParent->GetChildren().Find(currentMouseWindow) == NULL)) @@ -603,31 +550,6 @@ wxMacTopLevelMouseEventHandler(EventHandlerCallRef WXUNUSED(handler), if (currentMouseWindow->CanAcceptFocus() && wxWindow::FindFocus()!=currentMouseWindow) currentMouseWindow->SetFocus(); } - - // if built-in find control is finding the wrong control (ie static box instead of overlaid - // button, we cannot let the standard handler do its job, but must handle manually - - if ( cEvent.GetKind() == kEventMouseDown ) - { - if ( currentMouseWindow->MacIsReallyEnabled() ) - { - EventModifiers modifiers = cEvent.GetParameter(kEventParamKeyModifiers, typeUInt32) ; - Point clickLocation = windowMouseLocation ; - - currentMouseWindow->MacRootWindowToWindow( &clickLocation.h , &clickLocation.v ) ; - - HandleControlClick( (ControlRef) currentMouseWindow->GetHandle() , clickLocation , - modifiers , (ControlActionUPP ) -1 ) ; - - if ((currentMouseWindowParent != NULL) && - (currentMouseWindowParent->GetChildren().Find(currentMouseWindow) == NULL)) - { - currentMouseWindow = NULL; - } - } - - result = noErr ; - } } if ( cEvent.GetKind() == kEventMouseUp && wxApp::s_captureWindow ) @@ -641,11 +563,16 @@ wxMacTopLevelMouseEventHandler(EventHandlerCallRef WXUNUSED(handler), wxWindow* cursorTarget = currentMouseWindow ; wxPoint cursorPoint( wxevent.m_x , wxevent.m_y ) ; - while ( cursorTarget && !cursorTarget->MacSetupCursor( cursorPoint ) ) + extern wxCursor gGlobalCursor; + + if (!gGlobalCursor.IsOk()) { - cursorTarget = cursorTarget->GetParent() ; - if ( cursorTarget ) - cursorPoint += cursorTarget->GetPosition(); + while ( cursorTarget && !cursorTarget->MacSetupCursor( cursorPoint ) ) + { + cursorTarget = cursorTarget->GetParent() ; + if ( cursorTarget ) + cursorPoint += cursorTarget->GetPosition(); + } } } @@ -694,7 +621,7 @@ wxMacTopLevelWindowEventHandler(EventHandlerCallRef WXUNUSED(handler), wxActivateEvent wxevent(wxEVT_ACTIVATE, true , toplevelWindow->GetId()); wxevent.SetTimestamp( cEvent.GetTicks() ) ; wxevent.SetEventObject(toplevelWindow); - toplevelWindow->GetEventHandler()->ProcessEvent(wxevent); + toplevelWindow->HandleWindowEvent(wxevent); // we still sending an eventNotHandledErr in order to allow for default processing } break ; @@ -705,7 +632,7 @@ wxMacTopLevelWindowEventHandler(EventHandlerCallRef WXUNUSED(handler), wxActivateEvent wxevent(wxEVT_ACTIVATE, false , toplevelWindow->GetId()); wxevent.SetTimestamp( cEvent.GetTicks() ) ; wxevent.SetEventObject(toplevelWindow); - toplevelWindow->GetEventHandler()->ProcessEvent(wxevent); + toplevelWindow->HandleWindowEvent(wxevent); // we still sending an eventNotHandledErr in order to allow for default processing } break ; @@ -739,7 +666,7 @@ wxMacTopLevelWindowEventHandler(EventHandlerCallRef WXUNUSED(handler), wxSizeEvent event( r.GetSize() , toplevelWindow->GetId() ) ; event.SetEventObject( toplevelWindow ) ; - toplevelWindow->GetEventHandler()->ProcessEvent(event) ; + toplevelWindow->HandleWindowEvent(event) ; toplevelWindow->wxWindowMac::MacSuperChangedPosition() ; // like this only children will be notified } @@ -747,7 +674,7 @@ wxMacTopLevelWindowEventHandler(EventHandlerCallRef WXUNUSED(handler), { wxMoveEvent event( r.GetLeftTop() , toplevelWindow->GetId() ) ; event.SetEventObject( toplevelWindow ) ; - toplevelWindow->GetEventHandler()->ProcessEvent(event) ; + toplevelWindow->HandleWindowEvent(event) ; } result = noErr ; @@ -775,7 +702,7 @@ wxMacTopLevelWindowEventHandler(EventHandlerCallRef WXUNUSED(handler), wxSizeEvent wxevent( r , toplevelWindow->GetId() ) ; wxevent.SetEventObject( toplevelWindow ) ; wxRect adjustR = r ; - if ( toplevelWindow->GetEventHandler()->ProcessEvent(wxevent) ) + if ( toplevelWindow->HandleWindowEvent(wxevent) ) adjustR = wxevent.GetRect() ; if ( toplevelWindow->GetMaxWidth() != -1 && adjustR.GetWidth() > toplevelWindow->GetMaxWidth() ) @@ -938,7 +865,7 @@ wxMacDeferredWindowDeleter::wxMacDeferredWindowDeleter( WindowRef windowRef ) wxMacDeferredWindowDeleter::~wxMacDeferredWindowDeleter() { - UMADisposeWindow( (WindowRef) m_macWindow ) ; + DisposeWindow( (WindowRef) m_macWindow ) ; } bool wxTopLevelWindowMac::Create(wxWindow *parent, @@ -961,7 +888,7 @@ bool wxTopLevelWindowMac::Create(wxWindow *parent, DoMacCreateRealWindow( parent, title, pos , size , style , name ) ; - SetBackgroundColour(wxColour(wxMacCreateCGColorFromHITheme(kThemeBrushDialogBackgroundActive))); + SetBackgroundColour(wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE )); if (GetExtraStyle() & wxFRAME_EX_METAL) MacSetMetalAppearance(true); @@ -1063,16 +990,27 @@ wxPoint wxTopLevelWindowMac::GetClientAreaOrigin() const return wxPoint(0, 0) ; } -bool wxTopLevelWindowMac::SetBackgroundColour(const wxColour& col ) +bool wxTopLevelWindowMac::SetBackgroundColour(const wxColour& c ) { + wxColour col = c; + if ( col == wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ) + col = wxColour(wxMacCreateCGColorFromHITheme(kThemeBrushDocumentWindowBackground)); + else if ( col == wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE ) ) + col = wxColour(wxMacCreateCGColorFromHITheme(kThemeBrushDialogBackgroundActive)); + if ( !wxTopLevelWindowBase::SetBackgroundColour(col) && m_hasBgCol ) return false ; - if ( col == wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW ) ) + if ( col == wxColour(wxMacCreateCGColorFromHITheme(kThemeBrushDocumentWindowBackground)) ) + { SetThemeWindowBackground( (WindowRef) m_macWindow, kThemeBrushDocumentWindowBackground, false ) ; - else if ( col == wxSystemSettings::GetColour( wxSYS_COLOUR_3DFACE ) ) + SetBackgroundStyle(wxBG_STYLE_CUSTOM); + } + else if ( col == wxColour(wxMacCreateCGColorFromHITheme(kThemeBrushDialogBackgroundActive)) ) + { SetThemeWindowBackground( (WindowRef) m_macWindow, kThemeBrushDialogBackgroundActive, false ) ; - // TODO BETTER THEME SUPPORT + SetBackgroundStyle(wxBG_STYLE_CUSTOM); + } return true; } @@ -1277,7 +1215,7 @@ void wxTopLevelWindowMac::DoMacCreateRealWindow( SetWindowBounds( (WindowRef) m_macWindow , kWindowStructureRgn , &theBoundsRect ) ; wxAssociateWinWithMacWindow( (WindowRef) m_macWindow , this ) ; - UMASetWTitle( (WindowRef) m_macWindow , title , m_font.GetEncoding() ) ; + SetWindowTitleWithCFString( (WindowRef) m_macWindow , wxCFStringRef( title , GetFont().GetEncoding() ) ); m_peer = new wxMacControl(this , true /*isRootControl*/) ; // There is a bug in 10.2.X for ::GetRootControl returning the window view instead of @@ -1329,7 +1267,7 @@ void wxTopLevelWindowMac::DoMacCreateRealWindow( } wxWindowCreateEvent event(this); - GetEventHandler()->ProcessEvent(event); + HandleWindowEvent(event); } void wxTopLevelWindowMac::ClearBackground() @@ -1374,7 +1312,7 @@ void wxTopLevelWindowMac::MacActivate( long timestamp , bool WXUNUSED(inIsActiva void wxTopLevelWindowMac::SetTitle(const wxString& title) { wxWindow::SetLabel( title ) ; - UMASetWTitle( (WindowRef)m_macWindow , title , m_font.GetEncoding() ) ; + SetWindowTitleWithCFString( (WindowRef) m_macWindow , wxCFStringRef( title , GetFont().GetEncoding() ) ) ; } wxString wxTopLevelWindowMac::GetTitle() const @@ -1406,7 +1344,7 @@ bool wxTopLevelWindowMac::Show(bool show) // because apps expect a size event to occur at this moment wxSizeEvent event(GetSize() , m_windowId); event.SetEventObject(this); - GetEventHandler()->ProcessEvent(event); + HandleWindowEvent(event); } else { @@ -1489,7 +1427,7 @@ bool wxTopLevelWindowMac::ShowWithEffect(wxShowEffect effect, // because apps expect a size event to occur at this moment wxSizeEvent event(GetSize() , m_windowId); event.SetEventObject(this); - GetEventHandler()->ProcessEvent(event); + HandleWindowEvent(event); return true; } @@ -1780,7 +1718,7 @@ void wxTopLevelWindowMac::MacSetUnifiedAppearance( bool set ) // for wx. // TODO: Determine if we need this on Leopard as well. (should be harmless either way, // though) - SetBackgroundColour( wxSYS_COLOUR_WINDOW ) ; + SetBackgroundColour( wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW) ) ; } bool wxTopLevelWindowMac::MacGetUnifiedAppearance() const @@ -1857,7 +1795,7 @@ bool wxTopLevelWindowMac::SetShape(const wxRegion& region) // Make a copy of the region RgnHandle shapeRegion = NewRgn(); - CopyRgn( (RgnHandle)region.GetWXHRGN(), shapeRegion ); + HIShapeGetAsQDRgn( region.GetWXHRGN(), shapeRegion ); // Dispose of any shape region we may already have RgnHandle oldRgn = (RgnHandle)GetWRefCon( (WindowRef)MacGetWindowRef() ); @@ -1898,7 +1836,7 @@ static SInt32 wxShapedMacWindowGetFeatures(WindowRef WXUNUSED(window), SInt32 pa *(OptionBits*)param = //kWindowCanGrow | //kWindowCanZoom | - //kWindowCanCollapse | + kWindowCanCollapse | //kWindowCanGetWindowRegion | //kWindowHasTitleBar | //kWindowSupportsDragHilite |