unixWm.test
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:81k
源码类别:

通讯编程

开发平台:

Visual C++

  1. # This file is a Tcl script to test out Tk's interactions with
  2. # the window manager, including the "wm" command.  It is organized
  3. # in the standard fashion for Tcl tests.
  4. #
  5. # Copyright (c) 1992-1994 The Regents of the University of California.
  6. # Copyright (c) 1994-1997 Sun Microsystems, Inc.
  7. # Copyright (c) 1998-1999 by Scriptics Corporation.
  8. # All rights reserved.
  9. #
  10. # RCS: @(#) $Id: unixWm.test,v 1.29.2.4 2005/01/14 21:09:47 jenglish Exp $
  11. package require tcltest 2.2
  12. namespace import -force tcltest::configure
  13. namespace import -force tcltest::testsDirectory
  14. configure -testdir [file join [pwd] [file dirname [info script]]]
  15. configure -loadfile [file join [testsDirectory] constraints.tcl]
  16. tcltest::loadTestedCommands
  17. namespace import -force tcltest::interpreter
  18. namespace import -force tcltest::makeFile
  19. namespace import -force tcltest::removeFile
  20. proc sleep ms {
  21.     global x
  22.     after $ms {set x 1}
  23.     vwait x
  24. }
  25. # Procedure to set up a collection of top-level windows
  26. proc makeToplevels {} {
  27.     deleteWindows
  28.     foreach i {.raise1 .raise2 .raise3} {
  29. toplevel $i
  30. wm geom $i 150x100+0+0
  31. update
  32.     }
  33. }
  34. set i 1
  35. foreach geom {+20+80 +80+20 +0+0} {
  36.     catch {destroy .t}
  37.     test unixWm-1.$i {initial window position} unix {
  38. toplevel .t -width 200 -height 150
  39. wm geom .t $geom
  40. update
  41. wm geom .t
  42.     } 200x150$geom
  43.     incr i
  44. }
  45. # The tests below are tricky because window managers don't all move
  46. # windows correctly.  Try one motion and compute the window manager's
  47. # error, then factor this error into the actual tests.  In other words,
  48. # this just makes sure that things are consistent between moves.
  49. set i 1
  50. catch {destroy .t}
  51. toplevel .t -width 100 -height 150
  52. wm geom .t +200+200
  53. update
  54. wm geom .t +150+150
  55. update
  56. scan [wm geom .t] %dx%d+%d+%d width height x y
  57. set xerr [expr 150-$x]
  58. set yerr [expr 150-$y]
  59. foreach geom {+20+80 +80+20 +0+0 -0-0 +0-0 -0+0 -10-5 -10+5 +10-5} {
  60.     test unixWm-2.$i {moving window while mapped} unix {
  61. wm geom .t $geom
  62. update
  63. scan [wm geom .t] %dx%d%1s%d%1s%d width height xsign x ysign y
  64. format "%s%d%s%d" $xsign [eval expr $x$xsign$xerr] $ysign 
  65. [eval expr $y$ysign$yerr]
  66.     } $geom
  67.     incr i
  68. }
  69. set i 1
  70. foreach geom {+20+80 +80+20 +0+0 -0-0 +0-0 -0+0 -10-5 -10+5 +10-5} {
  71.     test unixWm-3.$i {moving window while iconified} unix {
  72. wm iconify .t
  73. sleep 200
  74. wm geom .t $geom
  75. update
  76. wm deiconify .t
  77. scan [wm geom .t] %dx%d%1s%d%1s%d width height xsign x ysign y
  78. format "%s%d%s%d" $xsign [eval expr $x$xsign$xerr] $ysign 
  79. [eval expr $y$ysign$yerr]
  80.     } $geom
  81.     incr i
  82. }
  83. set i 1
  84. foreach geom {+20+80 +100+40 +0+0} {
  85.     test unixWm-4.$i {moving window while withdrawn} unix {
  86. wm withdraw .t
  87. sleep 200
  88. wm geom .t $geom
  89. update
  90. wm deiconify .t
  91. wm geom .t
  92.     } 100x150$geom
  93.     incr i
  94. }
  95. test unixWm-5.1 {compounded state changes} {unix nonPortable} {
  96.     catch {destroy .t}
  97.     toplevel .t -width 200 -height 100
  98.     wm geometry .t +100+100
  99.     update
  100.     wm withdraw .t
  101.     wm deiconify .t
  102.     list [winfo ismapped .t] [wm state .t]
  103. } {1 normal}
  104. test unixWm-5.2 {compounded state changes} {unix nonPortable} {
  105.     catch {destroy .t}
  106.     toplevel .t -width 200 -height 100
  107.     wm geometry .t +100+100
  108.     update
  109.     wm withdraw .t
  110.     wm deiconify .t
  111.     wm withdraw .t
  112.     list [winfo ismapped .t] [wm state .t]
  113. } {0 withdrawn}
  114. test unixWm-5.3 {compounded state changes} {unix nonPortable} {
  115.     catch {destroy .t}
  116.     toplevel .t -width 200 -height 100
  117.     wm geometry .t +100+100
  118.     update
  119.     wm iconify .t
  120.     wm deiconify .t
  121.     wm iconify .t
  122.     wm deiconify .t
  123.     list [winfo ismapped .t] [wm state .t]
  124. } {1 normal}
  125. test unixWm-5.4 {compounded state changes} {unix nonPortable} {
  126.     catch {destroy .t}
  127.     toplevel .t -width 200 -height 100
  128.     wm geometry .t +100+100
  129.     update
  130.     wm iconify .t
  131.     wm deiconify .t
  132.     wm iconify .t
  133.     list [winfo ismapped .t] [wm state .t]
  134. } {0 iconic}
  135. test unixWm-5.5 {compounded state changes} {unix nonPortable} {
  136.     catch {destroy .t}
  137.     toplevel .t -width 200 -height 100
  138.     wm geometry .t +100+100
  139.     update
  140.     wm iconify .t
  141.     wm withdraw .t
  142.     list [winfo ismapped .t] [wm state .t]
  143. } {0 withdrawn}
  144. test unixWm-5.6 {compounded state changes} {unix nonPortable} {
  145.     catch {destroy .t}
  146.     toplevel .t -width 200 -height 100
  147.     wm geometry .t +100+100
  148.     update
  149.     wm iconify .t
  150.     wm withdraw .t
  151.     wm deiconify .t
  152.     list [winfo ismapped .t] [wm state .t]
  153. } {1 normal}
  154. test unixWm-5.7 {compounded state changes} {unix nonPortable} {
  155.     catch {destroy .t}
  156.     toplevel .t -width 200 -height 100
  157.     wm geometry .t +100+100
  158.     update
  159.     wm withdraw .t
  160.     wm iconify .t
  161.     list [winfo ismapped .t] [wm state .t]
  162. } {0 iconic}
  163. catch {destroy .t}
  164. toplevel .t -width 200 -height 100
  165. wm geom .t +10+10
  166. wm minsize .t 1 1
  167. update
  168. test unixWm-6.1 {size changes} unix {
  169.     .t config -width 180 -height 150
  170.     update
  171.     wm geom .t
  172. } 180x150+10+10
  173. test unixWm-6.2 {size changes} unix {
  174.     wm geom .t 250x60
  175.     .t config -width 170 -height 140
  176.     update
  177.     wm geom .t
  178. } 250x60+10+10
  179. test unixWm-6.3 {size changes} unix {
  180.     wm geom .t 250x60
  181.     .t config -width 170 -height 140
  182.     wm geom .t {}
  183.     update
  184.     wm geom .t
  185. } 170x140+10+10
  186. test unixWm-6.4 {size changes} {unix nonPortable userInteraction} {
  187.     wm minsize .t 1 1
  188.     update
  189.     puts stdout "Please resize window "t" with the mouse (but don't move it!),"
  190.     puts -nonewline stdout "then hit return: "
  191.     flush stdout
  192.     gets stdin
  193.     update
  194.     set width [winfo width .t]
  195.     set height [winfo height .t]
  196.     .t config -width 230 -height 110
  197.     update
  198.     incr width -[winfo width .t]
  199.     incr height -[winfo height .t]
  200.     wm geom .t {}
  201.     update
  202.     set w2 [winfo width .t]
  203.     set h2 [winfo height .t]
  204.     .t config -width 114 -height 261
  205.     update
  206.     list $width $height $w2 $h2 [wm geom .t]
  207. } {0 0 230 110 114x261+10+10}
  208. # I don't know why the wait below is needed, but without it the test
  209. # fails under twm.
  210. sleep 200
  211. test unixWm-6.5 {window initially iconic} {unix nonPortable} {
  212.     catch {destroy .t}
  213.     toplevel .t -width 100 -height 30
  214.     wm geometry .t +0+0
  215.     wm title .t 2
  216.     wm iconify .t
  217.     update idletasks
  218.     wm withdraw .t
  219.     wm deiconify .t
  220.     list [winfo ismapped .t] [wm state .t]
  221. } {1 normal}
  222. catch {destroy .m}
  223. toplevel .m
  224. wm overrideredirect .m 1
  225. foreach i {{Test label} Another {Yet another} {Last label}} j {1 2 3} {
  226.     label .m.$j -text $i
  227. }
  228. wm geometry .m +[expr 100 - [winfo vrootx .]]+[expr 200 - [winfo vrooty .]]
  229. update
  230. test unixWm-7.1 {override_redirect and Tk_MoveTopLevelWindow} unix {
  231.     list [winfo ismapped .m] [wm state .m] [winfo x .m] [winfo y .m]
  232. } {1 normal 100 200}
  233. wm geometry .m +[expr 150 - [winfo vrootx .]]+[expr 210 - [winfo vrooty .]]
  234. update
  235. test unixWm-7.2 {override_redirect and Tk_MoveTopLevelWindow} unix {
  236.     list [winfo ismapped .m] [wm state .m] [winfo x .m] [winfo y .m]
  237. } {1 normal 150 210}
  238. wm withdraw .m
  239. test unixWm-7.3 {override_redirect and Tk_MoveTopLevelWindow} unix {
  240.     list [winfo ismapped .m]
  241. } 0
  242. destroy .m
  243. catch {destroy .t}
  244. test unixWm-8.1 {icon windows} unix {
  245.     catch {destroy .t}
  246.     catch {destroy .icon}
  247.     toplevel .t -width 100 -height 30
  248.     wm geometry .t +0+0
  249.     toplevel .icon -width 50 -height 50 -bg red
  250.     wm iconwindow .t .icon
  251.     list [catch {wm withdraw .icon} msg] $msg
  252. } {1 {can't withdraw .icon: it is an icon for .t}}
  253. test unixWm-8.2 {icon windows} unix {
  254.     catch {destroy .t}
  255.     toplevel .t -width 100 -height 30
  256.     list [catch {wm iconwindow} msg] $msg
  257. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  258. test unixWm-8.3 {icon windows} unix {
  259.     catch {destroy .t}
  260.     toplevel .t -width 100 -height 30
  261.     list [catch {wm iconwindow .t b c} msg] $msg
  262. } {1 {wrong # args: should be "wm iconwindow window ?pathName?"}}
  263. test unixWm-8.4 {icon windows} unix {
  264.     catch {destroy .t}
  265.     catch {destroy .icon}
  266.     toplevel .t -width 100 -height 30
  267.     wm geom .t +0+0
  268.     set result [wm iconwindow .t]
  269.     toplevel .icon -width 50 -height 50 -bg red
  270.     wm iconwindow .t .icon
  271.     lappend result [wm iconwindow .t] [wm state .icon]
  272.     wm iconwindow .t {}
  273.     lappend result [wm iconwindow .t] [wm state .icon]
  274.     update
  275.     lappend result [winfo ismapped .t] [winfo ismapped .icon]
  276.     wm iconify .t
  277.     update
  278.     lappend result [winfo ismapped .t] [winfo ismapped .icon]
  279. } {.icon icon {} withdrawn 1 0 0 0}
  280. test unixWm-8.5 {icon windows} unix {
  281.     catch {destroy .t}
  282.     toplevel .t -width 100 -height 30
  283.     list [catch {wm iconwindow .t .gorp} msg] $msg
  284. } {1 {bad window path name ".gorp"}}
  285. test unixWm-8.6 {icon windows} unix {
  286.     catch {destroy .t}
  287.     toplevel .t -width 100 -height 30
  288.     frame .t.icon -width 50 -height 50 -bg red
  289.     list [catch {wm iconwindow .t .t.icon} msg] $msg
  290. } {1 {can't use .t.icon as icon window: not at top level}}
  291. test unixWm-8.7 {icon windows} unix {
  292.     catch {destroy .t}
  293.     catch {destroy .icon}
  294.     toplevel .t -width 100 -height 30
  295.     wm geom .t +0+0
  296.     toplevel .icon -width 50 -height 50 -bg red
  297.     toplevel .icon2 -width 50 -height 50 -bg green
  298.     wm iconwindow .t .icon
  299.     set result "[wm iconwindow .t] [wm state .icon] [wm state .icon2]"
  300.     wm iconwindow .t .icon2
  301.     lappend result [wm iconwindow .t] [wm state .icon] [wm state .icon2]
  302. } {.icon icon normal .icon2 withdrawn icon}
  303. catch {destroy .icon2}
  304. test unixWm-8.8 {icon windows} unix {
  305.     catch {destroy .t}
  306.     catch {destroy .icon}
  307.     toplevel .icon -width 50 -height 50 -bg red
  308.     wm geom .icon +0+0
  309.     update
  310.     set result [winfo ismapped .icon]
  311.     toplevel .t -width 100 -height 30
  312.     wm geom .t +0+0
  313.     tkwait visibility .t ;# Needed to keep tvtwm happy.
  314.     wm iconwindow .t .icon
  315.     sleep 500
  316.     lappend result [winfo ismapped .t] [winfo ismapped .icon]
  317. } {1 1 0}
  318. test unixWm-8.9 {icon windows} {unix nonPortable} {
  319.     # This test is non-portable because some window managers will
  320.     # destroy an icon window when it's associated window is destroyed.
  321.     catch {destroy .t}
  322.     catch {destroy .icon}
  323.     toplevel .t -width 100 -height 30
  324.     toplevel .icon -width 50 -height 50 -bg red
  325.     wm geom .t +0+0
  326.     wm iconwindow .t .icon
  327.     update
  328.     set result "[wm state .icon] [winfo ismapped .t] [winfo ismapped .icon]"
  329.     destroy .t
  330.     wm geom .icon +0+0
  331.     update
  332.     lappend result [winfo ismapped .icon] [wm state .icon]
  333.     wm deiconify .icon
  334.     update
  335.     lappend result [winfo ismapped .icon] [wm state .icon]
  336. } {icon 1 0 0 withdrawn 1 normal}
  337. test unixWm-8.10.1 {test for memory leaks} unix {
  338.     wm title .t "This is a long long long long long long title"
  339.     wm title .t "This is a long long long long long long title"
  340.     wm title .t "This is a long long long long long long title"
  341.     wm title .t "This is a long long long long long long title"
  342.     wm title .t "This is a long long long long long long title"
  343.     wm title .t "This is a long long long long long long title"
  344.     wm title .t "This is a long long long long long long title"
  345.     wm title .t "This is a long long long long long long title"
  346.     set x 1
  347. } 1
  348. test unixWm-8.10.2 {test for memory leaks} unix {
  349.     wm group .t .
  350.     wm group .t .
  351.     wm group .t .
  352.     wm group .t .
  353.     wm group .t .
  354.     wm group .t .
  355.     wm group .t .
  356.     wm group .t .
  357.     wm group .t .
  358.     wm group .t .
  359.     set x 1
  360. } 1
  361. test unixWm-9.1 {TkWmMapWindow procedure, client property} {unix testwrapper} {
  362.     catch {destroy .t}
  363.     toplevel .t -width 100 -height 50
  364.     wm geom .t +0+0
  365.     wm client .t Test_String
  366.     update
  367.     testprop [testwrapper .t] WM_CLIENT_MACHINE
  368. } {Test_String}
  369. test unixWm-9.2 {TkWmMapWindow procedure, command property} {unix testwrapper} {
  370.     catch {destroy .t}
  371.     toplevel .t -width 100 -height 50
  372.     wm geom .t +0+0
  373.     wm command .t "test command"
  374.     update
  375.     testprop [testwrapper .t] WM_COMMAND
  376. } {test
  377. command
  378. }
  379. test unixWm-9.3 {TkWmMapWindow procedure, iconic windows} unix {
  380.     catch {destroy .t}
  381.     toplevel .t -width 100 -height 300 -bg blue
  382.     wm geom .t +0+0
  383.     wm iconify .t
  384.     sleep 500
  385.     winfo ismapped .t
  386. } {0}
  387. test unixWm-9.4 {TkWmMapWindow procedure, icon windows} unix {
  388.     catch {destroy .t}
  389.     sleep 500
  390.     toplevel .t -width 100 -height 50 -bg blue
  391.     wm iconwindow . .t
  392.     update
  393.     set result [winfo ismapped .t]
  394. } {0}
  395. test unixWm-9.5 {TkWmMapWindow procedure, normal windows} unix {
  396.     catch {destroy .t}
  397.     toplevel .t -width 200 -height 20
  398.     wm geom .t +0+0
  399.     update
  400.     winfo ismapped .t
  401. } {1}
  402. testConstraint testmenubar [llength [info commands testmenubar]]
  403. test unixWm-10.1 {TkWmDeadWindow procedure, canceling UpdateGeometry idle handler} unix {
  404.     catch {destroy .t}
  405.     toplevel .t -width 100 -height 50
  406.     wm geom .t +0+0
  407.     update
  408.     .t configure -width 200 -height 100
  409.     destroy .t
  410. } {}
  411. test unixWm-10.2 {TkWmDeadWindow procedure, destroying menubar} {unix testmenubar} {
  412.     catch {destroy .t}
  413.     catch {destroy .f}
  414.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  415.     wm geom .t +0+0
  416.     update
  417.     frame .f -width 400 -height 30 -bd 2 -relief raised -bg green
  418.     bind .f <Destroy> {lappend result destroyed}
  419.     testmenubar window .t .f
  420.     update
  421.     set result {}
  422.     destroy .t
  423.     lappend result [winfo exists .f]
  424. } {destroyed 0}
  425. test unixWm-11.1 {Tk_WmCmd procedure, miscellaneous errors} unix {
  426.     list [catch {wm} msg] $msg
  427. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  428. test unixWm-11.2 {Tk_WmCmd procedure, miscellaneous errors} unix {
  429.     list [catch {wm aspect} msg] $msg
  430. } {1 {wrong # args: should be "wm option window ?arg ...?"}}
  431. test unixWm-11.3 {Tk_WmCmd procedure, miscellaneous errors} unix {
  432.     list [catch {wm iconify bogus} msg] $msg
  433. } {1 {bad window path name "bogus"}}
  434. test unixWm-11.4 {Tk_WmCmd procedure, miscellaneous errors} unix {
  435.     catch {destroy .b}
  436.     button .b -text hello
  437.     list [catch {wm geometry .b} msg] $msg
  438. } {1 {window ".b" isn't a top-level window}}
  439. catch {destroy .t}
  440. catch {destroy .icon}
  441. toplevel .t -width 100 -height 50
  442. wm geom .t +0+0
  443. update
  444. test unixWm-12.1 {Tk_WmCmd procedure, "aspect" option} unix {
  445.     list [catch {wm aspect .t 12} msg] $msg
  446. } {1 {wrong # args: should be "wm aspect window ?minNumer minDenom maxNumer maxDenom?"}}
  447. test unixWm-12.2 {Tk_WmCmd procedure, "aspect" option} unix {
  448.     list [catch {wm aspect .t 12 13 14 15 16} msg] $msg
  449. } {1 {wrong # args: should be "wm aspect window ?minNumer minDenom maxNumer maxDenom?"}}
  450. test unixWm-12.3 {Tk_WmCmd procedure, "aspect" option} unix {
  451.     set result {}
  452.     lappend result [wm aspect .t]
  453.     wm aspect .t 3 4 10 2
  454.     lappend result [wm aspect .t]
  455.     wm aspect .t {} {} {} {}
  456.     lappend result [wm aspect .t]
  457. } {{} {3 4 10 2} {}}
  458. test unixWm-12.4 {Tk_WmCmd procedure, "aspect" option} unix {
  459.     list [catch {wm aspect .t bad 14 15 16} msg] $msg
  460. } {1 {expected integer but got "bad"}}
  461. test unixWm-12.5 {Tk_WmCmd procedure, "aspect" option} unix {
  462.     list [catch {wm aspect .t 13 foo 15 16} msg] $msg
  463. } {1 {expected integer but got "foo"}}
  464. test unixWm-12.6 {Tk_WmCmd procedure, "aspect" option} unix {
  465.     list [catch {wm aspect .t 13 14 bar 16} msg] $msg
  466. } {1 {expected integer but got "bar"}}
  467. test unixWm-12.7 {Tk_WmCmd procedure, "aspect" option} unix {
  468.     list [catch {wm aspect .t 13 14 15 baz} msg] $msg
  469. } {1 {expected integer but got "baz"}}
  470. test unixWm-12.8 {Tk_WmCmd procedure, "aspect" option} unix {
  471.     list [catch {wm aspect .t 0 14 15 16} msg] $msg
  472. } {1 {aspect number can't be <= 0}}
  473. test unixWm-12.9 {Tk_WmCmd procedure, "aspect" option} unix {
  474.     list [catch {wm aspect .t 13 0 15 16} msg] $msg
  475. } {1 {aspect number can't be <= 0}}
  476. test unixWm-12.10 {Tk_WmCmd procedure, "aspect" option} unix {
  477.     list [catch {wm aspect .t 13 14 0 16} msg] $msg
  478. } {1 {aspect number can't be <= 0}}
  479. test unixWm-12.11 {Tk_WmCmd procedure, "aspect" option} unix {
  480.     list [catch {wm aspect .t 13 14 15 0} msg] $msg
  481. } {1 {aspect number can't be <= 0}}
  482. test unixWm-13.1 {Tk_WmCmd procedure, "client" option} unix {
  483.     list [catch {wm client .t x y} msg] $msg
  484. } {1 {wrong # args: should be "wm client window ?name?"}}
  485. test unixWm-13.2 {Tk_WmCmd procedure, "client" option} {unix testwrapper} {
  486.     set result {}
  487.     lappend result [wm client .t]
  488.     wm client .t Test_String
  489.     lappend result [testprop [testwrapper .t] WM_CLIENT_MACHINE]
  490.     wm client .t New
  491.     lappend result [wm client .t]
  492.     wm client .t {}
  493.     lappend result [wm client .t] [testprop [testwrapper .t] WM_CLIENT_MACHINE]
  494. } {{} Test_String New {} {}}
  495. test unixWm-13.3 {Tk_WmCmd procedure, "client" option, unmapped window} unix {
  496.     catch {destroy .t2}
  497.     toplevel .t2
  498.     wm client .t2 Test_String
  499.     wm client .t2 {}
  500.     wm client .t2 Test_String
  501.     destroy .t2
  502. } {}
  503. test unixWm-14.1 {Tk_WmCmd procedure, "colormapwindows" option} unix {
  504.     list [catch {wm colormapwindows .t 12 13} msg] $msg
  505. } {1 {wrong # args: should be "wm colormapwindows window ?windowList?"}}
  506. test unixWm-14.2 {Tk_WmCmd procedure, "colormapwindows" option} unix {
  507.     catch {destroy .t2}
  508.     toplevel .t2 -width 200 -height 200 -colormap new
  509.     wm geom .t2 +0+0
  510.     frame .t2.a -width 100 -height 30
  511.     frame .t2.b -width 100 -height 30 -colormap new
  512.     pack .t2.a .t2.b -side top
  513.     update
  514.     set x [wm colormapwindows .t2]
  515.     frame .t2.c -width 100 -height 30 -colormap new
  516.     pack .t2.c -side top
  517.     update
  518.     list $x [wm colormapwindows .t2]
  519. } {{.t2.b .t2} {.t2.b .t2.c .t2}}
  520. test unixWm-14.3 {Tk_WmCmd procedure, "colormapwindows" option} unix {
  521.     list [catch {wm col . "a {"} msg] $msg
  522. } {1 {unmatched open brace in list}}
  523. test unixWm-14.4 {Tk_WmCmd procedure, "colormapwindows" option} unix {
  524.     list [catch {wm colormapwindows . foo} msg] $msg
  525. } {1 {bad window path name "foo"}}
  526. test unixWm-14.5 {Tk_WmCmd procedure, "colormapwindows" option} unix {
  527.     catch {destroy .t2}
  528.     toplevel .t2 -width 200 -height 200 -colormap new
  529.     wm geom .t2 +0+0
  530.     frame .t2.a -width 100 -height 30
  531.     frame .t2.b -width 100 -height 30
  532.     frame .t2.c -width 100 -height 30
  533.     pack .t2.a .t2.b .t2.c -side top
  534.     wm colormapwindows .t2 {.t2.c .t2 .t2.a}
  535.     wm colormapwindows .t2
  536. } {.t2.c .t2 .t2.a}
  537. test unixWm-14.6 {Tk_WmCmd procedure, "colormapwindows" option} unix {
  538.     catch {destroy .t2}
  539.     toplevel .t2 -width 200 -height 200
  540.     wm geom .t2 +0+0
  541.     frame .t2.a -width 100 -height 30
  542.     frame .t2.b -width 100 -height 30
  543.     frame .t2.c -width 100 -height 30
  544.     pack .t2.a .t2.b .t2.c -side top
  545.     wm colormapwindows .t2 {.t2.b .t2.a}
  546.     wm colormapwindows .t2
  547. } {.t2.b .t2.a}
  548. test unixWm-14.7 {Tk_WmCmd procedure, "colormapwindows" option} unix {
  549.     catch {destroy .t2}
  550.     toplevel .t2 -width 200 -height 200 -colormap new
  551.     wm geom .t2 +0+0
  552.     set x [wm colormapwindows .t2]
  553.     wm colormapwindows .t2 {}
  554.     list $x [wm colormapwindows .t2]
  555. } {{} {}}
  556. catch {destroy .t2}
  557. test unixWm-15.1 {Tk_WmCmd procedure, "command" option} unix {
  558.     list [catch {wm command .t 12 13} msg] $msg
  559. } {1 {wrong # args: should be "wm command window ?value?"}}
  560. test unixWm-15.2 {Tk_WmCmd procedure, "command" option} unix {
  561.     list [catch {wm command .t 12 13} msg] $msg
  562. } {1 {wrong # args: should be "wm command window ?value?"}}
  563. test unixWm-15.3 {Tk_WmCmd procedure, "command" option} {unix testwrapper} {
  564.     set result {}
  565.     lappend result [wm command .t]
  566.     wm command .t "test command"
  567.     lappend result [testprop [testwrapper .t] WM_COMMAND]
  568.     wm command .t "new command"
  569.     lappend result [wm command .t]
  570.     wm command .t {}
  571.     lappend result [wm command .t] [testprop [testwrapper .t] WM_COMMAND]
  572. } {{} {test
  573. command
  574. } {new command} {} {}}
  575. test unixWm-15.4 {Tk_WmCmd procedure, "command" option, window not mapped} unix {
  576.     catch {destroy .t2}
  577.     toplevel .t2
  578.     wm geom .t2 +0+0
  579.     wm command .t2 "test command"
  580.     wm command .t2 "new command"
  581.     wm command .t2 {}
  582.     destroy .t2
  583. } {}
  584. test unixWm-15.5 {Tk_WmCmd procedure, "command" option} unix {
  585.     list [catch {wm command .t "a {b"} msg] $msg
  586. } {1 {unmatched open brace in list}}
  587. test unixWm-16.1 {Tk_WmCmd procedure, "deiconify" option} unix {
  588.     list [catch {wm deiconify .t 12} msg] $msg
  589. } {1 {wrong # args: should be "wm deiconify window"}}
  590. test unixWm-16.2 {Tk_WmCmd procedure, "deiconify" option} unix {
  591.     catch {destroy .icon}
  592.     toplevel .icon -width 50 -height 50 -bg red
  593.     wm iconwindow .t .icon
  594.     set result [list [catch {wm deiconify .icon} msg] $msg]
  595.     destroy .icon
  596.     set result
  597. } {1 {can't deiconify .icon: it is an icon for .t}}
  598. test unixWm-16.3 {Tk_WmCmd procedure, "deiconify" option} unix {
  599.     wm iconify .t
  600.     set result {}
  601.     lappend result [winfo ismapped .t] [wm state .t]
  602.     wm deiconify .t
  603.     lappend result [winfo ismapped .t] [wm state .t]
  604. } {0 iconic 1 normal}
  605. test unixWm-17.1 {Tk_WmCmd procedure, "focusmodel" option} unix {
  606.     list [catch {wm focusmodel .t 12 13} msg] $msg
  607. } {1 {wrong # args: should be "wm focusmodel window ?active|passive?"}}
  608. test unixWm-17.2 {Tk_WmCmd procedure, "focusmodel" option} unix {
  609.     list [catch {wm focusmodel .t bogus} msg] $msg
  610. } {1 {bad argument "bogus": must be active or passive}}
  611. test unixWm-17.3 {Tk_WmCmd procedure, "focusmodel" option} unix {
  612.     set result {} 
  613.     lappend result [wm focusmodel .t]
  614.     wm focusmodel .t active
  615.     lappend result [wm focusmodel .t]
  616.     wm focusmodel .t passive
  617.     lappend result [wm focusmodel .t]
  618.     set result
  619. } {passive active passive}
  620. test unixWm-18.1 {Tk_WmCmd procedure, "frame" option} unix {
  621.     list [catch {wm frame .t 12} msg] $msg
  622. } {1 {wrong # args: should be "wm frame window"}}
  623. test unixWm-18.2 {Tk_WmCmd procedure, "frame" option} {unix nonPortable} {
  624.     expr [wm frame .t] == [winfo id .t]
  625. } {0}
  626. test unixWm-18.3 {Tk_WmCmd procedure, "frame" option} {unix nonPortable} {
  627.     catch {destroy .t2}
  628.     toplevel .t2
  629.     wm geom .t2 +0+0
  630.     wm overrideredirect .t2 1
  631.     update
  632.     set result [expr [wm frame .t2] == [winfo id .t2]]
  633.     destroy .t2
  634.     set result
  635. } {1}
  636. test unixWm-19.1 {Tk_WmCmd procedure, "geometry" option} unix {
  637.     list [catch {wm geometry .t 12 13} msg] $msg
  638. } {1 {wrong # args: should be "wm geometry window ?newGeometry?"}}
  639. test unixWm-19.2 {Tk_WmCmd procedure, "geometry" option} {unix nonPortable} {
  640.     wm geometry .t -1+5
  641.     update
  642.     wm geometry .t
  643. } {100x50-1+5}
  644. test unixWm-19.3 {Tk_WmCmd procedure, "geometry" option} {unix nonPortable} {
  645.     wm geometry .t +10-4
  646.     update
  647.     wm geometry .t
  648. } {100x50+10-4}
  649. test unixWm-19.4 {Tk_WmCmd procedure, "geometry" option} {unix nonPortable} {
  650.     catch {destroy .t2}
  651.     toplevel .t2
  652.     wm geom .t2 -5+10
  653.     listbox .t2.l -width 30 -height 12 -setgrid 1
  654.     pack .t2.l
  655.     update
  656.     set result [wm geometry .t2]
  657.     destroy .t2
  658.     set result
  659. } {30x12-5+10}
  660. test unixWm-19.5 {Tk_WmCmd procedure, "geometry" option} {unix nonPortable} {
  661.     wm geometry .t 150x300+5+6
  662.     update
  663.     set result {}
  664.     lappend result [wm geometry .t]
  665.     wm geometry .t {}
  666.     update
  667.     lappend result [wm geometry .t]
  668. } {150x300+5+6 100x50+5+6}
  669. test unixWm-19.6 {Tk_WmCmd procedure, "geometry" option} {unix} {
  670.     list [catch {wm geometry .t qrs} msg] $msg
  671. } {1 {bad geometry specifier "qrs"}}
  672. test unixWm-20.1 {Tk_WmCmd procedure, "grid" option} unix {
  673.     list [catch {wm grid .t 12 13} msg] $msg
  674. } {1 {wrong # args: should be "wm grid window ?baseWidth baseHeight widthInc heightInc?"}}
  675. test unixWm-20.2 {Tk_WmCmd procedure, "grid" option} unix {
  676.     list [catch {wm grid .t 12 13 14 15 16} msg] $msg
  677. } {1 {wrong # args: should be "wm grid window ?baseWidth baseHeight widthInc heightInc?"}}
  678. test unixWm-20.3 {Tk_WmCmd procedure, "grid" option} unix {
  679.     set result {}
  680.     lappend result [wm grid .t]
  681.     wm grid .t 5 6 20 10
  682.     lappend result [wm grid .t]
  683.     wm grid .t {} {} {} {}
  684.     lappend result [wm grid .t]
  685. } {{} {5 6 20 10} {}}
  686. test unixWm-20.4 {Tk_WmCmd procedure, "grid" option} unix {
  687.     list [catch {wm grid .t bad 10 11 12} msg] $msg
  688. } {1 {expected integer but got "bad"}}
  689. test unixWm-20.5 {Tk_WmCmd procedure, "grid" option} unix {
  690.     list [catch {wm grid .t -1 11 12 13} msg] $msg
  691. } {1 {baseWidth can't be < 0}}
  692. test unixWm-20.6 {Tk_WmCmd procedure, "grid" option} unix {
  693.     list [catch {wm grid .t 10 foo 12 13} msg] $msg
  694. } {1 {expected integer but got "foo"}}
  695. test unixWm-20.7 {Tk_WmCmd procedure, "grid" option} unix {
  696.     list [catch {wm grid .t 10 -11 12 13} msg] $msg
  697. } {1 {baseHeight can't be < 0}}
  698. test unixWm-20.8 {Tk_WmCmd procedure, "grid" option} unix {
  699.     list [catch {wm grid .t 10 11 bar 13} msg] $msg
  700. } {1 {expected integer but got "bar"}}
  701. test unixWm-20.9 {Tk_WmCmd procedure, "grid" option} unix {
  702.     list [catch {wm grid .t 10 11 -2 13} msg] $msg
  703. } {1 {widthInc can't be <= 0}}
  704. test unixWm-20.10 {Tk_WmCmd procedure, "grid" option} unix {
  705.     list [catch {wm grid .t 10 11 12 bogus} msg] $msg
  706. } {1 {expected integer but got "bogus"}}
  707. test unixWm-20.11 {Tk_WmCmd procedure, "grid" option} unix {
  708.     list [catch {wm grid .t 10 11 12 -1} msg] $msg
  709. } {1 {heightInc can't be <= 0}}
  710. catch {destroy .t}
  711. catch {destroy .icon}
  712. toplevel .t -width 100 -height 50
  713. wm geom .t +0+0
  714. update
  715. test unixWm-21.1 {Tk_WmCmd procedure, "group" option} unix {
  716.     list [catch {wm group .t 12 13} msg] $msg
  717. } {1 {wrong # args: should be "wm group window ?pathName?"}}
  718. test unixWm-21.2 {Tk_WmCmd procedure, "group" option} unix {
  719.     list [catch {wm group .t bogus} msg] $msg
  720. } {1 {bad window path name "bogus"}}
  721. test unixWm-21.3 {Tk_WmCmd procedure, "group" option} {unix testwrapper} {
  722.     set result {}
  723.     lappend result [wm group .t]
  724.     wm group .t .
  725.     set bit [format 0x%x [expr 0x40 & [lindex [testprop [testwrapper .t] 
  726.     WM_HINTS] 0]]]
  727.     lappend result [wm group .t] $bit
  728.     wm group .t {}
  729.     set bit [format 0x%x [expr 0x40 & [lindex [testprop [testwrapper .t] 
  730.     WM_HINTS] 0]]]
  731.     lappend result [wm group .t] $bit
  732. } {{} . 0x40 {} 0x0}
  733. test unixWm-21.4 {Tk_WmCmd procedure, "group" option, make window exist} {unix testwrapper} {
  734.     catch {destroy .t2}
  735.     toplevel .t2
  736.     wm geom .t2 +0+0
  737.     wm group .t .t2
  738.     set hints [testprop [testwrapper .t] WM_HINTS]
  739.     set result [expr [testwrapper .t2] - [lindex $hints 8]]
  740.     destroy .t2
  741.     set result
  742. } {0}
  743. test unixWm-21.5 {Tk_WmCmd procedure, "group" option, create leader wrapper} {unix testwrapper} {
  744.     catch {destroy .t2}
  745.     catch {destroy .t3}
  746.     toplevel .t2 -width 120 -height 300
  747.     wm geometry .t2 +0+0
  748.     toplevel .t3 -width 120 -height 300
  749.     wm geometry .t2 +0+0
  750.     set result [list [testwrapper .t2]]
  751.     wm group .t3 .t2
  752.     lappend result [expr {[testwrapper .t2] == ""}]
  753.     destroy .t2 .t3
  754.     set result
  755. } {{} 0}
  756. test unixWm-22.1 {Tk_WmCmd procedure, "iconbitmap" option} unix {
  757.     list [catch {wm iconbitmap .t 12 13} msg] $msg
  758. } {1 {wrong # args: should be "wm iconbitmap window ?bitmap?"}}
  759. test unixWm-22.2 {Tk_WmCmd procedure, "iconbitmap" option} {unix testwrapper} {
  760.     set result {}
  761.     lappend result [wm iconbitmap .t]
  762.     wm iconbitmap .t questhead
  763.     set bit [format 0x%x [expr 0x4 & [lindex [testprop [testwrapper .t] 
  764.     WM_HINTS] 0]]]
  765.     lappend result [wm iconbitmap .t] $bit
  766.     wm iconbitmap .t {}
  767.     set bit [format 0x%x [expr 0x4 & [lindex [testprop [testwrapper .t] 
  768.     WM_HINTS] 0]]]
  769.     lappend result [wm iconbitmap .t] $bit
  770. } {{} questhead 0x4 {} 0x0}
  771. test unixWm-22.3 {Tk_WmCmd procedure, "iconbitmap" option} unix {
  772.     list [catch {wm iconbitmap .t bad-bitmap} msg] $msg
  773. } {1 {bitmap "bad-bitmap" not defined}}
  774. test unixWm-23.1 {Tk_WmCmd procedure, "iconify" option} unix {
  775.     list [catch {wm iconify .t 12} msg] $msg
  776. } {1 {wrong # args: should be "wm iconify window"}}
  777. test unixWm-23.2 {Tk_WmCmd procedure, "iconify" option} unix {
  778.     catch {destroy .t2}
  779.     toplevel .t2
  780.     wm overrideredirect .t2 1
  781.     set result [list [catch {wm iconify .t2} msg] $msg]
  782.     destroy .t2
  783.     set result
  784. } {1 {can't iconify ".t2": override-redirect flag is set}}
  785. test unixWm-23.3 {Tk_WmCmd procedure, "iconify" option} unix {
  786.     catch {destroy .t2}
  787.     toplevel .t2
  788.     wm geom .t2 +0+0
  789.     wm transient .t2 .t
  790.     set result [list [catch {wm iconify .t2} msg] $msg]
  791.     destroy .t2
  792.     set result
  793. } {1 {can't iconify ".t2": it is a transient}}
  794. test unixWm-23.4 {Tk_WmCmd procedure, "iconify" option} unix {
  795.     catch {destroy .t2}
  796.     toplevel .t2
  797.     wm geom .t2 +0+0
  798.     wm iconwindow .t .t2
  799.     set result [list [catch {wm iconify .t2} msg] $msg]
  800.     destroy .t2
  801.     set result
  802. } {1 {can't iconify .t2: it is an icon for .t}}
  803. test unixWm-23.5 {Tk_WmCmd procedure, "iconify" option} unix {
  804.     catch {destroy .t2}
  805.     toplevel .t2
  806.     wm geom .t2 +0+0
  807.     update
  808.     wm iconify .t2
  809.     update
  810.     set result [winfo ismapped .t2]
  811.     destroy .t2
  812.     set result
  813. } {0}
  814. test unixWm-23.6 {Tk_WmCmd procedure, "iconify" option} unix {
  815.     catch {destroy .t2}
  816.     toplevel .t2
  817.     wm geom .t2 -0+0
  818.     update
  819.     set result [winfo ismapped .t2]
  820.     wm iconify .t2
  821.     update
  822.     lappend result [winfo ismapped .t2]
  823.     destroy .t2
  824.     set result
  825. } {1 0}
  826. test unixWm-24.1 {Tk_WmCmd procedure, "iconmask" option} unix {
  827.     list [catch {wm iconmask .t 12 13} msg] $msg
  828. } {1 {wrong # args: should be "wm iconmask window ?bitmap?"}}
  829. test unixWm-24.2 {Tk_WmCmd procedure, "iconmask" option} {unix testwrapper} {
  830.     set result {}
  831.     lappend result [wm iconmask .t]
  832.     wm iconmask .t questhead
  833.     set bit [format 0x%x [expr 0x20 & [lindex [testprop [testwrapper .t] 
  834.     WM_HINTS] 0]]]
  835.     lappend result [wm iconmask .t] $bit
  836.     wm iconmask .t {}
  837.     set bit [format 0x%x [expr 0x20 & [lindex [testprop [testwrapper .t] 
  838.     WM_HINTS] 0]]]
  839.     lappend result [wm iconmask .t] $bit
  840. } {{} questhead 0x20 {} 0x0}
  841. test unixWm-24.3 {Tk_WmCmd procedure, "iconmask" option} unix {
  842.     list [catch {wm iconmask .t bogus} msg] $msg
  843. } {1 {bitmap "bogus" not defined}}
  844. test unixWm-25.1 {Tk_WmCmd procedure, "iconname" option} unix {
  845.     list [catch {wm icon .t} msg] $msg
  846. } {1 {ambiguous option "icon": must be aspect, attributes, client, colormapwindows, command, deiconify, focusmodel, frame, geometry, grid, group, iconbitmap, iconify, iconmask, iconname, iconphoto, iconposition, iconwindow, maxsize, minsize, overrideredirect, positionfrom, protocol, resizable, sizefrom, stackorder, state, title, transient, or withdraw}}
  847. test unixWm-25.2 {Tk_WmCmd procedure, "iconname" option} unix {
  848.     list [catch {wm iconname .t 12 13} msg] $msg
  849. } {1 {wrong # args: should be "wm iconname window ?newName?"}}
  850. test unixWm-25.3 {Tk_WmCmd procedure, "iconname" option} {unix testwrapper} {
  851.     set result {}
  852.     lappend result [wm iconname .t]
  853.     wm iconname .t test_name
  854.     lappend result [wm iconname .t] [testprop [testwrapper .t] WM_ICON_NAME]
  855.     wm iconname .t {}
  856.     lappend result [wm iconname .t] [testprop [testwrapper .t] WM_ICON_NAME]
  857. } {{} test_name test_name {} {}}
  858. test unixWm-26.1 {Tk_WmCmd procedure, "iconposition" option} unix {
  859.     list [catch {wm iconposition .t 12} msg] $msg
  860. } {1 {wrong # args: should be "wm iconposition window ?x y?"}}
  861. test unixWm-26.2 {Tk_WmCmd procedure, "iconposition" option} unix {
  862.     list [catch {wm iconposition .t 12 13 14} msg] $msg
  863. } {1 {wrong # args: should be "wm iconposition window ?x y?"}}
  864. test unixWm-26.3 {Tk_WmCmd procedure, "iconposition" option} {unix testwrapper} {
  865.     set result {}
  866.     lappend result [wm iconposition .t]
  867.     wm iconposition .t 10 15
  868.     set prop [testprop [testwrapper .t] WM_HINTS]
  869.     lappend result [wm iconposition .t] [lindex $prop 5] [lindex $prop 6]
  870.     lappend result  [format 0x%x [expr 0x10 & [lindex $prop 0]]]
  871.     wm iconposition .t {} {}
  872.     set bit [format 0x%x [expr 0x10 & [lindex [testprop [testwrapper .t] 
  873.     WM_HINTS] 0]]]
  874.     lappend result [wm iconposition .t] $bit
  875. } {{} {10 15} 0xa 0xf 0x10 {} 0x0}
  876. test unixWm-26.4 {Tk_WmCmd procedure, "iconposition" option} unix {
  877.     list [catch {wm iconposition .t bad 13} msg] $msg
  878. } {1 {expected integer but got "bad"}}
  879. test unixWm-26.5 {Tk_WmCmd procedure, "iconposition" option} unix {
  880.     list [catch {wm iconposition .t 13 lousy} msg] $msg
  881. } {1 {expected integer but got "lousy"}}
  882. test unixWm-27.1 {Tk_WmCmd procedure, "iconwindow" option} unix {
  883.     list [catch {wm iconwindow .t 12 13} msg] $msg
  884. } {1 {wrong # args: should be "wm iconwindow window ?pathName?"}}
  885. test unixWm-27.2 {Tk_WmCmd procedure, "iconwindow" option} {unix testwrapper} {
  886.     catch {destroy .icon}
  887.     toplevel .icon -width 50 -height 50 -bg green
  888.     set result {}
  889.     lappend result [wm iconwindow .t]
  890.     wm iconwindow .t .icon
  891.     set prop [testprop [testwrapper .t] WM_HINTS]
  892.     lappend result [wm iconwindow .t] [wm state .icon]
  893.     lappend result [format 0x%x [expr 0x8 & [lindex $prop 0]]]
  894.     lappend result [expr [testwrapper .icon] == [lindex $prop 4]]
  895.     wm iconwindow .t {}
  896.     set bit [format 0x%x [expr 0x8 & [lindex [testprop [testwrapper .t] 
  897.     WM_HINTS] 0]]]
  898.     lappend result [wm iconwindow .t]  [wm state .icon] $bit
  899.     destroy .icon
  900.     set result
  901. } {{} .icon icon 0x8 1 {} withdrawn 0x0}
  902. test unixWm-27.3 {Tk_WmCmd procedure, "iconwindow" option} unix {
  903.     list [catch {wm iconwindow .t bogus} msg] $msg
  904. } {1 {bad window path name "bogus"}}
  905. test unixWm-27.4 {Tk_WmCmd procedure, "iconwindow" option} unix {
  906.     catch {destroy .b}
  907.     button .b -text Help
  908.     set result [list [catch {wm iconwindow .t .b} msg] $msg]
  909.     destroy .b
  910.     set result
  911. } {1 {can't use .b as icon window: not at top level}}
  912. test unixWm-27.5 {Tk_WmCmd procedure, "iconwindow" option} unix {
  913.     catch {destroy .icon}
  914.     toplevel .icon -width 50 -height 50 -bg green
  915.     catch {destroy .t2}
  916.     toplevel .t2
  917.     wm geom .t2 -0+0
  918.     wm iconwindow .t2 .icon
  919.     set result [list [catch {wm iconwindow .t .icon} msg] $msg]
  920.     destroy .t2
  921.     destroy .icon
  922.     set result
  923. } {1 {.icon is already an icon for .t2}}
  924. test unixWm-27.6 {Tk_WmCmd procedure, "iconwindow" option, changing icons} unix {
  925.     catch {destroy .icon}
  926.     catch {destroy .icon2}
  927.     toplevel .icon -width 50 -height 50 -bg green
  928.     toplevel .icon2 -width 50 -height 50 -bg red
  929.     set result {}
  930.     wm iconwindow .t .icon
  931.     lappend result [wm state .icon] [wm state .icon2]
  932.     wm iconwindow .t .icon2
  933.     lappend result [wm state .icon] [wm state .icon2]
  934.     destroy .icon .icon2
  935.     set result
  936. } {icon normal withdrawn icon}
  937. test unixWm-27.7 {Tk_WmCmd procedure, "iconwindow" option, withdrawing icon} unix {
  938.     catch {destroy .icon}
  939.     toplevel .icon -width 50 -height 50 -bg green
  940.     wm geometry .icon +0+0
  941.     update
  942.     set result {}
  943.     lappend result [wm state .icon] [winfo viewable .icon]
  944.     wm iconwindow .t .icon
  945.     lappend result [wm state .icon] [winfo viewable .icon]
  946.     destroy .icon
  947.     set result
  948. } {normal 1 icon 0}
  949. test unixWm-28.1 {Tk_WmCmd procedure, "maxsize" option} {nonPortable} {
  950.     wm maxsize .t
  951. }  {1137 870}
  952. test unixWm-28.2 {Tk_WmCmd procedure, "maxsize" option} {nonPortable} {
  953.     # Not portable, because some window managers let applications override
  954.     # minsize and maxsize.
  955.     wm maxsize .t 200 150
  956.     wm geom .t 300x200
  957.     update
  958.     list [winfo width .t] [winfo height .t]
  959. } {200 150}
  960. catch {destroy .t}
  961. catch {destroy .icon}
  962. toplevel .t -width 100 -height 50
  963. wm geom .t +0+0
  964. update
  965. test unixWm-29.1 {Tk_WmCmd procedure, "minsize" option} {nonPortable} {
  966.     # Not portable, because some window managers let applications override
  967.     # minsize and maxsize.
  968.     wm minsize .t 150 100
  969.     wm geom .t 50x50
  970.     update
  971.     list [winfo width .t] [winfo height .t]
  972. } {150 100}
  973. catch {destroy .t}
  974. catch {destroy .icon}
  975. toplevel .t -width 100 -height 50
  976. wm geom .t +0+0
  977. update
  978. test unixWm-30.1 {Tk_WmCmd procedure, "overrideredirect" option} unix {
  979.     list [catch {wm overrideredirect .t 1 2} msg]  $msg
  980. } {1 {wrong # args: should be "wm overrideredirect window ?boolean?"}}
  981. test unixWm-30.2 {Tk_WmCmd procedure, "overrideredirect" option} unix {
  982.     list [catch {wm overrideredirect .t boo} msg]  $msg
  983. } {1 {expected boolean value but got "boo"}}
  984. test unixWm-30.3 {Tk_WmCmd procedure, "overrideredirect" option} unix {
  985.     set result {}
  986.     lappend result [wm overrideredirect .t]
  987.     wm overrideredirect .t true
  988.     lappend result [wm overrideredirect .t]
  989.     wm overrideredirect .t off
  990.     lappend result [wm overrideredirect .t]
  991. } {0 1 0}
  992. test unixWm-31.1 {Tk_WmCmd procedure, "positionfrom" option} unix {
  993.     list [catch {wm positionfrom .t 1 2} msg]  $msg
  994. } {1 {wrong # args: should be "wm positionfrom window ?user/program?"}}
  995. test unixWm-31.2 {Tk_WmCmd procedure, "positionfrom" option} {unix testwrapper} {
  996.     set result {}
  997.     lappend result [wm positionfrom .t]
  998.     wm positionfrom .t program
  999.     update
  1000.     set bit [format 0x%x [expr 0x5 & [lindex [testprop [testwrapper .t] 
  1001.     WM_NORMAL_HINTS] 0]]]
  1002.     lappend result [wm positionfrom .t] $bit
  1003.     wm positionfrom .t user
  1004.     update
  1005.     set bit [format 0x%x [expr 0x5 & [lindex [testprop [testwrapper .t] 
  1006.     WM_NORMAL_HINTS] 0]]]
  1007.     lappend result [wm positionfrom .t] $bit
  1008. } {user program 0x4 user 0x1}
  1009. test unixWm-31.3 {Tk_WmCmd procedure, "positionfrom" option} unix {
  1010.     list [catch {wm positionfrom .t none} msg]  $msg
  1011. } {1 {bad argument "none": must be program or user}}
  1012. test unixWm-32.1 {Tk_WmCmd procedure, "protocol" option} unix {
  1013.     list [catch {wm protocol .t 1 2 3} msg]  $msg
  1014. } {1 {wrong # args: should be "wm protocol window ?name? ?command?"}}
  1015. test unixWm-32.2 {Tk_WmCmd procedure, "protocol" option} unix {
  1016.     wm protocol .t {foo a} {a b c}
  1017.     wm protocol .t bar {test script for bar}
  1018.     set result [wm protocol .t]
  1019.     wm protocol .t {foo a} {}
  1020.     wm protocol .t bar {}
  1021.     set result
  1022. } {bar {foo a}}
  1023. test unixWm-32.3 {Tk_WmCmd procedure, "protocol" option} {unix testwrapper} {
  1024.     set result {}
  1025.     lappend result [wm protocol .t]
  1026.     set x {}
  1027.     foreach i [testprop [testwrapper .t] WM_PROTOCOLS] {
  1028. lappend x [winfo atomname $i]
  1029.     }
  1030.     lappend result $x
  1031.     wm protocol .t foo {test script}
  1032.     wm protocol .t bar {test script}
  1033.     set x {}
  1034.     foreach i [testprop [testwrapper .t] WM_PROTOCOLS] {
  1035. lappend x [winfo atomname $i]
  1036.     }
  1037.     lappend result [wm protocol .t] $x
  1038.     wm protocol .t foo {}
  1039.     wm protocol .t bar {}
  1040.     set x {}
  1041.     foreach i [testprop [testwrapper .t] WM_PROTOCOLS] {
  1042. lappend x [winfo atomname $i]
  1043.     }
  1044.     lappend result [wm protocol .t] $x
  1045. } {{} WM_DELETE_WINDOW {bar foo} {WM_DELETE_WINDOW bar foo} {} WM_DELETE_WINDOW}
  1046. test unixWm-32.4 {Tk_WmCmd procedure, "protocol" option} unix {
  1047.     set result {}
  1048.     wm protocol .t foo {a b c}
  1049.     wm protocol .t bar {test script for bar}
  1050.     lappend result [wm protocol .t foo] [wm protocol .t bar]
  1051.     wm protocol .t foo {}
  1052.     wm protocol .t bar {}
  1053.     lappend result [wm protocol .t foo] [wm protocol .t bar]
  1054. } {{a b c} {test script for bar} {} {}}
  1055. test unixWm-32.5 {Tk_WmCmd procedure, "protocol" option} unix {
  1056.     wm protocol .t foo {a b c}
  1057.     wm protocol .t foo {test script}
  1058.     set result [wm protocol .t foo]
  1059.     wm protocol .t foo {}
  1060.     set result
  1061. } {test script}
  1062. test unixWm-33.1 {Tk_WmCmd procedure, "resizable" option} unix {
  1063.     list [catch {wm resizable . a} msg]  $msg
  1064. } {1 {wrong # args: should be "wm resizable window ?width height?"}}
  1065. test unixWm-33.2 {Tk_WmCmd procedure, "resizable" option} unix {
  1066.     list [catch {wm resizable . a b c} msg]  $msg
  1067. } {1 {wrong # args: should be "wm resizable window ?width height?"}}
  1068. test unixWm-33.3 {Tk_WmCmd procedure, "resizable" option} unix {
  1069.     list [catch {wm resizable .foo a b c} msg]  $msg
  1070. } {1 {bad window path name ".foo"}}
  1071. test unixWm-33.4 {Tk_WmCmd procedure, "resizable" option} unix {
  1072.     list [catch {wm resizable . x 1} msg]  $msg
  1073. } {1 {expected boolean value but got "x"}}
  1074. test unixWm-33.5 {Tk_WmCmd procedure, "resizable" option} unix {
  1075.     list [catch {wm resizable . 0 gorp} msg]  $msg
  1076. } {1 {expected boolean value but got "gorp"}}
  1077. test unixWm-33.6 {Tk_WmCmd procedure, "resizable" option} unix {
  1078.     catch {destroy .t2}
  1079.     toplevel .t2 -width 200 -height 100
  1080.     wm geom .t2 +0+0
  1081.     set result ""
  1082.     lappend result [wm resizable .t2]
  1083.     wm resizable .t2 1 0
  1084.     lappend result [wm resizable .t2]
  1085.     wm resizable .t2 no off
  1086.     lappend result [wm resizable .t2]
  1087.     wm resizable .t2 false true
  1088.     lappend result [wm resizable .t2]
  1089.     destroy .t2
  1090.     set result
  1091. } {{1 1} {1 0} {0 0} {0 1}}
  1092. test unixWm-34.1 {Tk_WmCmd procedure, "sizefrom" option} unix {
  1093.     list [catch {wm sizefrom .t 1 2} msg]  $msg
  1094. } {1 {wrong # args: should be "wm sizefrom window ?user|program?"}}
  1095. test unixWm-34.2 {Tk_WmCmd procedure, "sizefrom" option} {unix testwrapper} {
  1096.     set result {}
  1097.     lappend result [wm sizefrom .t]
  1098.     wm sizefrom .t program
  1099.     update
  1100.     set bit [format 0x%x [expr 0xa & [lindex [testprop [testwrapper .t] 
  1101.     WM_NORMAL_HINTS] 0]]]
  1102.     lappend result [wm sizefrom .t] $bit
  1103.     wm sizefrom .t user
  1104.     update
  1105.     set bit [format 0x%x [expr 0xa & [lindex [testprop [testwrapper .t] 
  1106.     WM_NORMAL_HINTS] 0]]]
  1107.     lappend result [wm sizefrom .t] $bit
  1108. } {{} program 0x8 user 0x2}
  1109. test unixWm-34.3 {Tk_WmCmd procedure, "sizefrom" option} unix {
  1110.     list [catch {wm sizefrom .t none} msg]  $msg
  1111. } {1 {bad argument "none": must be program or user}}
  1112. test unixWm-35.1 {Tk_WmCmd procedure, "state" option} unix {
  1113.     list [catch {wm state .t 1} msg]  $msg
  1114. } {1 {bad argument "1": must be normal, iconic, or withdrawn}}
  1115. test unixWm-35.2 {Tk_WmCmd procedure, "state" option} unix {
  1116.     list [catch {wm state .t iconic 1} msg]  $msg
  1117. } {1 {wrong # args: should be "wm state window ?state?"}}
  1118. test unixWm-35.3 {Tk_WmCmd procedure, "state" option} unix {
  1119.     set result {}
  1120.     catch {destroy .t2}
  1121.     toplevel .t2 -width 120 -height 300
  1122.     wm geometry .t2 +0+0
  1123.     lappend result [wm state .t2]
  1124.     update
  1125.     lappend result [wm state .t2]
  1126.     wm withdraw .t2
  1127.     lappend result [wm state .t2]
  1128.     wm iconify .t2
  1129.     lappend result [wm state .t2]
  1130.     wm deiconify .t2
  1131.     lappend result [wm state .t2]
  1132.     destroy .t2
  1133.     set result
  1134. } {normal normal withdrawn iconic normal}
  1135. test unixWm-35.4 {Tk_WmCmd procedure, "state" option} unix {
  1136.     set result {}
  1137.     catch {destroy .t2}
  1138.     toplevel .t2 -width 120 -height 300
  1139.     wm geometry .t2 +0+0
  1140.     lappend result [wm state .t2]
  1141.     update
  1142.     lappend result [wm state .t2]
  1143.     wm state .t2 withdrawn
  1144.     lappend result [wm state .t2]
  1145.     wm state .t2 iconic
  1146.     lappend result [wm state .t2]
  1147.     wm state .t2 normal
  1148.     lappend result [wm state .t2]
  1149.     destroy .t2
  1150.     set result
  1151. } {normal normal withdrawn iconic normal}
  1152. test unixWm-36.1 {Tk_WmCmd procedure, "title" option} unix {
  1153.     list [catch {wm title .t 1 2} msg]  $msg
  1154. } {1 {wrong # args: should be "wm title window ?newTitle?"}}
  1155. test unixWm-36.2 {Tk_WmCmd procedure, "title" option} {unix testwrapper} {
  1156.     set result {}
  1157.     lappend result [wm title .t] [testprop [testwrapper .t] WM_NAME]
  1158.     wm title .t "Test window"
  1159.     set bit [format 0x%x [expr 0xa & [lindex [testprop [testwrapper .t] 
  1160.     WM_NORMAL_HINTS] 0]]]
  1161.     lappend result [wm title .t] [testprop [testwrapper .t] WM_NAME]
  1162. } {t t {Test window} {Test window}}
  1163. test unixWm-37.3 {Tk_WmCmd procedure, "transient" option} {unix testwrapper} {
  1164.     set result {}
  1165.     catch {destroy .t2}
  1166.     toplevel .t2 -width 120 -height 300
  1167.     wm geometry .t2 +0+0
  1168.     update
  1169.     lappend result [wm transient .t2] 
  1170.     [testprop [testwrapper .t2] WM_TRANSIENT_FOR]
  1171.     wm transient .t2 .t
  1172.     set transient [testprop [testwrapper .t2] WM_TRANSIENT_FOR]
  1173.     lappend result [wm transient .t2] [expr [testwrapper .t] - $transient]
  1174.     wm transient .t2 {}
  1175.     lappend result [wm transient .t2] 
  1176.     [testprop [testwrapper .t2] WM_TRANSIENT_FOR]
  1177.     destroy .t2
  1178.     set result
  1179. } {{} {} .t 0 {} {}}
  1180. test unixWm-37.4 {TkWmDeadWindow, destroy on master should clear transient} {unix testwrapper} {
  1181.     catch {destroy .t2}
  1182.     toplevel .t2
  1183.     catch {destroy .t3}
  1184.     toplevel .t3
  1185.     wm transient .t2 .t3
  1186.     update
  1187.     destroy .t3
  1188.     update
  1189.     list [wm transient .t2] [testprop [testwrapper .t2] WM_TRANSIENT_FOR]
  1190. } {{} {}}
  1191. test unixWm-37.5 {Tk_WmCmd procedure, "transient" option, create master wrapper} {unix testwrapper} {
  1192.     catch {destroy .t2}
  1193.     catch {destroy .t3}
  1194.     toplevel .t2 -width 120 -height 300
  1195.     wm geometry .t2 +0+0
  1196.     toplevel .t3 -width 120 -height 300
  1197.     wm geometry .t2 +0+0
  1198.     set result [list [testwrapper .t2]]
  1199.     wm transient .t3 .t2
  1200.     lappend result [expr {[testwrapper .t2] == ""}]
  1201.     destroy .t2 .t3
  1202.     set result
  1203. } {{} 0}
  1204. test unixWm-38.1 {Tk_WmCmd procedure, "withdraw" option} unix {
  1205.     list [catch {wm withdraw .t 1} msg]  $msg
  1206. } {1 {wrong # args: should be "wm withdraw window"}}
  1207. test unixWm-38.2 {Tk_WmCmd procedure, "withdraw" option} unix {
  1208.     catch {destroy .t2}
  1209.     toplevel .t2 -width 120 -height 300
  1210.     wm geometry .t2 +0+0
  1211.     wm iconwindow .t .t2
  1212.     set result [list [catch {wm withdraw .t2} msg]  $msg]
  1213.     destroy .t2
  1214.     set result
  1215. } {1 {can't withdraw .t2: it is an icon for .t}}
  1216. test unixWm-38.3 {Tk_WmCmd procedure, "withdraw" option} unix {
  1217.     set result {}
  1218.     wm withdraw .t
  1219.     lappend result [wm state .t] [winfo ismapped .t]
  1220.     wm deiconify .t
  1221.     lappend result [wm state .t] [winfo ismapped .t]
  1222. } {withdrawn 0 normal 1}
  1223. test unixWm-39.1 {Tk_WmCmd procedure, miscellaneous} unix {
  1224.     list [catch {wm unknown .t} msg] $msg
  1225. } {1 {bad option "unknown": must be aspect, attributes, client, colormapwindows, command, deiconify, focusmodel, frame, geometry, grid, group, iconbitmap, iconify, iconmask, iconname, iconphoto, iconposition, iconwindow, maxsize, minsize, overrideredirect, positionfrom, protocol, resizable, sizefrom, stackorder, state, title, transient, or withdraw}}
  1226. catch {destroy .t}
  1227. catch {destroy .icon}
  1228. test unixWm-40.1 {Tk_SetGrid procedure, set grid dimensions before turning on grid} {unix nonPortable} {
  1229.     catch {destroy .t}
  1230.     toplevel .t
  1231.     wm geometry .t 30x10+0+0
  1232.     listbox .t.l -height 20 -width 20 -setgrid 1 
  1233.     pack .t.l -fill both -expand 1
  1234.     update
  1235.     wm geometry .t
  1236. } {30x10+0+0}
  1237. test unixWm-40.2 {Tk_SetGrid procedure, turning on grid when dimensions already set} unix {
  1238.     catch {destroy .t}
  1239.     toplevel .t
  1240.     wm geometry .t 200x100+0+0
  1241.     listbox .t.l -height 20 -width 20 
  1242.     pack .t.l -fill both -expand 1
  1243.     update
  1244.     .t.l configure -setgrid 1
  1245.     update
  1246.     wm geometry .t
  1247. } {20x20+0+0}
  1248. test unixWm-41.1 {ConfigureEvent procedure, internally generated size changes} unix {
  1249.     catch {destroy .t}
  1250.     toplevel .t -width 400 -height 150
  1251.     wm geometry .t +0+0
  1252.     tkwait visibility .t
  1253.     set result {}
  1254.     lappend result [winfo width .t] [winfo height .t]
  1255.     .t configure -width 200 -height 300
  1256.     sleep 500
  1257.     lappend result [winfo width .t] [winfo height .t]
  1258. } {400 150 200 300}
  1259. test unixWm-41.2 {ConfigureEvent procedure, menubars} {nonPortable testmenubar} {
  1260.     catch {destroy .t}
  1261.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  1262.     wm geom .t +0+0
  1263.     update
  1264.     set x [winfo rootx .t]
  1265.     set y [winfo rooty .t]
  1266.     frame .t.m -bd 2 -relief raised -height 20
  1267.     testmenubar window .t .t.m
  1268.     update
  1269.     set result {}
  1270.     bind .t <Configure> {
  1271. if {"%W" == ".t"} {
  1272.     lappend result "%W: %wx%h"
  1273. }
  1274.     }
  1275.     bind .t.m <Configure> {lappend result "%W: %wx%h"}
  1276.     wm geometry .t 200x300
  1277.     update
  1278.     lappend result [expr [winfo rootx .t.m] - $x] 
  1279.     [expr [winfo rooty .t.m] - $y] 
  1280.     [winfo width .t.m] [winfo height .t.m] 
  1281.     [expr [winfo rootx .t] - $x] [expr [winfo rooty .t] - $y] 
  1282.     [winfo width .t] [winfo height .t]
  1283. } {{.t.m: 200x20} {.t: 200x300} 0 0 200 20 0 20 200 300}
  1284. test unixWm-41.3 {ConfigureEvent procedure, synthesized Configure events} unix {
  1285.     catch {destroy .t}
  1286.     toplevel .t -width 400 -height 150
  1287.     wm geometry .t +0+0
  1288.     tkwait visibility .t
  1289.     set result {no event}
  1290.     bind .t <Configure> {set result "configured: %w %h"}
  1291.     wm geometry .t +10+20
  1292.     update
  1293.     set result
  1294. } {configured: 400 150}
  1295. test unixWm-41.4 {ConfigureEvent procedure, synthesized Configure events} unix {
  1296.     catch {destroy .t}
  1297.     toplevel .t -width 400 -height 150
  1298.     wm geometry .t +0+0
  1299.     tkwait visibility .t
  1300.     set result {no event}
  1301.     bind .t <Configure> {set result "configured: %w %h"}
  1302.     wm geometry .t 130x200
  1303.     update
  1304.     set result
  1305. } {configured: 130 200}
  1306. # No tests for ReparentEvent or ComputeReparentGeometry; I can't figure
  1307. # out how to exercise these procedures reliably.
  1308. test unixWm-42.1 {WrapperEventProc procedure, map and unmap events} unix {
  1309.     catch {destroy .t}
  1310.     toplevel .t -width 400 -height 150
  1311.     wm geometry .t +0+0
  1312.     tkwait visibility .t
  1313.     set result {}
  1314.     bind .t <Map> {set x "mapped"}
  1315.     bind .t <Unmap> {set x "unmapped"}
  1316.     set x {no event}
  1317.     wm iconify .t
  1318.     lappend result $x [winfo ismapped .t]
  1319.     set x {no event}
  1320.     wm deiconify .t
  1321.     lappend result $x [winfo ismapped .t]
  1322. } {unmapped 0 mapped 1}
  1323. test unixWm-43.1 {TopLevelReqProc procedure, embedded in same process} unix {
  1324.     catch {destroy .t}
  1325.     toplevel .t -width 200 -height 200
  1326.     wm geom .t +0+0
  1327.     frame .t.f -container 1 -bd 2 -relief raised
  1328.     place .t.f -x 20 -y 10
  1329.     tkwait visibility .t.f
  1330.     toplevel .t2 -use [winfo id .t.f] -width 30 -height 20 -bg blue
  1331.     tkwait visibility .t2
  1332.     set result {}
  1333.     .t2 configure -width 70 -height 120
  1334.     update
  1335.     lappend result [winfo reqwidth .t.f] [winfo reqheight .t.f]
  1336.     lappend result [winfo width .t2] [winfo height .t2]
  1337.     # destroy .t2
  1338.     set result
  1339. } {70 120 70 120}
  1340. test unixWm-43.2 {TopLevelReqProc procedure, resize causes window to move} 
  1341. {unix nonPortable} {
  1342.     catch {destroy .t}
  1343.     toplevel .t -width 200 -height 200
  1344.     wm geom .t +0+0
  1345.     update
  1346.     wm geom .t -0-0
  1347.     update
  1348.     set x [winfo x .t]
  1349.     set y [winfo y .t]
  1350.     .t configure -width 300 -height 150
  1351.     update
  1352.     list [expr [winfo x .t] - $x] [expr [winfo y .t] - $y] 
  1353.     [winfo width .t] [winfo height .t]
  1354. } {-100 50 300 150}
  1355. test unixWm-44.1 {UpdateGeometryInfo procedure, width/height computation} unix {
  1356.     catch {destroy .t}
  1357.     toplevel .t -width 100 -height 200
  1358.     wm geometry .t +30+40
  1359.     wm overrideredirect .t 1
  1360.     tkwait visibility .t
  1361.     .t configure  -width 180 -height 20
  1362.     update
  1363.     list [winfo width .t] [winfo height .t]
  1364. } {180 20}
  1365. test unixWm-44.2 {UpdateGeometryInfo procedure, width/height computation} unix {
  1366.     catch {destroy .t}
  1367.     toplevel .t -width 80 -height 60
  1368.     wm grid .t 5 4 10 12
  1369.     wm geometry .t +30+40
  1370.     wm overrideredirect .t 1
  1371.     tkwait visibility .t
  1372.     wm geometry .t 10x2
  1373.     update
  1374.     list [winfo width .t] [winfo height .t]
  1375. } {130 36}
  1376. test unixWm-44.3 {UpdateGeometryInfo procedure, width/height computation} unix {
  1377.     catch {destroy .t}
  1378.     toplevel .t -width 80 -height 60
  1379.     wm grid .t 5 4 10 12
  1380.     wm geometry .t +30+40
  1381.     wm overrideredirect .t 1
  1382.     tkwait visibility .t
  1383.     wm geometry .t 1x10
  1384.     update
  1385.     list [winfo width .t] [winfo height .t]
  1386. } {40 132}
  1387. test unixWm-44.4 {UpdateGeometryInfo procedure, width/height computation} unix {
  1388.     catch {destroy .t}
  1389.     toplevel .t -width 100 -height 200
  1390.     wm geometry .t +30+40
  1391.     wm overrideredirect .t 1
  1392.     tkwait visibility .t
  1393.     wm geometry .t 300x150
  1394.     update
  1395.     list [winfo width .t] [winfo height .t]
  1396. } {300 150}
  1397. test unixWm-44.5 {UpdateGeometryInfo procedure, negative width} unix {
  1398.     catch {destroy .t}
  1399.     toplevel .t -width 80 -height 60
  1400.     wm grid .t 18 7 10 12
  1401.     wm geometry .t +30+40
  1402.     wm overrideredirect .t 1
  1403.     tkwait visibility .t
  1404.     wm geometry .t 5x8
  1405.     update
  1406.     list [winfo width .t] [winfo height .t]
  1407. } {1 72}
  1408. test unixWm-44.6 {UpdateGeometryInfo procedure, negative height} unix {
  1409.     catch {destroy .t}
  1410.     toplevel .t -width 80 -height 60
  1411.     wm grid .t 18 7 10 12
  1412.     wm geometry .t +30+40
  1413.     wm overrideredirect .t 1
  1414.     tkwait visibility .t
  1415.     wm geometry .t 20x1
  1416.     update
  1417.     list [winfo width .t] [winfo height .t]
  1418. } {100 1}
  1419. catch {destroy .t}
  1420. toplevel .t -width 80 -height 60
  1421. test unixWm-44.7 {UpdateGeometryInfo procedure, computing position} unix {
  1422.     wm geometry .t +5-10
  1423.     wm overrideredirect .t 1
  1424.     tkwait visibility .t
  1425.     list [winfo x .t] [winfo y .t]
  1426. } [list 5 [expr [winfo screenheight .t] - 70]]
  1427. catch {destroy .t}
  1428. toplevel .t -width 80 -height 60
  1429. test unixWm-44.8 {UpdateGeometryInfo procedure, computing position} unix {
  1430.     wm geometry .t -30+2
  1431.     wm overrideredirect .t 1
  1432.     tkwait visibility .t
  1433.     list [winfo x .t] [winfo y .t]
  1434. } [list [expr [winfo screenwidth .t] - 110] 2]
  1435. catch {destroy .t}
  1436. test unixWm-44.9 {UpdateGeometryInfo procedure, updating fixed dimensions} {unix testwrapper} {
  1437.     catch {destroy .t}
  1438.     toplevel .t -width 80 -height 60
  1439.     wm resizable .t 0 0
  1440.     wm geometry .t +0+0
  1441.     tkwait visibility .t
  1442.     .t configure  -width 180 -height 20
  1443.     update
  1444.     set property [testprop [testwrapper .t] WM_NORMAL_HINTS]
  1445.     list [expr [lindex $property 5]] [expr [lindex $property 6]] 
  1446.     [expr [lindex $property 7]] [expr [lindex $property 8]]
  1447. } {180 20 180 20}
  1448. test unixWm-44.10 {UpdateGeometryInfo procedure, menubar changing} testmenubar {
  1449.     catch {destroy .t}
  1450.     toplevel .t -width 80 -height 60
  1451.     wm resizable .t 0 0
  1452.     wm geometry .t +0+0
  1453.     tkwait visibility .t
  1454.     .t configure -width 180 -height 50
  1455.     frame .t.m -bd 2 -relief raised -width 100 -height 50
  1456.     testmenubar window .t .t.m
  1457.     update
  1458.     .t configure -height 70
  1459.     .t.m configure -height 30
  1460.     list [update] [destroy .t]
  1461. } {{} {}}
  1462. test unixWm-45.1 {UpdateSizeHints procedure, grid information} {unix testwrapper} {
  1463.     catch {destroy .t}
  1464.     toplevel .t -width 80 -height 60
  1465.     wm grid .t 6 10 10 5
  1466.     wm minsize .t 2 4
  1467.     wm maxsize .t 30 40
  1468.     wm geometry .t +0+0
  1469.     tkwait visibility .t
  1470.     set property [testprop [testwrapper .t] WM_NORMAL_HINTS]
  1471.     list [expr [lindex $property 5]] [expr [lindex $property 6]] 
  1472.     [expr [lindex $property 7]] [expr [lindex $property 8]] 
  1473.     [expr [lindex $property 9]] [expr [lindex $property 10]]
  1474. } {40 30 320 210 10 5}
  1475. test unixWm-45.2 {UpdateSizeHints procedure} {unix testwrapper} {
  1476.     catch {destroy .t}
  1477.     toplevel .t -width 80 -height 60
  1478.     wm minsize .t 30 40
  1479.     wm maxsize .t 200 500
  1480.     wm geometry .t +0+0
  1481.     tkwait visibility .t
  1482.     set property [testprop [testwrapper .t] WM_NORMAL_HINTS]
  1483.     list [expr [lindex $property 5]] [expr [lindex $property 6]] 
  1484.     [expr [lindex $property 7]] [expr [lindex $property 8]] 
  1485.     [expr [lindex $property 9]] [expr [lindex $property 10]]
  1486. } {30 40 200 500 1 1}
  1487. test unixWm-45.3 {UpdateSizeHints procedure, grid with menu} {testmenubar testwrapper} {
  1488.     catch {destroy .t}
  1489.     toplevel .t -width 80 -height 60
  1490.     frame .t.menu -height 23 -width 50
  1491.     testmenubar window .t .t.menu
  1492.     wm grid .t 6 10 10 5
  1493.     wm minsize .t 2 4
  1494.     wm maxsize .t 30 40
  1495.     wm geometry .t +0+0
  1496.     tkwait visibility .t
  1497.     set property [testprop [testwrapper .t] WM_NORMAL_HINTS]
  1498.     list [winfo height .t] 
  1499.     [expr [lindex $property 5]] [expr [lindex $property 6]] 
  1500.     [expr [lindex $property 7]] [expr [lindex $property 8]] 
  1501.     [expr [lindex $property 9]] [expr [lindex $property 10]]
  1502. } {60 40 53 320 233 10 5}
  1503. test unixWm-45.4 {UpdateSizeHints procedure, not resizable with menu} {testmenubar testwrapper} {
  1504.     catch {destroy .t}
  1505.     toplevel .t -width 80 -height 60
  1506.     frame .t.menu -height 23 -width 50
  1507.     testmenubar window .t .t.menu
  1508.     wm resizable .t 0 0
  1509.     wm geometry .t +0+0
  1510.     tkwait visibility .t
  1511.     set property [testprop [testwrapper .t] WM_NORMAL_HINTS]
  1512.     list [winfo height .t] 
  1513.     [expr [lindex $property 5]] [expr [lindex $property 6]] 
  1514.     [expr [lindex $property 7]] [expr [lindex $property 8]] 
  1515.     [expr [lindex $property 9]] [expr [lindex $property 10]]
  1516. } {60 80 83 80 83 1 1}
  1517. # I don't know how to test WaitForConfigureNotify.
  1518. test unixWm-46.1 {WaitForEvent procedure, use of modal timeout} unix {
  1519.     catch {destroy .t}
  1520.     toplevel .t -width 200 -height 200
  1521.     wm geom .t +0+0
  1522.     update
  1523.     wm iconify .t
  1524.     set x no
  1525.     after 0 {set x yes}
  1526.     wm deiconify .t
  1527.     set result $x
  1528.     update
  1529.     list $result $x
  1530. } {no yes}
  1531. test unixWm-47.1 {WaitRestrictProc procedure} {unix nonPortable} {
  1532.     catch {destroy .t}
  1533.     toplevel .t -width 300 -height 200
  1534.     frame .t.f -bd 2 -relief raised
  1535.     place .t.f -x 20 -y 30 -width 100 -height 20
  1536.     wm geometry .t +0+0
  1537.     tkwait visibility .t
  1538.     set result {}
  1539.     bind .t.f <Configure> {lappend result {configure on .t.f}}
  1540.     bind .t <Map> {lappend result {map on .t}}
  1541.     bind .t <Unmap> {lappend result {unmap on .t}; bind .t <Unmap> {}}
  1542.     bind .t <Button> {lappend result {button %b on .t}}
  1543.     event generate .t.f <Configure> -when tail
  1544.     event generate .t <Configure> -when tail
  1545.     event generate .t <Button> -button 3 -when tail
  1546.     event generate .t <ButtonRelease> -button 3 -when tail
  1547.     event generate .t <Map> -when tail
  1548.     lappend result iconify
  1549.     wm iconify .t
  1550.     lappend result done
  1551.     update
  1552.     set result
  1553. } {iconify {unmap on .t} done {configure on .t.f} {button 3 on .t} {map on .t}}
  1554. # I don't know how to test WaitTimeoutProc, WaitForMapNotify, or UpdateHints.
  1555. catch {destroy .t}
  1556. toplevel .t -width 300 -height 200
  1557. wm geometry .t +0+0
  1558. tkwait visibility .t
  1559. test unixWm-48.1 {ParseGeometry procedure} unix {
  1560.     wm geometry .t =100x120
  1561.     update
  1562.     list [winfo width .t] [winfo height .t]
  1563. } {100 120}
  1564. test unixWm-48.2 {ParseGeometry procedure} unix {
  1565.     list [catch {wm geometry .t =10zx120} msg] $msg
  1566. } {1 {bad geometry specifier "=10zx120"}}
  1567. test unixWm-48.3 {ParseGeometry procedure} unix {
  1568.     list [catch {wm geometry .t x120} msg] $msg
  1569. } {1 {bad geometry specifier "x120"}}
  1570. test unixWm-48.4 {ParseGeometry procedure} unix {
  1571.     list [catch {wm geometry .t =100x120a} msg] $msg
  1572. } {1 {bad geometry specifier "=100x120a"}}
  1573. test unixWm-48.5 {ParseGeometry procedure} unix {
  1574.     list [catch {wm geometry .t z} msg] $msg
  1575. } {1 {bad geometry specifier "z"}}
  1576. test unixWm-48.6 {ParseGeometry procedure} unix {
  1577.     list [catch {wm geometry .t +20&} msg] $msg
  1578. } {1 {bad geometry specifier "+20&"}}
  1579. test unixWm-48.7 {ParseGeometry procedure} unix {
  1580.     list [catch {wm geometry .t +-} msg] $msg
  1581. } {1 {bad geometry specifier "+-"}}
  1582. test unixWm-48.8 {ParseGeometry procedure} unix {
  1583.     list [catch {wm geometry .t +20a} msg] $msg
  1584. } {1 {bad geometry specifier "+20a"}}
  1585. test unixWm-48.9 {ParseGeometry procedure} unix {
  1586.     list [catch {wm geometry .t +20-} msg] $msg
  1587. } {1 {bad geometry specifier "+20-"}}
  1588. test unixWm-48.10 {ParseGeometry procedure} unix {
  1589.     list [catch {wm geometry .t +20+10z} msg] $msg
  1590. } {1 {bad geometry specifier "+20+10z"}}
  1591. test unixWm-48.11 {ParseGeometry procedure} unix {
  1592.     catch {wm geometry .t +-10+20}
  1593. } {0}
  1594. test unixWm-48.12 {ParseGeometry procedure} unix {
  1595.     catch {wm geometry .t +30+-10}
  1596. } {0}
  1597. test unixWm-48.13 {ParseGeometry procedure, resize causes window to move} unix {
  1598.     catch {destroy .t}
  1599.     toplevel .t -width 200 -height 200
  1600.     wm geom .t +0+0
  1601.     update
  1602.     wm geom .t -0-0
  1603.     update
  1604.     set x [winfo x .t]
  1605.     set y [winfo y .t]
  1606.     wm geometry .t 150x300
  1607.     update
  1608.     list [expr [winfo x .t] - $x] [expr [winfo y .t] - $y] 
  1609.     [winfo width .t] [winfo height .t]
  1610. } {50 -100 150 300}
  1611. test unixWm-49.1 {Tk_GetRootCoords procedure} unix {
  1612.     catch {destroy .t}
  1613.     toplevel .t -width 300 -height 200
  1614.     frame .t.f -width 150 -height 100 -bd 2 -relief raised
  1615.     place .t.f -x 150 -y 120
  1616.     frame .t.f.f -width 20 -height 20 -bd 2 -relief raised
  1617.     place .t.f.f -x 10 -y 20
  1618.     wm overrideredirect .t 1
  1619.     wm geometry .t +40+50
  1620.     tkwait visibility .t
  1621.     list [winfo rootx .t.f.f] [winfo rooty .t.f.f]
  1622. } {202 192}
  1623. test unixWm-49.2 {Tk_GetRootCoords procedure, menubars} {unix testmenubar} {
  1624.     catch {destroy .t}
  1625.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  1626.     wm geom .t +0+0
  1627.     update
  1628.     set x [winfo rootx .t]
  1629.     set y [winfo rooty .t]
  1630.     frame .t.m -bd 2 -relief raised -width 100 -height 30
  1631.     frame .t.m.f -width 20 -height 10 -bd 2 -relief raised
  1632.     place .t.m.f -x 50 -y 5
  1633.     frame .t.f -width 20 -height 30 -bd 2 -relief raised
  1634.     place .t.f -x 10 -y 30
  1635.     testmenubar window .t .t.m
  1636.     update
  1637.     list [expr [winfo rootx .t.m.f] - $x] [expr [winfo rooty .t.m.f] - $y] 
  1638.     [expr [winfo rootx .t.f] - $x] [expr [winfo rooty .t.f] - $y] 
  1639. } {52 7 12 62}
  1640. deleteWindows
  1641. wm iconify .
  1642. test unixWm-50.1 {Tk_CoordsToWindow procedure, finding a toplevel, x-coords} unix {
  1643.     deleteWindows
  1644.     toplevel .t -width 300 -height 400 -bg green
  1645.     wm geom .t +40+0
  1646.     tkwait visibility .t
  1647.     toplevel .t2 -width 100 -height 80 -bg red
  1648.     wm geom .t2 +140+200
  1649.     tkwait visibility .t2
  1650.     raise .t2
  1651.     set x [winfo rootx .t]
  1652.     set y [winfo rooty .t]
  1653.     list [winfo containing [expr $x - 30] [expr $y + 250]] 
  1654.     [winfo containing [expr $x - 1] [expr $y + 250]] 
  1655.     [winfo containing $x [expr $y + 250]] 
  1656.     [winfo containing [expr $x + 99] [expr $y + 250]] 
  1657.     [winfo containing [expr $x + 100] [expr $y + 250]] 
  1658.     [winfo containing [expr $x + 199] [expr $y + 250]] 
  1659.     [winfo containing [expr $x + 200] [expr $y + 250]] 
  1660.     [winfo containing [expr $x + 220] [expr $y + 250]]
  1661. } {{} {} .t {} .t2 .t2 {} .t}
  1662. test unixWm-50.2 {Tk_CoordsToWindow procedure, finding a toplevel, y-coords and overrideredirect} unix {
  1663.     deleteWindows
  1664.     toplevel .t -width 300 -height 400 -bg yellow
  1665.     wm geom .t +0+50
  1666.     tkwait visibility .t
  1667.     toplevel .t2 -width 100 -height 80 -bg blue
  1668.     wm overrideredirect .t2 1
  1669.     wm geom .t2 +100+200
  1670.     tkwait visibility .t2
  1671.     raise .t2
  1672.     set x [winfo rootx .t]
  1673.     set y [winfo rooty .t]
  1674.     set y2 [winfo rooty .t2]
  1675.     list [winfo containing [expr $x +150] 10] 
  1676.     [winfo containing [expr $x +150] [expr $y - 1]] 
  1677.     [winfo containing [expr $x +150] $y] 
  1678.     [winfo containing [expr $x +150] [expr $y2 - 1]] 
  1679.     [winfo containing [expr $x +150] $y2] 
  1680.     [winfo containing [expr $x +150] [expr $y2 + 79]] 
  1681.     [winfo containing [expr $x +150] [expr $y2 + 80]] 
  1682.     [winfo containing [expr $x +150] [expr $y + 450]]
  1683. } {{} {} .t .t .t2 .t2 .t {}}
  1684. test unixWm-50.3 {
  1685. Tk_CoordsToWindow procedure, finding a toplevel with embedding
  1686. } -constraints tempNotWin -setup {
  1687.     deleteWindows
  1688.     toplevel .t -width 300 -height 400 -bg blue
  1689.     wm geom .t +0+50
  1690.     frame .t.f -container 1
  1691.     place .t.f -x 150 -y 50
  1692.     tkwait visibility .t.f
  1693.     setupbg
  1694. } -body {
  1695.     dobg "
  1696. wm withdraw .
  1697. toplevel .x -width 100 -height 80 -use [winfo id .t.f] -bg yellow
  1698. tkwait visibility .x"
  1699.     set result [dobg {
  1700. set x [winfo rootx .x]
  1701. set y [winfo rooty .x]
  1702. list [winfo containing [expr $x - 1] [expr $y + 50]] 
  1703. [winfo containing $x [expr $y +50]]
  1704.     }]
  1705.     set x [winfo rootx .t]
  1706.     set y [winfo rooty .t]
  1707.     lappend result [winfo containing [expr $x + 200] [expr $y + 49]] 
  1708. [winfo containing [expr $x + 200] [expr $y +50]]
  1709. } -cleanup {
  1710.     cleanupbg
  1711. } -result {{} .x .t .t.f}
  1712. test unixWm-50.4 {Tk_CoordsToWindow procedure, window in other application} unix {
  1713.     catch {destroy .t}
  1714.     catch {interp delete slave}
  1715.     toplevel .t -width 200 -height 200 -bg green
  1716.     wm geometry .t +0+0
  1717.     tkwait visibility .t
  1718.     interp create slave
  1719.     load {} Tk slave
  1720.     slave eval {wm geometry . 200x200+0+0; tkwait visibility .}
  1721.     set result [list [winfo containing 100 100] 
  1722.     [slave eval {winfo containing 100 100}]]
  1723.     interp delete slave
  1724.     set result
  1725. } {{} .}
  1726. test unixWm-50.5 {Tk_CoordsToWindow procedure, handling menubars} {unix testmenubar} {
  1727.     deleteWindows
  1728.     toplevel .t -width 300 -height 400 -bd 2 -relief raised
  1729.     frame .t.f -width 150 -height 120 -bg green
  1730.     place .t.f -x 10 -y 150
  1731.     wm geom .t +0+50
  1732.     frame .t.menu -width 100 -height 30 -bd 2 -relief raised
  1733.     frame .t.menu.f -width 40 -height 20 -bg purple
  1734.     place .t.menu.f -x 30 -y 10
  1735.     testmenubar window .t .t.menu
  1736.     tkwait visibility .t.menu
  1737.     update
  1738.     set x [winfo rootx .t]
  1739.     set y [winfo rooty .t]
  1740.     list [winfo containing $x [expr $y - 31]] 
  1741. [winfo containing $x [expr $y - 30]] 
  1742. [winfo containing [expr $x + 50] [expr $y - 19]] 
  1743. [winfo containing [expr $x + 50] [expr $y - 18]] 
  1744. [winfo containing [expr $x + 50] $y] 
  1745. [winfo containing [expr $x + 11] [expr $y + 152]] 
  1746. [winfo containing [expr $x + 12] [expr $y + 152]]
  1747. } {{} .t.menu .t.menu .t.menu.f .t .t .t.f}
  1748. test unixWm-50.6 {Tk_CoordsToWindow procedure, embedding within one app.} unix {
  1749.     deleteWindows
  1750.     toplevel .t -width 300 -height 400 -bg orange
  1751.     wm geom .t +0+50
  1752.     frame .t.f -container 1
  1753.     place .t.f -x 150 -y 50
  1754.     tkwait visibility .t.f
  1755.     toplevel .t2 -width 100 -height 80 -bg green -use [winfo id .t.f]
  1756.     tkwait visibility .t2
  1757.     update
  1758.     set x [winfo rootx .t]
  1759.     set y [winfo rooty .t]
  1760.     list [winfo containing [expr $x +149] [expr $y + 80]] 
  1761.     [winfo containing [expr $x +150] [expr $y +80]] 
  1762.     [winfo containing [expr $x +249] [expr $y +80]] 
  1763.     [winfo containing [expr $x +250] [expr $y +80]]
  1764. } {.t .t2 .t2 .t}
  1765. test unixWm-50.7 {Tk_CoordsToWindow procedure, more basics} unix {
  1766.     catch {destroy .t}
  1767.     toplevel .t -width 300 -height 400 -bg green
  1768.     wm geom .t +0+0
  1769.     frame .t.f -width 100 -height 200 -bd 2 -relief raised
  1770.     place .t.f -x 100 -y 100
  1771.     frame .t.f.f -width 100 -height 200 -bd 2 -relief raised
  1772.     place .t.f.f -x 0 -y 100
  1773.     tkwait visibility .t.f.f
  1774.     set x [expr [winfo rootx .t] + 150]
  1775.     set y [winfo rooty .t]
  1776.     list [winfo containing $x [expr $y + 50]] 
  1777.     [winfo containing $x [expr $y + 150]] 
  1778.     [winfo containing $x [expr $y + 250]] 
  1779.     [winfo containing $x [expr $y + 350]] 
  1780.     [winfo containing $x [expr $y + 450]]
  1781. } {.t .t.f .t.f.f .t {}}
  1782. test unixWm-50.8 {Tk_CoordsToWindow procedure, more basics} unix {
  1783.     catch {destroy .t}
  1784.     toplevel .t -width 400 -height 300 -bg green
  1785.     wm geom .t +0+0
  1786.     frame .t.f -width 200 -height 100 -bd 2 -relief raised
  1787.     place .t.f -x 100 -y 100
  1788.     frame .t.f.f -width 200 -height 100 -bd 2 -relief raised
  1789.     place .t.f.f -x 100 -y 0
  1790.     update
  1791.     set x [winfo rooty .t]
  1792.     set y [expr [winfo rooty .t] + 150]
  1793.     list [winfo containing [expr $x + 50] $y] 
  1794.     [winfo containing [expr $x + 150] $y] 
  1795.     [winfo containing [expr $x + 250] $y] 
  1796.     [winfo containing [expr $x + 350] $y] 
  1797.     [winfo containing [expr $x + 450] $y]
  1798. } {.t .t.f .t.f.f .t {}}
  1799. test unixWm-50.9 {Tk_CoordsToWindow procedure, unmapped windows} unix {
  1800.     catch {destroy .t}
  1801.     catch {destroy .t2}
  1802.     sleep 500 ;# Give window manager time to catch up.
  1803.     toplevel .t -width 200 -height 200 -bg green
  1804.     wm geometry .t +0+0
  1805.     tkwait visibility .t
  1806.     toplevel .t2 -width 200 -height 200 -bg red
  1807.     wm geometry .t2 +0+0
  1808.     tkwait visibility .t2
  1809.     set result [list [winfo containing 100 100]]
  1810.     wm iconify .t2
  1811.     lappend result [winfo containing 100 100]
  1812. } {.t2 .t}
  1813. test unixWm-50.10 {Tk_CoordsToWindow procedure, unmapped windows} unix {
  1814.     catch {destroy .t}
  1815.     toplevel .t -width 200 -height 200 -bg green
  1816.     wm geometry .t +0+0
  1817.     frame .t.f -width 150 -height 150 -bd 2 -relief raised
  1818.     place .t.f -x 25 -y 25
  1819.     tkwait visibility .t.f
  1820.     set result [list [winfo containing 100 100]]
  1821.     place forget .t.f
  1822.     update
  1823.     lappend result [winfo containing 100 100]
  1824. } {.t.f .t}
  1825. deleteWindows
  1826. wm deiconify .
  1827. # No tests for UpdateVRootGeometry, Tk_GetVRootGeometry,
  1828. # Tk_MoveToplevelWindow, UpdateWmProtocols, or TkWmProtocolEventProc.
  1829. test unixWm-51.1 {TkWmRestackToplevel procedure, basic tests} {unix nonPortable} {
  1830.     makeToplevels
  1831.     update
  1832.     raise .raise1
  1833.     winfo containing [winfo rootx .raise1] [winfo rooty .raise1]
  1834. } .raise1
  1835. test unixWm-51.2 {TkWmRestackToplevel procedure, basic tests} {unix nonPortable} {
  1836.     makeToplevels
  1837.     update
  1838.     raise .raise2
  1839.     winfo containing [winfo rootx .raise1] [winfo rooty .raise1]
  1840. } .raise2
  1841. test unixWm-51.3 {TkWmRestackToplevel procedure, basic tests} {unix nonPortable} {
  1842.     makeToplevels
  1843.     update
  1844.     raise .raise3
  1845.     raise .raise2
  1846.     raise .raise1 .raise3
  1847.     set result [winfo containing [winfo rootx .raise1] 
  1848.     [winfo rooty .raise1]]
  1849.     destroy .raise2
  1850.     sleep 500
  1851.     list $result [winfo containing [winfo rootx .raise1] 
  1852.     [winfo rooty .raise1]]
  1853. } {.raise2 .raise1}
  1854. test unixWm-51.4 {TkWmRestackToplevel procedure, basic tests} {unix nonPortable} {
  1855.     makeToplevels
  1856.     raise .raise2
  1857.     raise .raise1
  1858.     lower .raise3 .raise1
  1859.     set result [winfo containing 100 100]
  1860.     destroy .raise1
  1861.     sleep 500
  1862.     lappend result [winfo containing 100 100]
  1863. } {.raise1 .raise3}
  1864. test unixWm-51.5 {TkWmRestackToplevel procedure, basic tests} {unix nonPortable} {
  1865.     makeToplevels
  1866.     update
  1867.     raise .raise2
  1868.     raise .raise1
  1869.     raise .raise3
  1870.     frame .raise1.f1
  1871.     frame .raise1.f1.f2
  1872.     lower .raise3 .raise1.f1.f2
  1873.     set result [winfo containing [winfo rootx .raise1] 
  1874.     [winfo rooty .raise1]]
  1875.     destroy .raise1
  1876.     sleep 500
  1877.     list $result [winfo containing [winfo rootx .raise2] 
  1878.     [winfo rooty .raise2]]
  1879. } {.raise1 .raise3}
  1880. deleteWindows
  1881. test unixWm-51.6 {TkWmRestackToplevel procedure, window to be stacked isn't mapped} unix {
  1882.     catch {destroy .t}
  1883.     toplevel .t -width 200 -height 200 -bg green
  1884.     wm geometry .t +0+0
  1885.     tkwait visibility .t
  1886.     catch {destroy .t2}
  1887.     toplevel .t2 -width 200 -height 200 -bg red
  1888.     wm geometry .t2 +0+0
  1889.     winfo containing 100 100
  1890. } {.t}
  1891. test unixWm-51.7 {TkWmRestackToplevel procedure, other window isn't mapped} unix {
  1892.     foreach w {.t .t2 .t3} {
  1893. catch {destroy $w}
  1894. toplevel $w -width 200 -height 200 -bg green
  1895. wm geometry $w +0+0
  1896.     }
  1897.     raise .t .t2
  1898.     sleep 2000
  1899.     update
  1900.     set result [list [winfo containing 100 100]]
  1901.     lower .t3
  1902.     sleep 2000
  1903.     lappend result [winfo containing 100 100]
  1904. } {.t3 .t}
  1905. test unixWm-51.8 {TkWmRestackToplevel procedure, overrideredirect windows} unix {
  1906.     catch {destroy .t}
  1907.     toplevel .t -width 200 -height 200 -bg green
  1908.     wm overrideredirect .t 1
  1909.     wm geometry .t +0+0
  1910.     tkwait visibility .t
  1911.     catch {destroy .t2}
  1912.     toplevel .t2 -width 200 -height 200 -bg red
  1913.     wm overrideredirect .t2 1
  1914.     wm geometry .t2 +0+0
  1915.     tkwait visibility .t2
  1916.     # Need to use vrootx and vrooty to make tests work correctly with
  1917.     # virtual root window measures managers: overrideredirect windows
  1918.     # come up at (0,0) in display coordinates, not virtual root
  1919.     # coordinates.
  1920.     set x [expr 100-[winfo vrootx .]]
  1921.     set y [expr 100-[winfo vrooty .]]
  1922.     set result [list [winfo containing $x $y]]
  1923.     raise .t
  1924.     lappend result [winfo containing $x $y]
  1925.     raise .t2
  1926.     lappend result [winfo containing $x $y]
  1927. } {.t2 .t .t2}
  1928. test unixWm-51.9 {TkWmRestackToplevel procedure, other window overrideredirect} unix {
  1929.     foreach w {.t .t2 .t3} {
  1930. catch {destroy $w}
  1931. toplevel $w -width 200 -height 200 -bg green
  1932. wm overrideredirect $w 1
  1933. wm geometry $w +0+0
  1934. tkwait visibility $w
  1935.     }
  1936.     lower .t3 .t2
  1937.     update
  1938.     # Need to use vrootx and vrooty to make tests work correctly with
  1939.     # virtual root window measures managers: overrideredirect windows
  1940.     # come up at (0,0) in display coordinates, not virtual root
  1941.     # coordinates.
  1942.     set x [expr 100-[winfo vrootx .]]
  1943.     set y [expr 100-[winfo vrooty .]]
  1944.     set result [list [winfo containing $x $y]]
  1945.     lower .t2
  1946.     lappend result [winfo containing $x $y]
  1947. } {.t2 .t3}
  1948. test unixWm-51.10 {TkWmRestackToplevel procedure, don't move window that's already in the right place} unix {
  1949.     makeToplevels
  1950.     raise .raise1
  1951.     set time [lindex [time {raise .raise1}] 0]
  1952.     expr {$time < 2000000}
  1953. } 1
  1954. test unixWm-51.11 {TkWmRestackToplevel procedure, don't move window that's already in the right place} unix {
  1955.     makeToplevels
  1956.     set time [lindex [time {lower .raise1}] 0]
  1957.     expr {$time < 2000000}
  1958. } 1
  1959. test unixWm-51.12 {TkWmRestackToplevel procedure, don't move window that's already in the right place} unix {
  1960.     makeToplevels
  1961.     set time [lindex [time {raise .raise3 .raise2}] 0]
  1962.     expr {$time < 2000000}
  1963. } 1
  1964. test unixWm-51.13 {TkWmRestackToplevel procedure, don't move window that's already in the right place} unix {
  1965.     makeToplevels
  1966.     set time [lindex [time {lower .raise1 .raise2}] 0]
  1967.     expr {$time < 2000000}
  1968. } 1
  1969. test unixWm-52.1 {TkWmAddToColormapWindows procedure} unix {
  1970.     catch {destroy .t}
  1971.     toplevel .t -width 200 -height 200 -colormap new -relief raised -bd 2
  1972.     wm geom .t +0+0
  1973.     update
  1974.     wm colormap .t
  1975. } {}
  1976. test unixWm-52.2 {TkWmAddToColormapWindows procedure} unix {
  1977.     catch {destroy .t}
  1978.     toplevel .t -colormap new -relief raised -bd 2
  1979.     wm geom .t +0+0
  1980.     frame .t.f -width 100 -height 100 -colormap new -relief sunken -bd 2
  1981.     pack .t.f
  1982.     update
  1983.     wm colormap .t
  1984. } {.t.f .t}
  1985. test unixWm-52.3 {TkWmAddToColormapWindows procedure} unix {
  1986.     catch {destroy .t}
  1987.     toplevel .t -colormap new
  1988.     wm geom .t +0+0
  1989.     frame .t.f -width 100 -height 100 -colormap new -relief sunken -bd 2
  1990.     pack .t.f
  1991.     frame .t.f2 -width 100 -height 100 -colormap new -relief sunken -bd 2
  1992.     pack .t.f2
  1993.     update
  1994.     wm colormap .t
  1995. } {.t.f .t.f2 .t}
  1996. test unixWm-52.4 {TkWmAddToColormapWindows procedure} unix {
  1997.     catch {destroy .t}
  1998.     toplevel .t -colormap new
  1999.     wm geom .t +0+0
  2000.     frame .t.f -width 100 -height 100 -colormap new -relief sunken -bd 2
  2001.     pack .t.f
  2002.     update
  2003.     wm colormapwindows .t .t.f
  2004.     frame .t.f2 -width 100 -height 100 -colormap new -relief sunken -bd 2
  2005.     pack .t.f2
  2006.     update
  2007.     wm colormapwindows .t
  2008. } {.t.f}
  2009. test unixWm-53.1 {TkWmRemoveFromColormapWindows procedure} unix {
  2010.     catch {destroy .t}
  2011.     toplevel .t -colormap new
  2012.     wm geom .t +0+0
  2013.     frame .t.f -width 100 -height 100 -colormap new -relief sunken -bd 2
  2014.     pack .t.f
  2015.     frame .t.f2 -width 100 -height 100 -colormap new -relief sunken -bd 2
  2016.     pack .t.f2
  2017.     update
  2018.     destroy .t.f2
  2019.     wm colormap .t
  2020. } {.t.f .t}
  2021. test unixWm-53.2 {TkWmRemoveFromColormapWindows procedure} unix {
  2022.     catch {destroy .t}
  2023.     toplevel .t -colormap new
  2024.     wm geom .t +0+0
  2025.     frame .t.f -width 100 -height 100 -colormap new -relief sunken -bd 2
  2026.     pack .t.f
  2027.     frame .t.f2 -width 100 -height 100 -colormap new -relief sunken -bd 2
  2028.     pack .t.f2
  2029.     update
  2030.     wm colormapwindows .t .t.f2
  2031.     destroy .t.f2
  2032.     wm colormap .t
  2033. } {}
  2034. test unixWm-54.1 {TkpMakeMenuWindow procedure, setting save_under} unix {
  2035.     catch {destroy .t}
  2036.     catch {destroy .m}
  2037.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2038.     bind .t <Expose> {set x exposed}
  2039.     wm geom .t +0+0
  2040.     update
  2041.     menu .m
  2042.     .m add command -label First
  2043.     .m add command -label Second
  2044.     .m add command -label Third
  2045.     .m post 30 30
  2046.     update
  2047.     set x {no event}
  2048.     destroy .m
  2049.     set x
  2050. } {no event}
  2051. test unixWm-54.2 {TkpMakeMenuWindow procedure, setting override_redirect} unix {
  2052.     catch {destroy .m}
  2053.     menu .m
  2054.     .m add command -label First
  2055.     .m add command -label Second
  2056.     .m add command -label Third
  2057.     .m post 30 30
  2058.     update
  2059.     set result [wm overrideredirect .m]
  2060.     destroy .m
  2061.     set result
  2062. } {1}
  2063. # No tests for TkGetPointerCoords, CreateWrapper, or GetMaxSize.
  2064. test unixWm-55.1 {TkUnixSetMenubar procedure} {unix testmenubar} {
  2065.     catch {destroy .t}
  2066.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2067.     wm geom .t +0+0
  2068.     update
  2069.     frame .t.f -width 400 -height 30 -bd 2 -relief raised -bg green
  2070.     testmenubar window .t .t.f
  2071.     update
  2072.     list [winfo ismapped .t.f] [winfo geometry .t.f] 
  2073.     [expr [winfo rootx .t] - [winfo rootx .t.f]] 
  2074.     [expr [winfo rooty .t] - [winfo rooty .t.f]]
  2075. } {1 300x30+0+0 0 30}
  2076. test unixWm-55.2 {TkUnixSetMenubar procedure, removing menubar} {unix testmenubar} {
  2077.     catch {destroy .t}
  2078.     catch {destroy .f}
  2079.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2080.     wm geom .t +0+0
  2081.     update
  2082.     set x [winfo rootx .t]
  2083.     set y [winfo rooty .t]
  2084.     frame .f -width 400 -height 30 -bd 2 -relief raised -bg green
  2085.     testmenubar window .t .f
  2086.     update
  2087.     testmenubar window .t {}
  2088.     update
  2089.     list [winfo ismapped .f] [winfo geometry .f] 
  2090.     [expr [winfo rootx .t] - $x] 
  2091.     [expr [winfo rooty .t] - $y] 
  2092.     [expr [winfo rootx .] - [winfo rootx .f]] 
  2093.     [expr [winfo rooty .] - [winfo rooty .f]]
  2094. } {0 300x30+0+0 0 0 0 0}
  2095. test unixWm-55.3 {TkUnixSetMenubar procedure, removing geometry manager} {unix testmenubar} {
  2096.     catch {destroy .t}
  2097.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2098.     wm geom .t +0+0
  2099.     update
  2100.     set x [winfo rootx .t]
  2101.     set y [winfo rooty .t]
  2102.     frame .t.f -width 400 -height 30 -bd 2 -relief raised -bg green
  2103.     testmenubar window .t .t.f
  2104.     update
  2105.     testmenubar window .t {}
  2106.     update
  2107.     set result "[expr [winfo rootx .t] - $x] [expr [winfo rooty .t] - $y]"
  2108.     .t.f configure -height 100
  2109.     update
  2110.     lappend result [expr [winfo rootx .t] - $x] [expr [winfo rooty .t] - $y]
  2111. } {0 0 0 0}
  2112. test unixWm-55.4 {TkUnixSetMenubar procedure, toplevel not yet created} {unix testmenubar} {
  2113.     catch {destroy .t}
  2114.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2115.     frame .t.f -width 400 -height 30 -bd 2 -relief raised -bg green
  2116.     testmenubar window .t .t.f
  2117.     wm geom .t +0+0
  2118.     update
  2119.     list [winfo ismapped .t.f] [winfo geometry .t.f] 
  2120.     [expr [winfo rootx .t] - [winfo rootx .t.f]] 
  2121.     [expr [winfo rooty .t] - [winfo rooty .t.f]]
  2122. } {1 300x30+0+0 0 30}
  2123. test unixWm-55.5 {TkUnixSetMenubar procedure, changing menubar} {unix testmenubar} {
  2124.     catch {destroy .t}
  2125.     catch {destroy .f}
  2126.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2127.     frame .t.f -width 400 -height 30 -bd 2 -relief raised -bg green
  2128.     wm geom .t +0+0
  2129.     update
  2130.     set y [winfo rooty .t]
  2131.     frame .f -width 400 -height 50 -bd 2 -relief raised -bg green
  2132.     testmenubar window .t .t.f
  2133.     update
  2134.     set result {}
  2135.     lappend result [winfo ismapped .f] [winfo ismapped .t.f]
  2136.     lappend result [expr [winfo rooty .t.f] - $y]
  2137.     testmenubar window .t .f
  2138.     update
  2139.     lappend result [winfo ismapped .f] [winfo ismapped .t.f]
  2140.     lappend result [expr [winfo rooty .f] - $y]
  2141. } {0 1 0 1 0 0}
  2142. test unixWm-55.6 {TkUnixSetMenubar procedure, changing menubar to self} {unix testmenubar} {
  2143.     catch {destroy .t}
  2144.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2145.     frame .t.f -width 400 -height 30 -bd 2 -relief raised -bg green
  2146.     testmenubar window .t .t.f
  2147.     wm geom .t +0+0
  2148.     update
  2149.     testmenubar window .t .t.f
  2150.     update
  2151.     list [winfo ismapped .t.f] [winfo geometry .t.f] 
  2152.     [expr [winfo rootx .t] - [winfo rootx .t.f]] 
  2153.     [expr [winfo rooty .t] - [winfo rooty .t.f]]
  2154. } {1 300x30+0+0 0 30}
  2155. test unixWm-55.7 {TkUnixSetMenubar procedure, unsetting event handler} {unix testmenubar} {
  2156.     catch {destroy .t}
  2157.     catch {destroy .f}
  2158.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2159.     frame .t.f -width 400 -height 30 -bd 2 -relief raised -bg green
  2160.     frame .f -width 400 -height 40 -bd 2 -relief raised -bg blue
  2161.     wm geom .t +0+0
  2162.     update
  2163.     set y [winfo rooty .t]
  2164.     testmenubar window .t .t.f
  2165.     update
  2166.     set result [expr [winfo rooty .t] - $y]
  2167.     testmenubar window .t .f
  2168.     update
  2169.     lappend result [expr [winfo rooty .t] - $y]
  2170.     destroy .t.f
  2171.     update
  2172.     lappend result [expr [winfo rooty .t] - $y]
  2173. } {30 40 40}
  2174. test unixWm-56.1 {MenubarDestroyProc procedure} {unix testmenubar} {
  2175.     catch {destroy .t}
  2176.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2177.     wm geom .t +0+0
  2178.     update
  2179.     set y [winfo rooty .t]
  2180.     frame .t.f -width 400 -height 30 -bd 2 -relief raised -bg green
  2181.     testmenubar window .t .t.f
  2182.     update
  2183.     set result [expr [winfo rooty .t] - $y]
  2184.     destroy .t.f
  2185.     update
  2186.     lappend result [expr [winfo rooty .t] - $y]
  2187. } {30 0}
  2188. test unixWm-57.1 {MenubarReqProc procedure} {unix testmenubar} {
  2189.     catch {destroy .t}
  2190.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2191.     wm geom .t +0+0
  2192.     update
  2193.     set x [winfo rootx .t]
  2194.     set y [winfo rooty .t]
  2195.     frame .t.f -width 400 -height 10 -bd 2 -relief raised -bg green
  2196.     testmenubar window .t .t.f
  2197.     update
  2198.     set result "[expr [winfo rootx .t] - $x] [expr [winfo rooty .t] - $y]"
  2199.     .t.f configure -height 100
  2200.     update
  2201.     lappend result [expr [winfo rootx .t] - $x] [expr [winfo rooty .t] - $y]
  2202. } {0 10 0 100}
  2203. test unixWm-57.2 {MenubarReqProc procedure} {unix testmenubar} {
  2204.     catch {destroy .t}
  2205.     toplevel .t -width 300 -height 200 -bd 2 -relief raised
  2206.     wm geom .t +0+0
  2207.     update
  2208.     set x [winfo rootx .t]
  2209.     set y [winfo rooty .t]
  2210.     frame .t.f -width 400 -height 20 -bd 2 -relief raised -bg green
  2211.     testmenubar window .t .t.f
  2212.     update
  2213.     set result "[expr [winfo rootx .t] - $x] [expr [winfo rooty .t] - $y]"
  2214.     .t.f configure -height 0
  2215.     update
  2216.     lappend result [expr [winfo rootx .t] - $x] [expr [winfo rooty .t] - $y]
  2217. } {0 20 0 1}
  2218. test unixWm-58.1 {UpdateCommand procedure, DString gets reallocated} {unix testwrapper} {
  2219.     catch {destroy .t}
  2220.     toplevel .t -width 100 -height 50
  2221.     wm geom .t +0+0
  2222.     wm command .t "argumentNumber0 argumentNumber1 argumentNumber2 argumentNumber0 argumentNumber3 argumentNumber4 argumentNumber5 argumentNumber6 argumentNumber0 argumentNumber7 argumentNumber8 argumentNumber9 argumentNumber10 argumentNumber0 argumentNumber11 argumentNumber12 argumentNumber13 argumentNumber14 argumentNumber15 argumentNumber16 argumentNumber17 argumentNumber18"
  2223.     update
  2224.     testprop [testwrapper .t] WM_COMMAND
  2225. } {argumentNumber0
  2226. argumentNumber1
  2227. argumentNumber2
  2228. argumentNumber0
  2229. argumentNumber3
  2230. argumentNumber4
  2231. argumentNumber5
  2232. argumentNumber6
  2233. argumentNumber0
  2234. argumentNumber7
  2235. argumentNumber8
  2236. argumentNumber9
  2237. argumentNumber10
  2238. argumentNumber0
  2239. argumentNumber11
  2240. argumentNumber12
  2241. argumentNumber13
  2242. argumentNumber14
  2243. argumentNumber15
  2244. argumentNumber16
  2245. argumentNumber17
  2246. argumentNumber18
  2247. }
  2248. # Test exit processing and cleanup:
  2249. test unixWm-59.1 {exit processing} unix {
  2250.     set script [makeFile {
  2251. update
  2252. exit
  2253.     } script]
  2254.     if {[catch {exec [interpreter] $script -geometry 10x10+0+0} msg]} {
  2255. set error 1
  2256.     } else {
  2257. set error 0
  2258.     }
  2259.     removeFile script
  2260.     list $error $msg
  2261. } {0 {}}
  2262. test unixWm-59.2 {exit processing} unix {
  2263.     set script [makeFile {
  2264. interp create x
  2265. x eval {set argc 2}
  2266. x eval {set argv "-geometry 10x10+0+0"}
  2267. x eval {load {} Tk}
  2268. update
  2269. exit
  2270.     } script]
  2271.     if {[catch {exec [interpreter] $script -geometry 10x10+0+0} msg]} {
  2272. set error 1
  2273.     } else {
  2274. set error 0
  2275.     }
  2276.     removeFile script
  2277.     list $error $msg
  2278. } {0 {}}
  2279. test unixWm-59.3 {exit processing} unix {
  2280.     set script [makeFile {
  2281. interp create x
  2282. x eval {set argc 2}
  2283. x eval {set argv "-geometry 10x10+0+0"}
  2284. x eval {load {} Tk}
  2285. x eval {
  2286.     button .b -text hello
  2287.     bind .b <Destroy> foo
  2288. }
  2289. x alias foo destroy_x
  2290. proc destroy_x {} {interp delete x}
  2291. update
  2292. exit
  2293.     } script]
  2294.     if {[catch {exec [interpreter] $script -geometry 10x10+0+0} msg]} {
  2295. set error 1
  2296.     } else {
  2297. set error 0
  2298.     }
  2299.     removeFile script
  2300.     list $error $msg
  2301. } {0 {}}
  2302. test unixWm-60.1 {wm attributes} unix {
  2303.     destroy .t
  2304.     toplevel .t
  2305.     wm attributes .t
  2306. } {}
  2307. test unixWm-60.2 {wm attributes} unix {
  2308.     destroy .t
  2309.     toplevel .t
  2310.     list [catch {wm attributes .t -foo} msg] $msg
  2311. } {1 {wrong # args: should be "wm attributes window"}}
  2312. test unixWm-61.1 {Tk_WmCmd procedure, "iconphoto" option} unix {
  2313.     list [catch {wm iconph .} msg] $msg
  2314. } {1 {wrong # args: should be "wm iconphoto window ?-default? image1 ?image2 ...?"}}
  2315. test unixWm-61.2 {Tk_WmCmd procedure, "iconphoto" option} unix {
  2316.     destroy .t
  2317.     toplevel .t
  2318.     image create photo blank16 -width 16 -height 16
  2319.     image create photo blank32 -width 32 -height 32
  2320.     # This should just make blank icons for the window
  2321.     wm iconphoto .t blank16 blank32
  2322.     image delete blank16 blank32
  2323. } {}
  2324. # cleanup
  2325. catch {destroy .t}
  2326. ::tcltest::cleanupTests
  2327. return