#import <Foundation/NSString.h>
// ============================================================================
-// @class wxNSWindowNotificationObserver
+// @class wxNSWindowDelegate
// ============================================================================
-@interface wxNSWindowNotificationObserver : NSObject
+@interface wxNSWindowDelegate : NSObject
{
}
-- (void)notificationDidBecomeKey: (NSNotification *)notification;
-- (void)notificationDidResignKey: (NSNotification *)notification;
-@end //interface wxNSWindowNotificationObserver
+- (void)windowDidBecomeKey: (NSNotification *)notification;
+- (void)windowDidResignKey: (NSNotification *)notification;
+- (void)windowDidBecomeMain: (NSNotification *)notification;
+- (void)windowDidResignMain: (NSNotification *)notification;
+- (BOOL)windowShouldClose: (id)sender;
+- (void)windowWillClose: (NSNotification *)notification;
+@end //interface wxNSWindowDelegate
-@implementation wxNSWindowNotificationObserver : NSObject
+@implementation wxNSWindowDelegate : NSObject
-- (void)notificationDidBecomeKey: (NSNotification *)notification
+- (void)windowDidBecomeKey: (NSNotification *)notification
{
wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
wxCHECK_RET(win,"notificationDidBecomeKey received but no wxWindow exists");
- win->CocoaNotification_DidBecomeKey();
+ win->CocoaDelegate_windowDidBecomeKey();
}
-- (void)notificationDidResignKey: (NSNotification *)notification
+- (void)windowDidResignKey: (NSNotification *)notification
{
wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
wxCHECK_RET(win,"notificationDidResignKey received but no wxWindow exists");
- win->CocoaNotification_DidResignKey();
+ win->CocoaDelegate_windowDidResignKey();
+}
+
+- (void)windowDidBecomeMain: (NSNotification *)notification
+{
+ wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
+ wxCHECK_RET(win,"notificationDidBecomeMain received but no wxWindow exists");
+ win->CocoaDelegate_windowDidBecomeMain();
+}
+
+- (void)windowDidResignMain: (NSNotification *)notification
+{
+ wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
+ wxCHECK_RET(win,"notificationDidResignMain received but no wxWindow exists");
+ win->CocoaDelegate_windowDidResignMain();
+}
+
+- (BOOL)windowShouldClose: (id)sender
+{
+ wxLogDebug("windowShouldClose");
+ wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(sender);
+ if(tlw && !tlw->CocoaDelegate_windowShouldClose())
+ {
+ wxLogDebug("Window will not be closed");
+ return NO;
+ }
+ wxLogDebug("Window will be closed");
+ return YES;
+}
+
+- (void)windowWillClose: (NSNotification *)notification
+{
+ wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
+ wxCHECK_RET(win,"windowWillClose received but no wxWindow exists");
+ win->CocoaDelegate_windowWillClose();
}
-@end //implementation wxNSWindowNotificationObserver
+@end //implementation wxNSWindowDelegate
// ============================================================================
// class wxCocoaNSWindow
WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSWindow)
-void *wxCocoaNSWindow::sm_cocoaObserver = [[wxNSWindowNotificationObserver alloc] init];
+struct objc_object *wxCocoaNSWindow::sm_cocoaDelegate = [[wxNSWindowDelegate alloc] init];
void wxCocoaNSWindow::AssociateNSWindow(WX_NSWindow cocoaNSWindow)
{
{
[cocoaNSWindow setReleasedWhenClosed: NO];
sm_cocoaHash.insert(wxCocoaNSWindowHash::value_type(cocoaNSWindow,this));
- [[NSNotificationCenter defaultCenter] addObserver:(id)sm_cocoaObserver selector:@selector(notificationDidBecomeKey:) name:@"NSWindowDidBecomeKeyNotification" object:cocoaNSWindow];
- [[NSNotificationCenter defaultCenter] addObserver:(id)sm_cocoaObserver selector:@selector(notificationDidResignKey:) name:@"NSWindowDidResignKeyNotification" object:cocoaNSWindow];
+ [cocoaNSWindow setDelegate: sm_cocoaDelegate];
}
}
{
if(cocoaNSWindow)
{
- [[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:@"NSWindowDidBecomeKeyNotification" object:cocoaNSWindow];
- [[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:@"NSWindowDidResignKeyNotification" object:cocoaNSWindow];
+ [cocoaNSWindow setDelegate: nil];
sm_cocoaHash.erase(cocoaNSWindow);
}
}
+wxMenuBar* wxCocoaNSWindow::GetAppMenuBar(wxCocoaNSWindow *win)
+{
+ return NULL;
+}
+
// ============================================================================
// @class wxPoserNSWindow
// ============================================================================
{
}
-- (void)close;
-- (BOOL)windowShouldClose: (id)sender;
-
-- (BOOL)wxMenuItemAction: (id)sender;
+- (BOOL)canBecomeMainWindow;
@end // wxPoserNSwindow
WX_IMPLEMENT_POSER(wxPoserNSWindow);
@implementation wxPoserNSWindow : NSWindow
-- (void)close
+- (BOOL)canBecomeMainWindow
{
- wxLogDebug("close");
+ bool canBecome = false;
wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
- if(tlw)
- tlw->Cocoa_close();
- [super close];
+ if(!tlw || !tlw->Cocoa_canBecomeMainWindow(canBecome))
+ canBecome = [super canBecomeMainWindow];
+ return canBecome;
}
-- (BOOL)windowShouldClose: (id)sender
-{
- wxLogDebug("windowShouldClose");
- wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(sender);
- if(tlw && !tlw->Cocoa_windowShouldClose())
- return NO;
- wxLogDebug("Window will most likely be CLOSED");
- if([[wxPoserNSWindow superclass] instancesRespondToSelector:@selector(windowShouldClose:)])
- return [super windowShouldClose: sender];
- return YES;
-}
-
-- (BOOL)wxMenuItemAction: (id)sender
-{
- wxLogDebug("wxMenuItemAction");
- wxMenuItem *item = wxMenuItem::GetFromCocoa(sender);
- if(!item)
- return NO;
-
- wxCocoaNSWindow *tlw = wxCocoaNSWindow::GetFromCocoa(self);
- wxASSERT(tlw);
- tlw->Cocoa_wxMenuItemAction(*item);
- return YES;
-}
@end // implementation wxPoserNSWindow