X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a46cbd24b4e40f981c172a0efef78e925a6fb8bd..60372b0d54379701d62edf5595a7dc25c48330e1:/src/osx/cocoa/nonownedwnd.mm diff --git a/src/osx/cocoa/nonownedwnd.mm b/src/osx/cocoa/nonownedwnd.mm index 821b444be2..f95db4d67a 100644 --- a/src/osx/cocoa/nonownedwnd.mm +++ b/src/osx/cocoa/nonownedwnd.mm @@ -4,7 +4,7 @@ // Author: DavidStefan Csomor // Modified by: // Created: 2008-06-20 -// RCS-ID: $Id: nonownedwnd.mm 48805 2007-09-19 14:52:25Z SC $ +// RCS-ID: $Id$ // Copyright: (c) Stefan Csomor // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -15,6 +15,8 @@ #include "wx/frame.h" #include "wx/app.h" #include "wx/dialog.h" + #include "wx/menuitem.h" + #include "wx/menu.h" #endif #include "wx/osx/private.h" @@ -263,14 +265,89 @@ bool shouldHandleSelector(SEL selector) @end +extern int wxOSXGetIdFromSelector(SEL action ); + @implementation wxNonOwnedWindowController - (id) init { - [super init]; + self = [super init]; return self; } +- (BOOL) triggerMenu:(SEL) action +{ + wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar(); + if ( mbar ) + { + wxMenu* menu = NULL; + wxMenuItem* menuitem = mbar->FindItem(wxOSXGetIdFromSelector(action), &menu); + if ( menu != NULL && menuitem != NULL) + return menu->HandleCommandProcess(menuitem); + } + return NO; +} + +- (BOOL)validateMenuItem:(NSMenuItem *)menuItem +{ + SEL action = [menuItem action]; + + wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar(); + if ( mbar ) + { + wxMenu* menu = NULL; + wxMenuItem* menuitem = mbar->FindItem(wxOSXGetIdFromSelector(action), &menu); + if ( menu != NULL && menuitem != NULL) + { + menu->HandleCommandUpdateStatus(menuitem); + return menuitem->IsEnabled(); + } + } + return YES; +} + +- (void)undo:(id)sender +{ + wxUnusedVar(sender); + [self triggerMenu:_cmd]; +} + +- (void)redo:(id)sender +{ + wxUnusedVar(sender); + [self triggerMenu:_cmd]; +} + +- (void)cut:(id)sender +{ + wxUnusedVar(sender); + [self triggerMenu:_cmd]; +} + +- (void)copy:(id)sender +{ + wxUnusedVar(sender); + [self triggerMenu:_cmd]; +} + +- (void)paste:(id)sender +{ + wxUnusedVar(sender); + [self triggerMenu:_cmd]; +} + +- (void)delete:(id)sender +{ + wxUnusedVar(sender); + [self triggerMenu:_cmd]; +} + +- (void)selectAll:(id)sender +{ + wxUnusedVar(sender); + [self triggerMenu:_cmd]; +} + - (BOOL)windowShouldClose:(id)nwindow { wxNonOwnedWindowCocoaImpl* windowimpl = [(NSWindow*) nwindow WX_implementation]; @@ -375,6 +452,7 @@ bool shouldHandleSelector(SEL selector) editor = [[wxNSTextFieldEditor alloc] init]; [editor setFieldEditor:YES]; [tf setFieldEditor:editor]; + [editor release]; } return editor; } @@ -562,6 +640,7 @@ long style, long extraStyle, const wxString& WXUNUSED(name) ) } [m_macWindow setLevel:level]; + m_macWindowLevel = level; [m_macWindow setDelegate:controller]; @@ -589,7 +668,7 @@ WXWindow wxNonOwnedWindowCocoaImpl::GetWXWindow() const void wxNonOwnedWindowCocoaImpl::Raise() { - [m_macWindow orderWindow:NSWindowAbove relativeTo:0]; + [m_macWindow makeKeyAndOrderFront:nil]; } void wxNonOwnedWindowCocoaImpl::Lower() @@ -638,8 +717,12 @@ bool wxNonOwnedWindowCocoaImpl::SetTransparent(wxByte alpha) return true; } -bool wxNonOwnedWindowCocoaImpl::SetBackgroundColour(const wxColour& WXUNUSED(col) ) +bool wxNonOwnedWindowCocoaImpl::SetBackgroundColour(const wxColour& col ) { + [m_macWindow setBackgroundColor:[NSColor colorWithCalibratedRed:(CGFloat) (col.Red() / 255.0) + green:(CGFloat) (col.Green() / 255.0) + blue:(CGFloat) (col.Blue() / 255.0) + alpha:(CGFloat) (col.Alpha() / 255.0)]]; return true; } @@ -672,6 +755,7 @@ void wxNonOwnedWindowCocoaImpl::SetWindowStyleFlag( long style ) level = kCGFloatingWindowLevel; [m_macWindow setLevel: level]; + m_macWindowLevel = level; } } @@ -714,8 +798,6 @@ void wxNonOwnedWindowCocoaImpl::GetSize( int &width, int &height ) const void wxNonOwnedWindowCocoaImpl::GetContentArea( int& left, int &top, int &width, int &height ) const { - NSRect outer = NSMakeRect(100,100,100,100); - NSRect content = [NSWindow contentRectForFrameRect:outer styleMask:[m_macWindow styleMask] ]; NSRect rect = [[m_macWindow contentView] frame]; left = (int)rect.origin.x; top = (int)rect.origin.y; @@ -776,6 +858,7 @@ void wxNonOwnedWindowCocoaImpl::Maximize(bool WXUNUSED(maximize)) typedef struct { + NSUInteger m_formerStyleMask; int m_formerLevel; NSRect m_formerFrame; } FullScreenData ; @@ -796,25 +879,50 @@ bool wxNonOwnedWindowCocoaImpl::ShowFullScreen(bool show, long WXUNUSED(style)) m_macFullScreenData = data ; data->m_formerLevel = [m_macWindow level]; data->m_formerFrame = [m_macWindow frame]; - CGDisplayCapture( kCGDirectMainDisplay ); - [m_macWindow setLevel:CGShieldingWindowLevel()]; + data->m_formerStyleMask = [m_macWindow styleMask]; +#if 0 + // CGDisplayCapture( kCGDirectMainDisplay ); + //[m_macWindow setLevel:NSMainMenuWindowLevel+1/*CGShieldingWindowLevel()*/]; +#endif NSRect screenframe = [[NSScreen mainScreen] frame]; NSRect frame = NSMakeRect (0, 0, 100, 100); NSRect contentRect; + +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + if ( [ m_macWindow respondsToSelector:@selector(setStyleMask:) ] ) + [m_macWindow setStyleMask:data->m_formerStyleMask & ~ NSResizableWindowMask]; +#endif + contentRect = [NSWindow contentRectForFrameRect: frame - styleMask: NSTitledWindowMask]; + styleMask: [m_macWindow styleMask]]; screenframe.origin.y += (frame.origin.y - contentRect.origin.y); screenframe.size.height += (frame.size.height - contentRect.size.height); [m_macWindow setFrame:screenframe display:YES]; + + SetSystemUIMode(kUIModeAllHidden, + kUIOptionDisableAppleMenu + /* + | kUIOptionDisableProcessSwitch + | kUIOptionDisableForceQuit + */); } else if ( m_macFullScreenData != NULL ) { FullScreenData *data = (FullScreenData *) m_macFullScreenData ; - CGDisplayRelease( kCGDirectMainDisplay ); - [m_macWindow setLevel:data->m_formerLevel]; +#if 0 + // CGDisplayRelease( kCGDirectMainDisplay ); + // [m_macWindow setLevel:data->m_formerLevel]; +#endif + [m_macWindow setFrame:data->m_formerFrame display:YES]; +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + if ( [ m_macWindow respondsToSelector:@selector(setStyleMask:) ] ) + [m_macWindow setStyleMask:data->m_formerStyleMask]; +#endif delete data ; m_macFullScreenData = NULL ; + + SetSystemUIMode(kUIModeNormal, 0); } return true; @@ -882,6 +990,16 @@ bool wxNonOwnedWindowCocoaImpl::IsModified() const return [m_macWindow isDocumentEdited]; } +void wxNonOwnedWindowCocoaImpl::RestoreWindowLevel() +{ + if ( [m_macWindow level] != m_macWindowLevel ) + [m_macWindow setLevel:m_macWindowLevel]; +} + +// +// +// + wxNonOwnedWindowImpl* wxNonOwnedWindowImpl::CreateNonOwnedWindow( wxNonOwnedWindow* wxpeer, wxWindow* parent, WXWindow nativeWindow) { wxNonOwnedWindowCocoaImpl* now = new wxNonOwnedWindowCocoaImpl( wxpeer ); @@ -896,3 +1014,4 @@ wxNonOwnedWindowImpl* wxNonOwnedWindowImpl::CreateNonOwnedWindow( wxNonOwnedWind now->Create( parent, pos, size, style , extraStyle, name ); return now; } +