The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

# Copyright 2007, 2008, 2010 Kevin Ryde

# This file is part of Gtk2-Ex-WidgetCursor.
#
# Gtk2-Ex-WidgetCursor is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation; either version 3, or (at your option) any
# later version.
#
# Gtk2-Ex-WidgetCursor is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with Gtk2-Ex-WidgetCursor.  If not, see <http://www.gnu.org/licenses/>.


use strict;
use warnings;
use Gtk2 '-init';
use Gtk2::Ex::WidgetCursor;

my $toplevel = Gtk2::Window->new ('toplevel');
$toplevel->set_name ("my_toplevel_1");
$toplevel->signal_connect (destroy => sub {
                             print "run.pl: quit\n";
                             Gtk2->main_quit;
                           });

my $hbox = Gtk2::HBox->new (0, 0);
$toplevel->add ($hbox);

my $vbox = Gtk2::VBox->new (0, 0);
$hbox->pack_start ($vbox, 1,1,1);

{
  my $enter = sub {
    my ($label, $event) = @_;
    print "enter $label $event\n";
    return 0; # propagate event
  };
  my $leave = sub {
    my ($label, $event) = @_;
    print "leave $label $event\n";
    return 0; # propagate event
  };
  my $real = sub {
    my ($widget) = @_;
    print "realize $widget ", $widget->flags, "\n";
  };
  {
    my $label = Gtk2::Label->new ("Zero");
    $vbox->pack_start ($label, 1,1,1);
    $label->signal_connect (enter_notify_event => $enter);
    $label->signal_connect (leave_notify_event => $leave);
    $label->signal_connect (realize => $real);
    #       $label->{'wcursor'} = Gtk2::Ex::WidgetCursor->new (widget => $label,
    #                                                          cursor => 'fleur',
    #                                                          active => 1);
    $label->set_flags ('can-focus');
  }
  {
    my $label = Gtk2::Label->new ("One");
    $vbox->pack_start ($label, 1,1,1);
    $label->signal_connect (enter_notify_event => $enter);
    $label->signal_connect (leave_notify_event => $leave);
    $label->signal_connect (realize => $real);
    #       $label->{'wcursor'} = Gtk2::Ex::WidgetCursor->new (widget => $label,
    #                                                          cursor => 'fleur',
    #                                                          active => 1);
  }
  {
    my $label = Gtk2::Button->new_with_label ("Two");
    $vbox->pack_start ($label, 1,1,1);
    $label->signal_connect (enter_notify_event => $enter);
    $label->signal_connect (leave_notify_event => $leave);
    $label->signal_connect (realize => $real);
    $label->{'wcursor'} = Gtk2::Ex::WidgetCursor->new (widget => $label,
                                                       cursor => 'boat',
                                                       active => 1);
  }
  {
    my $label = Gtk2::Button->new_with_label ("Three");
    $vbox->pack_start ($label, 1,1,1);
    $label->signal_connect (enter_notify_event => $enter);
    $label->signal_connect (leave_notify_event => $leave);
    $label->signal_connect (realize => $real);
    #       $label->{'wcursor'} = Gtk2::Ex::WidgetCursor->new (widget => $label,
    #                                                          cursor => 'hand1',
    #                                                          active => 1);
  }
  {
    my $label = Gtk2::Button->new_with_label ("Four");
    $label->set_sensitive (1);
    $vbox->pack_start ($label, 1,1,1);
    $label->signal_connect (enter_notify_event => $enter);
    $label->signal_connect (leave_notify_event => $leave);
    $label->signal_connect (realize => $real);
    #       $label->{'wcursor'} = Gtk2::Ex::WidgetCursor->new (widget => $label,
    #                                                          cursor => 'hand1',
    #                                                          active => 1);

    $label->realize;
    my $win = $label->window;
    print "win ", $win,"\n";
    my @children = $win->get_children;
    print "subwins ", @children,"\n";
    my $event_win = $children[0];
    $event_win->set_cursor (Gtk2::Gdk::Cursor->new('xterm'));
  }
}

$toplevel->show_all;
$toplevel->realize;

sub tree {
  my ($win, $depth) = @_;
  printf "%*s%s\n", $depth, '', $win;
  my @children = $win->get_children;
  print "children ", @children, "\n";
  foreach my $subwin (@children) {
    
    tree ($subwin, $depth+1);
  }
}
print "top "; tree ($toplevel->window, 0);

Gtk2->main;
exit 0;