Add the unified style on OS X 10.4, and default to using it.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48165 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Kevin Ollivier
2007-08-18 21:49:27 +00:00
parent a701b45539
commit 893727e58a
2 changed files with 53 additions and 1 deletions

View File

@@ -100,6 +100,7 @@ public:
virtual void MacInstallTopLevelWindowEventHandler() ; virtual void MacInstallTopLevelWindowEventHandler() ;
bool MacGetMetalAppearance() const ; bool MacGetMetalAppearance() const ;
bool MacGetUnifiedAppearance() const ;
void MacChangeWindowAttributes( wxUint32 attributesToSet , wxUint32 attributesToClear ) ; void MacChangeWindowAttributes( wxUint32 attributesToSet , wxUint32 attributesToClear ) ;
wxUint32 MacGetWindowAttributes() const ; wxUint32 MacGetWindowAttributes() const ;
@@ -136,6 +137,7 @@ private :
// This is because the ExtraStyle flags get out of sync with the metal appearance and the metal // This is because the ExtraStyle flags get out of sync with the metal appearance and the metal
// logic & checks cease to work as expected. To set the metal appearance, use SetExtraStyle. // logic & checks cease to work as expected. To set the metal appearance, use SetExtraStyle.
void MacSetMetalAppearance( bool on ) ; void MacSetMetalAppearance( bool on ) ;
void MacSetUnifiedAppearance( bool on ) ;
WXEVENTHANDLERREF m_macEventHandler ; WXEVENTHANDLERREF m_macEventHandler ;

View File

@@ -57,6 +57,9 @@
// constants // constants
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// unified title and toolbar constant - not in Tiger headers, so we duplicate it here
#define kWindowUnifiedTitleAndToolbarAttribute (1 << 7)
// trace mask for activation tracing messages // trace mask for activation tracing messages
static const wxChar *TRACE_ACTIVATE = _T("activation"); static const wxChar *TRACE_ACTIVATE = _T("activation");
@@ -1248,6 +1251,13 @@ void wxTopLevelWindowMac::MacCreateRealWindow(
} }
#endif #endif
#if TARGET_API_MAC_OSX
if ( m_macWindow != NULL )
{
MacSetUnifiedAppearance( true ) ;
}
#endif
// the frame window event handler // the frame window event handler
InstallStandardEventHandler( GetWindowEventTarget(MAC_WXHWND(m_macWindow)) ) ; InstallStandardEventHandler( GetWindowEventTarget(MAC_WXHWND(m_macWindow)) ) ;
MacInstallTopLevelWindowEventHandler() ; MacInstallTopLevelWindowEventHandler() ;
@@ -1460,8 +1470,14 @@ void wxTopLevelWindowMac::SetExtraStyle(long exStyle)
if ( m_macWindow != NULL ) if ( m_macWindow != NULL )
{ {
bool metal = GetExtraStyle() & wxFRAME_EX_METAL ; bool metal = GetExtraStyle() & wxFRAME_EX_METAL ;
if ( MacGetMetalAppearance() != metal ) if ( MacGetMetalAppearance() != metal )
{
if ( MacGetUnifiedAppearance() )
MacSetUnifiedAppearance( !metal ) ;
MacSetMetalAppearance( metal ) ; MacSetMetalAppearance( metal ) ;
}
} }
#endif #endif
} }
@@ -1529,6 +1545,9 @@ void wxTopLevelWindowMac::DoGetClientSize( int *width, int *height ) const
void wxTopLevelWindowMac::MacSetMetalAppearance( bool set ) void wxTopLevelWindowMac::MacSetMetalAppearance( bool set )
{ {
#if TARGET_API_MAC_OSX #if TARGET_API_MAC_OSX
if ( MacGetUnifiedAppearance() )
MacSetUnifiedAppearance( false ) ;
MacChangeWindowAttributes( set ? kWindowMetalAttribute : kWindowNoAttributes , MacChangeWindowAttributes( set ? kWindowMetalAttribute : kWindowNoAttributes ,
set ? kWindowNoAttributes : kWindowMetalAttribute ) ; set ? kWindowNoAttributes : kWindowMetalAttribute ) ;
#endif #endif
@@ -1539,10 +1558,41 @@ bool wxTopLevelWindowMac::MacGetMetalAppearance() const
#if TARGET_API_MAC_OSX #if TARGET_API_MAC_OSX
return MacGetWindowAttributes() & kWindowMetalAttribute ; return MacGetWindowAttributes() & kWindowMetalAttribute ;
#else #else
return false ; return false;
#endif #endif
} }
void wxTopLevelWindowMac::MacSetUnifiedAppearance( bool set )
{
#if TARGET_API_MAC_OSX
if ( UMAGetSystemVersion() >= 0x1040 )
{
if ( MacGetMetalAppearance() )
MacSetMetalAppearance( false ) ;
MacChangeWindowAttributes( set ? kWindowUnifiedTitleAndToolbarAttribute : kWindowNoAttributes ,
set ? kWindowNoAttributes : kWindowUnifiedTitleAndToolbarAttribute) ;
// For some reason, Tiger uses white as the background color for this appearance,
// while most apps using it use the typical striped background. Restore that behavior
// for wx.
// TODO: Determine if we need this on Leopard as well. (should be harmless either way,
// though)
SetBackgroundColour( wxSYS_COLOUR_WINDOW ) ;
}
#endif
}
bool wxTopLevelWindowMac::MacGetUnifiedAppearance() const
{
#if TARGET_API_MAC_OSX
if ( UMAGetSystemVersion() >= 0x1040 )
return MacGetWindowAttributes() & kWindowUnifiedTitleAndToolbarAttribute ;
else
#endif
return false;
}
void wxTopLevelWindowMac::MacChangeWindowAttributes( wxUint32 attributesToSet , wxUint32 attributesToClear ) void wxTopLevelWindowMac::MacChangeWindowAttributes( wxUint32 attributesToSet , wxUint32 attributesToClear )
{ {
ChangeWindowAttributes( (WindowRef)m_macWindow, attributesToSet, attributesToClear ) ; ChangeWindowAttributes( (WindowRef)m_macWindow, attributesToSet, attributesToClear ) ;