Tk Source Code

Changes On Branch mistake
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Changes In Branch mistake Excluding Merge-Ins

This is equivalent to a diff from 83c3bea5 to 58cb6075

2025-03-31
08:36
testutils.tcl [_pause]: correct qualification of wait variable, and optimize slightly. check-in: 737c20a9 user: erikleunissen tags: tk_collect_test_utils
08:23
testutils.tcl [_pause]: correct registration of wait variable which was broken by relocation, and optimize slightly. Closed-Leaf check-in: 58cb6075 user: erikleunissen tags: mistake
2025-03-30
13:53
Utility domain "select": [setup] -> [selectionSetup] check-in: 83c3bea5 user: erikleunissen tags: tk_collect_test_utils
12:54
testutils.tcl: keep alphabetical order (domain "generic") check-in: eabc92a3 user: erikleunissen tags: tk_collect_test_utils

Changes to tests/event.test.
75
76
77
78
79
80
81
82

83
84
85
86
87

88
89
90
91
92
93
94
75
76
77
78
79
80
81

82
83
84
85
86

87
88
89
90
91
92
93
94







-
+




-
+







    # a focus follows mouse will not steal away
    # the focus if the mouse is moved around.

    if {[focus] != $win} {
	focus -force $win
    }
    event generate $win <Key-$keysym>
    _pause 50
    pause 50
    if {[focus] != $win} {
	focus -force $win
    }
    event generate $win <KeyRelease-$keysym>
    _pause 50
    pause 50
}

# Call _keypress for each character in the given string

proc _keypress_string {win string} {
    foreach letter [split $string ""] {
	_keypress $win $letter
201
202
203
204
205
206
207
208

209
210

211
212
213
214
215
216
217
201
202
203
204
205
206
207

208
209

210
211
212
213
214
215
216
217







-
+

-
+







    tkwait visibility $e
    _keypress_string $e JUMP

    set result [$e get]

    event generate $e <Enter>
    for {set i 0} {$i < 3} {incr i} {
	_pause 100
	pause 100
	event generate $e <Button-1>
	_pause 100
	pause 100
	event generate $e <ButtonRelease-1>
    }

    _keypress $e Delete
    _keypress_string $e UP
    lappend result [$e get]
} -cleanup {
256
257
258
259
260
261
262
263

264
265

266
267
268
269
270
271
272
256
257
258
259
260
261
262

263
264

265
266
267
268
269
270
271
272







-
+

-
+







    tkwait visibility $e
    _keypress_string $e JUMP

    set result [$e get 1.0 1.end]

    event generate $e <Enter>
    for {set i 0} {$i < 3} {incr i} {
	_pause 100
	pause 100
	event generate $e <Button-1>
	_pause 100
	pause 100
	event generate $e <ButtonRelease-1>
    }

    _keypress $e Delete
    _keypress_string $e UP
    lappend result [$e get 1.0 1.end]
} -cleanup {
301
302
303
304
305
306
307
308

309
310
311
312

313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328

329
330
331
332

333
334
335
336
337
338
339
301
302
303
304
305
306
307

308
309
310
311

312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327

328
329
330
331

332
333
334
335
336
337
338
339







-
+



-
+















-
+



-
+







    # Now drag until selend is highlighted, then click up

    set current $anchor
    while {[$e compare $current <= $selend]} {
	foreach {current_x current_y} [_text_ind_to_x_y $e $current] break
	event generate $e <B1-Motion> -x $current_x -y $current_y
	set current [$e index [list $current + 1 char]]
	_pause 50
	pause 50
    }

    event generate $e <ButtonRelease-1> -x $current_x -y $current_y
    _pause 200
    pause 200

    # Save the position of the insert cursor
    lappend result [$e index insert]

    # Save the highlighted text
    lappend result [_get_selection $e]

    # Now click and click and drag to the left, over "Tcl/Tk selection"

    event generate $e <Button-1> -x $current_x -y $current_y

    while {[$e compare $current >= [list $anchor - 4 char]]} {
	foreach {current_x current_y} [_text_ind_to_x_y $e $current] break
	event generate $e <B1-Motion> -x $current_x -y $current_y
	set current [$e index [list $current - 1 char]]
	_pause 50
	pause 50
    }

    event generate $e <ButtonRelease-1> -x $current_x -y $current_y
    _pause 200
    pause 200

    # Save the position of the insert cursor
    lappend result [$e index insert]

    # Save the highlighted text
    lappend result [_get_selection $e]

368
369
370
371
372
373
374
375

376
377
378
379

380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395

396
397
398
399

400
401
402
403
404
405
406
368
369
370
371
372
373
374

375
376
377
378

379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394

395
396
397
398

399
400
401
402
403
404
405
406







-
+



-
+















-
+



-
+







    # Now drag until selend is highlighted, then click up

    set current $anchor
    while {$current <= $selend} {
	foreach {current_x current_y} [_text_ind_to_x_y $e $current] break
	event generate $e <B1-Motion> -x $current_x -y $current_y
	incr current
	_pause 50
	pause 50
    }

    event generate $e <ButtonRelease-1> -x $current_x -y $current_y
    _pause 200
    pause 200

    # Save the position of the insert cursor
    lappend result [$e index insert]

    # Save the highlighted text
    lappend result [_get_selection $e]

    # Now click and click and drag to the left, over "Tcl/Tk selection"

    event generate $e <Button-1> -x $current_x -y $current_y

    while {$current >= ($anchor - 4)} {
	foreach {current_x current_y} [_text_ind_to_x_y $e $current] break
	event generate $e <B1-Motion> -x $current_x -y $current_y
	incr current -1
	_pause 50
	pause 50
    }

    event generate $e <ButtonRelease-1> -x $current_x -y $current_y
    _pause 200
    pause 200

    # Save the position of the insert cursor
    lappend result [$e index insert]

    # Save the highlighted text
    lappend result [_get_selection $e]

422
423
424
425
426
427
428
429

430
431

432
433

434
435
436
437
438
439
440
441
442
443
444
445
446
447

448
449
450
451
452
453
454
455
456
457
458
459
460

461
462
463
464
465
466
467
468
469
470

471
472
473
474
475
476
477
422
423
424
425
426
427
428

429
430

431
432

433
434
435
436
437
438
439
440
441
442
443
444
445
446

447
448
449
450
451
452
453
454
455
456
457
458
459

460
461
462
463
464
465
466
467
468
469

470
471
472
473
474
475
476
477







-
+

-
+

-
+













-
+












-
+









-
+








    # Get the x,y coords of the second e in "select"
    foreach {anchor_x anchor_y} [_text_ind_to_x_y $e $anchor] break

    # Click down, release, then click down again
    event generate $e <Enter>
    event generate $e <Button-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50
    event generate $e <Button-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50

    # Save the highlighted text
    set result [list]
    lappend result [_get_selection $e]

    # Insert cursor should be at beginning of "select"
    lappend result [$e index insert]

    # Move mouse one character to the left
    set current [$e index [list $anchor - 1 char]]
    foreach {current_x current_y} [_text_ind_to_x_y $e $current] break

    event generate $e <B1-Motion> -x $current_x -y $current_y
    _pause 50
    pause 50

    # Insert cursor should be before the l in "select"
    lappend result [$e index insert]

    # Selection should still be the word "select"
    lappend result [_get_selection $e]

    # Move mouse to the space before the word "select"
    set current [$e index [list $current - 3 char]]

    foreach {current_x current_y} [_text_ind_to_x_y $e $current] break
    event generate $e <B1-Motion> -x $current_x -y $current_y
    _pause 200
    pause 200

    lappend result [$e index insert]
    lappend result [_get_selection $e]

    # Move mouse to the r in "Word"
    set current 1.2
    foreach {current_x current_y} [_text_ind_to_x_y $e $current] break

    event generate $e <B1-Motion> -x $current_x -y $current_y
    _pause 50
    pause 50

    # Selection should now be "Word select"
    lappend result [_get_selection $e]

    # Insert cursor should be before the r in "Word"
    lappend result [$e index insert]

493
494
495
496
497
498
499
500

501
502

503
504

505
506
507
508
509
510
511
512
513
514
515
516
517

518
519
520
521
522
523
524
525
526
527
528
529
530

531
532
533
534
535
536
537
538
539
540

541
542
543
544
545
546
547
493
494
495
496
497
498
499

500
501

502
503

504
505
506
507
508
509
510
511
512
513
514
515
516

517
518
519
520
521
522
523
524
525
526
527
528
529

530
531
532
533
534
535
536
537
538
539

540
541
542
543
544
545
546
547







-
+

-
+

-
+












-
+












-
+









-
+








    # Get the x,y coords of the second e in "select"
    foreach {anchor_x anchor_y} [_text_ind_to_x_y $e $anchor] break

    # Click down, release, then click down again
    event generate $e <Enter>
    event generate $e <Button-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50
    event generate $e <Button-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50

    set result [list]
    lappend result [_get_selection $e]

    # Insert cursor should be at the end of "select"
    lappend result [$e index insert]

    # Move mouse one character to the left
    set current [expr {$anchor - 1}]
    foreach {current_x current_y} [_text_ind_to_x_y $e $current] break

    event generate $e <B1-Motion> -x $current_x -y $current_y
    _pause 50
    pause 50

    # Insert cursor should be before the l in "select"
    lappend result [$e index insert]

    # Selection should still be the word "select"
    lappend result [_get_selection $e]

    # Move mouse to the space before the word "select"
    set current [expr {$current - 3}]
    foreach {current_x current_y} [_text_ind_to_x_y $e $current] break

    event generate $e <B1-Motion> -x $current_x -y $current_y
    _pause 50
    pause 50

    lappend result [$e index insert]
    lappend result [_get_selection $e]

    # Move mouse to the r in "Word"
    set current [expr {$current - 2}]
    foreach {current_x current_y} [_text_ind_to_x_y $e $current] break

    event generate $e <B1-Motion> -x $current_x -y $current_y
    _pause 50
    pause 50

    # Selection should now be "Word select"
    lappend result [_get_selection $e]

    # Insert cursor should be before the r in "Word"
    lappend result [$e index insert]

565
566
567
568
569
570
571
572

573
574

575
576
577

578
579

580
581
582

583
584
585
586
587
588
589
590
591
592
593

594
595
596
597
598
599
600
601
602
603

604
605
606
607
608
609
610
565
566
567
568
569
570
571

572
573

574
575
576

577
578

579
580
581

582
583
584
585
586
587
588
589
590
591
592

593
594
595
596
597
598
599
600
601
602

603
604
605
606
607
608
609
610







-
+

-
+


-
+

-
+


-
+










-
+









-
+







    # Triple click one third line leaving mouse down

    foreach {anchor_x anchor_y} [_text_ind_to_x_y $e $anchor] break

    event generate $e <Enter>

    event generate $e <Button-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50

    event generate $e <Button-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50

    event generate $e <Button-1> -x $anchor_x -y $anchor_y
    _pause 50
    pause 50

    set result [list]
    lappend result [_get_selection $e]

    # Drag up to second line

    set current [$e index [list $anchor - 1 line]]
    foreach {current_x current_y} [_text_ind_to_x_y $e $current] break

    event generate $e <B1-Motion> -x $current_x -y $current_y
    _pause 50
    pause 50

    lappend result [_get_selection $e]

    # Drag up to first line

    set current [$e index [list $current - 1 line]]
    foreach {current_x current_y} [_text_ind_to_x_y $e $current] break

    event generate $e <B1-Motion> -x $current_x -y $current_y
    _pause 50
    pause 50

    lappend result [_get_selection $e]

    return $result
} -cleanup {
    deleteWindows
} -result [list "LINE THREE\n" "LINE TWO\nLINE THREE\n" \
654
655
656
657
658
659
660
661

662
663

664
665

666
667

668
669
670
671
672
673
674
675
676

677
678

679
680
681
682
683

684
685

686
687

688
689

690
691
692
693
694
695
696
654
655
656
657
658
659
660

661
662

663
664

665
666

667
668
669
670
671
672
673
674
675

676
677

678
679
680
681
682

683
684

685
686

687
688

689
690
691
692
693
694
695
696







-
+

-
+

-
+

-
+








-
+

-
+




-
+

-
+

-
+

-
+







    set right_x [expr {($x1 + $width) - 2}]
    set right_y $middle_y

    # Double click near left hand egde of the letter A

    event generate $e <Enter>
    event generate $e <Button-1> -x $left_x -y $left_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $left_x -y $left_y
    _pause 50
    pause 50
    event generate $e <Button-1> -x $left_x -y $left_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $left_x -y $left_y
    _pause 50
    pause 50

    set result [list]
    lappend result [$e index insert]
    lappend result [_get_selection $e]

    # Clear selection by clicking at 0,0

    event generate $e <Button-1> -x 0 -y 0
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x 0 -y 0
    _pause 50
    pause 50

    # Double click near right hand edge of the letter A

    event generate $e <Button-1> -x $right_x -y $right_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $right_x -y $right_y
    _pause 50
    pause 50
    event generate $e <Button-1> -x $right_x -y $right_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $right_x -y $right_y
    _pause 50
    pause 50

    lappend result [$e index insert]
    lappend result [_get_selection $e]

    return $result
} -cleanup {
    deleteWindows
721
722
723
724
725
726
727
728

729
730

731
732

733
734

735
736
737
738
739
740
741
742
743

744
745

746
747
748
749
750

751
752

753
754

755
756

757
758
759
760
761
762
763
721
722
723
724
725
726
727

728
729

730
731

732
733

734
735
736
737
738
739
740
741
742

743
744

745
746
747
748
749

750
751

752
753

754
755

756
757
758
759
760
761
762
763







-
+

-
+

-
+

-
+








-
+

-
+




-
+

-
+

-
+

-
+







    set right_x [expr {($x1 + $width) - 2}]
    set right_y $middle_y

    # Double click near left hand egde of the letter A

    event generate $e <Enter>
    event generate $e <Button-1> -x $left_x -y $left_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $left_x -y $left_y
    _pause 50
    pause 50
    event generate $e <Button-1> -x $left_x -y $left_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $left_x -y $left_y
    _pause 50
    pause 50

    set result [list]
    lappend result [$e index insert]
    lappend result [_get_selection $e]

    # Clear selection by clicking at 0,0

    event generate $e <Button-1> -x 0 -y 0
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x 0 -y 0
    _pause 50
    pause 50

    # Double click near right hand edge of the letter A

    event generate $e <Button-1> -x $right_x -y $right_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $right_x -y $right_y
    _pause 50
    pause 50
    event generate $e <Button-1> -x $right_x -y $right_y
    _pause 50
    pause 50
    event generate $e <ButtonRelease-1> -x $right_x -y $right_y
    _pause 50
    pause 50

    lappend result [$e index insert]
    lappend result [_get_selection $e]

    return $result
} -cleanup {
    deleteWindows
800
801
802
803
804
805
806
807

808
809
810
811
812
813
814

815
816

817
818
819
820
821

822
823
824
825
826
827
828
800
801
802
803
804
805
806

807
808
809
810
811
812
813

814
815

816
817
818
819
820

821
822
823
824
825
826
827
828







-
+






-
+

-
+




-
+







} -result {OK}

test event-9.1 {enter . window by destroying a toplevel - bug b1d115fa60} -setup {
    set EnterBind [bind . <Enter>]
} -body {
    wm geometry . 200x200+300+300
    wm deiconify .
    _pause 200
    pause 200
    toplevel .top2 -width 200 -height 200
    wm geometry .top2 +[expr {[winfo rootx .]+50}]+[expr {[winfo rooty .]+50}]
    update idletasks
    wm deiconify .top2
    update idletasks
    raise .top2
    _pause 400
    pause 400
    event generate .top2 <Motion> -warp 1 -x 50 -y 50
    _pause 100
    pause 100
    bind . <Enter> {lappend res %W}
    set res [list ]
    destroy .top2
    update idletasks
    _pause 200
    pause 200
    set res
} -cleanup {
    deleteWindows
    bind . <Enter> $EnterBind
} -result {.}

# This test fails sporadically when run on the macOS CI runner. It does
837
838
839
840
841
842
843
844

845
846
847

848
849
850
851

852
853

854
855
856
857

858
859
860
861
862
863
864
837
838
839
840
841
842
843

844
845
846

847
848
849
850

851
852

853
854
855
856

857
858
859
860
861
862
863
864







-
+


-
+



-
+

-
+



-
+







	update
	set iconified true
    }
} -body {
    toplevel .top1
    wm geometry .top1 200x200+300+300
    wm deiconify .top1
    _pause 200
    pause 200
    toplevel .top2 -width 200 -height 200
    wm geometry .top2 +[expr {[winfo rootx .top1]+50}]+[expr {[winfo rooty .top1]+50}]
    _pause 200
    pause 200
    wm deiconify .top2
    update idletasks
    raise .top2
    _pause 400
    pause 400
    event generate .top2 <Motion> -warp 1 -x 50 -y 50
    _pause 100
    pause 100
    bind .top1 <Enter> {lappend res %W}
    set res [list ]
    destroy .top2
    _pause 200
    pause 200
    set res
} -cleanup {
    deleteWindows ; # destroy all children of ".", this already includes .top1
    if {$iconified} {
	wm deiconify .
	update
    }
927
928
929
930
931
932
933
934

935
936
937
938
939
940
941
927
928
929
930
931
932
933

934
935
936
937
938
939
940
941







-
+








test event-9.11 {pointer window container = parent} -setup {
    setup_win_mousepointer .one
    wm withdraw .one
    create_and_pack_frames .one
    wm deiconify .one
    tkwait visibility .one.f1.f2
    _pause 200; # needed for Windows
    pause 200; # needed for Windows
    update idletasks; # finish display of window
    set result "|"
} -body {
    bind all <Leave> {append result "<Leave> %d %W|"}
    bind all <Enter> {append result "<Enter> %d %W|"}
    destroy .one.f1.f2
    update
952
953
954
955
956
957
958
959

960
961
962
963
964
965
966
952
953
954
955
956
957
958

959
960
961
962
963
964
965
966







-
+







    wm withdraw .one
    create_and_pack_frames .one
    pack propagate .one.f1.f2 0
    pack [frame .one.g -bg orange -width 80 -height 80] -anchor se -side bottom -in .one.f1.f2
    wm deiconify .one
    tkwait visibility .one.g
    event generate .one <Motion> -warp 1 -x 250 -y 250
    _pause 200; # needed for Windows
    pause 200; # needed for Windows
    set result "|"
} -body {
    bind all <Leave> {append result "<Leave> %d %W|"}
    bind all <Enter> {append result "<Enter> %d %W|"}
    destroy .one.g
    update
    set result
1046
1047
1048
1049
1050
1051
1052
1053

1054
1055
1056
1057
1058
1059
1060
1046
1047
1048
1049
1050
1051
1052

1053
1054
1055
1056
1057
1058
1059
1060







-
+







    # TkPointerDeadWindow() and subsequent reading in GenerateEnterLeave().
    setup_win_mousepointer .one
    wm withdraw .one
    create_and_pack_frames .one
    wm deiconify .one
    tkwait visibility .one.f1.f2
    update idletasks; # finish displaying window
    _pause 200; # needed for Windows
    pause 200; # needed for Windows
    set result "|"
} -body {
    bind all <Leave> {append result "<Leave> %d %W|"}
    bind all <Enter> {append result "<Enter> %d %W|"}
    destroy .one.f1
    update
    set result
1070
1071
1072
1073
1074
1075
1076
1077

1078
1079
1080
1081
1082
1083
1084
1070
1071
1072
1073
1074
1075
1076

1077
1078
1079
1080
1081
1082
1083
1084







-
+







    # TkPointerDeadWindow() and subsequent reading in GenerateEnterLeave().
    setup_win_mousepointer .one
    wm withdraw .one
    create_and_pack_frames .one
    wm deiconify .one
    tkwait visibility .one.f1.f2
    update idletasks; # finish displaying window
    _pause 200; # needed for Windows
    pause 200; # needed for Windows
    set result "|"
} -body {
    bind all <Leave> {append result "<Leave> %d %W|"}
    bind all <Enter> {append result "<Enter> %d %W|"}
    destroy .one.f1.f2
    update; # make sure window is gone
    destroy .one.f1
1168
1169
1170
1171
1172
1173
1174
1175

1176
1177
1178
1179
1180
1181
1182
1168
1169
1170
1171
1172
1173
1174

1175
1176
1177
1178
1179
1180
1181
1182







-
+







    bind all <Enter> {}
    unset result
} -result {|}

# cleanup
# macOS sometimes has trouble deleting the test window,
# causing a failure in focus.test.
_pause 200;
pause 200;
deleteWindows
update
unset -nocomplain keypress_lookup
rename _init_keypress_lookup {}
rename _keypress_lookup {}
rename _keypress {}
rename _text_ind_to_x_y {}
Changes to tests/testutils.tcl.
129
130
131
132
133
134
135
136
137


138
139
140
141


142
143
144
145


146
147
148
149
150
151
152
129
130
131
132
133
134
135


136
137
138
139


140
141
142



143
144
145
146
147
148
149
150
151







-
-
+
+


-
-
+
+

-
-
-
+
+







    }

    # Suspend script execution for a given amount of time, but continue
    # processing events.
    proc _pause {{msecs 1000}} {
	variable _pause

	if {! [info exists _pause(number)]} {
	    set _pause(number) 0
	if {! [info exists _pause(count)]} {
	    set _pause(count) 0
	}

	set num [incr _pause(number)]
	set _pause($num) 0
	set num [incr _pause(count)]
	set _pause($num) 1

	after $msecs "set _pause($num) 1"
	vwait _pause($num)
	unset _pause($num)
	after $msecs [list unset [namespace current]::_pause($num)]
	vwait [namespace current]::_pause($num)
    }

    # On macOS windows are not allowed to overlap the menubar at the top of the
    # screen or the dock.  So tests which move a window and then check whether it
    # got moved to the requested location should use a y coordinate larger than the
    # height of the menubar (normally 23 pixels) and an x coordinate larger than the
    # width of the dock, if it happens to be on the left.
Changes to tests/unixWm.test.
99
100
101
102
103
104
105
106

107
108
109
110

111
112
113
114
115
116
117
99
100
101
102
103
104
105

106
107
108
109

110
111
112
113
114
115
116
117







-
+



-
+







    incr i
}

set i 1
foreach geom "+$X+80 +$X+40 +$X+$Y0" {
    test unixWm-4.$i {moving window while withdrawn} unix {
	wm withdraw .t
	_pause 10
	pause 10
	wm geom .t $geom
	update idletasks
	wm deiconify .t
	_pause 10
	pause 10
	wm geom .t
    } 100x150$geom
    incr i
}

test unixWm-5.1 {compounded state changes} {unix nonPortable} {
    destroy .t
Changes to tests/wm.test.
349
350
351
352
353
354
355
356

357
358
359
360

361
362
363
364
365
366
367
368
369
370
371
372
373

374
375
376
377

378
379
380
381

382
383
384
385

386
387
388
389
390
391
392
393
394
395
396
397
398
399

400
401
402
403
404
405

406
407
408
409
410
411
412
413
414
415

416
417
418
419
420
421

422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437

438
439
440
441
442
443
444
445
446

447
448
449
450

451
452
453
454
455

456
457
458
459
460
461
462
463
464
465

466
467
468
469

470
471
472
473
474

475
476
477
478
479
480
481
482
483
484
485
486
487
488

489
490
491
492

493
494
495
496
497

498
499
500
501
502
503
504
349
350
351
352
353
354
355

356
357
358
359

360
361
362
363
364
365
366
367
368
369
370
371
372

373
374
375
376

377
378
379
380

381
382
383
384

385
386
387
388
389
390
391
392
393
394
395
396
397
398

399
400
401
402
403
404

405
406
407
408
409
410
411
412
413
414

415
416
417
418
419
420

421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436

437
438
439
440
441
442
443
444
445

446
447
448
449

450
451
452
453
454

455
456
457
458
459
460
461
462
463
464

465
466
467
468

469
470
471
472
473

474
475
476
477
478
479
480
481
482
483
484
485
486
487

488
489
490
491

492
493
494
495
496

497
498
499
500
501
502
503
504







-
+



-
+












-
+



-
+



-
+



-
+













-
+





-
+









-
+





-
+















-
+








-
+



-
+




-
+









-
+



-
+




-
+













-
+



-
+




-
+







    focus -force .
    toplevel .t
    lower .t
    update
    lappend results [focus]

    wm attributes .t -fullscreen 1
    _pause 200
    pause 200
    lappend results [focus]

    wm attributes .t -fullscreen 0
    _pause 200
    pause 200
    lappend results [focus]
} -cleanup {
    deleteWindows
} -result {. . .}
test wm-attributes-1.4.1 {setting fullscreen does not generate FocusIn on wrapper create} -setup {
    catch {unset focusin}
} -constraints win -body {
    focus -force .
    toplevel .t
    pack [entry .t.e]
    lower .t
    bind .t <FocusIn> {lappend focusin %W}
    _pause 200
    pause 200

    lappend focusin 1
    focus -force .t.e
    _pause 200
    pause 200

    lappend focusin 2
    wm attributes .t -fullscreen 1
    _pause 200
    pause 200

    lappend focusin 3
    wm attributes .t -fullscreen 0
    _pause 200
    pause 200

    lappend focusin final [focus]
} -cleanup {
    bind . <FocusIn> {}
    bind .t <FocusIn> {}
    deleteWindows
} -result {1 .t .t.e 2 3 final .t.e}

test wm-attributes-1.5.0 {fullscreen stackorder} -setup {
    set results [list]
} -constraints win -body {
    toplevel .t
    lappend results [wm stackorder .]
    _pause 200
    pause 200
    lappend results [wm stackorder .]

    # Default stacking is on top of other windows on the display. Setting the
    # fullscreen attribute does not change this.
    wm attributes .t -fullscreen 1
    _pause 200
    pause 200
    lappend results [wm stackorder .]
} -cleanup {
    deleteWindows
} -result {. {. .t} {. .t}}
test wm-attributes-1.5.1 {fullscreen stackorder} -setup {
    set results [list]
} -constraints win -body {
    toplevel .t
    lower .t
    _pause 200
    pause 200
    lappend results [wm stackorder .]

    # If stacking order is explicitly set, then setting the fullscreen
    # attribute should not change it.
    wm attributes .t -fullscreen 1
    _pause 200
    pause 200
    lappend results [wm stackorder .]
} -cleanup {
    deleteWindows
} -result {{.t .} {.t .}}
test wm-attributes-1.5.2 {fullscreen stackorder} -setup {
    set results [list]
} -constraints win -body {
    toplevel .t
    # lower forces the window to be mapped, it would not be otherwise
    lower .t
    lappend results [wm stackorder .]

    # If stacking order is explicitly set for an unmapped window, then setting
    # the fullscreen attribute should not change it.
    wm attributes .t -fullscreen 1
    _pause 200
    pause 200
    lappend results [wm stackorder .]
} -cleanup {
    deleteWindows
} -result {{.t .} {.t .}}
test wm-attributes-1.5.3 {fullscreen stackorder} -setup {
    set results [list]
} -constraints win -body {
    toplevel .t
    _pause 200
    pause 200
    lappend results [wm stackorder .]

    wm attributes .t -fullscreen 1
    _pause 200
    pause 200
    lappend results [wm stackorder .]

    # Unsetting the fullscreen attribute should not change the stackorder.
    wm attributes .t -fullscreen 0
    _pause 200
    pause 200
    lappend results [wm stackorder .]
} -cleanup {
    deleteWindows
} -result {{. .t} {. .t} {. .t}}
test wm-attributes-1.5.4 {fullscreen stackorder} -setup {
    set results [list]
} -constraints win -body {
    toplevel .t
    lower .t
    _pause 200
    pause 200
    lappend results [wm stackorder .]

    wm attributes .t -fullscreen 1
    _pause 200
    pause 200
    lappend results [wm stackorder .]

    # Unsetting the fullscreen attribute should not change the stackorder.
    wm attributes .t -fullscreen 0
    _pause 200
    pause 200
    lappend results [wm stackorder .]
} -cleanup {
    deleteWindows
} -result {{.t .} {.t .} {.t .}}
test wm-attributes-1.5.5 {fullscreen stackorder} -setup {
    set results [list]
} -constraints win -body {
    toplevel .a
    toplevel .b
    toplevel .c
    raise .a
    raise .b
    raise .c
    _pause 200
    pause 200
    lappend results [wm stackorder .]

    wm attributes .b -fullscreen 1
    _pause 200
    pause 200
    lappend results [wm stackorder .]

    # Unsetting the fullscreen attribute should not change the stackorder.
    wm attributes .b -fullscreen 0
    _pause 200
    pause 200
    lappend results [wm stackorder .]
} -cleanup {
    deleteWindows
} -result {{. .a .b .c} {. .a .b .c} {. .a .b .c}}


stdWindow