From ae8760d2c2d951d18039a14e617220ad642b4764 Mon Sep 17 00:00:00 2001 From: "jan.nijtmans" Date: Sun, 8 Jul 2012 04:29:12 +0000 Subject: [Bug 3541305]: Xfree/Xsync... should not be macros --- ChangeLog | 5 +++++ generic/tkIntXlibDecls.h | 31 ++++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index c74f093..82e10b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2012-07-08 Jan Nijtmans + + * generic/tkIntXlibDecls.h: [Bug 3541305]: Xfree/Xsync... + should not be macros + 2012-07-05 Donal K. Fellows * doc/wm.n (geometry): [Bug 3538401]: Better description of the key diff --git a/generic/tkIntXlibDecls.h b/generic/tkIntXlibDecls.h index f5753c5..fb2738f 100644 --- a/generic/tkIntXlibDecls.h +++ b/generic/tkIntXlibDecls.h @@ -2506,6 +2506,33 @@ extern TkIntXlibStubs *tkIntXlibStubsPtr; #undef XSync #undef XVisualIDFromVisual +#if defined(USE_TK_STUBS) && !defined(USE_TK_STUB_PROCS) +/* + * The following stubs implement various calls that don't do anything + * under Windows. In win32 tclsh 8.4 and 8.5 holds: + * tkIntStubsPtr->tkBindDeadWindow != NULL + * Then the following macros don't do anything. But when running Tcl win32 + * version 8.6 or Cygwin (8.4, 8.5 or 8.6) then the functions are available in + * the stub table. The real function from the stub table will be called, + * even though it might be doing nothing. + */ + +#define XFlush(display) (tkIntStubsPtr->tkBindDeadWindow? 0: tkIntXlibStubsPtr->xFlush(display)) +#define XGrabServer(display) (tkIntStubsPtr->tkBindDeadWindow? 0: tkIntXlibStubsPtr->xGrabServer(display)) +#define XUngrabServer(display) (tkIntStubsPtr->tkBindDeadWindow? 0: tkIntXlibStubsPtr->xUngrabServer(display)) + +/* + * The following functions are implemented as macros under Windows. + */ + + +#define XFree(data) (tkIntStubsPtr->tkBindDeadWindow? ((data)? (ckfree((char *) (data)), 0): 0): tkIntXlibStubsPtr->xFree(data)) +#define XNoOp(display) (tkIntStubsPtr->tkBindDeadWindow? 0: tkIntXlibStubsPtr->xNoOp(display)) +#define XSynchronize(display, bool) (tkIntStubsPtr->tkBindDeadWindow? 0: tkIntXlibStubsPtr->xSynchronize(display, bool)) +#define XSync(display, bool) (tkIntStubsPtr->tkBindDeadWindow? 0: tkIntXlibStubsPtr->xSync(display, bool)) +#define XVisualIDFromVisual(visual) (tkIntStubsPtr->tkBindDeadWindow? ((visual)->visualid): tkIntXlibStubsPtr->xVisualIDFromVisual(visual)) + +#else /* !USE_TK_STUBS */ /* * The following stubs implement various calls that don't do anything * under Windows. @@ -2525,6 +2552,8 @@ extern TkIntXlibStubs *tkIntXlibStubsPtr; #define XSync(display, bool) {display->request++;} #define XVisualIDFromVisual(visual) (visual->visualid) -#endif +#endif /* !USE_TK_STUBS */ + +#endif /* __WIN32__ */ #endif /* _TKINTXLIBDECLS */ -- cgit v0.12