changeset 894:d1d7e5c51860

Added a DWWindow subclass to trap key events on the main window for Mac.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 18 Apr 2011 00:13:17 +0000
parents 39ab47d103c3
children 8c29ea2d17fc
files mac/dw.m
diffstat 1 files changed, 23 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/mac/dw.m	Sun Apr 17 06:22:08 2011 +0000
+++ b/mac/dw.m	Mon Apr 18 00:13:17 2011 +0000
@@ -111,7 +111,8 @@
 SignalHandler *_get_handler(HWND window, int messageid)
 {
     SignalHandler *tmp = Root;
-
+    id object = window;
+    
     /* Find any callbacks for this function */
     while(tmp)
     {
@@ -178,7 +179,7 @@
                 int (*sizefunc)(HWND, int, int, void *) = handler->signalfunction;
                 NSSize size;
 
-                if([object isMemberOfClass:[NSWindow class]])
+                if([object isKindOfClass:[NSWindow class]])
                 {
                     NSWindow *window = object;
                     size = [[window contentView] frame].size;
@@ -538,7 +539,7 @@
 -(void)rightMouseUp:(NSEvent *)theEvent { _event_handler(self, (void *)2, 4); }
 -(void)otherMouseDown:(NSEvent *)theEvent { _event_handler(self, (void *)3, 3); }
 -(void)otherMouseUp:(NSEvent *)theEvent { _event_handler(self, (void *)3, 4); }
--(void)keyDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 2); _event_handler([self window], theEvent, 2); }
+-(void)keyDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 2); }
 -(void)setColor:(unsigned long)input
 {
     id orig = bgcolor;
@@ -575,6 +576,14 @@
 -(void)setUserdata:(void *)input { userdata = input; }
 @end
 
+@interface DWWindow : NSWindow
+-(void)keyDown:(NSEvent *)theEvent;
+@end
+
+@implementation DWWindow
+-(void)keyDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 2); }
+@end
+
 /* Subclass for a top-level window */
 @interface DWView : DWBox
 #ifdef BUILDING_FOR_SNOW_LEOPARD
@@ -587,7 +596,6 @@
 -(void)setMenu:(NSMenu *)input;
 -(void)windowDidBecomeMain:(id)sender;
 -(void)menuHandler:(id)sender;
--(void)keyDown:(NSEvent *)theEvent;
 -(void)mouseMoved:(NSEvent *)theEvent;
 @end
 
@@ -632,7 +640,6 @@
 }
 -(void)setMenu:(NSMenu *)input { windowmenu = input; [windowmenu retain]; }
 -(void)menuHandler:(id)sender { _event_handler(sender, nil, 8); }
--(void)keyDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 2); _event_handler([self window], theEvent, 2); }
 -(void)mouseMoved:(NSEvent *)theEvent { _event_handler(self, theEvent, 5); }
 @end
 
@@ -1100,7 +1107,7 @@
 -(void)otherMouseDown:(NSEvent *)theEvent { _event_handler(self, (void *)3, 3); }
 -(void)otherMouseUp:(NSEvent *)theEvent { _event_handler(self, (void *)3, 4); }
 -(void)drawRect:(NSRect)rect { _event_handler(self, nil, 7); }
--(void)keyDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 2); _event_handler([self window], theEvent, 2); }
+-(void)keyDown:(NSEvent *)theEvent { _event_handler(self, theEvent, 2); }
 -(BOOL)isFlipped { return NO; }
 -(void)dealloc { UserData *root = userdata; _remove_userdata(&root, NULL, TRUE); [font release]; [super dealloc]; }
 @end
@@ -6426,7 +6433,7 @@
     int _locked_by_me = FALSE;
     DW_MUTEX_LOCK;
     NSRect frame = NSMakeRect(1,1,1,1);
-    NSWindow *window = [[NSWindow alloc]
+    DWWindow *window = [[DWWindow alloc]
                         initWithContentRect:frame
                         styleMask:(flStyle | NSTexturedBackgroundWindowMask)
                         backing:NSBackingStoreBuffered
@@ -6649,9 +6656,9 @@
 {
     id object = handle;
 
-    if(DWOSMinor > 5 && [object isMemberOfClass:[NSWindow class]])
-    {
-        NSWindow *window = object;
+    if(DWOSMinor > 5 && [object isMemberOfClass:[DWWindow class]])
+    {
+        DWWindow *window = object;
         int currentstyle = (int)[window styleMask];
         int tmp;
 
@@ -6704,7 +6711,7 @@
  */
 void API dw_window_default(HWND handle, HWND defaultitem)
 {
-    NSWindow *window = handle;
+    DWWindow *window = handle;
     id object = defaultitem;
     
     if([window isKindOfClass:[NSWindow class]] && [object isKindOfClass:[NSControl class]])
@@ -6724,7 +6731,7 @@
     id object = handle;
     id control = next;
     
-    if([object isMemberOfClass:[NSWindow class]])
+    if([object isMemberOfClass:[DWWindow class]])
     {
         if([control isMemberOfClass:[DWButton class]])
         {
@@ -6761,7 +6768,7 @@
 {
     id object = handle;
 
-    if(![object isMemberOfClass:[NSWindow class]])
+    if(![object isMemberOfClass:[DWWindow class]])
     {
         object = [object window];
     }
@@ -6794,7 +6801,7 @@
 {
     id object = handle;
 
-    if([object isMemberOfClass:[NSWindow class]])
+    if([object isMemberOfClass:[DWWindow class]])
     {
         /* We can't actually reparent on MacOS but if the
          * new parent is an MDI window, change to be a
@@ -7420,7 +7427,7 @@
 void dw_window_set_data(HWND window, char *dataname, void *data)
 {
     id object = window;
-    if([object isMemberOfClass:[NSWindow class]])
+    if([object isMemberOfClass:[DWWindow class]])
     {
         NSWindow *win = window;
         object = [win contentView];
@@ -7462,7 +7469,7 @@
 void *dw_window_get_data(HWND window, char *dataname)
 {
     id object = window;
-    if([object isMemberOfClass:[NSWindow class]])
+    if([object isMemberOfClass:[DWWindow class]])
     {
         NSWindow *win = window;
         object = [win contentView];