diff options
Diffstat (limited to 'tk8.6/macosx/tkMacOSXEvent.c')
-rw-r--r-- | tk8.6/macosx/tkMacOSXEvent.c | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/tk8.6/macosx/tkMacOSXEvent.c b/tk8.6/macosx/tkMacOSXEvent.c new file mode 100644 index 0000000..798c73c --- /dev/null +++ b/tk8.6/macosx/tkMacOSXEvent.c @@ -0,0 +1,159 @@ +/* + * tkMacOSXEvent.c -- + * + * This file contains the basic Mac OS X Event handling routines. + * + * Copyright (c) 1995-1997 Sun Microsystems, Inc. + * Copyright 2001-2009, Apple Inc. + * Copyright (c) 2005-2009 Daniel A. Steffen <das@users.sourceforge.net> + * + * See the file "license.terms" for information on usage and redistribution + * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + */ + +#include "tkMacOSXPrivate.h" +#include "tkMacOSXEvent.h" +#include "tkMacOSXDebug.h" +#include "tkMacOSXConstants.h" + +#pragma mark TKApplication(TKEvent) + +enum { + NSWindowWillMoveEventType = 20 +}; + +@implementation TKApplication(TKEvent) +/* TODO: replace by +[addLocalMonitorForEventsMatchingMask ? */ +- (NSEvent *) tkProcessEvent: (NSEvent *) theEvent +{ +#ifdef TK_MAC_DEBUG_EVENTS + TKLog(@"-[%@(%p) %s] %@", [self class], self, _cmd, theEvent); +#endif + NSEvent *processedEvent = theEvent; + NSEventType type = [theEvent type]; + NSInteger subtype; + + switch ((NSInteger)type) { + case NSAppKitDefined: + subtype = [theEvent subtype]; + + switch (subtype) { + /* Ignored at the moment. */ + case NSApplicationActivatedEventType: + break; + case NSApplicationDeactivatedEventType: + break; + case NSWindowExposedEventType: + break; + case NSScreenChangedEventType: + break; + case NSWindowMovedEventType: + break; + case NSWindowWillMoveEventType: + break; + + default: + break; + } + break; /* AppkitEvent. Return theEvent */ + case NSKeyUp: + case NSKeyDown: + case NSFlagsChanged: + processedEvent = [self tkProcessKeyEvent:theEvent]; + break; /* Key event. Return the processed event. */ + case NSLeftMouseDown: + case NSLeftMouseUp: + case NSRightMouseDown: + case NSRightMouseUp: + case NSLeftMouseDragged: + case NSRightMouseDragged: + case NSMouseMoved: + case NSMouseEntered: + case NSMouseExited: + case NSScrollWheel: + case NSOtherMouseDown: + case NSOtherMouseUp: + case NSOtherMouseDragged: + case NSTabletPoint: + case NSTabletProximity: + processedEvent = [self tkProcessMouseEvent:theEvent]; + break; /* Mouse event. Return the processed event. */ +#if 0 + case NSSystemDefined: + subtype = [theEvent subtype]; + break; + case NSApplicationDefined: { + id win; + win = [theEvent window]; + break; + } + case NSCursorUpdate: + break; + case NSEventTypeGesture: + case NSEventTypeMagnify: + case NSEventTypeRotate: + case NSEventTypeSwipe: + case NSEventTypeBeginGesture: + case NSEventTypeEndGesture: + break; +#endif + + default: + break; /* return theEvent */ + } + return processedEvent; +} +@end + +#pragma mark - + +/* + *---------------------------------------------------------------------- + * + * TkMacOSXFlushWindows -- + * + * This routine is a stub called by XSync, which is called during the Tk + * update command. The language specification does not require that the + * update command be synchronous but many of the tests assume that is the + * case. It is not naturally the case on macOS since many idle tasks are + * run inside of the drawRect method of a window's contentView, and that + * method will not be called until after this function returns. To make + * the tests work, we attempt to force this to be synchronous by waiting + * until drawRect has been called for each window. The mechanism we use + * for this is to have drawRect post an ApplicationDefined NSEvent on the + * AppKit event queue when it finishes drawing, and wait for it here. + * + * Results: + * None. + * + * Side effects: + * Calls the drawRect method of the contentView of each visible + * window. + * + *---------------------------------------------------------------------- + */ + +MODULE_SCOPE void +TkMacOSXFlushWindows(void) +{ + NSArray *macWindows = [NSApp orderedWindows]; + if ([NSApp simulateDrawing]) { + [NSApp setSimulateDrawing:NO]; + return; + } + for (NSWindow *w in macWindows) { + if (TkMacOSXGetXWindow(w)) { + [w displayIfNeeded]; + } + } +} + + +/* + * Local Variables: + * mode: objc + * c-basic-offset: 4 + * fill-column: 79 + * coding: utf-8 + * End: + */ |