]> git.saurik.com Git - wxWidgets.git/commitdiff
Added a notification observer for NSWindow. Observe the become key and
authorDavid Elliott <dfe@tgwbd.org>
Tue, 26 Aug 2003 19:28:35 +0000 (19:28 +0000)
committerDavid Elliott <dfe@tgwbd.org>
Tue, 26 Aug 2003 19:28:35 +0000 (19:28 +0000)
resign key notifications. (window activation in wxWindows parlance)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@23241 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/cocoa/NSWindow.h
src/cocoa/NSWindow.mm

index 04da760edc8e25e21bc882a3b8c0683ca4d7efa0..29748141c9cc6b68b137ba4ae04aca155f439c06 100644 (file)
@@ -23,14 +23,14 @@ class wxCocoaNSWindow
     WX_DECLARE_OBJC_INTERFACE_HASHMAP(NSWindow)
 public:
     void AssociateNSWindow(WX_NSWindow cocoaNSWindow);
-    inline void DisassociateNSWindow(WX_NSWindow cocoaNSWindow)
-    {
-        if(cocoaNSWindow)
-            sm_cocoaHash.erase(cocoaNSWindow);
-    }
+    void DisassociateNSWindow(WX_NSWindow cocoaNSWindow);
     virtual void Cocoa_close(void) = 0;
     virtual bool Cocoa_windowShouldClose(void) = 0;
     virtual void Cocoa_wxMenuItemAction(wxMenuItem& item) = 0;
+    virtual void CocoaNotification_DidBecomeKey(void) { }
+    virtual void CocoaNotification_DidResignKey(void) { }
+protected:
+    static void *sm_cocoaObserver;
 };
 
 #endif // _WX_COCOA_NSWINDOW_H_
index d230b1a09322037f82e0d26a6466a0b5e96c6f5d..15b3eb583e762e285bad0cfe124f3a679677f779 100644 (file)
 #include "wx/cocoa/NSWindow.h"
 
 #import <Appkit/NSWindow.h>
+#import <Foundation/NSNotification.h>
+#import <Foundation/NSString.h>
+
+// ============================================================================
+// @class wxNSWindowNotificationObserver
+// ============================================================================
+@interface wxNSWindowNotificationObserver : NSObject
+{
+}
+
+- (void)notificationDidBecomeKey: (NSNotification *)notification;
+- (void)notificationDidResignKey: (NSNotification *)notification;
+@end //interface wxNSWindowNotificationObserver
+
+@implementation wxNSWindowNotificationObserver : NSObject
+
+- (void)notificationDidBecomeKey: (NSNotification *)notification
+{
+    wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
+    wxCHECK_RET(win,"notificationDidBecomeKey received but no wxWindow exists");
+    win->CocoaNotification_DidBecomeKey();
+}
+
+- (void)notificationDidResignKey: (NSNotification *)notification
+{
+    wxCocoaNSWindow *win = wxCocoaNSWindow::GetFromCocoa([notification object]);
+    wxCHECK_RET(win,"notificationDidResignKey received but no wxWindow exists");
+    win->CocoaNotification_DidResignKey();
+}
+
+@end //implementation wxNSWindowNotificationObserver
+
+// ============================================================================
+// class wxCocoaNSWindow
+// ============================================================================
 
-// ----------------------------------------------------------------------------
-// globals
-// ----------------------------------------------------------------------------
 WX_IMPLEMENT_OBJC_INTERFACE_HASHMAP(NSWindow)
 
+void *wxCocoaNSWindow::sm_cocoaObserver = [[wxNSWindowNotificationObserver alloc] init];
+
 void wxCocoaNSWindow::AssociateNSWindow(WX_NSWindow cocoaNSWindow)
 {
     if(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];
+    }
+}
+
+void wxCocoaNSWindow::DisassociateNSWindow(WX_NSWindow cocoaNSWindow)
+{
+    if(cocoaNSWindow)
+    {
+        [[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:@"NSWindowDidBecomeKeyNotification" object:cocoaNSWindow];
+        [[NSNotificationCenter defaultCenter] removeObserver:(id)sm_cocoaObserver name:@"NSWindowDidResignKeyNotification" object:cocoaNSWindow];
+        sm_cocoaHash.erase(cocoaNSWindow);
     }
 }