tkinterdnd2 0.6.0__tar.gz → 0.6.2__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 (146) hide show
  1. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/PKG-INFO +15 -4
  2. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/README.md +14 -3
  3. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/setup.py +2 -2
  4. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tests/test_tkinterdnd2.py +0 -8
  5. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-arm64/libtkdnd2.10.1.so +0 -0
  6. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64/pkgIndex.tcl +4 -4
  7. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-arm64}/tkdnd_generic.tcl +48 -0
  8. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-arm64}/tkdnd_unix.tcl +49 -8
  9. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-arm64-tcl9/libtcl9tkdnd2.10.1.so +0 -0
  10. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-arm64-tcl9}/pkgIndex.tcl +4 -4
  11. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-arm64-tcl9}/tkdnd_generic.tcl +48 -0
  12. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-arm64-tcl9}/tkdnd_unix.tcl +49 -8
  13. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-x64/libtkdnd2.10.1.so +0 -0
  14. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64/pkgIndex.tcl +4 -4
  15. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-x64/tkdnd_generic.tcl +635 -0
  16. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-x64}/tkdnd_unix.tcl +49 -8
  17. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-x64-tcl9/libtcl9tkdnd2.10.1.so +0 -0
  18. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-x64-tcl9}/pkgIndex.tcl +4 -4
  19. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-x64-tcl9}/tkdnd_generic.tcl +48 -0
  20. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/linux-x64-tcl9}/tkdnd_unix.tcl +49 -8
  21. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64/libtkdnd2.10.1.dylib +0 -0
  22. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64/pkgIndex.tcl +62 -0
  23. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64/tkdnd.tcl +554 -0
  24. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64/tkdnd_generic.tcl +635 -0
  25. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64/tkdnd_unix.tcl +924 -0
  26. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64/tkdnd_windows.tcl +167 -0
  27. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64/libtcl9tkdnd2.10.0.dylib → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64-tcl9/libtcl9tkdnd2.10.1.dylib +0 -0
  28. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64-tcl9/pkgIndex.tcl +62 -0
  29. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64-tcl9/tkdnd_generic.tcl +635 -0
  30. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64-tcl9/tkdnd_unix.tcl +924 -0
  31. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-x64/tkdnd_compat.tcl +160 -0
  32. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-x64/tkdnd_macosx.tcl +144 -0
  33. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-x64/tkdnd_utils.tcl +256 -0
  34. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/libtkdnd2.10.0.dll → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-arm64/libtkdnd2.10.1.dll +0 -0
  35. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-arm64/pkgIndex.tcl +4 -4
  36. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd2.10.0.lib → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-arm64/tkdnd2.10.1.lib +0 -0
  37. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-arm64/tkdnd_generic.tcl +635 -0
  38. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-arm64/tkdnd_unix.tcl +924 -0
  39. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x64/libtkdnd2.10.1.dll +0 -0
  40. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64/pkgIndex.tcl +4 -4
  41. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd2.10.0.lib → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x64/tkdnd2.10.1.lib +0 -0
  42. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x64/tkdnd_generic.tcl +635 -0
  43. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x64/tkdnd_unix.tcl +924 -0
  44. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x64-tcl9/libtkdnd2.10.1.dll +0 -0
  45. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64-tcl9/pkgIndex.tcl +4 -4
  46. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd2.10.0.lib → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd2.10.1.lib +0 -0
  47. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_generic.tcl +635 -0
  48. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_unix.tcl +924 -0
  49. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/libtkdnd2.10.0.dll → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x86/libtkdnd2.10.1.dll +0 -0
  50. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x86/pkgIndex.tcl +62 -0
  51. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd2.10.0.lib → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x86/tkdnd2.10.1.lib +0 -0
  52. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x86/tkdnd_generic.tcl +635 -0
  53. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x86/tkdnd_unix.tcl +924 -0
  54. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/libtkdnd2.10.0.dll → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x86-tcl9/libtkdnd2.10.1.dll +0 -0
  55. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86-tcl9/pkgIndex.tcl +4 -4
  56. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd2.10.0.lib → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd2.10.1.lib +0 -0
  57. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_generic.tcl +635 -0
  58. tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_unix.tcl +924 -0
  59. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2.egg-info/PKG-INFO +15 -4
  60. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2.egg-info/SOURCES.txt +24 -15
  61. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64/libtkdnd2.10.0.so +0 -0
  62. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9/libtcl9tkdnd2.10.0.so +0 -0
  63. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64/libtkdnd2.10.0.so +0 -0
  64. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-x64-tcl9/libtcl9tkdnd2.10.0.so +0 -0
  65. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64/pkgIndex.tcl +0 -62
  66. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64/tkdnd_generic.tcl +0 -587
  67. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64/tkdnd_unix.tcl +0 -883
  68. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-x64/tkdnd_generic.tcl +0 -587
  69. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd_generic.tcl +0 -587
  70. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-arm64/tkdnd_unix.tcl +0 -883
  71. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/libtkdnd2.10.0.dll +0 -0
  72. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd_generic.tcl +0 -587
  73. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64/tkdnd_unix.tcl +0 -883
  74. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/libtkdnd2.10.0.dll +0 -0
  75. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_generic.tcl +0 -587
  76. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_unix.tcl +0 -883
  77. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/pkgIndex.tcl +0 -62
  78. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd_generic.tcl +0 -587
  79. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86/tkdnd_unix.tcl +0 -883
  80. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_generic.tcl +0 -587
  81. tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_unix.tcl +0 -883
  82. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/LICENSE +0 -0
  83. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/setup.cfg +0 -0
  84. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/TkinterDnD.py +0 -0
  85. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/__init__.py +0 -0
  86. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64/tkdnd.tcl +0 -0
  87. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64/tkdnd_compat.tcl +0 -0
  88. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64/tkdnd_macosx.tcl +0 -0
  89. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64/tkdnd_utils.tcl +0 -0
  90. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64/tkdnd_windows.tcl +0 -0
  91. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64-tcl9/tkdnd.tcl +0 -0
  92. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64-tcl9/tkdnd_compat.tcl +0 -0
  93. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64-tcl9/tkdnd_macosx.tcl +0 -0
  94. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64-tcl9/tkdnd_utils.tcl +0 -0
  95. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-arm64-tcl9/tkdnd_windows.tcl +0 -0
  96. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64/tkdnd.tcl +0 -0
  97. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64/tkdnd_compat.tcl +0 -0
  98. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64/tkdnd_macosx.tcl +0 -0
  99. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64/tkdnd_utils.tcl +0 -0
  100. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64/tkdnd_windows.tcl +0 -0
  101. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64-tcl9/tkdnd.tcl +0 -0
  102. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64-tcl9/tkdnd_compat.tcl +0 -0
  103. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64-tcl9/tkdnd_macosx.tcl +0 -0
  104. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64-tcl9/tkdnd_utils.tcl +0 -0
  105. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/linux-x64-tcl9/tkdnd_windows.tcl +0 -0
  106. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-x64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64}/tkdnd_compat.tcl +0 -0
  107. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-x64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64}/tkdnd_macosx.tcl +0 -0
  108. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-x64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64}/tkdnd_utils.tcl +0 -0
  109. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64-tcl9}/tkdnd.tcl +0 -0
  110. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64-tcl9}/tkdnd_compat.tcl +0 -0
  111. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64-tcl9}/tkdnd_macosx.tcl +0 -0
  112. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64-tcl9}/tkdnd_utils.tcl +0 -0
  113. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/osx-arm64 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-arm64-tcl9}/tkdnd_windows.tcl +0 -0
  114. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/osx-x64/libtkdnd2.9.4.dylib +0 -0
  115. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/osx-x64/pkgIndex.tcl +0 -0
  116. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/osx-x64/tkdnd.tcl +0 -0
  117. {tkinterdnd2-0.6.0/tkinterdnd2/tkdnd/linux-arm64-tcl9 → tkinterdnd2-0.6.2/tkinterdnd2/tkdnd/osx-x64}/tkdnd_generic.tcl +0 -0
  118. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/osx-x64/tkdnd_unix.tcl +0 -0
  119. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/osx-x64/tkdnd_windows.tcl +0 -0
  120. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-arm64/tkdnd.tcl +0 -0
  121. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-arm64/tkdnd_compat.tcl +0 -0
  122. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-arm64/tkdnd_macosx.tcl +0 -0
  123. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-arm64/tkdnd_utils.tcl +0 -0
  124. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-arm64/tkdnd_windows.tcl +0 -0
  125. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64/tkdnd.tcl +0 -0
  126. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64/tkdnd_compat.tcl +0 -0
  127. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64/tkdnd_macosx.tcl +0 -0
  128. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64/tkdnd_utils.tcl +0 -0
  129. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64/tkdnd_windows.tcl +0 -0
  130. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd.tcl +0 -0
  131. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_compat.tcl +0 -0
  132. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_macosx.tcl +0 -0
  133. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_utils.tcl +0 -0
  134. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x64-tcl9/tkdnd_windows.tcl +0 -0
  135. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86/tkdnd.tcl +0 -0
  136. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86/tkdnd_compat.tcl +0 -0
  137. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86/tkdnd_macosx.tcl +0 -0
  138. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86/tkdnd_utils.tcl +0 -0
  139. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86/tkdnd_windows.tcl +0 -0
  140. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd.tcl +0 -0
  141. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_compat.tcl +0 -0
  142. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_macosx.tcl +0 -0
  143. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_utils.tcl +0 -0
  144. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2/tkdnd/win-x86-tcl9/tkdnd_windows.tcl +0 -0
  145. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2.egg-info/dependency_links.txt +0 -0
  146. {tkinterdnd2-0.6.0 → tkinterdnd2-0.6.2}/tkinterdnd2.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tkinterdnd2
3
- Version: 0.6.0
3
+ Version: 0.6.2
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
6
  Author: petasis\pmgagne\eliav2\squiblydoo
@@ -51,15 +51,22 @@ root = TkinterDnD.Tk() # notice - use this instead of tk.Tk()
51
51
  lb = tk.Listbox(root)
52
52
  lb.insert(1, "drag files to here")
53
53
 
54
+ def on_drop(event):
55
+ # event.data is a raw Tcl list string, not a Python list - see note below
56
+ for path in root.tk.splitlist(event.data):
57
+ lb.insert(tk.END, path)
58
+
54
59
  # register the listbox as a drop target
55
60
  lb.drop_target_register(DND_FILES)
56
- lb.dnd_bind('<<Drop>>', lambda e: lb.insert(tk.END, e.data))
61
+ lb.dnd_bind('<<Drop>>', on_drop)
57
62
 
58
63
  lb.pack()
59
64
  root.mainloop()
60
65
  ```
61
66
  ![tkinterdnd2 example usage](https://i.stack.imgur.com/jnOWd.png)
62
67
 
68
+ > [!NOTE]
69
+ > `event.data` is a raw Tcl list, not a Python list or plain string. When multiple files are dropped, their paths come back space-separated in a single string, and any path containing a space is wrapped in `{braces}` so it can still be told apart from the others. Use `root.tk.splitlist(event.data)` (as above) to get a clean Python list of paths — don't split the string yourself, since that will break on braced/spaced paths.
63
70
 
64
71
  see any of the [demos](./demos) for usage examples.
65
72
 
@@ -76,7 +83,9 @@ import PySimpleGUI as sg
76
83
  from tkinterdnd2 import TkinterDnD, DND_FILES
77
84
 
78
85
  def on_drop(event):
79
- window["-FILE-"].update(event.data)
86
+ # event.data is a raw Tcl list; use splitlist to handle multiple/spaced paths, see note above
87
+ files = window.TKroot.tk.splitlist(event.data)
88
+ window["-FILE-"].update(files[0])
80
89
 
81
90
  layout = [
82
91
  [sg.Text("Drag & Drop a File Here")],
@@ -108,8 +117,10 @@ import customtkinter as ctk
108
117
  from tkinterdnd2 import TkinterDnD, DND_FILES
109
118
 
110
119
  def on_drop(event):
120
+ # event.data is a raw Tcl list; use splitlist to handle multiple/spaced paths, see note above
121
+ files = app.tk.splitlist(event.data)
111
122
  entry.delete(0, "end")
112
- entry.insert(0, event.data)
123
+ entry.insert(0, files[0])
113
124
 
114
125
  app = ctk.CTk()
115
126
  app.title("File Drop")
@@ -30,15 +30,22 @@ root = TkinterDnD.Tk() # notice - use this instead of tk.Tk()
30
30
  lb = tk.Listbox(root)
31
31
  lb.insert(1, "drag files to here")
32
32
 
33
+ def on_drop(event):
34
+ # event.data is a raw Tcl list string, not a Python list - see note below
35
+ for path in root.tk.splitlist(event.data):
36
+ lb.insert(tk.END, path)
37
+
33
38
  # register the listbox as a drop target
34
39
  lb.drop_target_register(DND_FILES)
35
- lb.dnd_bind('<<Drop>>', lambda e: lb.insert(tk.END, e.data))
40
+ lb.dnd_bind('<<Drop>>', on_drop)
36
41
 
37
42
  lb.pack()
38
43
  root.mainloop()
39
44
  ```
40
45
  ![tkinterdnd2 example usage](https://i.stack.imgur.com/jnOWd.png)
41
46
 
47
+ > [!NOTE]
48
+ > `event.data` is a raw Tcl list, not a Python list or plain string. When multiple files are dropped, their paths come back space-separated in a single string, and any path containing a space is wrapped in `{braces}` so it can still be told apart from the others. Use `root.tk.splitlist(event.data)` (as above) to get a clean Python list of paths — don't split the string yourself, since that will break on braced/spaced paths.
42
49
 
43
50
  see any of the [demos](./demos) for usage examples.
44
51
 
@@ -55,7 +62,9 @@ import PySimpleGUI as sg
55
62
  from tkinterdnd2 import TkinterDnD, DND_FILES
56
63
 
57
64
  def on_drop(event):
58
- window["-FILE-"].update(event.data)
65
+ # event.data is a raw Tcl list; use splitlist to handle multiple/spaced paths, see note above
66
+ files = window.TKroot.tk.splitlist(event.data)
67
+ window["-FILE-"].update(files[0])
59
68
 
60
69
  layout = [
61
70
  [sg.Text("Drag & Drop a File Here")],
@@ -87,8 +96,10 @@ import customtkinter as ctk
87
96
  from tkinterdnd2 import TkinterDnD, DND_FILES
88
97
 
89
98
  def on_drop(event):
99
+ # event.data is a raw Tcl list; use splitlist to handle multiple/spaced paths, see note above
100
+ files = app.tk.splitlist(event.data)
90
101
  entry.delete(0, "end")
91
- entry.insert(0, event.data)
102
+ entry.insert(0, files[0])
92
103
 
93
104
  app = ctk.CTk()
94
105
  app.title("File Drop")
@@ -5,7 +5,7 @@ with open("README.md", "r") as fh:
5
5
 
6
6
  setuptools.setup(
7
7
  name="tkinterdnd2",
8
- version="0.6.0",
8
+ version="0.6.2",
9
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,
@@ -18,7 +18,7 @@ setuptools.setup(
18
18
  "tkinterdnd2": [
19
19
  "tkdnd/linux-x64/*.*", "tkdnd/linux-x64-tcl9/*.*",
20
20
  "tkdnd/linux-arm64/*.*", "tkdnd/linux-arm64-tcl9/*.*",
21
- "tkdnd/osx-x64/*.*", "tkdnd/osx-arm64/*.*",
21
+ "tkdnd/osx-x64/*.*", "tkdnd/osx-arm64/*.*", "tkdnd/osx-arm64-tcl9/*.*",
22
22
  "tkdnd/win-x64/*.*", "tkdnd/win-x64-tcl9/*.*",
23
23
  "tkdnd/win-x86/*.*", "tkdnd/win-x86-tcl9/*.*",
24
24
  "tkdnd/win-arm64/*.*",
@@ -53,14 +53,6 @@ class TestTkinterDnD2(unittest.TestCase):
53
53
  """Binary loaded and TkdndVersion is populated."""
54
54
  self.assertIsNotNone(tkinterdnd2.TkinterDnD.TkdndVersion)
55
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
56
  def test_binary_directory_exists(self):
65
57
  """The directory that was selected exists inside the installed package."""
66
58
  path = os.path.join(self.tkdnd_root, self.chosen_dir)
@@ -53,10 +53,10 @@ namespace eval ::tkdnd {
53
53
 
54
54
  }; # namespace ::tkdnd
55
55
 
56
- package ifneeded tkdnd 2.10.0 \
56
+ package ifneeded tkdnd 2.10.1 \
57
57
  "tkdnd::source \{$dir/tkdnd.tcl\} ; \
58
- tkdnd::initialise \{$dir\} libtkdnd2.10.0.so tkdnd"
58
+ tkdnd::initialise \{$dir\} libtkdnd2.10.1.so tkdnd"
59
59
 
60
- package ifneeded tkdnd::utils 2.10.0 \
60
+ package ifneeded tkdnd::utils 2.10.1 \
61
61
  "tkdnd::source \{$dir/tkdnd_utils.tcl\} ; \
62
- package provide tkdnd::utils 2.10.0"
62
+ package provide tkdnd::utils 2.10.1"
@@ -520,6 +520,54 @@ proc generic::GetDropTargetCommonTypes { } {
520
520
  return $_common_drag_source_types
521
521
  };# generic::GetDropTargetCommonTypes
522
522
 
523
+ # ----------------------------------------------------------------------------
524
+ # Command generic::GetDropState / generic::RestoreDropState
525
+ #
526
+ # Snapshot & restore the in-flight drop state (the subset of variables that
527
+ # HandleLeave resets). Used by platform layers to survive a spurious
528
+ # <<Leave>> that gets processed while waiting on a blocking data fetch
529
+ # during a drop (e.g. the XWayland race in issue #77).
530
+ # ----------------------------------------------------------------------------
531
+ proc generic::GetDropState { } {
532
+ variable _types
533
+ variable _typelist
534
+ variable _actionlist
535
+ variable _action
536
+ variable _common_drag_source_types
537
+ variable _common_drop_target_types
538
+ variable _drag_source
539
+ variable _drop_target
540
+ return [dict create \
541
+ types $_types \
542
+ typelist $_typelist \
543
+ actionlist $_actionlist \
544
+ action $_action \
545
+ common_drag_source_types $_common_drag_source_types \
546
+ common_drop_target_types $_common_drop_target_types \
547
+ drag_source $_drag_source \
548
+ drop_target $_drop_target \
549
+ ]
550
+ };# generic::GetDropState
551
+
552
+ proc generic::RestoreDropState { state } {
553
+ variable _types
554
+ variable _typelist
555
+ variable _actionlist
556
+ variable _action
557
+ variable _common_drag_source_types
558
+ variable _common_drop_target_types
559
+ variable _drag_source
560
+ variable _drop_target
561
+ set _types [dict get $state types]
562
+ set _typelist [dict get $state typelist]
563
+ set _actionlist [dict get $state actionlist]
564
+ set _action [dict get $state action]
565
+ set _common_drag_source_types [dict get $state common_drag_source_types]
566
+ set _common_drop_target_types [dict get $state common_drop_target_types]
567
+ set _drag_source [dict get $state drag_source]
568
+ set _drop_target [dict get $state drop_target]
569
+ };# generic::RestoreDropState
570
+
523
571
  # ----------------------------------------------------------------------------
524
572
  # Command generic::platform_specific_types
525
573
  # ----------------------------------------------------------------------------
@@ -134,10 +134,20 @@ proc xdnd::HandleXdndDrop { time } {
134
134
  variable _last_mouse_root_y
135
135
  set _pressedkeys [GetPressedKeys [::tkdnd::generic::GetDropTarget]]
136
136
  #DBG debug "xdnd::HandleXdndDrop: $time"
137
+ ## Snapshot the in-flight drop state before GetDroppedData below: it pumps
138
+ ## the Tk event queue while waiting for the SelectionNotify round-trip, and
139
+ ## a queued XdndLeave processed during that wait resets this state via
140
+ ## ::tkdnd::generic::HandleLeave before HandleDrop gets to use it -- a race
141
+ ## commonly hit under XWayland (issue #77). Restore the snapshot if that
142
+ ## happened so the drop can still be delivered.
143
+ set dropstate [::tkdnd::generic::GetDropState]
137
144
  ## Get the dropped data...
138
145
  ::tkdnd::generic::SetDroppedData [GetDroppedData \
139
146
  [::tkdnd::generic::GetDragSource] [::tkdnd::generic::GetDropTarget] \
140
147
  [::tkdnd::generic::GetDragSourceCommonTypes] $time]
148
+ if {![string length [::tkdnd::generic::GetDropTarget]]} {
149
+ ::tkdnd::generic::RestoreDropState $dropstate
150
+ }
141
151
  ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \
142
152
  $_last_mouse_root_x $_last_mouse_root_y $time
143
153
  };# xdnd::HandleXdndDrop
@@ -355,9 +365,19 @@ proc xdnd::_dodragdrop { source actions types data button { cursor_map {} } } {
355
365
  -selection XdndSelection $source
356
366
  set _dragging 1
357
367
 
358
- ## Grab the mouse pointer...
359
- #DBG debug "xdnd::_dodragdrop: _grab_pointer $source [_get_mapped_cursor $_dodragdrop_default_action]"
360
- _grab_pointer $source [_get_mapped_cursor $_dodragdrop_default_action]
368
+ ## Grab the mouse pointer on a dedicated offscreen window rather than the
369
+ ## source widget itself: X automatically drops a grab when its window
370
+ ## becomes unviewable, which breaks the whole drag if the source widget
371
+ ## (or an ancestor) gets unmapped mid-drag, e.g. by switching virtual
372
+ ## desktops via a pager (issue #6).
373
+ set _dodragdrop_grab_window [_create_grab_window]
374
+ #DBG debug "xdnd::_dodragdrop: _grab_pointer $_dodragdrop_grab_window [_get_mapped_cursor $_dodragdrop_default_action]"
375
+ _grab_pointer $_dodragdrop_grab_window [_get_mapped_cursor $_dodragdrop_default_action]
376
+
377
+ ## If the source widget is destroyed mid-drag (e.g. its toplevel is closed
378
+ ## with Alt+F4), make sure we don't hang forever on tkwait below.
379
+ set _dodragdrop_source_destroy_binding [bind $source <Destroy>]
380
+ bind $source <Destroy> {+ set ::tkdnd::xdnd::_dragging 0}
361
381
 
362
382
  ## Register our generic event handler...
363
383
  # The generic event callback will report events by modifying variable
@@ -372,19 +392,41 @@ proc xdnd::_dodragdrop { source actions types data button { cursor_map {} } } {
372
392
  #DBG debug "xdnd::_dodragdrop: waiting drag action to finish..."
373
393
  tkwait variable ::tkdnd::xdnd::_dragging
374
394
  #DBG debug "xdnd::_dodragdrop: drag action finished!"
375
- _SendXdndLeave
395
+ catch {_SendXdndLeave}
376
396
 
377
397
  set _dragging 0
378
- #DBG debug "xdnd::_dodragdrop: _ungrab_pointer $source"
379
- _ungrab_pointer $source
398
+ catch {bind $source <Destroy> $_dodragdrop_source_destroy_binding}
399
+ #DBG debug "xdnd::_dodragdrop: _ungrab_pointer $_dodragdrop_grab_window"
400
+ _ungrab_pointer $_dodragdrop_grab_window
380
401
  #DBG debug "xdnd::_dodragdrop: _unregister_generic_event_handler"
381
402
  _unregister_generic_event_handler
382
403
  catch {selection clear -selection XdndSelection}
383
404
  #DBG debug "xdnd::_dodragdrop: unregisterSelectionHandler $source $types"
384
- unregisterSelectionHandler $source $types
405
+ catch {unregisterSelectionHandler $source $types}
385
406
  return $_dodragdrop_drop_target_accepts_action
386
407
  };# xdnd::_dodragdrop
387
408
 
409
+ # ----------------------------------------------------------------------------
410
+ # Command xdnd::_create_grab_window
411
+ #
412
+ # Returns a small, offscreen, override-redirect helper toplevel used solely
413
+ # as the target of the pointer grab during a drag. Created lazily once and
414
+ # reused for subsequent drags (only one drag can be in progress at a time).
415
+ # ----------------------------------------------------------------------------
416
+ proc xdnd::_create_grab_window { } {
417
+ set w .___tkdnd___grab___window___
418
+ if {![winfo exists $w]} {
419
+ toplevel $w -class TkDndGrab
420
+ wm overrideredirect $w 1
421
+ wm geometry $w 1x1+-32000+-32000
422
+ ## Force the toplevel to actually be mapped now: XGrabPointer requires
423
+ ## a viewable grab window, and the map request otherwise happens lazily
424
+ ## on the next idle pass.
425
+ update idletasks
426
+ }
427
+ return $w
428
+ };# xdnd::_create_grab_window
429
+
388
430
  # ----------------------------------------------------------------------------
389
431
  # Command xdnd::_process_drag_events
390
432
  # ----------------------------------------------------------------------------
@@ -727,7 +769,6 @@ proc xdnd::getFormatForType {type} {
727
769
  string -
728
770
  text -
729
771
  compound_text {set format STRING}
730
- text/uri-list* {set format UTF8_STRING}
731
772
  application/x-color {set format $type}
732
773
  default {set format $type}
733
774
  }
@@ -53,10 +53,10 @@ namespace eval ::tkdnd {
53
53
 
54
54
  }; # namespace ::tkdnd
55
55
 
56
- package ifneeded tkdnd 2.10.0 \
56
+ package ifneeded tkdnd 2.10.1 \
57
57
  "tkdnd::source \{$dir/tkdnd.tcl\} ; \
58
- tkdnd::initialise \{$dir\} libtcl9tkdnd2.10.0.so tkdnd"
58
+ tkdnd::initialise \{$dir\} libtcl9tkdnd2.10.1.so tkdnd"
59
59
 
60
- package ifneeded tkdnd::utils 2.10.0 \
60
+ package ifneeded tkdnd::utils 2.10.1 \
61
61
  "tkdnd::source \{$dir/tkdnd_utils.tcl\} ; \
62
- package provide tkdnd::utils 2.10.0"
62
+ package provide tkdnd::utils 2.10.1"
@@ -520,6 +520,54 @@ proc generic::GetDropTargetCommonTypes { } {
520
520
  return $_common_drag_source_types
521
521
  };# generic::GetDropTargetCommonTypes
522
522
 
523
+ # ----------------------------------------------------------------------------
524
+ # Command generic::GetDropState / generic::RestoreDropState
525
+ #
526
+ # Snapshot & restore the in-flight drop state (the subset of variables that
527
+ # HandleLeave resets). Used by platform layers to survive a spurious
528
+ # <<Leave>> that gets processed while waiting on a blocking data fetch
529
+ # during a drop (e.g. the XWayland race in issue #77).
530
+ # ----------------------------------------------------------------------------
531
+ proc generic::GetDropState { } {
532
+ variable _types
533
+ variable _typelist
534
+ variable _actionlist
535
+ variable _action
536
+ variable _common_drag_source_types
537
+ variable _common_drop_target_types
538
+ variable _drag_source
539
+ variable _drop_target
540
+ return [dict create \
541
+ types $_types \
542
+ typelist $_typelist \
543
+ actionlist $_actionlist \
544
+ action $_action \
545
+ common_drag_source_types $_common_drag_source_types \
546
+ common_drop_target_types $_common_drop_target_types \
547
+ drag_source $_drag_source \
548
+ drop_target $_drop_target \
549
+ ]
550
+ };# generic::GetDropState
551
+
552
+ proc generic::RestoreDropState { state } {
553
+ variable _types
554
+ variable _typelist
555
+ variable _actionlist
556
+ variable _action
557
+ variable _common_drag_source_types
558
+ variable _common_drop_target_types
559
+ variable _drag_source
560
+ variable _drop_target
561
+ set _types [dict get $state types]
562
+ set _typelist [dict get $state typelist]
563
+ set _actionlist [dict get $state actionlist]
564
+ set _action [dict get $state action]
565
+ set _common_drag_source_types [dict get $state common_drag_source_types]
566
+ set _common_drop_target_types [dict get $state common_drop_target_types]
567
+ set _drag_source [dict get $state drag_source]
568
+ set _drop_target [dict get $state drop_target]
569
+ };# generic::RestoreDropState
570
+
523
571
  # ----------------------------------------------------------------------------
524
572
  # Command generic::platform_specific_types
525
573
  # ----------------------------------------------------------------------------
@@ -134,10 +134,20 @@ proc xdnd::HandleXdndDrop { time } {
134
134
  variable _last_mouse_root_y
135
135
  set _pressedkeys [GetPressedKeys [::tkdnd::generic::GetDropTarget]]
136
136
  #DBG debug "xdnd::HandleXdndDrop: $time"
137
+ ## Snapshot the in-flight drop state before GetDroppedData below: it pumps
138
+ ## the Tk event queue while waiting for the SelectionNotify round-trip, and
139
+ ## a queued XdndLeave processed during that wait resets this state via
140
+ ## ::tkdnd::generic::HandleLeave before HandleDrop gets to use it -- a race
141
+ ## commonly hit under XWayland (issue #77). Restore the snapshot if that
142
+ ## happened so the drop can still be delivered.
143
+ set dropstate [::tkdnd::generic::GetDropState]
137
144
  ## Get the dropped data...
138
145
  ::tkdnd::generic::SetDroppedData [GetDroppedData \
139
146
  [::tkdnd::generic::GetDragSource] [::tkdnd::generic::GetDropTarget] \
140
147
  [::tkdnd::generic::GetDragSourceCommonTypes] $time]
148
+ if {![string length [::tkdnd::generic::GetDropTarget]]} {
149
+ ::tkdnd::generic::RestoreDropState $dropstate
150
+ }
141
151
  ::tkdnd::generic::HandleDrop {} {} $_pressedkeys \
142
152
  $_last_mouse_root_x $_last_mouse_root_y $time
143
153
  };# xdnd::HandleXdndDrop
@@ -355,9 +365,19 @@ proc xdnd::_dodragdrop { source actions types data button { cursor_map {} } } {
355
365
  -selection XdndSelection $source
356
366
  set _dragging 1
357
367
 
358
- ## Grab the mouse pointer...
359
- #DBG debug "xdnd::_dodragdrop: _grab_pointer $source [_get_mapped_cursor $_dodragdrop_default_action]"
360
- _grab_pointer $source [_get_mapped_cursor $_dodragdrop_default_action]
368
+ ## Grab the mouse pointer on a dedicated offscreen window rather than the
369
+ ## source widget itself: X automatically drops a grab when its window
370
+ ## becomes unviewable, which breaks the whole drag if the source widget
371
+ ## (or an ancestor) gets unmapped mid-drag, e.g. by switching virtual
372
+ ## desktops via a pager (issue #6).
373
+ set _dodragdrop_grab_window [_create_grab_window]
374
+ #DBG debug "xdnd::_dodragdrop: _grab_pointer $_dodragdrop_grab_window [_get_mapped_cursor $_dodragdrop_default_action]"
375
+ _grab_pointer $_dodragdrop_grab_window [_get_mapped_cursor $_dodragdrop_default_action]
376
+
377
+ ## If the source widget is destroyed mid-drag (e.g. its toplevel is closed
378
+ ## with Alt+F4), make sure we don't hang forever on tkwait below.
379
+ set _dodragdrop_source_destroy_binding [bind $source <Destroy>]
380
+ bind $source <Destroy> {+ set ::tkdnd::xdnd::_dragging 0}
361
381
 
362
382
  ## Register our generic event handler...
363
383
  # The generic event callback will report events by modifying variable
@@ -372,19 +392,41 @@ proc xdnd::_dodragdrop { source actions types data button { cursor_map {} } } {
372
392
  #DBG debug "xdnd::_dodragdrop: waiting drag action to finish..."
373
393
  tkwait variable ::tkdnd::xdnd::_dragging
374
394
  #DBG debug "xdnd::_dodragdrop: drag action finished!"
375
- _SendXdndLeave
395
+ catch {_SendXdndLeave}
376
396
 
377
397
  set _dragging 0
378
- #DBG debug "xdnd::_dodragdrop: _ungrab_pointer $source"
379
- _ungrab_pointer $source
398
+ catch {bind $source <Destroy> $_dodragdrop_source_destroy_binding}
399
+ #DBG debug "xdnd::_dodragdrop: _ungrab_pointer $_dodragdrop_grab_window"
400
+ _ungrab_pointer $_dodragdrop_grab_window
380
401
  #DBG debug "xdnd::_dodragdrop: _unregister_generic_event_handler"
381
402
  _unregister_generic_event_handler
382
403
  catch {selection clear -selection XdndSelection}
383
404
  #DBG debug "xdnd::_dodragdrop: unregisterSelectionHandler $source $types"
384
- unregisterSelectionHandler $source $types
405
+ catch {unregisterSelectionHandler $source $types}
385
406
  return $_dodragdrop_drop_target_accepts_action
386
407
  };# xdnd::_dodragdrop
387
408
 
409
+ # ----------------------------------------------------------------------------
410
+ # Command xdnd::_create_grab_window
411
+ #
412
+ # Returns a small, offscreen, override-redirect helper toplevel used solely
413
+ # as the target of the pointer grab during a drag. Created lazily once and
414
+ # reused for subsequent drags (only one drag can be in progress at a time).
415
+ # ----------------------------------------------------------------------------
416
+ proc xdnd::_create_grab_window { } {
417
+ set w .___tkdnd___grab___window___
418
+ if {![winfo exists $w]} {
419
+ toplevel $w -class TkDndGrab
420
+ wm overrideredirect $w 1
421
+ wm geometry $w 1x1+-32000+-32000
422
+ ## Force the toplevel to actually be mapped now: XGrabPointer requires
423
+ ## a viewable grab window, and the map request otherwise happens lazily
424
+ ## on the next idle pass.
425
+ update idletasks
426
+ }
427
+ return $w
428
+ };# xdnd::_create_grab_window
429
+
388
430
  # ----------------------------------------------------------------------------
389
431
  # Command xdnd::_process_drag_events
390
432
  # ----------------------------------------------------------------------------
@@ -727,7 +769,6 @@ proc xdnd::getFormatForType {type} {
727
769
  string -
728
770
  text -
729
771
  compound_text {set format STRING}
730
- text/uri-list* {set format UTF8_STRING}
731
772
  application/x-color {set format $type}
732
773
  default {set format $type}
733
774
  }
@@ -53,10 +53,10 @@ namespace eval ::tkdnd {
53
53
 
54
54
  }; # namespace ::tkdnd
55
55
 
56
- package ifneeded tkdnd 2.10.0 \
56
+ package ifneeded tkdnd 2.10.1 \
57
57
  "tkdnd::source \{$dir/tkdnd.tcl\} ; \
58
- tkdnd::initialise \{$dir\} libtkdnd2.10.0.so tkdnd"
58
+ tkdnd::initialise \{$dir\} libtkdnd2.10.1.so tkdnd"
59
59
 
60
- package ifneeded tkdnd::utils 2.10.0 \
60
+ package ifneeded tkdnd::utils 2.10.1 \
61
61
  "tkdnd::source \{$dir/tkdnd_utils.tcl\} ; \
62
- package provide tkdnd::utils 2.10.0"
62
+ package provide tkdnd::utils 2.10.1"