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