Tk Source Code

View Ticket
Login
Bounty program for improvements to Tcl and certain Tcl packages.
Ticket UUID: 5ee8af61e5ef8e233158a43459624f4ecf58a6fe
Title: Window embedding can not work on 64-bit Unix and Windows
Type: Bug Version:
Submitter: storchaka Created on: 2015-11-09 13:46:26
Subsystem: 68. Win Window Operations Assigned To: jan.nijtmans
Priority: 5 Medium Severity: Minor
Status: Closed Last Modified: 2016-08-22 08:25:48
Resolution: Fixed Closed By: dkf
    Closed on: 2016-08-22 08:25:48
Description:
There is an issue with parsing 64-bit window id. If the window id happens to be above 4GiB or even 2GiB limit, the "toplevel -use" and "winfo pathname" commands will not work.

On all 64-bit platforms the "winfo id" command returns 64-bit integer formatted as a hexadecimal string, the -use option of the toplevel widget uses Tcl_GetInt to parse it and therefore works only with 32-bit integers.

There is the similar issue with the "winfo pathname" command. On Unix it always uses Tcl_GetInt, on 64-bit Windows it tries to parse the string with sscanf(string, "0x%p", &win.hwnd), but this doesn't work with decimal and octal strings that the winfo pathname command should accept, and perhaps doesn't work on Cygwin at all (because %p already includes 0x). See also bug #2026405 (http://core.tcl.tk/tk/tktview?name=2026405).

May be this bug is related to random failures of Python buildbots on 64-bit Windows (http://bugs.python.org/issue25263).
User Comments: storchaka added on 2015-11-10 15:24:05:
Thank you for quick fix.

But I have doubt. Is the Window type always has the same size as long on Unix? In /usr/include/X11/X.h on my machine it is defined 32-bit on 64-bit platform.

typedef CARD32 XID;
typedef XID Window;

But in xlib/X11/X.h in Tk sources tree it's definition is different:

typedef unsigned long XID;
typedef XID Window;

One minor issue is left. "winfo pathname" doesn't work with decimal and octal 64-bit integers on Windows. May be use Tcl_GetWideIntFromObj?

jan.nijtmans added on 2015-11-10 13:59:01:
Fixed on Win64 as well, in both core-8-5-branch and trunk

jan.nijtmans added on 2015-11-09 15:46:00:
Should be fixed now for Unix in both core-8-5-branch and trunk.

I will have a look at the Windows part as well. Stay tuned.