arcadia 0.11.1.4 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (162) hide show
  1. data/README +20 -5
  2. data/conf/LC/en-UK.LANG +270 -0
  3. data/conf/arcadia.conf +25 -42
  4. data/conf/arcadia.init.rb +1 -1
  5. data/conf/arcadia.res.rb +40 -1
  6. data/ext/ae-breakpoints/ae-breakpoints.rb +4 -25
  7. data/ext/ae-dir-projects/ae-dir-projects.conf +1 -10
  8. data/ext/ae-dir-projects/ae-dir-projects.rb +113 -41
  9. data/ext/ae-editor/ae-editor.conf +8 -4
  10. data/ext/ae-editor/ae-editor.rb +425 -218
  11. data/ext/ae-editor/langs/conf.lang +1 -1
  12. data/ext/ae-file-history/ae-file-history.conf +1 -8
  13. data/ext/ae-file-history/ae-file-history.rb +156 -40
  14. data/ext/ae-output/ae-output.rb +79 -16
  15. data/ext/ae-ruby-debug/ae-ruby-debug.rb +43 -49
  16. data/ext/ae-search-in-files/ae-search-in-files.conf +0 -2
  17. data/ext/ae-search-in-files/ae-search-in-files.rb +8 -14
  18. data/ext/ae-search-in-files/ext/ack-in-files/ack-in-files.rb +6 -5
  19. data/ext/ae-shell/ae-shell.conf +1 -1
  20. data/ext/ae-shell/ae-shell.rb +112 -44
  21. data/ext/ae-subprocess-inspector/ae-subprocess-inspector.rb +5 -4
  22. data/ext/ae-subprocess-inspector/process.res +0 -0
  23. data/ext/ae-term/ae-term.conf +15 -0
  24. data/ext/ae-term/ae-term.rb +165 -0
  25. data/ext/test-shutdown-after-startup/test-shutdown-after-startup.conf +2 -2
  26. data/lib/a-commons.rb +128 -23
  27. data/lib/a-contracts.rb +10 -0
  28. data/lib/a-core.rb +1186 -1024
  29. data/lib/a-tkcommons.rb +44 -28
  30. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/ArrowButton.html +0 -0
  31. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/BWidget.html +0 -0
  32. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/Button.html +0 -0
  33. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/ButtonBox.html +0 -0
  34. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/ComboBox.html +0 -0
  35. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/Dialog.html +0 -0
  36. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/DragSite.html +0 -0
  37. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/DropSite.html +0 -0
  38. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/DynamicHelp.html +0 -0
  39. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/Entry.html +25 -0
  40. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/Label.html +0 -0
  41. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/LabelEntry.html +0 -0
  42. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/LabelFrame.html +0 -0
  43. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/ListBox.html +2 -2
  44. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/MainFrame.html +0 -0
  45. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/MessageDlg.html +0 -0
  46. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/NoteBook.html +0 -0
  47. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/PagesManager.html +0 -0
  48. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/PanedWindow.html +0 -0
  49. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/PanelFrame.html +0 -0
  50. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/PasswdDlg.html +0 -0
  51. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/ProgressBar.html +0 -0
  52. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/ProgressDlg.html +0 -0
  53. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/ScrollView.html +0 -0
  54. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/ScrollableFrame.html +0 -0
  55. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/ScrolledWindow.html +0 -0
  56. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/SelectColor.html +0 -0
  57. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/SelectFont.html +0 -0
  58. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/Separator.html +0 -0
  59. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/SpinBox.html +0 -0
  60. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/StatusBar.html +0 -0
  61. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/TitleFrame.html +0 -0
  62. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/Tree.html +0 -0
  63. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/Widget.html +0 -0
  64. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/contents.html +0 -0
  65. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/index.html +0 -0
  66. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/navtree.html +0 -0
  67. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/BWman/options.htm +0 -0
  68. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/CHANGES.txt +0 -0
  69. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/ChangeLog +34 -1
  70. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/LICENSE.txt +0 -0
  71. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/README.txt +0 -0
  72. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/arrow.tcl +0 -0
  73. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/bitmap.tcl +0 -0
  74. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/button.tcl +0 -0
  75. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/buttonbox.tcl +0 -0
  76. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/color.tcl +0 -0
  77. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/combobox.tcl +16 -6
  78. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/demo/basic.tcl +0 -0
  79. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/demo/bwidget.xbm +0 -0
  80. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/demo/demo.tcl +0 -0
  81. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/demo/dnd.tcl +0 -0
  82. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/demo/manager.tcl +0 -0
  83. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/demo/select.tcl +0 -0
  84. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/demo/tmpldlg.tcl +0 -0
  85. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/demo/tree.tcl +0 -0
  86. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/demo/x1.xbm +0 -0
  87. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/dialog.tcl +0 -0
  88. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/dragsite.tcl +0 -0
  89. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/dropsite.tcl +0 -0
  90. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/dynhelp.tcl +0 -0
  91. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/entry.tcl +57 -30
  92. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/font.tcl +0 -0
  93. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/bold.gif +0 -0
  94. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/copy.gif +0 -0
  95. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/cut.gif +0 -0
  96. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/dragfile.gif +0 -0
  97. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/dragicon.gif +0 -0
  98. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/error.gif +0 -0
  99. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/file.gif +0 -0
  100. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/folder.gif +0 -0
  101. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/hourglass.gif +0 -0
  102. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/info.gif +0 -0
  103. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/italic.gif +0 -0
  104. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/minus.xbm +0 -0
  105. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/new.gif +0 -0
  106. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/opcopy.xbm +0 -0
  107. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/open.gif +0 -0
  108. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/openfold.gif +0 -0
  109. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/oplink.xbm +0 -0
  110. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/opmove.xbm +0 -0
  111. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/overstrike.gif +0 -0
  112. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/palette.gif +0 -0
  113. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/passwd.gif +0 -0
  114. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/paste.gif +0 -0
  115. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/plus.xbm +0 -0
  116. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/print.gif +0 -0
  117. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/question.gif +0 -0
  118. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/redo.gif +0 -0
  119. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/save.gif +0 -0
  120. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/target.xbm +0 -0
  121. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/underline.gif +0 -0
  122. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/undo.gif +0 -0
  123. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/images/warning.gif +0 -0
  124. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/init.tcl +0 -0
  125. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/label.tcl +0 -0
  126. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/labelentry.tcl +0 -0
  127. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/labelframe.tcl +0 -0
  128. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/lang/da.rc +0 -0
  129. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/lang/de.rc +0 -0
  130. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/lang/en.rc +0 -0
  131. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/lang/es.rc +0 -0
  132. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/lang/fr.rc +0 -0
  133. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/lang/hu.rc +0 -0
  134. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/lang/nl.rc +0 -0
  135. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/lang/no.rc +0 -0
  136. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/lang/pl.rc +0 -0
  137. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/listbox.tcl +6 -3
  138. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/mainframe.tcl +0 -0
  139. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/messagedlg.tcl +0 -0
  140. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/notebook.tcl +0 -0
  141. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/pagesmgr.tcl +0 -0
  142. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/panedw.tcl +0 -0
  143. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/panelframe.tcl +0 -0
  144. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/passwddlg.tcl +0 -0
  145. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/pkgIndex.tcl +2 -2
  146. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/progressbar.tcl +0 -0
  147. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/progressdlg.tcl +0 -0
  148. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/scrollframe.tcl +0 -0
  149. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/scrollview.tcl +0 -0
  150. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/scrollw.tcl +0 -0
  151. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/separator.tcl +0 -0
  152. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/spinbox.tcl +0 -0
  153. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/statusbar.tcl +0 -0
  154. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/tests/entry.test +0 -0
  155. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/titleframe.tcl +0 -0
  156. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/tree.tcl +0 -0
  157. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/utils.tcl +0 -0
  158. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/widget.tcl +2 -2
  159. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/wizard.tcl +0 -0
  160. data/tcl/{bwidget-1.9.5 → bwidget-1.9.6}/xpm2image.tcl +0 -0
  161. data/tcl/fsdialog/fsdialog.tcl +59 -25
  162. metadata +201 -218
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,7 +1,7 @@
1
1
  # ----------------------------------------------------------------------------
2
2
  # listbox.tcl
3
3
  # This file is part of Unifix BWidget Toolkit
4
- # $Id: listbox.tcl,v 1.29.2.6 2011/06/23 09:17:19 oehhar Exp $
4
+ # $Id: listbox.tcl,v 1.29.2.7 2012/04/12 12:46:47 oehhar Exp $
5
5
  # ----------------------------------------------------------------------------
6
6
  # Index of commands:
7
7
  # - ListBox::create
@@ -568,6 +568,7 @@ proc ListBox::selection { path cmd args } {
568
568
  variable $path
569
569
  upvar 0 $path data
570
570
 
571
+ set oldsel $data(selitems);
571
572
  switch -- $cmd {
572
573
  set {
573
574
  set data(selitems) {}
@@ -608,8 +609,10 @@ proc ListBox::selection { path cmd args } {
608
609
  return
609
610
  }
610
611
  }
611
-
612
- _redraw_idle $path 1
612
+ if {[string compare $oldsel $data(selitems)]} {
613
+ _redraw_idle $path 1
614
+ }
615
+ return;
613
616
  }
614
617
 
615
618
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,7 +1,7 @@
1
1
  if {[catch {package require Tcl}]} return
2
- package ifneeded BWidget 1.9.5 "\
2
+ package ifneeded BWidget 1.9.6 "\
3
3
  package require Tk 8.1.1;\
4
- [list tclPkgSetup $dir BWidget 1.9.5 {
4
+ [list tclPkgSetup $dir BWidget 1.9.6 {
5
5
  {arrow.tcl source {ArrowButton ArrowButton::create ArrowButton::use}}
6
6
  {labelframe.tcl source {LabelFrame LabelFrame::create LabelFrame::use}}
7
7
  {labelentry.tcl source {LabelEntry LabelEntry::create LabelEntry::use}}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,7 +1,7 @@
1
1
  # ----------------------------------------------------------------------------
2
2
  # widget.tcl
3
3
  # This file is part of Unifix BWidget Toolkit
4
- # $Id: widget.tcl,v 1.35 2009/07/02 16:22:18 oehhar Exp $
4
+ # $Id: widget.tcl,v 1.35.2.1 2011/11/14 14:33:29 oehhar Exp $
5
5
  # ----------------------------------------------------------------------------
6
6
  # Index of commands:
7
7
  # - Widget::tkinclude
@@ -1435,7 +1435,7 @@ proc Widget::focusOK { w } {
1435
1435
  } elseif {$value == 1} {
1436
1436
  return [winfo viewable $w]
1437
1437
  } else {
1438
- set value [uplevel \#0 $value $w]
1438
+ set value [uplevel \#0 [list $value $w]]
1439
1439
  if {$value != ""} {
1440
1440
  return $value
1441
1441
  }
File without changes
File without changes
@@ -1,5 +1,5 @@
1
1
  # Copyright (C) Schelte Bron. Freely redistributable.
2
- # Version 1.14 - 27 Jun 2009
2
+ # Version 1.15 - 19 Aug 2012
3
3
 
4
4
  # File names containing <TAB> will mess up the layout. Tab char = \u2409
5
5
 
@@ -348,11 +348,13 @@ proc ::ttk::dialog::file::ChangeDir {w dir} {
348
348
 
349
349
  set data(history) [lrange $data(history) 0 $data(histpos)]
350
350
  set cwd [lindex $data(history) $data(histpos)]
351
- set data(selectPath) [file normalize [file join $cwd $dir]]
351
+ set data(selectPath) [file normalize [JoinFile $cwd $dir]]
352
352
  lappend data(history) $data(selectPath)
353
353
  if {[incr data(histpos)]} {
354
354
  $data(prevBtn) state !disabled
355
- set data(selectFile) ""
355
+ if {$data(type) ne "save"} {
356
+ set data(selectFile) ""
357
+ }
356
358
  }
357
359
  $data(nextBtn) state disabled
358
360
 
@@ -440,7 +442,7 @@ proc ::ttk::dialog::file::Update {w} {
440
442
  foreach f [eval [linsert $filter 0 glob -nocomplain -tails \
441
443
  -directory $cwd -type {f l c b p}]] {
442
444
  # Links can still be directories. Skip those.
443
- if {[file isdirectory [file join $cwd $f]]} continue
445
+ if {[file isdirectory [JoinFile $cwd $f]]} continue
444
446
  lappend flist [list $f file]
445
447
  }
446
448
 
@@ -520,7 +522,7 @@ proc ::ttk::dialog::file::FileList1 {w} {
520
522
  foreach f $data(list) {
521
523
  lassign $f name type size date mode uid gid
522
524
  if {![info exists users($uid)] || ![info exists groups($gid)]} {
523
- set fname [file join $cwd $name]
525
+ set fname [JoinFile $cwd $name]
524
526
  # May fail for dead links
525
527
  if {![catch {array set attr [file attributes $fname]}]} {
526
528
  if {[info exists attr(-owner)]} {
@@ -670,10 +672,10 @@ proc ::ttk::dialog::file::sort {w list} {
670
672
  foreach f $list {
671
673
  set file [lindex $f 0]
672
674
  # Use lstat in case the destination doesn't exists
673
- file lstat [file join $cwd $file] stat
675
+ file lstat [JoinFile $cwd $file] stat
674
676
  if {$stat(type) eq "link"} {
675
677
  # This may fail if the link points to nothing
676
- if {![catch {file stat [file join $cwd $file] dest}]} {
678
+ if {![catch {file stat [JoinFile $cwd $file] dest}]} {
677
679
  array set stat [array get dest]
678
680
  if {$stat(type) eq "file"} {
679
681
  set stat(type) link
@@ -809,6 +811,17 @@ proc ::ttk::dialog::file::maxfont {family max} {
809
811
  return [list $family $size]
810
812
  }
811
813
 
814
+ # Join a file name to a path name. The "file join" command will break
815
+ # if the filename begins with ~
816
+ #
817
+ proc ::ttk::dialog::file::JoinFile {path file} {
818
+ if {[string match {~*} $file] && [file exists $path/$file]} {
819
+ return [file join $path ./$file]
820
+ } else {
821
+ return [file join $path $file]
822
+ }
823
+ }
824
+
812
825
  proc ::ttk::dialog::file::UpDirCmd {w} {
813
826
  set dataName [winfo name $w]
814
827
  upvar ::ttk::dialog::file::$dataName data
@@ -851,14 +864,18 @@ proc ::ttk::dialog::file::HomeDirCmd {w} {
851
864
  proc ::ttk::dialog::file::NewDirCmd {win} {
852
865
  set dataName [winfo name $win]
853
866
  upvar ::ttk::dialog::file::$dataName data
854
-
855
- set dir [lindex $data(history) $data(histpos)]
856
-
867
+
868
+ if {[info exists data(history)]} {
869
+ set dir [lindex $data(history) $data(histpos)]
870
+ } else {
871
+ set dir $data(selectPath)
872
+ }
873
+
857
874
  toplevel $win.new
858
875
  wm title $win.new [mc "New Folder"]
859
876
  set w [ttk::frame $win.new.f]
860
877
  pack $w -expand 1 -fill both
861
-
878
+
862
879
  ttk::label $w.prompt -anchor w -justify left \
863
880
  -text [mc "Create new folder in"]:\n$dir
864
881
  ttk::entry $w.box -width 36 -validate all \
@@ -900,15 +917,22 @@ proc ::ttk::dialog::file::NewDirVCmd {w str} {
900
917
 
901
918
  proc ::ttk::dialog::file::NewDirExit {w {save 0}} {
902
919
  upvar ::ttk::dialog::file::[winfo name $w] data
903
-
920
+
904
921
  if {$save} {
905
- set dir [lindex $data(history) $data(histpos)]
922
+ if {[info exists data(history)]} {
923
+ set dir [lindex $data(history) $data(histpos)]
924
+ } else {
925
+ set dir $data(selectPath)
926
+ }
927
+
906
928
  set newdir [file join $dir [$w.new.f.box get]]
907
929
  if {[catch {file mkdir $newdir} err]} {
908
930
  tk_messageBox -type ok -parent $w.new -icon error -message "$err"
909
931
  return
910
- } else {
932
+ } elseif {[winfo class $w] eq "TkFDialog"} {
911
933
  ChangeDir $w $newdir
934
+ } else {
935
+ treeUpdate $w $newdir
912
936
  }
913
937
  }
914
938
  destroy $w.new
@@ -936,10 +960,10 @@ proc ::ttk::dialog::file::Done {w} {
936
960
  if {[file extension $file] eq ""} {
937
961
  append file $data(-defaultextension)
938
962
  }
939
- lappend path [file join $cwd $file]
963
+ lappend path [JoinFile $cwd $file]
940
964
  }
941
965
  } else {
942
- set file [file join $cwd $data(selectFile)]
966
+ set file [JoinFile $cwd $data(selectFile)]
943
967
  if {[file extension $file] eq ""} {
944
968
  append file $data(-defaultextension)
945
969
  }
@@ -1257,7 +1281,10 @@ proc ::ttk::dialog::file::tkFDialog {type args} {
1257
1281
  wm title $w $data(-title)
1258
1282
 
1259
1283
  ::tk::SetFocusGrab $w $data(location)
1260
-
1284
+
1285
+ # Make sure the application doesn't hang if the toplevel is destroyed
1286
+ bind $w <Destroy> {set ::ttk::dialog::file::selectFilePath -1}
1287
+
1261
1288
  set data(active) $w
1262
1289
  tkwait variable ::ttk::dialog::file::selectFilePath
1263
1290
  unset data(active)
@@ -1329,7 +1356,7 @@ proc ::ttk::dialog::file::Config {dataName type argList} {
1329
1356
  set dir [file normalize [file join [pwd] $data(-initialdir)]]
1330
1357
  set path $dir
1331
1358
  while {[file exists $path] && [file type $path] eq "link"} {
1332
- set path [file normalize [file join \
1359
+ set path [file normalize [JoinFile \
1333
1360
  [file dirname $path] [file link $path]]]
1334
1361
  }
1335
1362
  if {[file isdirectory $path]} {
@@ -1403,12 +1430,14 @@ proc ::ttk::dialog::file::treeCreate {w} {
1403
1430
  pack $f2.f -fill both -expand 1 -padx 8 -pady 4
1404
1431
 
1405
1432
  set f3 [ttk::frame $w.f3]
1433
+ ttk::button $f3.new -text [mc "New Folder"]... \
1434
+ -command [list ::ttk::dialog::file::NewDirCmd $w]
1406
1435
  ttk::button $f3.ok -text [mc OK] -default active \
1407
1436
  -command [list ::ttk::dialog::file::TreeDone $w]
1408
1437
  ttk::button $f3.cancel -text [mc Cancel] \
1409
1438
  -command [list ::ttk::dialog::file::Cancel $w]
1410
- grid x $f3.ok $f3.cancel -sticky ew -padx {4 8} -pady 8
1411
- grid columnconfigure $f3 {1 2} -uniform buttons -minsize 80
1439
+ grid x $f3.new $f3.ok $f3.cancel -sticky ew -padx {4 8} -pady 8
1440
+ # grid columnconfigure $f3 {2 3} -uniform buttons -minsize 80
1412
1441
  grid columnconfigure $f3 0 -weight 1
1413
1442
 
1414
1443
  pack $f1 -side top -fill x
@@ -1439,8 +1468,10 @@ proc ::ttk::dialog::file::treeUpdate {w dir} {
1439
1468
  $txt mark set subdir end
1440
1469
 
1441
1470
  foreach d $list {
1471
+ # File split may produce terms starting with "./", strip those
1472
+ if {[string match {./*} $d]} {set d [string range $d 2 end]}
1442
1473
  treeOpen $w $parent subdir $d
1443
- set parent [file join $parent $d]
1474
+ set parent [JoinFile $parent $d]
1444
1475
  }
1445
1476
  $txt yview subdir-5l
1446
1477
  TreeSelect $w subdir
@@ -1492,7 +1523,7 @@ proc ::ttk::dialog::file::treeOpen {w path {index insert} {subdir .}} {
1492
1523
  $txt insert insert "\n"
1493
1524
  # Insert the line with the appropriate tags
1494
1525
  $txt insert insert $tabs [list $path]
1495
- file stat [file join $path $d] stat
1526
+ file stat [JoinFile $path $d] stat
1496
1527
  if {$stat(nlink) != 2} {
1497
1528
  set img [$txt image create insert -name diropen \
1498
1529
  -image ::ttk::dialog::image::diropen -padx 3]
@@ -1589,7 +1620,7 @@ proc ::ttk::dialog::file::TreeSelect {w index} {
1589
1620
  $data(text) tag add sel $index1-1c $index2+1c
1590
1621
  set path [lsearch -inline [$data(text) tag names $index1] /*]
1591
1622
  set dir [$data(text) get $index1+1c $index2]
1592
- set data(selectPath) [file join $path $dir]
1623
+ set data(selectPath) [JoinFile $path $dir]
1593
1624
  }
1594
1625
  }
1595
1626
 
@@ -1609,10 +1640,10 @@ proc ::ttk::dialog::file::TreeRelease1 {w} {
1609
1640
  $txt mark set selmark sel.first
1610
1641
  switch -glob $name {
1611
1642
  *::diropen {
1612
- treeOpen $w [file join $path $dir] $index
1643
+ treeOpen $w [JoinFile $path $dir] $index
1613
1644
  }
1614
1645
  *::dirclose {
1615
- treeClose $w [file join $path $dir]
1646
+ treeClose $w [JoinFile $path $dir]
1616
1647
  }
1617
1648
  }
1618
1649
  $txt tag remove sel 1.0 end
@@ -1672,6 +1703,9 @@ proc ttk::chooseDirectory {args} {
1672
1703
 
1673
1704
  ::ttk::dialog::file::treeUpdate $w $data(-initialdir)
1674
1705
 
1706
+ # Make sure the application doesn't hang if the toplevel is destroyed
1707
+ bind $w <Destroy> {set ::ttk::dialog::file::selectFilePath -1}
1708
+
1675
1709
  tkwait variable ::ttk::dialog::file::selectFilePath
1676
1710
 
1677
1711
  ::tk::RestoreFocusGrab $w $data(text) withdraw