diff options
author | dgp <dgp@users.sourceforge.net> | 2015-01-02 20:50:55 (GMT) |
---|---|---|
committer | dgp <dgp@users.sourceforge.net> | 2015-01-02 20:50:55 (GMT) |
commit | 29879491172358d63759c151d2c20e9d94784fc1 (patch) | |
tree | 1b4e75fb2e1a4679e9fdbc7981100611810b1ba6 /macosx/tkMacOSXEmbed.c | |
parent | 77c2f634aa711e41edc8560900d6c038903a027c (diff) | |
parent | 2f75423051e6eda811bcdfeadd4b5397d12baae2 (diff) | |
download | tk-29879491172358d63759c151d2c20e9d94784fc1.zip tk-29879491172358d63759c151d2c20e9d94784fc1.tar.gz tk-29879491172358d63759c151d2c20e9d94784fc1.tar.bz2 |
Merge 8.5. Fix [winfo id] for Cocoa.
Diffstat (limited to 'macosx/tkMacOSXEmbed.c')
-rw-r--r-- | macosx/tkMacOSXEmbed.c | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/macosx/tkMacOSXEmbed.c b/macosx/tkMacOSXEmbed.c index 1d66b82..5cd1e41 100644 --- a/macosx/tkMacOSXEmbed.c +++ b/macosx/tkMacOSXEmbed.c @@ -174,6 +174,50 @@ TkpMakeWindow( /* *---------------------------------------------------------------------- * + * TkpScanWindowId -- + * + * Given a string, produce the corresponding Window Id. + * + * Results: + * The return value is normally TCL_OK; in this case *idPtr will be set + * to the Window value equivalent to string. If string is improperly + * formed then TCL_ERROR is returned and an error message will be left in + * the interp's result. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + +int +TkpScanWindowId( + Tcl_Interp *interp, + CONST char * string, + Window *idPtr) +{ + int code; + Tcl_Obj obj; + + obj.refCount = 1; + obj.bytes = string; + obj.length = strlen(string); + obj.typePtr = NULL; + + code = Tcl_GetLongFromObj(interp, &obj, (long *)idPtr); + + if (obj.refCount > 1) { + Tcl_Panic("invalid sharing of Tcl_Obj on C stack"); + } + if (obj.typePtr && obj.typePtr->freeIntRepProc) { + obj.typePtr->freeIntRepProc(&obj); + } + return code; +} + +/* + *---------------------------------------------------------------------- + * * TkpUseWindow -- * * This procedure causes a Tk window to use a given X window as its @@ -215,7 +259,7 @@ TkpUseWindow( } /* - * Decode the container pointer, and look for it among the list of + * Decode the container window ID, and look for it among the list of * available containers. * * N.B. For now, we are limiting the containers to be in the same Tk @@ -223,7 +267,7 @@ TkpUseWindow( * containers. */ - if (Tcl_GetInt(interp, string, (int*) &parent) != TCL_OK) { + if (TkpScanWindowId(interp, string, (Window *)&parent) != TCL_OK) { return TCL_ERROR; } |