diff options
-rwxr-xr-x | ChangeLog | 16 | ||||
-rw-r--r-- | generic/tkStubInit.c | 50 | ||||
-rw-r--r-- | generic/tkWindow.c | 106 |
3 files changed, 99 insertions, 73 deletions
@@ -1,3 +1,19 @@ +2012-04-26 Donal K. Fellows <dkf@users.sf.net> + + * generic/tkStubInit.c (Tk_GetHINSTANCE): Ensure that this is defined + for OSX. + +2012-04-26 Jan Nijtmans <nijtmans@users.sf.net> + + * generic/tk.decls: [Bug 3508771]: Implement TkClipBox, Tk*Region and + * generic/tkInt.decls: Tk_GetHINSTANCE for Cygwin + * generic/tkPlatDecls.h: + * generic/tkintDecls.h: + * generic/tkStubInit.c: + * unix/tcl.m4: For Cygwin, install tk84.dll in <prefix>/bin, not <prefix>/lib + * unix/configure: + * unix/Makefile.in: + 2012-04-22 Donal K. Fellows <dkf@users.sf.net> * generic/tkBind.c (ExpandPercents): [Bug 3520202]: Ensure that the diff --git a/generic/tkStubInit.c b/generic/tkStubInit.c index 89ae433..6b36f7b 100644 --- a/generic/tkStubInit.c +++ b/generic/tkStubInit.c @@ -48,20 +48,24 @@ #undef TkSetRegion #undef TkUnionRectWithRegion #undef TkSubtractRegion - -TkIntStubs tkIntStubs; +#undef TkPutImage #ifndef __WIN32__ -/* Make sure that extensions which call XParseColor through - * the stub table, call TkParseColor in stead. See bug #3486474 */ -# define XParseColor TkParseColor +/* + * Make sure that extensions which call XParseColor through the stub + * table, call TkParseColor instead. [Bug 3486474] + */ +# define XParseColor TkParseColor +# ifndef __CYGWIN__ +# define Tk_AttachHWND 0 +# define Tk_GetHWND 0 +# define Tk_HWNDToWindow 0 +# define Tk_PointerEvent 0 +# define Tk_TranslateWinEvent 0 +# define Tk_GetHINSTANCE 0 +# endif # if !defined(MAC_TCL) && !defined(MAC_OSX_TCL) -# define Tk_AttachHWND 0 -# define Tk_GetHWND 0 -# define Tk_HWNDToWindow 0 -# define Tk_PointerEvent 0 -# define Tk_TranslateWinEvent 0 # define TkClipBox (void (*) _ANSI_ARGS_((TkRegion, XRectangle *))) XClipBox # define TkCreateRegion (TkRegion (*) ()) XCreateRegion # define TkDestroyRegion (void (*) _ANSI_ARGS_((TkRegion))) XDestroyRegion @@ -71,26 +75,32 @@ TkIntStubs tkIntStubs; # define TkUnionRectWithRegion (void (*) _ANSI_ARGS_((XRectangle *, TkRegion, TkRegion))) XUnionRectWithRegion # define TkSubtractRegion (void (*) _ANSI_ARGS_((TkRegion, TkRegion, TkRegion))) XSubtractRegion -#ifdef __CYGWIN__ -/* Trick, so we don't have to include <windows.h> here, which - * - b.t.w. - lacks this function anyway */ -#define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x00000004 +# ifdef __CYGWIN__ +# define Tk_GetHINSTANCE TkPlatGetHINSTANCE +# define GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS 0x00000004 + +/* + * Trick, so we don't have to include <windows.h> here, which in any + * case lacks this function anyway. + */ + int __stdcall GetModuleHandleExW(unsigned int, const char *, void *); -#define Tk_GetHINSTANCE TkPlatGetHINSTANCE +TkIntStubs tkIntStubs; + static void *Tk_GetHINSTANCE() { void *hInstance = NULL; + GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, - (const char *)&tkIntStubs, &hInstance); + (const char *) &tkIntStubs, &hInstance); return hInstance; } -#else -# define Tk_GetHINSTANCE 0 -#endif +# else /* !__CYGWIN__ */ +# define TkPutImage 0 +# endif /* __CYGWIN__ */ # endif /* !MAC_TCL && !MACC_OSX_TCL */ - #endif /* !__WIN32__ */ /* diff --git a/generic/tkWindow.c b/generic/tkWindow.c index a04777f..98b89db 100644 --- a/generic/tkWindow.c +++ b/generic/tkWindow.c @@ -101,12 +101,12 @@ static CONST XSetWindowAttributes defAtts= { #define ISSAFE 1 #define PASSMAINWINDOW 2 -#define WINMACONLY 4 +#define NOOBJPROC 4 +#define WINMACONLY 8 typedef struct { CONST char *name; /* Name of command. */ - Tcl_CmdProc *cmdProc; /* Command's string-based procedure. */ - Tcl_ObjCmdProc *objProc; /* Command's object-based procedure. */ + Tcl_ObjCmdProc *objProc; /* Command's object- (or string-) based procedure. */ int flags; } TkCmd; @@ -115,59 +115,59 @@ static CONST TkCmd commands[] = { * Commands that are part of the intrinsics: */ - {"bell", NULL, Tk_BellObjCmd, PASSMAINWINDOW}, - {"bind", NULL, Tk_BindObjCmd, PASSMAINWINDOW|ISSAFE}, - {"bindtags", NULL, Tk_BindtagsObjCmd, PASSMAINWINDOW|ISSAFE}, - {"clipboard", NULL, Tk_ClipboardObjCmd, PASSMAINWINDOW}, - {"destroy", NULL, Tk_DestroyObjCmd, PASSMAINWINDOW|ISSAFE}, - {"event", NULL, Tk_EventObjCmd, PASSMAINWINDOW|ISSAFE}, - {"focus", NULL, Tk_FocusObjCmd, PASSMAINWINDOW|ISSAFE}, - {"font", NULL, Tk_FontObjCmd, PASSMAINWINDOW|ISSAFE}, - {"grab", NULL, Tk_GrabObjCmd, PASSMAINWINDOW}, - {"grid", NULL, Tk_GridObjCmd, PASSMAINWINDOW|ISSAFE}, - {"image", NULL, Tk_ImageObjCmd, PASSMAINWINDOW|ISSAFE}, - {"lower", NULL, Tk_LowerObjCmd, PASSMAINWINDOW|ISSAFE}, - {"option", NULL, Tk_OptionObjCmd, PASSMAINWINDOW|ISSAFE}, - {"pack", NULL, Tk_PackObjCmd, PASSMAINWINDOW|ISSAFE}, - {"place", NULL, Tk_PlaceObjCmd, ISSAFE}, - {"raise", NULL, Tk_RaiseObjCmd, PASSMAINWINDOW|ISSAFE}, - {"selection", NULL, Tk_SelectionObjCmd, PASSMAINWINDOW}, - {"tk", NULL, Tk_TkObjCmd, PASSMAINWINDOW|ISSAFE}, - {"tkwait", NULL, Tk_TkwaitObjCmd, PASSMAINWINDOW|ISSAFE}, + {"bell", Tk_BellObjCmd, PASSMAINWINDOW}, + {"bind", Tk_BindObjCmd, PASSMAINWINDOW|ISSAFE}, + {"bindtags", Tk_BindtagsObjCmd, PASSMAINWINDOW|ISSAFE}, + {"clipboard", Tk_ClipboardObjCmd, PASSMAINWINDOW}, + {"destroy", Tk_DestroyObjCmd, PASSMAINWINDOW|ISSAFE}, + {"event", Tk_EventObjCmd, PASSMAINWINDOW|ISSAFE}, + {"focus", Tk_FocusObjCmd, PASSMAINWINDOW|ISSAFE}, + {"font", Tk_FontObjCmd, PASSMAINWINDOW|ISSAFE}, + {"grab", Tk_GrabObjCmd, PASSMAINWINDOW}, + {"grid", Tk_GridObjCmd, PASSMAINWINDOW|ISSAFE}, + {"image", Tk_ImageObjCmd, PASSMAINWINDOW|ISSAFE}, + {"lower", Tk_LowerObjCmd, PASSMAINWINDOW|ISSAFE}, + {"option", Tk_OptionObjCmd, PASSMAINWINDOW|ISSAFE}, + {"pack", Tk_PackObjCmd, PASSMAINWINDOW|ISSAFE}, + {"place", Tk_PlaceObjCmd, ISSAFE}, + {"raise", Tk_RaiseObjCmd, PASSMAINWINDOW|ISSAFE}, + {"selection", Tk_SelectionObjCmd, PASSMAINWINDOW}, + {"tk", Tk_TkObjCmd, PASSMAINWINDOW|ISSAFE}, + {"tkwait", Tk_TkwaitObjCmd, PASSMAINWINDOW|ISSAFE}, #if defined(__WIN32__) || defined(MAC_TCL) || defined(MAC_OSX_TK) - {"tk_chooseColor", NULL, Tk_ChooseColorObjCmd, PASSMAINWINDOW}, - {"tk_chooseDirectory", NULL, Tk_ChooseDirectoryObjCmd, WINMACONLY|PASSMAINWINDOW}, - {"tk_getOpenFile", NULL, Tk_GetOpenFileObjCmd, WINMACONLY|PASSMAINWINDOW}, - {"tk_getSaveFile", NULL, Tk_GetSaveFileObjCmd, WINMACONLY|PASSMAINWINDOW}, + {"tk_chooseColor", Tk_ChooseColorObjCmd, PASSMAINWINDOW}, + {"tk_chooseDirectory", Tk_ChooseDirectoryObjCmd, WINMACONLY|PASSMAINWINDOW}, + {"tk_getOpenFile", Tk_GetOpenFileObjCmd, WINMACONLY|PASSMAINWINDOW}, + {"tk_getSaveFile", Tk_GetSaveFileObjCmd, WINMACONLY|PASSMAINWINDOW}, #endif #if defined(__WIN32__) || defined(MAC_OSX_TK) - {"tk_messageBox", NULL, Tk_MessageBoxObjCmd, PASSMAINWINDOW}, + {"tk_messageBox", Tk_MessageBoxObjCmd, PASSMAINWINDOW}, #endif - {"update", NULL, Tk_UpdateObjCmd, PASSMAINWINDOW|ISSAFE}, - {"winfo", NULL, Tk_WinfoObjCmd, PASSMAINWINDOW|ISSAFE}, - {"wm", NULL, Tk_WmObjCmd, PASSMAINWINDOW}, + {"update", Tk_UpdateObjCmd, PASSMAINWINDOW|ISSAFE}, + {"winfo", Tk_WinfoObjCmd, PASSMAINWINDOW|ISSAFE}, + {"wm", Tk_WmObjCmd, PASSMAINWINDOW}, /* * Widget class commands. */ - {"button", NULL, Tk_ButtonObjCmd, ISSAFE}, - {"canvas", NULL, Tk_CanvasObjCmd, PASSMAINWINDOW|ISSAFE}, - {"checkbutton", NULL, Tk_CheckbuttonObjCmd, ISSAFE}, - {"entry", NULL, Tk_EntryObjCmd, ISSAFE}, - {"frame", NULL, Tk_FrameObjCmd, ISSAFE}, - {"label", NULL, Tk_LabelObjCmd, ISSAFE}, - {"labelframe", NULL, Tk_LabelframeObjCmd, ISSAFE}, - {"listbox", NULL, Tk_ListboxObjCmd, ISSAFE}, - {"menubutton", NULL, Tk_MenubuttonObjCmd, ISSAFE}, - {"message", NULL, Tk_MessageObjCmd, ISSAFE}, - {"panedwindow", NULL, Tk_PanedWindowObjCmd, ISSAFE}, - {"radiobutton", NULL, Tk_RadiobuttonObjCmd, ISSAFE}, - {"scale", NULL, Tk_ScaleObjCmd, ISSAFE}, - {"scrollbar", Tk_ScrollbarCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"spinbox", NULL, Tk_SpinboxObjCmd, ISSAFE}, - {"text", Tk_TextCmd, NULL, PASSMAINWINDOW|ISSAFE}, - {"toplevel", NULL, Tk_ToplevelObjCmd, 0}, + {"button", Tk_ButtonObjCmd, ISSAFE}, + {"canvas", Tk_CanvasObjCmd, PASSMAINWINDOW|ISSAFE}, + {"checkbutton", Tk_CheckbuttonObjCmd, ISSAFE}, + {"entry", Tk_EntryObjCmd, ISSAFE}, + {"frame", Tk_FrameObjCmd, ISSAFE}, + {"label", Tk_LabelObjCmd, ISSAFE}, + {"labelframe", Tk_LabelframeObjCmd, ISSAFE}, + {"listbox", Tk_ListboxObjCmd, ISSAFE}, + {"menubutton", Tk_MenubuttonObjCmd, ISSAFE}, + {"message", Tk_MessageObjCmd, ISSAFE}, + {"panedwindow", Tk_PanedWindowObjCmd, ISSAFE}, + {"radiobutton", Tk_RadiobuttonObjCmd, ISSAFE}, + {"scale", Tk_ScaleObjCmd, ISSAFE}, + {"scrollbar", (Tcl_ObjCmdProc *) Tk_ScrollbarCmd, NOOBJPROC|PASSMAINWINDOW|ISSAFE}, + {"spinbox", Tk_SpinboxObjCmd, ISSAFE}, + {"text", (Tcl_ObjCmdProc *) Tk_TextCmd, NOOBJPROC|PASSMAINWINDOW|ISSAFE}, + {"toplevel", Tk_ToplevelObjCmd, 0}, /* * Misc. @@ -175,9 +175,9 @@ static CONST TkCmd commands[] = { #if defined(MAC_TCL) || defined(MAC_OSX_TK) {"::tk::unsupported::MacWindowStyle", - NULL, TkUnsupported1ObjCmd, PASSMAINWINDOW|ISSAFE}, + TkUnsupported1ObjCmd, PASSMAINWINDOW|ISSAFE}, #endif - {(char *) NULL, (int (*) _ANSI_ARGS_((ClientData, Tcl_Interp *, int, CONST char **))) NULL, NULL, 0} + {NULL, NULL, 0} }; /* @@ -950,7 +950,7 @@ TkCreateMainWindow(interp, screenName, baseName) isSafe = Tcl_IsSafe(interp); for (cmdPtr = commands; cmdPtr->name != NULL; cmdPtr++) { - if ((cmdPtr->cmdProc == NULL) && (cmdPtr->objProc == NULL)) { + if (cmdPtr->objProc == NULL) { Tcl_Panic("TkCreateMainWindow: builtin command with NULL string and object procs"); } #ifdef __WIN32__ @@ -963,9 +963,9 @@ TkCreateMainWindow(interp, screenName, baseName) } else { clientData = (ClientData) NULL; } - if (cmdPtr->cmdProc != NULL) { - Tcl_CreateCommand(interp, cmdPtr->name, cmdPtr->cmdProc, - clientData, (void (*) _ANSI_ARGS_((ClientData))) NULL); + if (cmdPtr->flags & NOOBJPROC) { + Tcl_CreateCommand(interp, cmdPtr->name, + (Tcl_CmdProc *) cmdPtr->objProc, clientData, NULL); } else { Tcl_CreateObjCommand(interp, cmdPtr->name, cmdPtr->objProc, clientData, NULL); |