X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f81bfef98230aa9476af18a2fddff85db6471bb5..e3b8a866960ec59e5c1dfa927e3e222b73ea8a57:/src/mac/toplevel.cpp diff --git a/src/mac/toplevel.cpp b/src/mac/toplevel.cpp index 01c1daca7f..8e4a9551c5 100644 --- a/src/mac/toplevel.cpp +++ b/src/mac/toplevel.cpp @@ -401,64 +401,6 @@ pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef DEFINE_ONE_SHOT_HANDLER_GETTER( wxMacWindowEventHandler ) -// Patch 531199 defined a window event handler, as follows. -// TODO: merge the moving/sizing event handling with the event -// handler above. -#if 0 -static pascal OSStatus -WindowHandler( EventHandlerCallRef inHandler, EventRef inEvent, void* userData ) -{ - Rect bounds; - SInt16 height, width; - UInt32 attributes; - OSStatus result = eventNotHandledErr; - - GetEventParameter( inEvent, kEventParamAttributes, typeUInt32, NULL, sizeof( UInt32 ), NULL, &attributes ); - - if ((attributes & (kWindowBoundsChangeSizeChanged | kWindowBoundsChangeOriginChanged)) != 0) - { - // Extract the current bounds. This is the paramter you get to modify to - // alter the window position or size during a window resizing. - GetEventParameter( inEvent, kEventParamCurrentBounds, typeQDRectangle, NULL, sizeof( bounds ), NULL, &bounds ); - - wxRect rect; - rect.SetLeft(bounds.left); - rect.SetTop(bounds.top); - rect.SetRight(bounds.right); - rect.SetBottom(bounds.bottom); - - bool rc; - wxWindowMac *pWindow = (wxWindowMac*)userData; - if ((attributes & kWindowBoundsChangeSizeChanged) != 0) { - wxSizeEvent event(rect, pWindow->GetId()); - event.SetEventObject(pWindow); - rc = pWindow->GetEventHandler()->ProcessEvent(event); - rect = event.GetRect(); - } - else { - wxMoveEvent event(rect, pWindow->GetId()); - event.SetEventObject(pWindow); - rc = pWindow->GetEventHandler()->ProcessEvent(event); - rect = event.GetRect(); - } - - if (rc) { - bounds.left = rect.GetLeft(); - bounds.top = rect.GetTop(); - bounds.right = rect.GetRight(); - bounds.bottom = rect.GetBottom(); - } - - // Set the current bounds parameter to our adjusted bounds. Return - // noErr to indicate we handled this event. - SetEventParameter( inEvent, kEventParamCurrentBounds, typeQDRectangle, sizeof( bounds ), &bounds ); - result = noErr; - } - return result; -} -#endif - // WindowHandler - #endif // --------------------------------------------------------------------------- @@ -497,6 +439,7 @@ void wxRemoveMacWindowAssociation(wxTopLevelWindowMac *win) // ---------------------------------------------------------------------------- WXHWND wxTopLevelWindowMac::s_macWindowInUpdate = NULL; +wxTopLevelWindowMac *wxTopLevelWindowMac::s_macDeactivateWindow = NULL; void wxTopLevelWindowMac::Init() { @@ -621,6 +564,7 @@ void wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title, long style, const wxString& name ) { + OSStatus err = noErr ; SetName(name); m_windowStyle = style; m_isShown = FALSE; @@ -680,7 +624,7 @@ void wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title, else { if ( HasFlag( wxMINIMIZE_BOX ) || HasFlag( wxMAXIMIZE_BOX ) || - HasFlag( wxSYSTEM_MENU ) ) + HasFlag( wxCLOSE_BOX ) || HasFlag( wxSYSTEM_MENU ) ) { wclass = kDocumentWindowClass ; } @@ -694,16 +638,19 @@ void wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title, } } - if ( HasFlag( wxMINIMIZE_BOX ) || HasFlag( wxMAXIMIZE_BOX ) ) + if ( HasFlag( wxMINIMIZE_BOX ) ) { - attr |= kWindowFullZoomAttribute ; attr |= kWindowCollapseBoxAttribute ; } + if ( HasFlag( wxMAXIMIZE_BOX ) ) + { + attr |= kWindowFullZoomAttribute ; + } if ( HasFlag( wxRESIZE_BORDER ) ) { attr |= kWindowResizableAttribute ; } - if ( HasFlag( wxSYSTEM_MENU ) ) + if ( HasFlag( wxCLOSE_BOX) ) { attr |= kWindowCloseBoxAttribute ; } @@ -722,23 +669,24 @@ void wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title, customWindowDefSpec.defType = kWindowDefProcPtr; customWindowDefSpec.u.defProc = NewWindowDefUPP(wxShapedMacWindowDef); - ::CreateCustomWindow( &customWindowDefSpec, wclass, + err = ::CreateCustomWindow( &customWindowDefSpec, wclass, attr, &theBoundsRect, (WindowRef*) &m_macWindow); } else #endif { - ::CreateNewWindow( wclass , attr , &theBoundsRect , (WindowRef*)&m_macWindow ) ; + err = ::CreateNewWindow( wclass , attr , &theBoundsRect , (WindowRef*)&m_macWindow ) ; } + wxCHECK_RET( err == noErr, wxT("Mac OS error when trying to create new window") ); wxAssociateWinWithMacWindow( m_macWindow , this ) ; UMASetWTitle( (WindowRef)m_macWindow , title ) ; ::CreateRootControl( (WindowRef)m_macWindow , (ControlHandle*)&m_macRootControl ) ; #if TARGET_CARBON InstallStandardEventHandler( GetWindowEventTarget(MAC_WXHWND(m_macWindow)) ) ; InstallWindowEventHandler(MAC_WXHWND(m_macWindow), GetwxMacWindowEventHandlerUPP(), - GetEventTypeCount(eventList), eventList, this, &((EventHandlerRef)m_macEventHandler)); + GetEventTypeCount(eventList), eventList, this, (EventHandlerRef *)&m_macEventHandler); #endif m_macFocus = NULL ; @@ -974,8 +922,21 @@ void wxTopLevelWindowMac::MacMouseMoved( WXEVENTREF ev , short part) #endif +void wxTopLevelWindowMac::MacDelayedDeactivation(long timestamp) +{ + if(s_macDeactivateWindow) + { + wxLogDebug("Doing delayed deactivation of %p",s_macDeactivateWindow); + s_macDeactivateWindow->MacActivate(timestamp, false); + } +} + void wxTopLevelWindowMac::MacActivate( long timestamp , bool inIsActivating ) { + wxLogDebug("TopLevel=%p::MacActivate",this); + if(s_macDeactivateWindow==this) + s_macDeactivateWindow=NULL; + MacDelayedDeactivation(timestamp); wxActivateEvent event(wxEVT_ACTIVATE, inIsActivating , m_windowId); event.m_timeStamp = timestamp ; event.SetEventObject(this);