X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d88ffaaa76c8c98f326457fb313bc98690cf64b6..143318ddbb005602b600216cca621439b771f889:/src/mac/carbon/toplevel.cpp diff --git a/src/mac/carbon/toplevel.cpp b/src/mac/carbon/toplevel.cpp index ab1c994ddd..714293fc36 100644 --- a/src/mac/carbon/toplevel.cpp +++ b/src/mac/carbon/toplevel.cpp @@ -535,13 +535,16 @@ pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , Ev (FindControlUnderMouse(windowMouseLocation , window , &dummyPart) != wxMacFindControlUnderMouse( windowMouseLocation , window , &dummyPart ) ) ) { - EventModifiers modifiers = cEvent.GetParameter(kEventParamKeyModifiers, typeUInt32) ; - Point clickLocation = windowMouseLocation ; -#if TARGET_API_MAC_OSX - currentMouseWindow->MacRootWindowToWindow( &clickLocation.h , &clickLocation.v ) ; -#endif - HandleControlClick( (ControlRef) currentMouseWindow->GetHandle() , clickLocation , - modifiers , (ControlActionUPP ) -1 ) ; + if ( currentMouseWindow->MacIsReallyEnabled() ) + { + EventModifiers modifiers = cEvent.GetParameter(kEventParamKeyModifiers, typeUInt32) ; + Point clickLocation = windowMouseLocation ; + #if TARGET_API_MAC_OSX + currentMouseWindow->MacRootWindowToWindow( &clickLocation.h , &clickLocation.v ) ; + #endif + HandleControlClick( (ControlRef) currentMouseWindow->GetHandle() , clickLocation , + modifiers , (ControlActionUPP ) -1 ) ; + } result = noErr ; } } @@ -557,7 +560,7 @@ pascal OSStatus wxMacTopLevelMouseEventHandler( EventHandlerCallRef handler , Ev // for some reason returning eventNotHandledErr does not lead to the correct behaviour // so we try sending them the correct control directly wxTopLevelWindowMac* toplevelWindow = (wxTopLevelWindowMac*) data ; - if ( toplevelWindow && control ) + if ( cEvent.GetKind() == kEventMouseDown && toplevelWindow && control ) { EventModifiers modifiers = cEvent.GetParameter(kEventParamKeyModifiers, typeUInt32) ; Point clickLocation = windowMouseLocation ; @@ -756,6 +759,12 @@ void wxRemoveMacWindowAssociation(wxTopLevelWindowMac *win) wxTopLevelWindowMac *wxTopLevelWindowMac::s_macDeactivateWindow = NULL; +typedef struct +{ + wxPoint m_position ; + wxSize m_size ; +} FullScreenData ; + void wxTopLevelWindowMac::Init() { m_iconized = @@ -767,6 +776,7 @@ void wxTopLevelWindowMac::Init() m_macUsesCompositing = FALSE; #endif m_macEventHandler = NULL ; + m_macFullScreenData = NULL ; } class wxMacDeferredWindowDeleter : public wxObject @@ -800,6 +810,7 @@ bool wxTopLevelWindowMac::Create(wxWindow *parent, SetName(name); m_windowId = id == -1 ? NewControlId() : id; + wxWindow::SetTitle( title ) ; MacCreateRealWindow( title, pos , size , MacRemoveBordersFromStyle(style) , name ) ; @@ -831,6 +842,10 @@ wxTopLevelWindowMac::~wxTopLevelWindowMac() if ( wxModelessWindows.Find(this) ) wxModelessWindows.DeleteObject(this); + + FullScreenData *data = (FullScreenData *) m_macFullScreenData ; + delete data ; + m_macFullScreenData = NULL ; } @@ -1141,6 +1156,72 @@ bool wxTopLevelWindowMac::Show(bool show) return TRUE ; } +bool wxTopLevelWindowMac::ShowFullScreen(bool show, long style) +{ + if ( show ) + { + FullScreenData *data = (FullScreenData *)m_macFullScreenData ; + delete data ; + data = new FullScreenData() ; + + m_macFullScreenData = data ; + data->m_position = GetPosition() ; + data->m_size = GetSize() ; + + if ( style & wxFULLSCREEN_NOMENUBAR ) + { + HideMenuBar() ; + } + int left , top , right , bottom ; + wxRect client = wxGetClientDisplayRect() ; + + int x, y, w, h ; + + x = client.x ; + y = client.y ; + w = client.width ; + h = client.height ; + + MacGetContentAreaInset( left , top , right , bottom ) ; + + if ( style & wxFULLSCREEN_NOCAPTION ) + { + y -= top ; + h += top ; + } + if ( style & wxFULLSCREEN_NOBORDER ) + { + x -= left ; + w += left + right ; + h += bottom ; + } + if ( style & wxFULLSCREEN_NOTOOLBAR ) + { + // TODO + } + if ( style & wxFULLSCREEN_NOSTATUSBAR ) + { + // TODO + } + SetSize( x , y , w, h ) ; + } + else + { + ShowMenuBar() ; + FullScreenData *data = (FullScreenData *) m_macFullScreenData ; + SetPosition( data->m_position ) ; + SetSize( data->m_size ) ; + delete data ; + m_macFullScreenData = NULL ; + } + return FALSE; +} + +bool wxTopLevelWindowMac::IsFullScreen() const +{ + return m_macFullScreenData != NULL ; +} + // we are still using coordinates of the content view, todo switch to structure bounds void wxTopLevelWindowMac::MacGetContentAreaInset( int &left , int &top , int &right , int &bottom )