From 893727e58af91fdd8c16ed6236df8bddd96a1342 Mon Sep 17 00:00:00 2001 From: Kevin Ollivier Date: Sat, 18 Aug 2007 21:49:27 +0000 Subject: [PATCH] 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 --- include/wx/mac/carbon/toplevel.h | 2 ++ src/mac/carbon/toplevel.cpp | 52 +++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/include/wx/mac/carbon/toplevel.h b/include/wx/mac/carbon/toplevel.h index f66ada9000..b123748caa 100644 --- a/include/wx/mac/carbon/toplevel.h +++ b/include/wx/mac/carbon/toplevel.h @@ -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 ; diff --git a/src/mac/carbon/toplevel.cpp b/src/mac/carbon/toplevel.cpp index b0930420a0..d45476496a 100644 --- a/src/mac/carbon/toplevel.cpp +++ b/src/mac/carbon/toplevel.cpp @@ -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,8 +1470,14 @@ 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 @@ -1539,10 +1558,41 @@ bool wxTopLevelWindowMac::MacGetMetalAppearance() const #if TARGET_API_MAC_OSX return MacGetWindowAttributes() & kWindowMetalAttribute ; #else - return false ; + return false; #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 ) ; -- 2.45.2