]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/uma.cpp
* GetValue() now returns true if the state is undetermined
[wxWidgets.git] / src / mac / carbon / uma.cpp
index f7356b7c59801f62e5d7ac7d72631434fe97ae26..6a9fa8e53ede1dc85aed6938c018fc42355875b6 100644 (file)
@@ -45,6 +45,8 @@ static long sUMAAppearanceVersion = 0 ;
 static long sUMASystemVersion = 0 ;
 static bool sUMAHasAquaLayout = false ;
 
+static bool sUMAHasInittedAppearance = false;
+
 extern int gAGABackgroundColor ;
 bool UMAHasAppearance() { return sUMAHasAppearance ; }
 long UMAGetAppearanceVersion() { return sUMAAppearanceVersion ; }
@@ -60,7 +62,7 @@ bool UMAHasAquaLayout() { return sUMAHasAquaLayout ; }
 
 void UMACleanupToolbox()
 {
-    if ( sUMAHasAppearance )
+    if (sUMAHasInittedAppearance)
     {
         UnregisterAppearanceClient() ;
     }
@@ -71,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 ;
 
@@ -98,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 ;
@@ -116,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() )
@@ -143,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
@@ -537,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 } ;
@@ -628,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 ) ;
 
@@ -728,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 );