#!/usr/bin/perl # # $Id$ # ######################### # GtkWindow Tests # - rm ######################### ######################### use Gtk2::TestHelper tests => 120; ok( my $win = Gtk2::Window->new ); ok( $win = Gtk2::Window->new('popup') ); ok( $win = Gtk2::Window->new('toplevel') ); $win->set_title; ok(1); $win->set_title(undef); ok(1); $win->set_title(''); ok(1); $win->set_title('Test Window'); ok(1); is( $win->get_title, 'Test Window' ); $win->set_resizable(TRUE); ok(1); ok( $win->get_resizable ); $win->set_modal(TRUE); ok(1); ok( $win->get_modal ); $win->set_default_size(640, 480); ok(1); # the window manager needn't honor our request, but the # widget should be holding the values and the bindings # should return them correctly. my @s = $win->get_default_size; ok( $s[0] == 640 && $s[1] == 480 ); my $geometry = { min_width => 10, min_height => 10 }; my $label = Gtk2::Label->new("Bla"); $win->set_geometry_hints($label, $geometry); ok(1); $win->set_geometry_hints($label, $geometry, undef); ok(1); $win->set_geometry_hints($label, $geometry, qw(min-size)); ok(1); foreach (qw/north-west north north-east west center east south-west south south-east static/) { $win->set_gravity($_); ok(1); is( $win->get_gravity , $_, "gravity $_" ); } foreach (qw/none center mouse center-always center-on-parent/) { $win->set_position($_); ok(1, "set_position $_"); } $win->set_position('center'); ok(1); my @position = $win->get_position; is(scalar(@position), 2); ok( my $win2 = Gtk2::Window->new ); $win2->set_transient_for($win); ok(1); is( $win2->get_transient_for, $win ); $win2->set_destroy_with_parent(TRUE); ok(1); ok( $win2->get_destroy_with_parent ); my @toplvls = Gtk2::Window->list_toplevels; is(scalar(@toplvls), 4); use Gtk2::Gdk::Keysyms; my $mnemonic = $Gtk2::Gdk::Keysyms{ KP_Enter }; $win2->add_mnemonic($mnemonic, $label); ok(1); ok( defined $win2->mnemonic_activate($mnemonic, "shift-mask") ); SKIP: { skip "activate_key and propagate_key_event are new in 2.4", 2 unless Gtk2->CHECK_VERSION (2, 4, 0); my $event = Gtk2::Gdk::Event::Key->new ("key-press"); $event->keyval ($Gtk2::Gdk::Keysyms{ A }); ok ( ! $win2->activate_key ($event) ); ok ( ! $win2->propagate_key_event ($event) ); } $win2->remove_mnemonic($mnemonic, $label); ok(1); $win2->set_mnemonic_modifier("control-mask"); ok(1); is_deeply(\@{ $win2->get_mnemonic_modifier }, ["control-mask"]); $win2->set_focus; ok(1); $win2->set_focus(Gtk2::Entry->new()); ok(1); my $button = Gtk2::Button->new ('i can default!'); $button->can_default (TRUE); $win2->set_default($button); $win2->set_decorated(TRUE); ok(1); ok( $win2->get_decorated ); $win2->set_has_frame(FALSE); ok(1); ok( !$win2->get_has_frame ); $win2->set_role('tool'); ok(1); is( $win2->get_role, 'tool' ); foreach (qw/normal dialog menu toolbar/) { $win2->set_type_hint($_); ok(1); is( $win2->get_type_hint, $_ ); } SKIP: { skip 'stuff missing in 2.0.x', 6 unless Gtk2->CHECK_VERSION (2, 2, 0); foreach (qw/splashscreen utility dock desktop/) { $win2->set_type_hint($_); is( $win2->get_type_hint, $_ ); } SKIP: { skip 'taskbar stuff missing on windows', 1 if $^O eq 'MSWin32'; $win2->set_skip_taskbar_hint('true'); ok( $win2->get_skip_taskbar_hint ); } $win2->set_skip_pager_hint('true'); ok( $win2->get_skip_pager_hint ); } ok( ! $win->get_default_icon_list ); # need pixbufs #$win->set_default_icon_list(...) # need file #$win->set_default_icon_from_file(...) # need a pixbuf #$win->set_icon($pixbuf); # doesn't have an icon ^ ok( ! $win->get_icon ); # doesn't have an icon ^ ok( ! $win->get_icon_list ); my $accel_group = Gtk2::AccelGroup->new; $win->add_accel_group ($accel_group); $win->remove_accel_group ($accel_group); # we can set this here, but we'll have to wait until events have # been handled to check them. see the run_main block, below. $win->set_frame_dimensions(0, 0, 300, 500); ok( $win2->parse_geometry("100x100+10+10") ); SKIP: { skip 'set_auto_startup_notification is new in 2.2', 0 unless Gtk2->CHECK_VERSION(2, 2, 0); $win2->set_auto_startup_notification(FALSE); } SKIP: { skip 'tests that show the window', 20; $win->show; ok(1); run_main sub { $win2->show; # there are no widgets, so this should fail ok( ! $win->activate_focus ); # there are no widgets, so this should fail ok( ! $win->activate_default ); # there are no widgets, so this should fail ok( ! $win->get_focus ); $win->present; ok(1); $win->iconify; ok(1); # doesnt work no error message $win->deiconify; ok(1); $win->stick; ok(1); $win->unstick; ok(1); # doesnt work no error message $win->maximize; ok(1); # doesnt work no error message $win->unmaximize; ok(1); # gtk2.2 req SKIP: { my $reason; if ($^O eq 'MSWin32') { $reason = 'GdkScreen not available on win32'; } elsif (!Gtk2->CHECK_VERSION (2, 2, 0)) { $reason = 'stuff not available before 2.2.x'; } else { $reason = undef; } skip $reason, 1 if defined $reason; $win->set_screen(Gtk2::Gdk::Screen->get_default()); is($win->get_screen, Gtk2::Gdk::Screen->get_default()); $win->fullscreen; $win->unfullscreen; } SKIP: { skip "new things in 2.4", 3 unless Gtk2->CHECK_VERSION (2, 4, 0); like($win->is_active, qr/^(1|)$/); like($win->has_toplevel_focus, qr/^(1|)$/); $win->set_keep_above (1); $win->set_keep_below (1); $win->set_accept_focus (1); is ($win->get_accept_focus, 1); $win->set_default_icon (Gtk2::Gdk::Pixbuf->new ("rgb", 0, 8, 15, 15)); } # Commented out because there seems to be no way to finish the # drags. We'd be getting stale pointer grabs otherwise. # $win->begin_resize_drag("south-east", 1, 23, 42, 0); # ok(1); # $win->begin_move_drag(1, 23, 42, 0); # ok(1); $win->move(100, 100); # these are widget methods and not window, but they need # testing and this seemed like a good place to do it my $tmp = $win->intersect(Gtk2::Gdk::Rectangle->new(0, 0, 10, 10)); isa_ok( $tmp, 'Gtk2::Gdk::Rectangle' ); $tmp = $win->intersect(Gtk2::Gdk::Rectangle->new(-10, -10, 1, 1)); ok( !$tmp ); $win->resize(480,600); # window managers don't honor our size request exactly, # or at least we aren't guaranteed they will ok( $win->get_size ); ok( $win->get_frame_dimensions ); $win2->reshow_with_initial_size; ok(1); }; } my $group = Gtk2::WindowGroup->new; isa_ok( $group, "Gtk2::WindowGroup" ); $group->add_window ($win); $group->remove_window ($win); SKIP: { skip "new 2.6 stuff", 2 unless Gtk2->CHECK_VERSION (2, 6, 0); $win->set_focus_on_map (TRUE); is ($win->get_focus_on_map, TRUE); $win->set_icon_name ("gtk-ok"); is ($win->get_icon_name, "gtk-ok"); Gtk2::Window->set_default_icon_name ("gtk-cancel"); } SKIP: { skip("new 2.8 stuff", 1) unless Gtk2->CHECK_VERSION (2, 8, 0); $win->set_urgency_hint (TRUE); is ($win->get_urgency_hint, TRUE); $win->present_with_time (time); } SKIP: { skip("new 2.10 stuff", 2) unless Gtk2->CHECK_VERSION (2, 10, 0); $win->set_deletable (TRUE); is ($win->get_deletable, TRUE); isa_ok ($win->get_group, "Gtk2::WindowGroup"); } SKIP: { skip("new 2.12 stuff", 1) unless Gtk2->CHECK_VERSION (2, 12, 0); $win->set_startup_id('Start me!'); $win->set_opacity (0.5); is ($win->get_opacity, 0.5); } SKIP: { skip 'new 2.14 stuff', 4 unless Gtk2->CHECK_VERSION(2, 14, 0); my $window = Gtk2::Window->new (); is ($window->get_default_widget (), undef); my $widget = Gtk2::Entry->new (); $widget->set (can_default => TRUE); $window->set_default ($widget); is ($window->get_default_widget (), $widget); my $group = Gtk2::WindowGroup->new (); $group->add_window (Gtk2::Window->new ()); $group->add_window (Gtk2::Window->new ()); $group->add_window (Gtk2::Window->new ()); my @list = $group->list_windows (); is (scalar @list, 3); isa_ok ($list[0], 'Gtk2::Window'); } SKIP: { skip 'new 2.16 stuff', 2 unless Gtk2->CHECK_VERSION(2, 16, 0); Gtk2::Window->set_default_icon_name (undef); is (Gtk2::Window->get_default_icon_name,undef, '[gs]et_default_icon_name with undef'); Gtk2::Window->set_default_icon_name ('gtk-ok'); is (Gtk2::Window->get_default_icon_name,'gtk-ok', 'get_default_icon_name'); } SKIP: { skip 'new 2.20 stuff', 2 unless Gtk2->CHECK_VERSION(2, 20, 0); my $window = Gtk2::Window->new; is ($window->get_window_type, 'toplevel'); $window->set_mnemonics_visible (TRUE); ok ($window->get_mnemonics_visible); } SKIP: { skip 'new 2.22 stuff', 2 unless Gtk2->CHECK_VERSION(2, 22, 0); my $window = Gtk2::Window->new; my $group = Gtk2::WindowGroup->new (); $group->add_window ($window); ok ($window->has_group); my $grab = $group->get_current_grab; ok ((defined $grab && $grab->isa ('Gtk2::Widget')) || !defined $grab); } __END__ Copyright (C) 2003-2006 by the gtk2-perl team (see the file AUTHORS for the full list). See LICENSE for more information.