summaryrefslogtreecommitdiffstats
path: root/tk8.6/macosx/tkMacOSXEvent.c
diff options
context:
space:
mode:
Diffstat (limited to 'tk8.6/macosx/tkMacOSXEvent.c')
-rw-r--r--tk8.6/macosx/tkMacOSXEvent.c159
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:
+ */