The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;
use Test::More;
use Gnome2::Wnck;

# $Header: /cvsroot/gtk2-perl/gtk2-perl-xs/Gnome2-Wnck/t/WnckWindow.t,v 1.20 2007/08/02 20:15:43 kaffeetisch Exp $

unless (Gtk2 -> init_check()) {
  plan skip_all => "Couldn't initialize Gtk2";
}
else {
  Gtk2 -> init();
  plan tests => 46;
}

###############################################################################

my $screen = Gnome2::Wnck::Screen -> get_default();
$screen -> force_update();

###############################################################################

SKIP: {
  my $window = $screen -> get_active_window();
  skip("no active window found", 46) unless (defined($window));

  my $workspace = $window -> get_workspace();
  my $have_workspaces = defined $workspace;

  SKIP: {
    skip("windowmanager doesn't appear to support workspaces", 1)
      unless ($have_workspaces);
    isa_ok($workspace, "Gnome2::Wnck::Workspace");
  }

  isa_ok($window -> get_application(), "Gnome2::Wnck::Application");
  isa_ok($window -> get_icon(), "Gtk2::Gdk::Pixbuf");
  isa_ok($window -> get_mini_icon(), "Gtk2::Gdk::Pixbuf");

  isa_ok($window -> create_window_action_menu(), "Gtk2::Menu");
  isa_ok($window -> create_action_menu(), "Gtk2::Menu");

  is($window -> get_screen(), $screen);
  ok($window -> get_name());
  ok($window -> get_icon_name());
  like($window -> get_group_leader(), qr/^\d+$/);
  like($window -> get_xid(), qr/^\d+$/);
  like($window -> get_pid(), qr/^\d+$/);

  is(Gnome2::Wnck::Window -> get($window -> get_xid()), $window);

  # ok($window -> get_session_id());
  # ok($window -> get_session_id_utf8());

  $window -> activate(time());
  $window -> activate_transient(time());

  SKIP: {
    skip("windowmanager doesn't appear to support workspaces", 3)
      unless ($have_workspaces);

    ok($window -> is_on_workspace($window -> get_workspace()));
    ok($window -> is_visible_on_workspace($window -> get_workspace()));
    ok($window -> is_in_viewport($window -> get_workspace()));
  }

  isa_ok($window -> get_class_group(), "Gnome2::Wnck::ClassGroup");
  ok(defined($window -> get_window_type()));

  my $number = qr/^\d+$/;
  my $boolean = qr/^(|1)$/;

  $window -> set_window_type("normal");

  my $transient = $window -> get_transient();
  ok(not defined $transient || ref $transient eq "Gnome2::Wnck::Window");

  like($window -> needs_attention(), $boolean);
  like($window -> or_transient_needs_attention(), $boolean);
  like($window -> transient_is_most_recently_activated(), $boolean);
  like($window -> get_sort_order(), $number);

  my ($x, $y, $width, $height) = $window -> get_geometry();

  like($x, $number);
  like($y, $number);
  like($width, $number);
  like($height, $number);

  $window -> set_geometry("current", [], $x, $y, $width, $height);

  $window -> set_icon_geometry(10, 10, 100, 100);

  like($window -> is_minimized(), $boolean);
  like($window -> is_maximized_horizontally(), $boolean);
  like($window -> is_maximized_vertically(), $boolean);
  like($window -> is_maximized(), $boolean);
  like($window -> is_shaded(), $boolean);
  like($window -> is_skip_pager(), $boolean);
  like($window -> is_skip_tasklist(), $boolean);
  like($window -> is_sticky(), $boolean);
  like($window -> is_pinned(), $boolean);
  like($window -> is_active(), $boolean);

  like($window -> is_fullscreen(), $boolean);
  $window -> set_fullscreen($window -> is_fullscreen());

  like($window -> is_most_recently_activated(), $boolean);

  $window -> set_skip_pager($window -> is_skip_pager());
  $window -> set_skip_tasklist($window -> is_skip_tasklist());

  like($window -> get_icon_is_fallback(), $boolean);
  isa_ok($window -> get_actions(), "Gnome2::Wnck::WindowActions");
  isa_ok($window -> get_state(), "Gnome2::Wnck::WindowState");

  $window -> make_above();
  $window -> unmake_above();
  ok(!$window -> is_above());

  $window -> make_below();
  $window -> unmake_below();
  ok(!$window -> is_below());

  ($x, $y, $width, $height) = $window -> get_client_window_geometry();
  ok(defined $x && defined $y && defined $width && defined $height);

  $window -> set_sort_order(23);
  is($window -> get_sort_order(), 23);

  # $window -> minimize();
  # $window -> unminimize();
  # $window -> maximize();
  # $window -> unmaximize();
  # $window -> maximize_horizontally();
  # $window -> unmaximize_horizontally();
  # $window -> maximize_vertically();
  # $window -> unmaximize_vertically();
  # $window -> shade();
  # $window -> unshade();
  # $window -> stick();
  # $window -> unstick();
  # $window -> pin();
  # $window -> unpin();

  # $window -> move_to_workspace(...);
  # $window -> close();
  # $window -> keyboard_move();
  # $window -> keyboard_size();
}