1use strict;
2use warnings;
3
4use Test::More;
5use Prima::sys::Test;
6use Prima::Application;
7
8plan tests => 16;
9
10my %id;
11my $xw = create_window(
12	onActivate    => sub { set_flag; $id{Activate}   = 1;},
13	onDeactivate  => sub { set_flag; $id{Deactivate} = 1;},
14	onExecute     => sub { set_flag; $id{Execute}    = 1; execute(); },
15	onWindowState => sub { set_flag; $id{State}      = 1;},
16	onClose       => sub { set_flag; $id{Close}      = 1; $_[0]-> clear_event; },
17	onShow        => sub { set_flag; $id{Show}       = 1; },
18	onHide        => sub { set_flag; $id{Hide}       = 1; },
19);
20
21# window managers are heavy today
22local $Prima::sys::Test::timeout = 5000;
23
24# make sure the other window is focused
25my $window = create_window( onActivate => sub {
26	set_flag;
27	$id{Activate2} = 1;
28});
29$window-> focus;
30reset_flag;
31wait_flag unless $id{Activate2};
32SKIP: {
33	skip "WM doesn't respect focus requests", 4 if !$id{Activate2} &&
34		Prima::Application-> get_system_info->{apc} == apc::Unix;
35
36	reset_flag;
37	$xw-> focus;
38	ok( wait_flag && $id{Activate}, "onActivate" );
39	ok( $xw-> selected, "activate" );
40	%id=();
41
42	reset_flag;
43	$window-> focus;
44	ok( !$xw-> selected, "deactivate" );
45	ok( wait_flag && $id{Deactivate}, "onDeactivate" );
46}
47
48%id=();
49reset_flag;
50$xw-> windowState( ws::Maximized);
51is( $xw-> windowState, ws::Maximized, "maximize" );
52ok( wait_flag && $id{State}, "onWindowState" );
53$xw-> windowState( ws::Normal);
54is( $xw-> windowState, ws::Normal, "restore from maximized" );
55%id=();
56
57reset_flag;
58$xw-> windowState( ws::Minimized);
59is( $xw-> windowState, ws::Minimized, "restore from minimized" );
60
61reset_flag;
62$xw-> windowState( ws::Normal);
63is( $xw-> windowState, ws::Normal, "restore max->min->normal" );
64
65$xw-> windowState( ws::Maximized);
66$xw-> windowState( ws::Minimized);
67$xw-> windowState( ws::Normal);
68is( $xw-> windowState, ws::Normal, "user modality" );
69
70%id=();
71reset_flag;
72
73sub execute
74{
75$xw-> insert( Timer =>
76              timeout => 250,
77              onTick => sub {
78                  $_[0]-> stop;
79                  $window-> focus;
80                  ok( !$window-> selected, "execute" );
81                  $xw-> ok;
82                  $_[0]-> destroy;
83              })-> start;
84}
85my $mr = $xw-> execute;
86ok( get_flag, "execute" );
87is( $mr, mb::OK, "execute" );
88
89reset_flag;
90%id=();
91$xw-> show;
92ok( wait_flag && $id{Show} && $xw-> visible, "show" );
93
94reset_flag;
95%id=();
96$xw-> hide;
97ok( wait_flag && $id{Hide} && !$xw-> visible, "hide" );
98
99%id=();
100reset_flag;
101$xw-> close;
102ok( wait_flag && $id{Close} && $xw-> alive, "close" );
103
104$xw-> destroy;
105