App-Chart

 view release on metacpan or  search on metacpan

lib/App/Chart/Gtk2/Ex/ToplevelSingleton.pm  view on Meta::CPAN

  my $self = Glib::Object::new (@_);
  my $options = do { no strict 'refs';
                     ${"${class}::_instance_options"} };
  if ($options->{'hide_on_delete'}) {
    $self->signal_connect (delete_event => \&Gtk2::Widget::hide_on_delete);
  }
  return $self;
}

1;
__END__


# # ClassName->has_instance_for_display ($display)
# sub has_instance_for_display {
#   my ($class, $display) = @_;
#   $display = _display($display);
# 
#   # searching like this isn't fast, but it allows a toplevel to be moved to
#   # a different display
#   return List::Util::first { ($_->isa($class) && $_->get_display == $display) }
#     Gtk2::Window->list_toplevels;
# }
# # ClassName->instance_for_display ($display, args...)
# sub instance_for_display {
#   my ($class, $display) = (shift, shift);
# 
#   return ($class->has_instance_for_display($display)
#           || $class->instance_for_screen($display, @_));
# }
# sub _display {
#   my ($obj) = @_;
#   if (! defined $obj) {
#     return Gtk2::Gdk::Screen->get_default->get_display;
#   }
#   if ($obj->can('get_display')) {
#     $obj = $obj->get_display
#       || croak "No display for target $obj";
#   }
#   return $obj;
# }

#  return ($display->{(__PACKAGE__)}->{$class} ||= do {

#  $instance->signal_connect (destroy => \&_do_destroy, $class);
# sub _do_destroy {
#   my ($instance, $class) = @_;
#   my $display = $instance->get_display;
#   if (($display->{(__PACKAGE__)}->{$class}||0) == $instance) {
#     delete $display->{(__PACKAGE__)}->{$class};
#   }
# }

# use Class::Singleton 1.04;  # 1.04 for has_instance()
# use base 'Class::Singleton';
# 
# sub instance {
#   my $class = shift;
#   return $class->has_instance
#     || do {
#       my $instance = $class->SUPER::instance;
#       $instance->signal_connect (destroy => \&_do_destroy, $ivar);
#       $instance
#     };
# }
# 
# sub _do_destroy {
#   my ($instance, $ivar) = @_;
#   if (($instance->has_instance || 0) == $instance) {
#     undef $ivar;
#   }
# }

=for stopwords toplevel multi

=head1 NAME

App::Chart::Gtk2::Ex::ToplevelSingleton -- single instance of toplevel window

=for test_synopsis my ($toplevel)

=head1 SYNOPSIS

 package MyToplevel;
 use Gtk2;
 use Glib::Object::Subclass 'Gtk2::Window';
 use base 'App::Chart::Gtk2::Ex::ToplevelSingleton';

 use App::Chart::Gtk2::Ex::ToplevelSingleton hide_on_delete => 1;

 $toplevel = MyToplevel->instance;
 
 if (MyToplevel->has_instance) { do_something() }

=head1 DESCRIPTION

This package is designed as a multi-inheritance mix-in for subclasses of
C<Gtk2::Window> which normally want only a single window instance, to be
used throughout a program.

After adding C<ToplevelSingleton> to your C<@ISA>,
C<< MyToplevel->instance >> returns a single shared instance of a
C<MyToplevel> window.

=head1 SEE ALSO

L<Class::Singleton>

=cut



( run in 0.816 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )