tkinterdnd2 0.4.4.1__tar.gz → 0.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. {tkinterdnd2-0.4.4.1/tkinterdnd2.egg-info → tkinterdnd2-0.6.0}/PKG-INFO +63 -14
  2. tkinterdnd2-0.6.0/README.md +112 -0
  3. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/setup.py +10 -3
  4. tkinterdnd2-0.6.0/tests/test_tkinterdnd2.py +89 -0
  5. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/tkinterdnd2/TkinterDnD.py +24 -1
  6. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64/libtkdnd2.10.0.so +0 -0
  7. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64}/pkgIndex.tcl +4 -4
  8. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64}/tkdnd_unix.tcl +2 -2
  9. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9/libtcl9tkdnd2.10.0.so +0 -0
  10. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9}/pkgIndex.tcl +4 -4
  11. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9}/tkdnd_unix.tcl +2 -2
  12. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64/libtkdnd2.10.0.so +0 -0
  13. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64}/pkgIndex.tcl +4 -4
  14. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x86 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64}/tkdnd_unix.tcl +2 -2
  15. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9/libtcl9tkdnd2.10.0.so +0 -0
  16. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9/pkgIndex.tcl +62 -0
  17. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9}/tkdnd_unix.tcl +2 -2
  18. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-arm64/libtcl9tkdnd2.9.5.dylib → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64/libtcl9tkdnd2.10.0.dylib +0 -0
  19. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64/pkgIndex.tcl +62 -0
  20. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64/tkdnd.tcl +554 -0
  21. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64/tkdnd_unix.tcl +883 -0
  22. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64/tkdnd_windows.tcl +167 -0
  23. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-x64/tkdnd_generic.tcl +587 -0
  24. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-x64/tkdnd_macosx.tcl +144 -0
  25. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/libtkdnd2.10.0.dll +0 -0
  26. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/pkgIndex.tcl +62 -0
  27. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd.tcl +554 -0
  28. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd2.10.0.lib +0 -0
  29. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd_compat.tcl +160 -0
  30. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd_generic.tcl +587 -0
  31. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd_macosx.tcl +144 -0
  32. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd_unix.tcl +883 -0
  33. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd_utils.tcl +256 -0
  34. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd_windows.tcl +167 -0
  35. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/libtkdnd2.10.0.dll +0 -0
  36. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/pkgIndex.tcl +62 -0
  37. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd.tcl +554 -0
  38. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd2.10.0.lib +0 -0
  39. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd_compat.tcl +160 -0
  40. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd_generic.tcl +587 -0
  41. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd_macosx.tcl +144 -0
  42. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd_unix.tcl +883 -0
  43. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd_utils.tcl +256 -0
  44. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd_windows.tcl +167 -0
  45. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/libtkdnd2.10.0.dll +0 -0
  46. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/pkgIndex.tcl +62 -0
  47. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd.tcl +554 -0
  48. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd2.10.0.lib +0 -0
  49. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_compat.tcl +160 -0
  50. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_generic.tcl +587 -0
  51. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_macosx.tcl +144 -0
  52. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_unix.tcl +883 -0
  53. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_utils.tcl +256 -0
  54. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_windows.tcl +167 -0
  55. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/libtkdnd2.10.0.dll +0 -0
  56. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/pkgIndex.tcl +62 -0
  57. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd.tcl +554 -0
  58. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd2.10.0.lib +0 -0
  59. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd_compat.tcl +160 -0
  60. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd_generic.tcl +587 -0
  61. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd_macosx.tcl +144 -0
  62. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd_unix.tcl +883 -0
  63. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd_utils.tcl +256 -0
  64. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd_windows.tcl +167 -0
  65. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/libtkdnd2.10.0.dll +0 -0
  66. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/pkgIndex.tcl +62 -0
  67. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd.tcl +554 -0
  68. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd2.10.0.lib +0 -0
  69. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_compat.tcl +160 -0
  70. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_generic.tcl +587 -0
  71. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_macosx.tcl +144 -0
  72. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_unix.tcl +883 -0
  73. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_utils.tcl +256 -0
  74. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_windows.tcl +167 -0
  75. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0/tkinterdnd2.egg-info}/PKG-INFO +63 -14
  76. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/tkinterdnd2.egg-info/SOURCES.txt +48 -10
  77. tkinterdnd2-0.4.4.1/README.md +0 -63
  78. tkinterdnd2-0.4.4.1/tests/test_tkinterdnd2.py +0 -14
  79. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-arm64/libtkdnd2.9.3.so +0 -0
  80. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-arm64/tkdnd.tcl +0 -539
  81. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-arm64/tkdnd_generic.tcl +0 -587
  82. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-arm64/tkdnd_macosx.tcl +0 -144
  83. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-x64/libtkdnd2.9.5.so +0 -0
  84. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-x64/tkdnd_unix.tcl +0 -883
  85. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-x64/tkdnd_windows.tcl +0 -167
  86. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-arm64/libtkdnd2.9.3.dll +0 -0
  87. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-arm64/pkgIndex.tcl +0 -62
  88. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-arm64/tkdnd.tcl +0 -539
  89. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-arm64/tkdnd2.9.3.lib +0 -0
  90. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-arm64/tkdnd_generic.tcl +0 -587
  91. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-arm64/tkdnd_macosx.tcl +0 -144
  92. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-arm64/tkdnd_unix.tcl +0 -883
  93. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-arm64/tkdnd_windows.tcl +0 -167
  94. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x64/libtkdnd2.9.5.dll +0 -0
  95. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x64/pkgIndex.tcl +0 -62
  96. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x64/tkdnd2.9.5.lib +0 -0
  97. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x86/libtkdnd2.9.5.dll +0 -0
  98. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x86/pkgIndex.tcl +0 -62
  99. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x86/tkdnd2.9.5.lib +0 -0
  100. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x86/tkdnd_compat.tcl +0 -160
  101. tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x86/tkdnd_utils.tcl +0 -256
  102. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/LICENSE +0 -0
  103. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/setup.cfg +0 -0
  104. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/tkinterdnd2/__init__.py +0 -0
  105. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64}/tkdnd.tcl +0 -0
  106. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64}/tkdnd_compat.tcl +0 -0
  107. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64}/tkdnd_generic.tcl +0 -0
  108. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64}/tkdnd_macosx.tcl +0 -0
  109. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64}/tkdnd_utils.tcl +0 -0
  110. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64}/tkdnd_windows.tcl +0 -0
  111. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9}/tkdnd.tcl +0 -0
  112. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9}/tkdnd_compat.tcl +0 -0
  113. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9}/tkdnd_generic.tcl +0 -0
  114. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9}/tkdnd_macosx.tcl +0 -0
  115. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9}/tkdnd_utils.tcl +0 -0
  116. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9}/tkdnd_windows.tcl +0 -0
  117. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x86 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64}/tkdnd.tcl +0 -0
  118. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64}/tkdnd_compat.tcl +0 -0
  119. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64}/tkdnd_generic.tcl +0 -0
  120. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64}/tkdnd_macosx.tcl +0 -0
  121. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64}/tkdnd_utils.tcl +0 -0
  122. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x86 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64}/tkdnd_windows.tcl +0 -0
  123. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9}/tkdnd.tcl +0 -0
  124. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9}/tkdnd_compat.tcl +0 -0
  125. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9}/tkdnd_generic.tcl +0 -0
  126. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9}/tkdnd_macosx.tcl +0 -0
  127. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9}/tkdnd_utils.tcl +0 -0
  128. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9}/tkdnd_windows.tcl +0 -0
  129. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64}/tkdnd_compat.tcl +0 -0
  130. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x86 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64}/tkdnd_generic.tcl +0 -0
  131. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x86 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64}/tkdnd_macosx.tcl +0 -0
  132. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64}/tkdnd_utils.tcl +0 -0
  133. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/tkinterdnd2/tkdnd/osx-x64/libtkdnd2.9.4.dylib +0 -0
  134. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/tkinterdnd2/tkdnd/osx-x64/pkgIndex.tcl +0 -0
  135. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/tkinterdnd2/tkdnd/osx-x64/tkdnd.tcl +0 -0
  136. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-x64}/tkdnd_compat.tcl +0 -0
  137. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-x64}/tkdnd_unix.tcl +0 -0
  138. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/win-x64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-x64}/tkdnd_utils.tcl +0 -0
  139. {tkinterdnd2-0.4.4.1/tkinterdnd2/tkdnd/linux-arm64 → tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-x64}/tkdnd_windows.tcl +0 -0
  140. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/tkinterdnd2.egg-info/dependency_links.txt +0 -0
  141. {tkinterdnd2-0.4.4.1 → tkinterdnd2-0.6.0}/tkinterdnd2.egg-info/top_level.txt +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tkinterdnd2
3
- Version: 0.4.4.1
3
+ Version: 0.6.0
4
4
  Summary: TkinterDnD2 is a python wrapper for George Petasis'' tkDnD Tk extension version 2
5
5
  Home-page: https://github.com/Eliav2/tkinterdnd2
6
- Author: petasis\pmgagne\eliav2
6
+ Author: petasis\pmgagne\eliav2\squiblydoo
7
7
  Classifier: Development Status :: 2 - Pre-Alpha
8
8
  Classifier: Programming Language :: Python :: 3
9
9
  Classifier: License :: OSI Approved :: MIT License
@@ -25,7 +25,15 @@ Dynamic: summary
25
25
 
26
26
  This repo was originally forked and edited for the purpose of publishing to pypi so one could simply install this package with `pip install tkinterdnd2`.
27
27
 
28
- This repository is being maintained to ensure availability of `tkinterdnd2` into the future.
28
+ This repository is being maintained to ensure availability of `tkinterdnd2` into the future, providing Tkinter native drag and drop support for windows, unix and Mac OSX.
29
+
30
+
31
+ ### What is TkDnD
32
+
33
+ [tkDnD2](https://github.com/petasis/tkdnd) is a tcl/Tk extension adding native drag and drop support.
34
+
35
+ This repository contains the compiled binaries from https://github.com/petasis/tkdnd/releases/tag/tkdnd-release-test-v2.9.5 and my own compiled binaries for full Tcl 9 support: https://github.com/Squiblydoo/tkdnd.
36
+
29
37
 
30
38
  ## Install
31
39
 
@@ -55,27 +63,68 @@ root.mainloop()
55
63
 
56
64
  see any of the [demos](./demos) for usage examples.
57
65
 
58
- # tkinterdnd2
66
+ ## Framework Integration
59
67
 
60
- Tkinter native drag and drop support for windows, unix and Mac OSX.
68
+ If you are using a GUI framework that manages its own Tk root window (such as PySimpleGUI or CustomTkinter), you cannot use `TkinterDnD.Tk()` as the root. Instead, call `TkinterDnD.require()` on the framework's existing root after it has been created. This loads tkdnd into the shared Tcl interpreter, making drag-and-drop available to all widgets in the process.
61
69
 
62
- ## What is TkinterDnD2
70
+ The following are some simple examples:
63
71
 
64
- [TkinterDnD2](http://tkinterdnd.sourceforge.net) is a python wrapper for George Petasis' tkDnD Tk extension version 2.
72
+ ### PySimpleGUI
65
73
 
66
- It is a domain public project.
74
+ ```python
75
+ import PySimpleGUI as sg
76
+ from tkinterdnd2 import TkinterDnD, DND_FILES
67
77
 
68
- ## What is TkDnD2
78
+ def on_drop(event):
79
+ window["-FILE-"].update(event.data)
69
80
 
70
- [tkDnD2](https://github.com/petasis/tkdnd) is a tcl/Tk extension adding native drag and drop support.
81
+ layout = [
82
+ [sg.Text("Drag & Drop a File Here")],
83
+ [sg.Input("", key="-FILE-")],
84
+ [sg.Button("OK"), sg.Button("Cancel")],
85
+ ]
86
+
87
+ window = sg.Window("File Drop", layout, finalize=True)
88
+
89
+ # Inject DnD into PySimpleGUI's own root — no dummy window needed
90
+ TkinterDnD.require(window.TKroot)
71
91
 
72
- ## What this repository is about
92
+ # Register any widget as a drop target
93
+ window["-FILE-"].widget.drop_target_register(DND_FILES)
94
+ window["-FILE-"].widget.dnd_bind("<<Drop>>", on_drop)
73
95
 
74
- This repo package TkinterDnD2 and tkdnd2 into a standard python module.
96
+ while True:
97
+ event, values = window.read()
98
+ if event in (sg.WIN_CLOSED, "Cancel"):
99
+ break
75
100
 
76
- When the extension is imported in python its location will be automatically added to the Tk search path.
101
+ window.close()
102
+ ```
103
+
104
+ ### CustomTkinter
105
+
106
+ ```python
107
+ import customtkinter as ctk
108
+ from tkinterdnd2 import TkinterDnD, DND_FILES
109
+
110
+ def on_drop(event):
111
+ entry.delete(0, "end")
112
+ entry.insert(0, event.data)
77
113
 
78
- This repository contains the compiled binaries from https://github.com/petasis/tkdnd/releases/tag/tkdnd-release-test-v2.9.4. In order to provide support on ARM, we include built binaries from the now defunct [tkinterdnd2-universal](https://pypi.org/project/tkinterdnd2-universal/#files) which added ARM support.
114
+ app = ctk.CTk()
115
+ app.title("File Drop")
116
+
117
+ # Inject DnD into CustomTkinter's root
118
+ TkinterDnD.require(app)
119
+
120
+ entry = ctk.CTkEntry(app, width=400, placeholder_text="Drag a file here...")
121
+ entry.pack(padx=20, pady=20)
122
+
123
+ entry.drop_target_register(DND_FILES)
124
+ entry.dnd_bind("<<Drop>>", on_drop)
125
+
126
+ app.mainloop()
127
+ ```
79
128
 
80
129
  ## pyinstaller
81
130
 
@@ -0,0 +1,112 @@
1
+ ## TkinterDnD2
2
+
3
+ [Eliav2/tkinterdnd2](https://github.com/Eliav2/tkinterdnd2) is a fork of the (unmaintained) [pmgagne/tkinterdnd2](https://github.com/pmgagne/tkinterdnd2) which is a python wrapper for [tkdnd](https://github.com/petasis/tkdnd) .
4
+
5
+ This repo was originally forked and edited for the purpose of publishing to pypi so one could simply install this package with `pip install tkinterdnd2`.
6
+
7
+ This repository is being maintained to ensure availability of `tkinterdnd2` into the future, providing Tkinter native drag and drop support for windows, unix and Mac OSX.
8
+
9
+
10
+ ### What is TkDnD
11
+
12
+ [tkDnD2](https://github.com/petasis/tkdnd) is a tcl/Tk extension adding native drag and drop support.
13
+
14
+ This repository contains the compiled binaries from https://github.com/petasis/tkdnd/releases/tag/tkdnd-release-test-v2.9.5 and my own compiled binaries for full Tcl 9 support: https://github.com/Squiblydoo/tkdnd.
15
+
16
+
17
+ ## Install
18
+
19
+ `python -m pip install tkinterdnd2`
20
+
21
+ ## Usage
22
+
23
+ ```python
24
+ import tkinter as tk
25
+
26
+ from tkinterdnd2 import DND_FILES, TkinterDnD
27
+
28
+ root = TkinterDnD.Tk() # notice - use this instead of tk.Tk()
29
+
30
+ lb = tk.Listbox(root)
31
+ lb.insert(1, "drag files to here")
32
+
33
+ # register the listbox as a drop target
34
+ lb.drop_target_register(DND_FILES)
35
+ lb.dnd_bind('<<Drop>>', lambda e: lb.insert(tk.END, e.data))
36
+
37
+ lb.pack()
38
+ root.mainloop()
39
+ ```
40
+ ![tkinterdnd2 example usage](https://i.stack.imgur.com/jnOWd.png)
41
+
42
+
43
+ see any of the [demos](./demos) for usage examples.
44
+
45
+ ## Framework Integration
46
+
47
+ If you are using a GUI framework that manages its own Tk root window (such as PySimpleGUI or CustomTkinter), you cannot use `TkinterDnD.Tk()` as the root. Instead, call `TkinterDnD.require()` on the framework's existing root after it has been created. This loads tkdnd into the shared Tcl interpreter, making drag-and-drop available to all widgets in the process.
48
+
49
+ The following are some simple examples:
50
+
51
+ ### PySimpleGUI
52
+
53
+ ```python
54
+ import PySimpleGUI as sg
55
+ from tkinterdnd2 import TkinterDnD, DND_FILES
56
+
57
+ def on_drop(event):
58
+ window["-FILE-"].update(event.data)
59
+
60
+ layout = [
61
+ [sg.Text("Drag & Drop a File Here")],
62
+ [sg.Input("", key="-FILE-")],
63
+ [sg.Button("OK"), sg.Button("Cancel")],
64
+ ]
65
+
66
+ window = sg.Window("File Drop", layout, finalize=True)
67
+
68
+ # Inject DnD into PySimpleGUI's own root — no dummy window needed
69
+ TkinterDnD.require(window.TKroot)
70
+
71
+ # Register any widget as a drop target
72
+ window["-FILE-"].widget.drop_target_register(DND_FILES)
73
+ window["-FILE-"].widget.dnd_bind("<<Drop>>", on_drop)
74
+
75
+ while True:
76
+ event, values = window.read()
77
+ if event in (sg.WIN_CLOSED, "Cancel"):
78
+ break
79
+
80
+ window.close()
81
+ ```
82
+
83
+ ### CustomTkinter
84
+
85
+ ```python
86
+ import customtkinter as ctk
87
+ from tkinterdnd2 import TkinterDnD, DND_FILES
88
+
89
+ def on_drop(event):
90
+ entry.delete(0, "end")
91
+ entry.insert(0, event.data)
92
+
93
+ app = ctk.CTk()
94
+ app.title("File Drop")
95
+
96
+ # Inject DnD into CustomTkinter's root
97
+ TkinterDnD.require(app)
98
+
99
+ entry = ctk.CTkEntry(app, width=400, placeholder_text="Drag a file here...")
100
+ entry.pack(padx=20, pady=20)
101
+
102
+ entry.drop_target_register(DND_FILES)
103
+ entry.dnd_bind("<<Drop>>", on_drop)
104
+
105
+ app.mainloop()
106
+ ```
107
+
108
+ ## pyinstaller
109
+
110
+ When using `pyinstaller`, you should use the hook-tkinterdnd2.py file included to collect the TkDnD binaries and build them into the project. To use it, copy it into the base directory of your project, then run pyinstaller as follows:
111
+
112
+ pyinstaller -F -w myproject/myproject.py --additional-hooks-dir=.
@@ -5,8 +5,8 @@ with open("README.md", "r") as fh:
5
5
 
6
6
  setuptools.setup(
7
7
  name="tkinterdnd2",
8
- version="0.4.4.1",
9
- author="petasis\\pmgagne\\eliav2",
8
+ version="0.6.0",
9
+ author="petasis\\pmgagne\\eliav2\\squiblydoo",
10
10
  description="TkinterDnD2 is a python wrapper for George Petasis'' tkDnD Tk extension version 2",
11
11
  long_description=long_description,
12
12
  long_description_content_type="text/markdown",
@@ -15,7 +15,14 @@ setuptools.setup(
15
15
  include_package_data=True,
16
16
  package_data={
17
17
  # Include tkdnd extension files.
18
- "tkinterdnd2": ["tkdnd/linux-x64/*.*", "tkdnd/linux-arm64/*.*", "tkdnd/osx-x64/*.*", "tkdnd/osx-arm64/*.*", "tkdnd/win-x64/*.*", "tkdnd/win-x86/*.*", "tkdnd/win-arm64/*.*"],
18
+ "tkinterdnd2": [
19
+ "tkdnd/linux-x64/*.*", "tkdnd/linux-x64-tcl9/*.*",
20
+ "tkdnd/linux-arm64/*.*", "tkdnd/linux-arm64-tcl9/*.*",
21
+ "tkdnd/osx-x64/*.*", "tkdnd/osx-arm64/*.*",
22
+ "tkdnd/win-x64/*.*", "tkdnd/win-x64-tcl9/*.*",
23
+ "tkdnd/win-x86/*.*", "tkdnd/win-x86-tcl9/*.*",
24
+ "tkdnd/win-arm64/*.*",
25
+ ],
19
26
  },
20
27
  classifiers=[
21
28
  "Development Status :: 2 - Pre-Alpha",
@@ -0,0 +1,89 @@
1
+ import os
2
+ import platform
3
+ import unittest
4
+ import tkinterdnd2
5
+
6
+
7
+ class TestTkinterDnD2(unittest.TestCase):
8
+
9
+ @classmethod
10
+ def setUpClass(cls):
11
+ cls.root = tkinterdnd2.Tk()
12
+ cls.root.withdraw()
13
+
14
+ cls.tcl_version_str = cls.root.tk.call('info', 'tclversion')
15
+ cls.tcl_major = int(cls.tcl_version_str.split('.')[0])
16
+
17
+ system = platform.system()
18
+ if system == "Windows":
19
+ machine = os.environ.get('PROCESSOR_ARCHITECTURE', platform.machine())
20
+ else:
21
+ machine = platform.machine()
22
+
23
+ platform_map = {
24
+ ("Darwin", "arm64"): "osx-arm64",
25
+ ("Darwin", "x86_64"): "osx-x64",
26
+ ("Linux", "aarch64"): "linux-arm64",
27
+ ("Linux", "x86_64"): "linux-x64",
28
+ ("Windows", "ARM64"): "win-arm64",
29
+ ("Windows", "AMD64"): "win-x64",
30
+ ("Windows", "x86"): "win-x86",
31
+ }
32
+ cls.base_dir = platform_map.get((system, machine), "unknown")
33
+ cls.tkdnd_root = os.path.join(os.path.dirname(tkinterdnd2.__file__), 'tkdnd')
34
+ tcl9_path = os.path.join(cls.tkdnd_root, cls.base_dir + '-tcl9')
35
+ cls.chosen_dir = (
36
+ cls.base_dir + '-tcl9'
37
+ if cls.tcl_major >= 9 and os.path.isdir(tcl9_path)
38
+ else cls.base_dir
39
+ )
40
+
41
+ print(
42
+ f"\nPlatform: {system}/{machine} "
43
+ f"Tcl: {cls.tcl_version_str} "
44
+ f"dir: {cls.chosen_dir} "
45
+ f"tkdnd: {tkinterdnd2.TkinterDnD.TkdndVersion}"
46
+ )
47
+
48
+ @classmethod
49
+ def tearDownClass(cls):
50
+ cls.root.destroy()
51
+
52
+ def test_version_is_set(self):
53
+ """Binary loaded and TkdndVersion is populated."""
54
+ self.assertIsNotNone(tkinterdnd2.TkinterDnD.TkdndVersion)
55
+
56
+ def test_expected_version(self):
57
+ """Loaded tkdnd version matches what is shipped for this platform."""
58
+ # osx-x64 still ships the old 2.9.4 binary; all others are 2.10.0
59
+ if self.base_dir == 'osx-x64':
60
+ self.assertEqual(tkinterdnd2.TkinterDnD.TkdndVersion, '2.9.4')
61
+ else:
62
+ self.assertEqual(tkinterdnd2.TkinterDnD.TkdndVersion, '2.10.0')
63
+
64
+ def test_binary_directory_exists(self):
65
+ """The directory that was selected exists inside the installed package."""
66
+ path = os.path.join(self.tkdnd_root, self.chosen_dir)
67
+ self.assertTrue(os.path.isdir(path), f"tkdnd directory not found: {path}")
68
+
69
+ def test_tcl9_routing(self):
70
+ """When Tcl 9 is active and a -tcl9 directory is present, it must be chosen."""
71
+ tcl9_dir = os.path.join(self.tkdnd_root, self.base_dir + '-tcl9')
72
+ if self.tcl_major >= 9 and os.path.isdir(tcl9_dir):
73
+ self.assertTrue(
74
+ self.chosen_dir.endswith('-tcl9'),
75
+ f"Tcl {self.tcl_major} active but -tcl9 directory not chosen; got '{self.chosen_dir}'"
76
+ )
77
+
78
+ def test_tcl8_fallback(self):
79
+ """When Tcl 8 is active (or no -tcl9 directory exists), base directory must be chosen."""
80
+ tcl9_dir = os.path.join(self.tkdnd_root, self.base_dir + '-tcl9')
81
+ if self.tcl_major < 9 or not os.path.isdir(tcl9_dir):
82
+ self.assertFalse(
83
+ self.chosen_dir.endswith('-tcl9'),
84
+ f"Expected base directory but got '{self.chosen_dir}'"
85
+ )
86
+
87
+
88
+ if __name__ == '__main__':
89
+ unittest.main()
@@ -64,7 +64,12 @@ def _require(tkroot):
64
64
  else:
65
65
  raise RuntimeError('Plaform not supported.')
66
66
 
67
- module_path = os.path.join(os.path.dirname(__file__), 'tkdnd', tkdnd_platform_rep)
67
+ tcl_major = int(tkroot.tk.call('info', 'tclversion').split('.')[0])
68
+ if tcl_major >= 9:
69
+ tcl9_path = os.path.join(os.path.dirname(__file__), 'tkdnd', tkdnd_platform_rep + '-tcl9')
70
+ module_path = tcl9_path if os.path.isdir(tcl9_path) else os.path.join(os.path.dirname(__file__), 'tkdnd', tkdnd_platform_rep)
71
+ else:
72
+ module_path = os.path.join(os.path.dirname(__file__), 'tkdnd', tkdnd_platform_rep)
68
73
  tkroot.tk.call('lappend', 'auto_path', module_path)
69
74
  TkdndVersion = tkroot.tk.call('package', 'require', 'tkdnd')
70
75
  except tkinter.TclError:
@@ -293,6 +298,24 @@ class DnDWrapper:
293
298
  #### themselves and all their descendant widgets: ####
294
299
  #######################################################################
295
300
 
301
+ def require(tkroot):
302
+ """Enable tkdnd drag-and-drop on an existing Tk root.
303
+
304
+ Use this when your application uses a GUI framework (e.g. PySimpleGUI,
305
+ CustomTkinter) that manages its own Tk root and you cannot use
306
+ TkinterDnD.Tk() as the root window.
307
+
308
+ Call this after the framework has created and finalised its window::
309
+
310
+ window = sg.Window('Title', layout, finalize=True)
311
+ TkinterDnD.require(window.TKroot)
312
+
313
+ After this call, any widget in the process can be registered as a
314
+ drop target via widget.drop_target_register() and widget.dnd_bind().
315
+ """
316
+ return _require(tkroot)
317
+
318
+
296
319
  class Tk(tkinter.Tk, DnDWrapper):
297
320
  '''Creates a new instance of a tkinter.Tk() window; all methods of the
298
321
  DnDWrapper class apply to this window and all its descendants.'''
@@ -53,10 +53,10 @@ namespace eval ::tkdnd {
53
53
 
54
54
  }; # namespace ::tkdnd
55
55
 
56
- package ifneeded tkdnd 2.9.5 \
56
+ package ifneeded tkdnd 2.10.0 \
57
57
  "tkdnd::source \{$dir/tkdnd.tcl\} ; \
58
- tkdnd::initialise \{$dir\} libtkdnd2.9.5.so tkdnd"
58
+ tkdnd::initialise \{$dir\} libtkdnd2.10.0.so tkdnd"
59
59
 
60
- package ifneeded tkdnd::utils 2.9.5 \
60
+ package ifneeded tkdnd::utils 2.10.0 \
61
61
  "tkdnd::source \{$dir/tkdnd_utils.tcl\} ; \
62
- package provide tkdnd::utils 2.9.5"
62
+ package provide tkdnd::utils 2.10.0"
@@ -231,7 +231,7 @@ proc xdnd::normalise_data { type data } {
231
231
  STRING - UTF8_STRING - TEXT - COMPOUND_TEXT {return $data}
232
232
  text/html {
233
233
  if {[catch {
234
- ::tkdnd::from_encoding unicode $data
234
+ ::tkdnd::from_encoding utf-16 $data
235
235
  } string]} {
236
236
  set string $data
237
237
  }
@@ -838,7 +838,7 @@ proc xdnd::_SendData {type offset bytes args} {
838
838
  }
839
839
  default {
840
840
  set format 32
841
- binary scan $typed_data c* _dodragdrop_transfer_data
841
+ binary scan [encoding convertto utf-8 $typed_data] c* _dodragdrop_transfer_data
842
842
  }
843
843
  }
844
844
  }
@@ -53,10 +53,10 @@ namespace eval ::tkdnd {
53
53
 
54
54
  }; # namespace ::tkdnd
55
55
 
56
- package ifneeded tkdnd 2.9.3 \
56
+ package ifneeded tkdnd 2.10.0 \
57
57
  "tkdnd::source \{$dir/tkdnd.tcl\} ; \
58
- tkdnd::initialise \{$dir\} libtkdnd2.9.3[info sharedlibextension] tkdnd"
58
+ tkdnd::initialise \{$dir\} libtcl9tkdnd2.10.0.so tkdnd"
59
59
 
60
- package ifneeded tkdnd::utils 2.9.3 \
60
+ package ifneeded tkdnd::utils 2.10.0 \
61
61
  "tkdnd::source \{$dir/tkdnd_utils.tcl\} ; \
62
- package provide tkdnd::utils 2.9.3"
62
+ package provide tkdnd::utils 2.10.0"
@@ -231,7 +231,7 @@ proc xdnd::normalise_data { type data } {
231
231
  STRING - UTF8_STRING - TEXT - COMPOUND_TEXT {return $data}
232
232
  text/html {
233
233
  if {[catch {
234
- ::tkdnd::from_encoding unicode $data
234
+ ::tkdnd::from_encoding utf-16 $data
235
235
  } string]} {
236
236
  set string $data
237
237
  }
@@ -838,7 +838,7 @@ proc xdnd::_SendData {type offset bytes args} {
838
838
  }
839
839
  default {
840
840
  set format 32
841
- binary scan $typed_data c* _dodragdrop_transfer_data
841
+ binary scan [encoding convertto utf-8 $typed_data] c* _dodragdrop_transfer_data
842
842
  }
843
843
  }
844
844
  }
@@ -53,10 +53,10 @@ namespace eval ::tkdnd {
53
53
 
54
54
  }; # namespace ::tkdnd
55
55
 
56
- package ifneeded tkdnd 2.9.5 \
56
+ package ifneeded tkdnd 2.10.0 \
57
57
  "tkdnd::source \{$dir/tkdnd.tcl\} ; \
58
- tkdnd::initialise \{$dir\} libtcl9tkdnd2.9.5.dylib tkdnd"
58
+ tkdnd::initialise \{$dir\} libtkdnd2.10.0.so tkdnd"
59
59
 
60
- package ifneeded tkdnd::utils 2.9.5 \
60
+ package ifneeded tkdnd::utils 2.10.0 \
61
61
  "tkdnd::source \{$dir/tkdnd_utils.tcl\} ; \
62
- package provide tkdnd::utils 2.9.5"
62
+ package provide tkdnd::utils 2.10.0"
@@ -231,7 +231,7 @@ proc xdnd::normalise_data { type data } {
231
231
  STRING - UTF8_STRING - TEXT - COMPOUND_TEXT {return $data}
232
232
  text/html {
233
233
  if {[catch {
234
- ::tkdnd::from_encoding unicode $data
234
+ ::tkdnd::from_encoding utf-16 $data
235
235
  } string]} {
236
236
  set string $data
237
237
  }
@@ -838,7 +838,7 @@ proc xdnd::_SendData {type offset bytes args} {
838
838
  }
839
839
  default {
840
840
  set format 32
841
- binary scan $typed_data c* _dodragdrop_transfer_data
841
+ binary scan [encoding convertto utf-8 $typed_data] c* _dodragdrop_transfer_data
842
842
  }
843
843
  }
844
844
  }
@@ -0,0 +1,62 @@
1
+ #
2
+ # Tcl package index file
3
+ #
4
+
5
+ namespace eval ::tkdnd {
6
+ ## Check if a debug level must be set...
7
+ if {[info exists ::TKDND_DEBUG_LEVEL]} {
8
+ variable _debug_level $::TKDND_DEBUG_LEVEL
9
+ } elseif {[info exists ::env(TKDND_DEBUG_LEVEL)]} {
10
+ variable _debug_level $::env(TKDND_DEBUG_LEVEL)
11
+ } else {
12
+ variable _debug_level 0
13
+ }
14
+
15
+ # ----------------------------------------------------------------------------
16
+ # Command tkdnd::debug_enabled: returns the requested debug level (0 = no debug).
17
+ # ----------------------------------------------------------------------------
18
+ proc debug_enabled { {level {}} } {
19
+ variable _debug_level
20
+ if {$level != {}} {
21
+ if {[string is integer -strict $level]} {
22
+ set _debug_level $level
23
+ } elseif {[string is true $level]} {
24
+ set _debug_level 1
25
+ }
26
+ }
27
+ return $_debug_level
28
+ };# debug_enabled
29
+
30
+ # ----------------------------------------------------------------------------
31
+ # Command tkdnd::source: source a Tcl fileInitialise the TkDND package.
32
+ # ----------------------------------------------------------------------------
33
+ proc source { filename { encoding utf-8 } } {
34
+ variable _package_dir
35
+ # If in debug mode, enable debug statements...
36
+ set dbg_lvl [debug_enabled]
37
+ if {$dbg_lvl} {
38
+ puts "tkdnd::source (debug level $dbg_lvl) $filename"
39
+ set fd [open $filename r]
40
+ fconfigure $fd -encoding $encoding
41
+ set script [read $fd]
42
+ close $fd
43
+ set map {}
44
+ for {set lvl 0} {$lvl <= $dbg_lvl} {incr lvl} {
45
+ lappend map "#DBG$lvl " {}
46
+ }
47
+ lappend map {#DBG } {}
48
+ set script [string map $map $script]
49
+ return [eval $script]
50
+ }
51
+ ::source -encoding $encoding $filename
52
+ };# source
53
+
54
+ }; # namespace ::tkdnd
55
+
56
+ package ifneeded tkdnd 2.10.0 \
57
+ "tkdnd::source \{$dir/tkdnd.tcl\} ; \
58
+ tkdnd::initialise \{$dir\} libtcl9tkdnd2.10.0.so tkdnd"
59
+
60
+ package ifneeded tkdnd::utils 2.10.0 \
61
+ "tkdnd::source \{$dir/tkdnd_utils.tcl\} ; \
62
+ package provide tkdnd::utils 2.10.0"
@@ -231,7 +231,7 @@ proc xdnd::normalise_data { type data } {
231
231
  STRING - UTF8_STRING - TEXT - COMPOUND_TEXT {return $data}
232
232
  text/html {
233
233
  if {[catch {
234
- ::tkdnd::from_encoding unicode $data
234
+ ::tkdnd::from_encoding utf-16 $data
235
235
  } string]} {
236
236
  set string $data
237
237
  }
@@ -838,7 +838,7 @@ proc xdnd::_SendData {type offset bytes args} {
838
838
  }
839
839
  default {
840
840
  set format 32
841
- binary scan $typed_data c* _dodragdrop_transfer_data
841
+ binary scan [encoding convertto utf-8 $typed_data] c* _dodragdrop_transfer_data
842
842
  }
843
843
  }
844
844
  }
@@ -0,0 +1,62 @@
1
+ #
2
+ # Tcl package index file
3
+ #
4
+
5
+ namespace eval ::tkdnd {
6
+ ## Check if a debug level must be set...
7
+ if {[info exists ::TKDND_DEBUG_LEVEL]} {
8
+ variable _debug_level $::TKDND_DEBUG_LEVEL
9
+ } elseif {[info exists ::env(TKDND_DEBUG_LEVEL)]} {
10
+ variable _debug_level $::env(TKDND_DEBUG_LEVEL)
11
+ } else {
12
+ variable _debug_level 0
13
+ }
14
+
15
+ # ----------------------------------------------------------------------------
16
+ # Command tkdnd::debug_enabled: returns the requested debug level (0 = no debug).
17
+ # ----------------------------------------------------------------------------
18
+ proc debug_enabled { {level {}} } {
19
+ variable _debug_level
20
+ if {$level != {}} {
21
+ if {[string is integer -strict $level]} {
22
+ set _debug_level $level
23
+ } elseif {[string is true $level]} {
24
+ set _debug_level 1
25
+ }
26
+ }
27
+ return $_debug_level
28
+ };# debug_enabled
29
+
30
+ # ----------------------------------------------------------------------------
31
+ # Command tkdnd::source: source a Tcl fileInitialise the TkDND package.
32
+ # ----------------------------------------------------------------------------
33
+ proc source { filename { encoding utf-8 } } {
34
+ variable _package_dir
35
+ # If in debug mode, enable debug statements...
36
+ set dbg_lvl [debug_enabled]
37
+ if {$dbg_lvl} {
38
+ puts "tkdnd::source (debug level $dbg_lvl) $filename"
39
+ set fd [open $filename r]
40
+ fconfigure $fd -encoding $encoding
41
+ set script [read $fd]
42
+ close $fd
43
+ set map {}
44
+ for {set lvl 0} {$lvl <= $dbg_lvl} {incr lvl} {
45
+ lappend map "#DBG$lvl " {}
46
+ }
47
+ lappend map {#DBG } {}
48
+ set script [string map $map $script]
49
+ return [eval $script]
50
+ }
51
+ ::source -encoding $encoding $filename
52
+ };# source
53
+
54
+ }; # namespace ::tkdnd
55
+
56
+ package ifneeded tkdnd 2.10.0 \
57
+ "tkdnd::source \{$dir/tkdnd.tcl\} ; \
58
+ tkdnd::initialise \{$dir\} libtcl9tkdnd2.10.0.dylib tkdnd"
59
+
60
+ package ifneeded tkdnd::utils 2.10.0 \
61
+ "tkdnd::source \{$dir/tkdnd_utils.tcl\} ; \
62
+ package provide tkdnd::utils 2.10.0"