summaryrefslogtreecommitdiffstats
path: root/macosx/tkMacOSXEvent.c
diff options
context:
space:
mode:
Diffstat (limited to 'macosx/tkMacOSXEvent.c')
-rw-r--r--macosx/tkMacOSXEvent.c38
1 files changed, 11 insertions, 27 deletions
diff --git a/macosx/tkMacOSXEvent.c b/macosx/tkMacOSXEvent.c
index d866b02..b9c9b6a 100644
--- a/macosx/tkMacOSXEvent.c
+++ b/macosx/tkMacOSXEvent.c
@@ -114,21 +114,16 @@ enum {
*
* 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.
+ * update command be synchronous but many of the tests implicitly assume
+ * that it is. It is definitely asynchronous on macOS since many idle
+ * tasks are run inside of the drawRect method of a window's contentView,
+ * which will not be called until after this function returns.
*
* Results:
* None.
*
- * Side effects:
- * Calls the drawRect method of the contentView of each visible
- * window.
+ * Side effects: Processes all pending idle events then calls the display
+ * method of each visible window.
*
*----------------------------------------------------------------------
*/
@@ -136,23 +131,12 @@ enum {
MODULE_SCOPE void
TkMacOSXFlushWindows(void)
{
- NSArray *macWindows = [NSApp orderedWindows];
-
- if ([macWindows count] > 0) {
- while (Tcl_DoOneEvent(TCL_IDLE_EVENTS)){}
+ if (Tk_GetNumMainWindows() == 0) {
+ return;
}
- if ([NSApp isDrawing]) {
- for (NSWindow *w in macWindows) {
- if (TkMacOSXGetXWindow(w)) {
- [w setViewsNeedDisplay:YES];
- }
- }
- } else {
- for (NSWindow *w in macWindows) {
- if (TkMacOSXGetXWindow(w)) {
- [w display];
- }
- }
+ while (Tcl_DoOneEvent(TCL_IDLE_EVENTS)){}
+ for (NSWindow *w in [NSApp orderedWindows]) {
+ [w display];
}
}