X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7c09167353f99063b887d4a2e4c60b161c56f5cb..dc259b792613550edda31cc6202b42e172e2a240:/src/mac/toplevel.cpp diff --git a/src/mac/toplevel.cpp b/src/mac/toplevel.cpp index cc6cea4a30..b9acd02cc0 100644 --- a/src/mac/toplevel.cpp +++ b/src/mac/toplevel.cpp @@ -59,10 +59,6 @@ wxWindowList wxModelessWindows; static Point gs_lastWhere; static long gs_lastWhen = 0; -// cursor stuff -extern int wxBusyCursorCount; - - // ============================================================================ // wxTopLevelWindowMac implementation // ============================================================================ @@ -79,7 +75,7 @@ wxTopLevelWindowMac *wxFindWinFromMacWindow(WXWindow inWindowRef) wxNode *node = wxWinMacWindowList->Find((long)inWindowRef); if (!node) return NULL; - return (wxTopLevelWindowMac *)node->Data(); + return (wxTopLevelWindowMac *)node->GetData(); } void wxAssociateWinWithMacWindow(WXWindow inWindowRef, wxTopLevelWindowMac *win) @@ -162,7 +158,7 @@ wxTopLevelWindowMac::~wxTopLevelWindowMac() wxPendingDelete.Append( new wxMacDeferredWindowDeleter( (WindowRef) m_macWindow ) ) ; } - #if TARGET_CARBON +#if TARGET_CARBON if ( m_macEventHandler ) { ::RemoveEventHandler((EventHandlerRef) m_macEventHandler); @@ -171,21 +167,9 @@ wxTopLevelWindowMac::~wxTopLevelWindowMac() #endif wxRemoveMacWindowAssociation( this ) ; - wxTopLevelWindows.DeleteObject(this); - if ( wxModelessWindows.Find(this) ) wxModelessWindows.DeleteObject(this); - // If this is the last top-level window, exit. - if ( wxTheApp && (wxTopLevelWindows.Number() == 0) ) - { - wxTheApp->SetTopWindow(NULL); - - if ( wxTheApp->GetExitOnFrameDelete() ) - { - wxTheApp->ExitMainLoop() ; - } - } DisposeRgn( (RgnHandle) m_macNoEraseUpdateRgn ) ; } @@ -234,6 +218,8 @@ void wxTopLevelWindowMac::SetIcon(const wxIcon& icon) EventHandlerUPP wxMacWindowEventHandlerUPP = NULL ; +extern long wxMacTranslateKey(unsigned char key, unsigned char code) ; + pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef event , void *data ) { OSStatus result = eventNotHandledErr ; @@ -243,8 +229,13 @@ pascal OSStatus wxMacWindowEventHandler( EventHandlerCallRef handler , EventRef case kEventClassTextInput : if ( wxMacConvertEventToRecord( event , &rec ) ) { - wxTheApp->MacHandleOneEvent( &rec ) ; - result = noErr ; + wxTheApp->m_macCurrentEvent = &rec ; + wxWindow* focus = wxWindow::FindFocus() ; + if ( (focus != NULL) && !UMAMenuEvent(&rec) && wxTheApp->MacSendKeyDownEvent( focus , rec.message , rec.modifiers , rec.when , rec.where.h , rec.where.v ) ) + { + // was handled internally + result = noErr ; + } } break ; default : @@ -327,7 +318,11 @@ void wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title, } else { +#if TARGET_CARBON wclass = kPlainWindowClass ; +#else + wclass = kFloatingWindowClass ; +#endif } } else if ( HasFlag( wxCAPTION ) ) @@ -350,7 +345,11 @@ void wxTopLevelWindowMac::MacCreateRealWindow( const wxString& title, } else { +#if TARGET_CARBON wclass = kPlainWindowClass ; +#else + wclass = kModalWindowClass ; +#endif } } @@ -532,7 +531,7 @@ void wxTopLevelWindowMac::MacFireMouseEvent( WXEVENTREF evr ) if ( ev->what == mouseUp ) { wxTheApp->s_captureWindow = NULL ; - if ( wxBusyCursorCount == 0 ) + if ( !wxIsBusy() ) { m_cursor.MacInstall() ; } @@ -582,7 +581,13 @@ void wxTopLevelWindowMac::MacActivate( WXEVENTREF ev , bool inIsActivating ) UMAHighlightAndActivateWindow( (WindowRef)m_macWindow , inIsActivating ) ; - MacSuperEnabled( inIsActivating ) ; + // Early versions of MacOS X don't refresh backgrounds properly, + // so refresh the whole window on activation and deactivation. + long osVersion = UMAGetSystemVersion(); + if (osVersion >= 0x1000 && osVersion < 0x1020) + Refresh(TRUE); + else + MacSuperEnabled( inIsActivating ) ; } void wxTopLevelWindowMac::MacKeyDown( WXEVENTREF ev ) @@ -609,8 +614,8 @@ bool wxTopLevelWindowMac::Show(bool show) return FALSE; if (show) - { - ::ShowWindow( (WindowRef)m_macWindow ) ; + { + ::TransitionWindow((WindowRef)m_macWindow,kWindowZoomTransitionEffect,kWindowShowTransitionAction,nil); ::SelectWindow( (WindowRef)m_macWindow ) ; // no need to generate events here, they will get them triggered by macos // actually they should be , but apparently they are not @@ -621,7 +626,7 @@ bool wxTopLevelWindowMac::Show(bool show) } else { - ::HideWindow( (WindowRef)m_macWindow ) ; + ::TransitionWindow((WindowRef)m_macWindow,kWindowZoomTransitionEffect,kWindowHideTransitionAction,nil); } if ( !show ) @@ -680,9 +685,13 @@ void wxTopLevelWindowMac::DoMoveWindow(int x, int y, int width, int height) if ( doResize ) ::SizeWindow((WindowRef)m_macWindow, m_width, m_height , true); + + // the OS takes care of invalidating and erasing the new area so we only have to + // take care of refreshing for full repaints + + if ( doResize && !HasFlag(wxNO_FULL_REPAINT_ON_RESIZE) ) + Refresh() ; - // the OS takes care of invalidating and erasing the new area - // we have erased the old one if ( IsKindOf( CLASSINFO( wxFrame ) ) ) {