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() ;
bool MacGetMetalAppearance() const ;
bool MacGetUnifiedAppearance() const ;
void MacChangeWindowAttributes( wxUint32 attributesToSet , wxUint32 attributesToClear ) ;
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
// logic & checks cease to work as expected. To set the metal appearance, use SetExtraStyle.
void MacSetMetalAppearance( bool on ) ;
void MacSetUnifiedAppearance( bool on ) ;
WXEVENTHANDLERREF m_macEventHandler ;

View File

@@ -57,6 +57,9 @@
// 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
static const wxChar *TRACE_ACTIVATE = _T("activation");
@@ -1248,6 +1251,13 @@ void wxTopLevelWindowMac::MacCreateRealWindow(
}
#endif
#if TARGET_API_MAC_OSX
if ( m_macWindow != NULL )
{
MacSetUnifiedAppearance( true ) ;
}
#endif
// the frame window event handler
InstallStandardEventHandler( GetWindowEventTarget(MAC_WXHWND(m_macWindow)) ) ;
MacInstallTopLevelWindowEventHandler() ;
@@ -1460,9 +1470,15 @@ void wxTopLevelWindowMac::SetExtraStyle(long exStyle)
if ( m_macWindow != NULL )
{
bool metal = GetExtraStyle() & wxFRAME_EX_METAL ;
if ( MacGetMetalAppearance() != metal )
{
if ( MacGetUnifiedAppearance() )
MacSetUnifiedAppearance( !metal ) ;
MacSetMetalAppearance( metal ) ;
}
}
#endif
}
@@ -1529,6 +1545,9 @@ void wxTopLevelWindowMac::DoGetClientSize( int *width, int *height ) const
void wxTopLevelWindowMac::MacSetMetalAppearance( bool set )
{
#if TARGET_API_MAC_OSX
if ( MacGetUnifiedAppearance() )
MacSetUnifiedAppearance( false ) ;
MacChangeWindowAttributes( set ? kWindowMetalAttribute : kWindowNoAttributes ,
set ? kWindowNoAttributes : kWindowMetalAttribute ) ;
#endif
@@ -1543,6 +1562,37 @@ bool wxTopLevelWindowMac::MacGetMetalAppearance() const
#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 )
{
ChangeWindowAttributes( (WindowRef)m_macWindow, attributesToSet, attributesToClear ) ;