Mercurial > cpython-lru_cache-weakref
annotate Lib/tkinter/_fix.py @ 51749:1408feec0084 3.0
Merged revisions 69798 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
r69798 | benjamin.peterson | 2009-02-19 22:02:38 -0600 (Thu, 19 Feb 2009) | 13 lines
Merged revisions 69769,69776 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r69769 | georg.brandl | 2009-02-19 02:30:06 -0600 (Thu, 19 Feb 2009) | 1 line
#5310, #3558: fix operator precedence table.
........
r69776 | georg.brandl | 2009-02-19 10:34:51 -0600 (Thu, 19 Feb 2009) | 2 lines
#5317: update IronPython URL.
........
................
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Fri, 20 Feb 2009 04:05:32 +0000 |
| parents | 59d5e70f3494 |
| children | f214e1bf031d |
| rev | line source |
|---|---|
|
22038
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
1 import sys, os |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
2 |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
3 # Delay import _tkinter until we have set TCL_LIBRARY, |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
4 # so that Tcl_FindExecutable has a chance to locate its |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
5 # encoding directory. |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
6 |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
7 # Unfortunately, we cannot know the TCL_LIBRARY directory |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
8 # if we don't know the tcl version, which we cannot find out |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
9 # without import Tcl. Fortunately, Tcl will itself look in |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
10 # <TCL_LIBRARY>\..\tcl<TCL_VERSION>, so anything close to |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
11 # the real Tcl library will do. |
|
20387
f908b063f28b
Suggestion from SF patch #470433 to avoid clobbering TCL_LIBRARY et
Guido van Rossum <guido@python.org>
parents:
15324
diff
changeset
|
12 |
|
51015
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
13 # Expand symbolic links on Vista |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
14 try: |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
15 import ctypes |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
16 ctypes.windll.kernel32.GetFinalPathNameByHandleW |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
17 except (ImportError, AttributeError): |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
18 def convert_path(s): |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
19 return s |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
20 else: |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
21 def convert_path(s): |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
22 if isinstance(s, bytes): |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
23 s = s.decode("mbcs") |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
24 hdir = ctypes.windll.kernel32.\ |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
25 CreateFileW(s, 0x80, # FILE_READ_ATTRIBUTES |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
26 1, # FILE_SHARE_READ |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
27 None, 3, # OPEN_EXISTING |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
28 0x02000000, # FILE_FLAG_BACKUP_SEMANTICS |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
29 None) |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
30 if hdir == -1: |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
31 # Cannot open directory, give up |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
32 return s |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
33 buf = ctypes.create_unicode_buffer("", 32768) |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
34 res = ctypes.windll.kernel32.\ |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
35 GetFinalPathNameByHandleW(hdir, buf, len(buf), |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
36 0) # VOLUME_NAME_DOS |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
37 ctypes.windll.kernel32.CloseHandle(hdir) |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
38 if res == 0: |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
39 # Conversion failed (e.g. network location) |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
40 return s |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
41 s = buf[:res] |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
42 # Ignore leading \\?\ |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
43 if s.startswith("\\\\?\\"): |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
44 s = s[4:] |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
45 return s |
|
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
46 |
|
22038
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
47 prefix = os.path.join(sys.prefix,"tcl") |
|
44349
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
39592
diff
changeset
|
48 if not os.path.exists(prefix): |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
39592
diff
changeset
|
49 # devdir/../tcltk/lib |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
39592
diff
changeset
|
50 prefix = os.path.join(sys.prefix, os.path.pardir, "tcltk", "lib") |
|
4dc01402d78a
Merged revisions 59541-59561 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
39592
diff
changeset
|
51 prefix = os.path.abspath(prefix) |
|
22038
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
52 # if this does not exist, no further search is needed |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
53 if os.path.exists(prefix): |
|
51015
59d5e70f3494
Merged revisions 68898 via svnmerge from
Martin v. Löwis <martin@v.loewis.de>
parents:
47129
diff
changeset
|
54 prefix = convert_path(prefix) |
|
39592
0f135affabf2
Couple more has_keys() going...
Guido van Rossum <guido@python.org>
parents:
26135
diff
changeset
|
55 if "TCL_LIBRARY" not in os.environ: |
|
22038
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
56 for name in os.listdir(prefix): |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
57 if name.startswith("tcl"): |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
58 tcldir = os.path.join(prefix,name) |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
59 if os.path.isdir(tcldir): |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
60 os.environ["TCL_LIBRARY"] = tcldir |
|
26135
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
61 # Compute TK_LIBRARY, knowing that it has the same version |
|
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
62 # as Tcl |
|
22038
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
63 import _tkinter |
|
e6d44cf29dbf
backport loewis' checkin of
Michael W. Hudson <mwh@python.net>
parents:
20387
diff
changeset
|
64 ver = str(_tkinter.TCL_VERSION) |
|
39592
0f135affabf2
Couple more has_keys() going...
Guido van Rossum <guido@python.org>
parents:
26135
diff
changeset
|
65 if "TK_LIBRARY" not in os.environ: |
|
26135
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
66 v = os.path.join(prefix, 'tk'+ver) |
|
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
67 if os.path.exists(os.path.join(v, "tclIndex")): |
|
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
68 os.environ['TK_LIBRARY'] = v |
|
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
69 # We don't know the Tix version, so we must search the entire |
|
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
70 # directory |
|
39592
0f135affabf2
Couple more has_keys() going...
Guido van Rossum <guido@python.org>
parents:
26135
diff
changeset
|
71 if "TIX_LIBRARY" not in os.environ: |
|
26135
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
72 for name in os.listdir(prefix): |
|
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
73 if name.startswith("tix"): |
|
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
74 tixdir = os.path.join(prefix,name) |
|
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
75 if os.path.isdir(tixdir): |
|
f4278af8eefa
Search for tix subdirectories. Fixes #564729. Will backport to 2.2.
Martin v. Löwis <martin@v.loewis.de>
parents:
22038
diff
changeset
|
76 os.environ["TIX_LIBRARY"] = tixdir |
