]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/uma.cpp
activate new xpm handler under Classic Mac OS after xpm handler fixes
[wxWidgets.git] / src / mac / carbon / uma.cpp
index ba96908df9b93f0f8acd205fee847c816880646a..3be88ef8ec9c288a3a44f0d037d83e1f1bdb668a 100644 (file)
@@ -1,8 +1,20 @@
-#include <wx/mac/uma.h>
-#include <wx/mac/aga.h>
+#include "wx/defs.h"
+#include "wx/dc.h"
+#include "wx/mac/uma.h"
+#include "wx/mac/aga.h"
+
+#ifdef __UNIX__
+  #include <Carbon/Carbon.h>
+#else
+  #include <Navigation.h>
+#endif
 
 // init
 
+#if !TARGET_CARBON
+#define        GetControlOwner( control ) (**control).contrlOwner
+#endif
+
 static bool    sUMAHasAppearance = false ;
 static long sUMAAppearanceVersion = 0 ;
 extern int gAGABackgroundColor ;
@@ -14,7 +26,19 @@ static long sUMAWindowManagerAttr = 0 ;
 
 bool UMAHasWindowManager() { return sUMAHasWindowManager ; }
 long UMAGetWindowManagerAttr() { return sUMAWindowManagerAttr ; }
-
+void UMACleanupToolbox()
+{
+#if UMA_USE_APPEARANCE
+       if ( sUMAHasAppearance )
+       {
+               UnregisterAppearanceClient() ;
+       }
+#endif
+       if ( NavServicesAvailable() )
+       {
+               NavUnload() ;
+       }
+}
 void UMAInitToolbox( UInt16 inMoreMastersCalls )
 {
 #if !TARGET_CARBON
@@ -24,7 +48,6 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
 
        ::InitGraf(&qd.thePort);
        ::InitFonts();
-       ::InitWindows();
        ::InitMenus();
        ::TEInit();
        ::InitDialogs(0L);
@@ -33,7 +56,7 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
        long total,contig;
        PurgeSpace(&total, &contig);
 #else
-       InitMenus() ;
+       InitCursor();
 #endif
 
 #if UMA_USE_APPEARANCE
@@ -60,6 +83,22 @@ void UMAInitToolbox( UInt16 inMoreMastersCalls )
        }
 #endif // UMA_USE_WINDOWMGR
 #endif
+               
+#ifndef __UNIX__
+#if TARGET_CARBON
+// Call currently implicitely done :           InitFloatingWindows() ;
+#else
+       if ( sUMAHasWindowManager )
+               InitFloatingWindows() ;
+       else
+               InitWindows();
+#endif
+#endif
+
+       if ( NavServicesAvailable() )
+       {
+               NavLoad() ;
+       }
 }
 
 // process manager
@@ -87,7 +126,7 @@ bool UMAGetProcessModeDoesActivateOnFGSwitch()
 
 // menu manager
 
-void UMASetMenuTitle( MenuRef menu , ConstStr255Param title )
+void UMASetMenuTitle( MenuRef menu , StringPtr title )
 {
 #if !TARGET_CARBON
        long                    size = GetHandleSize( (Handle) menu ) ;
@@ -117,11 +156,13 @@ void UMASetMenuTitle( MenuRef menu , ConstStr255Param title )
 
 UInt32 UMAMenuEvent( EventRecord *inEvent )
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
                return MenuEvent( inEvent ) ;
        }
        else
+#endif
        {
                        if ( inEvent->what == keyDown && inEvent->modifiers & cmdKey)
                        {
@@ -133,7 +174,7 @@ UInt32 UMAMenuEvent( EventRecord *inEvent )
 
 void                   UMAEnableMenuItem( MenuRef inMenu , MenuItemIndex inItem ) 
 {
-#if UMA_USE_8_6
+#if UMA_USE_8_6 || TARGET_CARBON
        EnableMenuItem( inMenu , inItem ) ;
 #else
        EnableItem( inMenu , inItem ) ;
@@ -142,14 +183,161 @@ void                     UMAEnableMenuItem( MenuRef inMenu , MenuItemIndex inItem )
 
 void                   UMADisableMenuItem( MenuRef inMenu , MenuItemIndex inItem ) 
 {
-#if UMA_USE_8_6
+#if UMA_USE_8_6 || TARGET_CARBON
        DisableMenuItem( inMenu , inItem ) ;
 #else
        DisableItem( inMenu , inItem ) ;
 #endif
 }
+
+void UMAAppendSubMenuItem( MenuRef menu , StringPtr l , SInt16 id ) 
+{
+       Str255 label ;
+       memcpy( label , l , l[0]+1 ) ;
+       // hardcoded adding of the submenu combination for mac
+
+       int theEnd = label[0] + 1; 
+       if (theEnd > 251) 
+               theEnd = 251; // mac allows only 255 characters
+       label[theEnd++] = '/';
+       label[theEnd++] = hMenuCmd; 
+       label[theEnd++] = '!';
+       label[theEnd++] = id ; 
+       label[theEnd] = 0x00;
+       label[0] = theEnd;
+       MacAppendMenu(menu, label);
+}
+
+void UMAInsertSubMenuItem( MenuRef menu , StringPtr l , MenuItemIndex item , SInt16 id  ) 
+{
+       Str255 label ;
+       memcpy( label , l , l[0]+1 ) ;
+       // hardcoded adding of the submenu combination for mac
+
+       int theEnd = label[0] + 1; 
+       if (theEnd > 251) 
+               theEnd = 251; // mac allows only 255 characters
+       label[theEnd++] = '/';
+       label[theEnd++] = hMenuCmd; 
+       label[theEnd++] = '!';
+       label[theEnd++] = id; 
+       label[theEnd] = 0x00;
+       label[0] = theEnd;
+       MacInsertMenuItem(menu, label , item);
+}
+
+void UMAAppendMenuItem( MenuRef menu , StringPtr l , SInt16 key, UInt8 modifiers ) 
+{
+       Str255 label ;
+       memcpy( label , l , l[0]+1 ) ;
+       if ( key )
+       {
+                       int pos = label[0] ;
+                       label[++pos] = '/';
+                       label[++pos] = toupper( key );
+                       label[0] = pos ;
+       }
+       MacAppendMenu( menu , label ) ;
+}
+
+void UMAInsertMenuItem( MenuRef menu , StringPtr l , MenuItemIndex item , SInt16 key, UInt8 modifiers ) 
+{
+       Str255 label ;
+       memcpy( label , l , l[0]+1 ) ;
+       if ( key )
+       {
+                       int pos = label[0] ;
+                       label[++pos] = '/';
+                       label[++pos] = toupper( key );
+                       label[0] = pos ;
+       }
+       MacInsertMenuItem( menu , label , item) ;
+}
+
+void UMADrawMenuBar() 
+{
+       DrawMenuBar() ;
+}
+
+
+void UMASetMenuItemText( MenuRef menu , MenuItemIndex item , StringPtr label ) 
+{
+       ::SetMenuItemText( menu , item , label ) ;
+}
+
+MenuRef        UMANewMenu( SInt16 menuid , StringPtr label ) 
+{
+       return ::NewMenu(menuid, label);
+}
+
+void UMADisposeMenu( MenuRef menu )
+{
+       DisposeMenu( menu ) ;
+}
+void UMADeleteMenu( SInt16 menuId ) 
+{
+       ::DeleteMenu( menuId ) ;
+}
+
+void UMAInsertMenu( MenuRef insertMenu , SInt16 afterId ) 
+{
+       ::InsertMenu( insertMenu , afterId ) ;
+}
+
+
 // quickdraw
 
+int gPrOpenCounter = 0 ;
+
+OSStatus UMAPrOpen() 
+{
+#if !TARGET_CARBON
+       OSErr err = noErr ;
+       ++gPrOpenCounter ;
+       if ( gPrOpenCounter == 1 )
+       {
+               PrOpen() ;
+               err = PrError() ;
+               wxASSERT( err == noErr ) ;
+       }
+       return err ;
+#else
+       OSStatus err = noErr ;
+       ++gPrOpenCounter ;
+       if ( gPrOpenCounter == 1 )
+       {
+               err = PMBegin() ;
+               wxASSERT( err == noErr ) ;
+       }
+       return err ;
+#endif
+}
+
+OSStatus UMAPrClose() 
+{
+#if !TARGET_CARBON
+       OSErr err = noErr ;
+       wxASSERT( gPrOpenCounter >= 1 ) ;
+       if ( gPrOpenCounter == 1 )
+       {
+               PrClose() ;
+               err = PrError() ;
+               wxASSERT( err == noErr ) ;
+       }
+       --gPrOpenCounter ;
+       return err ;
+#else
+       OSStatus err = noErr ;
+       wxASSERT( gPrOpenCounter >= 1 ) ;
+       if ( gPrOpenCounter == 1 )
+       {
+               err = PMEnd() ;
+       }
+       --gPrOpenCounter ;
+       return err ;
+#endif
+}
+
 #if !TARGET_CARBON
 
 pascal QDGlobalsPtr GetQDGlobalsPtr (void)
@@ -214,13 +402,22 @@ void                      UMASetWTitleC( WindowRef inWindowRef , const char *title )
        Str255  ptitle ;
        strncpy( (char*)ptitle , title , 96 ) ;
        ptitle[96] = 0 ;
+#if TARGET_CARBON
+       c2pstrcpy( ptitle, (char *)ptitle ) ;
+#else
        c2pstr( (char*)ptitle ) ;
+#endif
        SetWTitle( inWindowRef , ptitle ) ;
 }
+
 void                   UMAGetWTitleC( WindowRef inWindowRef , char *title ) 
 {
        GetWTitle( inWindowRef , (unsigned char*)title ) ;
+#if TARGET_CARBON
+       p2cstrcpy( title, (unsigned char *)title ) ;
+#else
        p2cstr( (unsigned char*)title ) ;
+#endif
 }
 
 void                   UMAShowWindow( WindowRef inWindowRef ) 
@@ -260,77 +457,160 @@ void                     UMACloseWindow(WindowRef inWindowRef)
 
 void UMAActivateControl( ControlHandle inControl ) 
 {
+                       RgnHandle updateRgn = NewRgn() ;
+                       GetWindowUpdateRgn( GetControlOwner(inControl) , updateRgn ) ;
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        ::ActivateControl( inControl ) ;
    }
    else
+#endif
+#if !TARGET_CARBON
    {
        AGAActivateControl( inControl ) ;
    }
+#else
+       {
+       }
+#endif
+                       InvalRgn( updateRgn ) ;
 }
 
 void UMADrawControl( ControlHandle inControl ) 
 {
+                       RgnHandle updateRgn = NewRgn() ;
+                       GetWindowUpdateRgn( GetControlOwner(inControl) , updateRgn ) ;
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        ::DrawControlInCurrentPort( inControl ) ;
    }
    else
+#endif
+#if !TARGET_CARBON
    {
        AGADrawControl( inControl ) ;
    }
+#else
+       {
+       }
+#endif
+                       InvalRgn( updateRgn ) ;
 }
 
 void UMAMoveControl( ControlHandle inControl , short x , short y ) 
 {
+                       RgnHandle updateRgn = NewRgn() ;
+                       GetWindowUpdateRgn( GetControlOwner(inControl) , updateRgn ) ;
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
                ::MoveControl( inControl , x , y ) ;
    }
    else
+#endif
+#if !TARGET_CARBON
    {
        AGAMoveControl( inControl , x ,y  ) ;
    }
+#else
+       {
+       }
+#endif
+                       InvalRgn( updateRgn ) ;
 }
 
 void UMASizeControl( ControlHandle inControl , short x , short y ) 
 {
+                       RgnHandle updateRgn = NewRgn() ;
+                       GetWindowUpdateRgn( GetControlOwner(inControl) , updateRgn ) ;
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
                ::SizeControl( inControl , x , y ) ;
    }
    else
+#endif
+#if !TARGET_CARBON
    {
        AGASizeControl( inControl , x ,y  ) ;
    }
+#else
+       {
+       }
+#endif
+                       InvalRgn( updateRgn ) ;
 }
 
 void UMADeactivateControl( ControlHandle inControl ) 
 {
+                       RgnHandle updateRgn = NewRgn() ;
+                       GetWindowUpdateRgn( GetControlOwner(inControl) , updateRgn ) ;
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        ::DeactivateControl( inControl ) ;
    }
    else
+#endif
+#if !TARGET_CARBON
    {
         AGADeactivateControl( inControl ) ;
    }
+#else
+       {
+       }
+#endif
+                       InvalRgn( updateRgn ) ;
 }
 
 void                   UMASetThemeWindowBackground             (WindowRef                              inWindow,
                                                                 ThemeBrush                     inBrush,
-                                                                Boolean                                inUpdate){
+                                                                Boolean                                inUpdate)
+{
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        ::SetThemeWindowBackground( inWindow ,inBrush , inUpdate ) ;
    }
    else
+#endif
+#if !TARGET_CARBON
    {
        AGASetThemeWindowBackground( inWindow , inBrush , inUpdate ) ;
    }
+#else
+       {
+       }
+#endif
 }
 
+void                   UMAApplyThemeBackground                 (ThemeBackgroundKind    inKind,
+                                                                const Rect *                   bounds,
+                                                                ThemeDrawState                 inState,
+                                                                SInt16                                 inDepth,
+                                                                Boolean                                inColorDev)
+{
+#if UMA_USE_APPEARANCE
+       if ( UMAHasAppearance() )
+       {
+       /*
+               if ( sUMAAppearanceVersion >= 0x0110 )
+                       ::ApplyThemeBackground( inKind ,bounds , inState , inDepth , inColorDev ) ;
+   */
+   }
+   else
+#endif
+#if !TARGET_CARBON
+   {
+       AGAApplyThemeBackground( inKind ,bounds , inState , inDepth , inColorDev ) ;
+   }
+#else
+       {
+       }
+#endif
+}
 
 ControlHandle UMANewControl(WindowPtr                          owningWindow,
                                                                 const Rect *                   boundsRect,
@@ -343,16 +623,23 @@ ControlHandle UMANewControl(WindowPtr                             owningWindow,
                                                                 SInt32                                 controlReference)
 {
        ControlHandle theControl = NULL ;
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
    theControl =  NewControl( owningWindow , boundsRect , controlTitle , initiallyVisible ,
                initialValue , minimumValue , maximumValue , procID , controlReference ) ;
        }
        else
+#endif
+#if !TARGET_CARBON
        {
                theControl = AGANewControl( owningWindow , boundsRect , controlTitle , initiallyVisible ,
                initialValue , minimumValue , maximumValue , procID , controlReference ) ;
        }
+#else
+       {
+       }
+#endif
        return theControl ;
 }
 
@@ -372,6 +659,8 @@ void UMADisposeControl (ControlHandle                       theControl)
 void UMAHiliteControl  (ControlHandle                  theControl,
                                                                 ControlPartCode                hiliteState)
                                                                 {
+                       RgnHandle updateRgn = NewRgn() ;
+                       GetWindowUpdateRgn( GetControlOwner(theControl) , updateRgn ) ;
        if ( UMAHasAppearance() )
        {
        ::HiliteControl( theControl , hiliteState ) ;
@@ -380,11 +669,14 @@ void UMAHiliteControl     (ControlHandle                  theControl,
    {
        ::HiliteControl( theControl , hiliteState ) ;
        }
+                       InvalRgn( updateRgn ) ;
 }
 
 
 void UMAShowControl                                            (ControlHandle                  theControl)
 {
+                       RgnHandle updateRgn = NewRgn() ;
+                       GetWindowUpdateRgn( GetControlOwner(theControl) , updateRgn ) ;
        if ( UMAHasAppearance() )
        {
        ::ShowControl( theControl ) ;
@@ -393,6 +685,7 @@ void UMAShowControl                                         (ControlHandle                  theControl)
    {
        ::ShowControl( theControl ) ;
    }
+                       InvalRgn( updateRgn ) ;
 }
 
 
@@ -400,11 +693,11 @@ void UMAHideControl                                               (ControlHandle                  theControl)
 {
        if ( UMAHasAppearance() )
        {
-       ::HideControl( theControl ) ;
+               ::HideControl( theControl ) ;
    }
    else
    {
-       ::HideControl( theControl ) ;
+               ::HideControl( theControl ) ;
    }
 }
 
@@ -415,7 +708,9 @@ void UMASetControlVisibility                        (ControlHandle                  inControl,
                                                                 {
        if ( UMAHasAppearance() )
        {
+#if UMA_USE_APPEARANCE
        ::SetControlVisibility( inControl , inIsVisible, inDoDraw ) ;
+#endif
    }
 }
 
@@ -423,21 +718,29 @@ void UMASetControlVisibility                      (ControlHandle                  inControl,
 
 bool UMAIsControlActive                                        (ControlHandle                  inControl)
 {
+#if TARGET_CARBON
+       return IsControlActive( inControl ) ;
+#else
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        return IsControlActive( inControl ) ;
    }
   else
+#endif
        return (**inControl).contrlHilite == 0 ;
+#endif
 }
 
 
 bool UMAIsControlVisible                               (ControlHandle                  inControl)
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        return IsControlVisible( inControl ) ;
    }
+#endif
        return true ;
 }
 
@@ -445,26 +748,42 @@ OSErr UMAGetBestControlRect                               (ControlHandle                  inControl,
                                                                 Rect *                                 outRect,
                                                                 SInt16 *                               outBaseLineOffset)
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        return GetBestControlRect( inControl , outRect , outBaseLineOffset ) ;
    }
   else
+#endif
+#if !TARGET_CARBON
   {
        return AGAGetBestControlRect( inControl , outRect , outBaseLineOffset ) ;
   }
+#else
+       {
+               return noErr ;
+       }
+#endif
 }
 
 
 OSErr UMASetControlFontStyle                           (ControlHandle                  inControl,
                                                                 const ControlFontStyleRec * inStyle)   
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
                return ::SetControlFontStyle( inControl , inStyle ) ;
        }
        else
+#endif
+#if !TARGET_CARBON
                return AGASetControlFontStyle( inControl , inStyle ) ;
+#else
+       {
+               return noErr ;
+       }
+#endif
 }
 
 
@@ -474,12 +793,20 @@ OSErr UMASetControlFontStyle                              (ControlHandle                  inControl,
 OSErr UMACreateRootControl                             (WindowPtr                              inWindow,
                                                                 ControlHandle *                outControl)
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        return CreateRootControl( inWindow , outControl  ) ;
    }
   else
+#endif
+#if !TARGET_CARBON
        return AGACreateRootControl( inWindow , outControl ) ;
+#else
+       {
+               return noErr ;
+       }
+#endif
 }
 
 
@@ -487,12 +814,20 @@ OSErr UMACreateRootControl                                (WindowPtr                              inWindow,
 OSErr UMAEmbedControl                                  (ControlHandle                  inControl,
                                                                 ControlHandle                  inContainer)
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        return EmbedControl( inControl , inContainer ) ;
    }
   else
+#endif
+#if !TARGET_CARBON
        return AGAEmbedControl( inControl , inContainer ) ; ;
+#else
+       {
+               return noErr ;
+       }
+#endif
 }
 
 
@@ -502,12 +837,30 @@ OSErr UMASetKeyboardFocus                         (WindowPtr                              inWindow,
                                                                 ControlHandle                  inControl,
                                                                 ControlFocusPart               inPart)
 {
+       OSErr err = noErr;
+       GrafPtr port ;
+       GetPort( &port ) ;
+#if TARGET_CARBON
+       SetPort( GetWindowPort( inWindow ) ) ;
+#else
+       SetPort( inWindow ) ;
+#endif
+       SetOrigin( 0 , 0 ) ;
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
-       return SetKeyboardFocus( inWindow , inControl , inPart ) ;
+       err = SetKeyboardFocus( inWindow , inControl , inPart ) ;
    }
   else
-       return AGASetKeyboardFocus( inWindow , inControl , inPart ) ;
+#endif
+#if !TARGET_CARBON
+       err = AGASetKeyboardFocus( inWindow , inControl , inPart ) ;
+#else
+       {
+       }
+#endif
+       SetPort( port ) ;
+       return err ;
 }
 
 
@@ -520,14 +873,22 @@ ControlPartCode UMAHandleControlClick                             (ControlHandle                  inControl,
                                                                 SInt16                                 inModifiers,
                                                                 ControlActionUPP               inAction)                
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        return HandleControlClick( inControl , inWhere , inModifiers , inAction ) ;
    }
    else
+#endif
+#if !TARGET_CARBON
    {
        return AGAHandleControlClick( inControl , inWhere , inModifiers , inAction ) ;
    }
+#else
+       {
+               return noErr ;
+       }
+#endif
 }
 
 
@@ -536,52 +897,85 @@ SInt16 UMAHandleControlKey                                (ControlHandle                  inControl,
                                                                 SInt16                                 inCharCode,
                                                                 SInt16                                 inModifiers)
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
        return HandleControlKey( inControl , inKeyCode , inCharCode , inModifiers ) ;
    }
    else
+#endif
+#if !TARGET_CARBON
    {
        return AGAHandleControlKey(inControl , inKeyCode , inCharCode , inModifiers ) ;
    }
+#else
+       {
+               return noErr ;
+       }
+#endif
 }
 
 
                                                                 
 void UMAIdleControls                                   (WindowPtr                              inWindow)
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
                IdleControls( inWindow ) ;
    }
    else
+#endif
+#if !TARGET_CARBON
    {
                AGAIdleControls( inWindow ) ;
    }
+#else
+       {
+       }
+#endif
 }
 
 void UMAUpdateControls( WindowPtr inWindow , RgnHandle inRgn ) 
 {
+                       RgnHandle updateRgn = NewRgn() ;
+                       GetWindowUpdateRgn( inWindow , updateRgn ) ;
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
                UpdateControls( inWindow , inRgn ) ;
        }
        else
+#endif
+#if !TARGET_CARBON
        {
                AGAUpdateControls( inWindow , inRgn ) ;
        }
+#else
+       {
+       }
+#endif
+                       InvalRgn( updateRgn ) ;
 }
 
 OSErr UMAGetRootControl( WindowPtr inWindow , ControlHandle *outControl ) 
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
                return GetRootControl( inWindow , outControl ) ;
        }
        else
+#endif
+#if !TARGET_CARBON
        {
                return AGAGetRootControl( inWindow , outControl ) ;
        }
+#else
+       {
+               return noErr ;
+       }
+#endif
 }
 
 
@@ -593,12 +987,20 @@ OSErr UMASetControlData                                   (ControlHandle                  inControl,
                                                                 Size                                   inSize,
                                                                 Ptr                                    inData)
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
         return SetControlData( inControl , inPart , inTagName , inSize , inData ) ;
    }
    else
+#endif
+#if !TARGET_CARBON
                return AGASetControlData( inControl , inPart , inTagName , inSize , inData ) ;
+#else
+       {
+               return noErr ;
+       }
+#endif
 }
 
 
@@ -610,15 +1012,22 @@ OSErr UMAGetControlData                                  (ControlHandle                  inControl,
                                                                 Ptr                                    outBuffer,
                                                                 Size *                                 outActualSize)
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
                return ::GetControlData( inControl , inPart , inTagName , inBufferSize , outBuffer , outActualSize ) ;
        }
        else
+#endif
+#if !TARGET_CARBON
        {
                return AGAGetControlData( inControl , inPart , inTagName , inBufferSize , outBuffer , outActualSize ) ;
        }
-       
+#else
+       {
+               return noErr ;
+       }
+#endif
 }
 
 
@@ -627,14 +1036,22 @@ OSErr UMAGetControlDataSize                              (ControlHandle                  inControl,
                                                                 ResType                                inTagName,
                                                                 Size *                                 outMaxSize)
 {
+#if UMA_USE_APPEARANCE
        if ( UMAHasAppearance() )
        {
                return GetControlDataSize( inControl , inPart , inTagName , outMaxSize ) ;
        }
        else
+#endif
+#if !TARGET_CARBON
        {
                return AGAGetControlDataSize( inControl , inPart , inTagName , outMaxSize ) ;
        }
+#else
+       {
+               return noErr ;
+       }
+#endif
 }
 
 
@@ -711,11 +1128,70 @@ OSStatus         UMACreateNewWindow( WindowClass windowClass , WindowAttributes attribu
                                case kMovableModalWindowClass :
                                        procID = kWindowMovableModalDialogProc;
                                        break ;
-                               case kDocumentWindowClass :
-                                       procID = kWindowFullZoomGrowDocumentProc;
+                               case kModalWindowClass :
+                                       procID = kWindowShadowDialogProc;
+                                       break ;
+                               case kFloatingWindowClass :
+                                       if ( attributes & kWindowSideTitlebarAttribute )
+                                       {
+                                               if( ( attributes & kWindowResizableAttribute ) &&  
+                                                       ( attributes & kWindowFullZoomAttribute ) )
+                                               {
+                                                       procID = kWindowFloatSideFullZoomGrowProc ;
+                                               }
+                                               else if( attributes & kWindowFullZoomAttribute )
+                                               {
+                                                       procID = kWindowFloatSideFullZoomProc;
+                                               }
+                                               else if ( attributes & kWindowResizableAttribute )
+                                               {
+                                                       procID = kWindowFloatSideGrowProc;
+                                               }
+                                               else
+                                               {
+                                                       procID = kWindowFloatSideProc;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if( ( attributes & kWindowResizableAttribute ) &&  
+                                                       ( attributes & kWindowFullZoomAttribute ) )
+                                               {
+                                                       procID = kWindowFloatFullZoomGrowProc ;
+                                               }
+                                               else if( attributes & kWindowFullZoomAttribute )
+                                               {
+                                                       procID = kWindowFloatFullZoomProc;
+                                               }
+                                               else if ( attributes & kWindowResizableAttribute )
+                                               {
+                                                       procID = kWindowFloatGrowProc;
+                                               }
+                                               else
+                                               {
+                                                       procID = kWindowFloatProc;
+                                               }
+                                       }
                                        break ;
+                               case kDocumentWindowClass :
                                default :
-                                       procID = kWindowMovableModalDialogProc;
+                                       if( ( attributes & kWindowResizableAttribute ) &&  
+                                               ( attributes & kWindowFullZoomAttribute ) )
+                                       {
+                                               procID = kWindowFullZoomGrowDocumentProc;
+                                       }
+                                       else if( attributes & kWindowFullZoomAttribute )
+                                       {
+                                               procID = kWindowFullZoomDocumentProc;
+                                       }
+                                       else if ( attributes & kWindowResizableAttribute )
+                                       {
+                                               procID = kWindowGrowDocumentProc;
+                                       }
+                                       else
+                                       {
+                                               procID = kWindowDocumentProc;
+                                       }
                                        break ;
                        }
                }
@@ -725,13 +1201,72 @@ OSStatus         UMACreateNewWindow( WindowClass windowClass , WindowAttributes attribu
                        {
                                case kMovableModalWindowClass :
                                        procID = movableDBoxProc;
-//                                     procID += kMovableModalDialogVariantCode;
                                        break ;
-                               case kDocumentWindowClass :
-                                       procID = zoomDocProc;
+                               case kModalWindowClass :
+                                       procID = altDBoxProc;
+                                       break ;
+                               case kFloatingWindowClass :
+                                       if ( attributes & kWindowSideTitlebarAttribute )
+                                       {
+                                               if( ( attributes & kWindowResizableAttribute ) &&  
+                                                       ( attributes & kWindowFullZoomAttribute ) )
+                                               {
+                                                       procID = floatSideZoomGrowProc ;
+                                               }
+                                               else if( attributes & kWindowFullZoomAttribute )
+                                               {
+                                                       procID = floatSideZoomProc;
+                                               }
+                                               else if ( attributes & kWindowResizableAttribute )
+                                               {
+                                                       procID = floatSideGrowProc;
+                                               }
+                                               else
+                                               {
+                                                       procID = floatSideProc;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if( ( attributes & kWindowResizableAttribute ) &&  
+                                                       ( attributes & kWindowFullZoomAttribute ) )
+                                               {
+                                                       procID = floatZoomGrowProc ;
+                                               }
+                                               else if( attributes & kWindowFullZoomAttribute )
+                                               {
+                                                       procID = floatZoomProc;
+                                               }
+                                               else if ( attributes & kWindowResizableAttribute )
+                                               {
+                                                       procID = floatGrowProc;
+                                               }
+                                               else
+                                               {
+                                                       procID = floatProc;
+                                               }
+                                       }
                                        break ;
+                               case kDocumentWindowClass :
                                default :
-                                       procID = documentProc;
+                                       if( ( attributes & kWindowResizableAttribute ) &&  
+                                               ( attributes & kWindowFullZoomAttribute ) )
+                                       {
+                                               procID = zoomDocProc;
+                                       }
+                                       else if( attributes & kWindowFullZoomAttribute )
+                                       {
+                                               procID = zoomNoGrow;
+                                       }
+                                       else if ( attributes & kWindowResizableAttribute )
+                                       {
+                                               procID = documentProc;
+                                       }
+                                       else
+                                       {
+                                               procID = noGrowDocProc;
+                                       }
+                                       break ;
                                        break ;
                        }
                }
@@ -852,7 +1387,42 @@ void UMAHighlightAndActivateWindow( WindowRef inWindowRef , bool inActivate )
        {
 //             bool isHighlighted = IsWindowHighlited( inWindowRef ) ;
 //             if ( inActivate != isHightlited )
-                               HiliteWindow( inWindowRef , inActivate ) ;
+               GrafPtr port ;
+               GetPort( &port ) ;
+#if TARGET_CARBON
+               SetPort( GetWindowPort( inWindowRef ) ) ;
+#else
+               SetPort( inWindowRef ) ;
+#endif
+               SetOrigin( 0 , 0 ) ;
+               HiliteWindow( inWindowRef , inActivate ) ;
+               ControlHandle control = NULL ;
+               UMAGetRootControl( inWindowRef , & control ) ;
+               if ( control )
+               {
+                       if ( inActivate )
+                               UMAActivateControl( control ) ;
+                       else
+                               UMADeactivateControl( control ) ;
+               }       
+               SetPort( port ) ;
        }
 }
+OSStatus UMADrawThemePlacard( const Rect *inRect , ThemeDrawState inState ) 
+{
+#if UMA_USE_APPEARANCE
+  if ( UMAHasAppearance() )
+  {
+    ::DrawThemePlacard( inRect , inState ) ;
+  }
+  else
+#endif
+#if !TARGET_CARBON
+  {
+  }
+#else
+  {
+  }
+#endif
+}