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 )