X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/58751a8685259e02cb71d193654e2afa1112fda1..a9412f8f03171fdd3606a4ad3db9c9da8fe6bd7c:/src/mac/uma.cpp diff --git a/src/mac/uma.cpp b/src/mac/uma.cpp index a561674ed2..6a9fa8e53e 100644 --- a/src/mac/uma.cpp +++ b/src/mac/uma.cpp @@ -10,6 +10,9 @@ ///////////////////////////////////////////////////////////////////////////// #include "wx/defs.h" + +#if wxUSE_GUI + #include "wx/dc.h" #include @@ -30,6 +33,7 @@ #endif #include "wx/mac/uma.h" + // since we have decided that we only support 8.6 upwards we are // checking for these minimum requirements in the startup code of // the application so all wxWindows code can safely assume that appearance 1.1 @@ -40,7 +44,8 @@ static bool sUMAHasAppearance = false ; static long sUMAAppearanceVersion = 0 ; static long sUMASystemVersion = 0 ; static bool sUMAHasAquaLayout = false ; -static bool sUMASystemInitialized = false ; + +static bool sUMAHasInittedAppearance = false; extern int gAGABackgroundColor ; bool UMAHasAppearance() { return sUMAHasAppearance ; } @@ -53,11 +58,11 @@ static long sUMAWindowManagerAttr = 0 ; bool UMAHasWindowManager() { return sUMAHasWindowManager ; } long UMAGetWindowManagerAttr() { return sUMAWindowManagerAttr ; } bool UMAHasAquaLayout() { return sUMAHasAquaLayout ; } -bool UMASystemIsInitialized() { return sUMASystemInitialized ; } + void UMACleanupToolbox() { - if ( sUMAHasAppearance ) + if (sUMAHasInittedAppearance) { UnregisterAppearanceClient() ; } @@ -68,26 +73,29 @@ void UMACleanupToolbox() if ( TXNTerminateTextension != (void*) kUnresolvedCFragSymbolAddress ) TXNTerminateTextension( ) ; } -void UMAInitToolbox( UInt16 inMoreMastersCalls ) +void UMAInitToolbox( UInt16 inMoreMastersCalls, bool isEmbedded ) { #if !TARGET_CARBON ::MaxApplZone(); for (long i = 1; i <= inMoreMastersCalls; i++) ::MoreMasters(); - ::InitGraf(&qd.thePort); - ::InitFonts(); - ::InitMenus(); - ::TEInit(); - ::InitDialogs(0L); - ::FlushEvents(everyEvent, 0); - ::InitCursor(); + if (!isEmbedded) + { + ::InitGraf(&qd.thePort); + ::InitFonts(); + ::InitMenus(); + ::TEInit(); + ::InitDialogs(0L); + ::FlushEvents(everyEvent, 0); + } + long total,contig; PurgeSpace(&total, &contig); -#else - InitCursor(); #endif + ::InitCursor(); + if ( Gestalt(gestaltSystemVersion, &sUMASystemVersion) != noErr) sUMASystemVersion = 0x0000 ; @@ -95,7 +103,17 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls ) if ( Gestalt( gestaltAppearanceAttr, &theAppearance ) == noErr ) { sUMAHasAppearance = true ; - RegisterAppearanceClient(); + OSStatus status = RegisterAppearanceClient(); + // If status equals appearanceProcessRegisteredErr it means the + // appearance client already was registered (For example if we run + // embedded, the host might have registered it). In such a case + // we don't unregister it later on. + if (status != appearanceProcessRegisteredErr) + { + // Appearance client wasn't registered yet. + sUMAHasInittedAppearance = true; + } + if ( Gestalt( gestaltAppearanceVersion, &theAppearance ) == noErr ) { sUMAAppearanceVersion = theAppearance ; @@ -113,10 +131,13 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls ) #if TARGET_CARBON // Call currently implicitely done : InitFloatingWindows() ; #else - if ( sUMAHasWindowManager ) - InitFloatingWindows() ; - else - InitWindows(); + if (!isEmbedded) + { + if ( sUMAHasWindowManager ) + InitFloatingWindows() ; + else + InitWindows(); + } #endif if ( NavServicesAvailable() ) @@ -140,7 +161,7 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls ) TXNMacOSPreferredFontDescription fontDescriptions[] = { - { fontId , (fontSize << 16) ,kTXNDefaultFontStyle, kTXNSystemDefaultEncoding } , + { fontId , (fontSize << 16) ,kTXNDefaultFontStyle, kTXNSystemDefaultEncoding } } ; int noOfFontDescriptions = sizeof( fontDescriptions ) / sizeof(TXNMacOSPreferredFontDescription) ; #if 0 // TARGET_CARBON @@ -158,7 +179,7 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls ) } - sUMASystemInitialized = true ; + UMASetSystemIsInitialized(true); } @@ -292,68 +313,15 @@ void UMASetMenuItemShortcut( MenuRef menu , MenuItemIndex item , wxAcceleratorEn SInt16 macKey = key ; if ( key >= WXK_F1 && key <= WXK_F15 ) { - macKey = kFunctionKeyCharCode ; + // for some reasons this must be 0 right now + // everything else leads to just the first function key item + // to be selected. Thanks to Ryan Wilcox for finding out. + macKey = 0 ; glyph = kMenuF1Glyph + ( key - WXK_F1 ) ; if ( key >= WXK_F13 ) glyph += 13 ; if ( !explicitCommandKey ) modifiers |= kMenuNoCommandModifier ; - - switch( key ) - { - case WXK_F1 : - macKey += ( 0x7a << 8 ) ; - break ; - case WXK_F2 : - macKey += ( 0x78 << 8 ) ; - break ; - case WXK_F3 : - macKey += ( 0x63 << 8 ) ; - break ; - case WXK_F4 : - macKey += ( 0x76 << 8 ) ; - break ; - case WXK_F5 : - macKey += ( 0x60 << 8 ) ; - break ; - case WXK_F6 : - macKey += ( 0x61 << 8 ) ; - break ; - case WXK_F7 : - macKey += ( 0x62 << 8 ) ; - break ; - case WXK_F8 : - macKey += ( 0x64 << 8 ) ; - break ; - case WXK_F9 : - macKey += ( 0x65 << 8 ) ; - break ; - case WXK_F10 : - macKey += ( 0x6D << 8 ) ; - break ; - case WXK_F11 : - macKey += ( 0x67 << 8 ) ; - break ; - case WXK_F12 : - macKey += ( 0x6F << 8 ) ; - break ; - case WXK_F13 : - macKey += ( 0x69 << 8 ) ; - break ; - case WXK_F14 : - macKey += ( 0x6B << 8 ) ; - break ; - case WXK_F15 : - macKey += ( 0x71 << 8 ) ; - break ; - default : - break ; - } ; - // unfortunately this does not yet trigger the right key , - // for some reason mac justs picks the first function key menu - // defined, so we turn this off - macKey = 0 ; - glyph = 0 ; } else { @@ -587,6 +555,7 @@ void UMAActivateControl( ControlHandle inControl ) void UMADrawControl( ControlHandle inControl ) { WindowRef theWindow = GetControlOwner(inControl) ; + wxMacPortStateHelper help( (GrafPtr) GetWindowPort(theWindow) ) ; RgnHandle updateRgn = NewRgn() ; GetWindowUpdateRgn( theWindow , updateRgn ) ; Point zero = { 0 , 0 } ; @@ -678,6 +647,7 @@ OSErr UMASetKeyboardFocus (WindowPtr inWindow, // events void UMAUpdateControls( WindowPtr inWindow , RgnHandle inRgn ) { + wxMacPortStateHelper help( (GrafPtr) GetWindowPort( (WindowRef) inWindow) ) ; RgnHandle updateRgn = NewRgn() ; GetWindowUpdateRgn( inWindow , updateRgn ) ; @@ -778,6 +748,7 @@ void wxMacPortStateHelper::Setup( GrafPtr newport ) { GetPort( &m_oldPort ) ; SetPort( newport ) ; + SetOrigin(0,0); wxASSERT_MSG( m_clip == NULL , wxT("Cannot call setup twice") ) ; m_clip = NewRgn() ; GetClip( m_clip ); @@ -830,3 +801,21 @@ OSStatus UMAPutScrap( Size size , OSType type , void *data ) return err ; } +#endif // wxUSE_GUI + +#if wxUSE_BASE + +static bool sUMASystemInitialized = false ; + +bool UMASystemIsInitialized() +{ + return sUMASystemInitialized ; +} + +void UMASetSystemIsInitialized(bool val) +{ + sUMASystemInitialized = val; +} + + +#endif // wxUSE_BASE