The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
# TITLE: Bonobo sample moniker activation
# REQUIRES: Gtk Gnome Bonobo
use Bonobo;
use Error qw(:try);

init Gnome $0, '0.1';
# for use in DISPLAY-less scripts
#Gtk->init_types;
init Bonobo;
activate Bonobo;

$moniker = shift || 'file:/etc/passwd';
$interface = shift || "IDL:Bonobo/Stream:1.0";
#Gtk->timeout_add(5000, sub {exit});

my $orb = CORBA::ORB_init ("orbit-local-orb");

Gtk->idle_add(sub {
try {
	$obj = Bonobo->get_object($moniker, $interface);
	die "Cannot activate $moniker\n" unless defined($obj);
	print "$obj\n";
	if ($obj->_is_a ('IDL:Bonobo/Stream:1.0')) {
		$info = $obj->getInfo(1|2|4); # content_type and size
		print "Content: $info->{content_type}\nSize: $info->{size}\n";
		$content = $obj->read(256);
		print "First 256 bytes of content:\n", $content, "\n";
		Gtk->main_quit;
	} elsif ($obj->_is_a('IDL:Bonobo/Control:1.0')) {
		$widget = new_control_from_objref Gnome::BonoboWidget ($obj, undef);
		$win = new Gtk::Window;
		$win->signal_connect('destroy', sub {Gtk->exit(0)});
		$win->add($widget);
		$win->show_all;
	} else {
		print $obj->_repoid, "\n";
		$obj->open("bah", undef);
		Gtk->main_quit;
	}
} catch CORBA::Exception with {
	warn "Got an exception: $_[0]\n";
	Gtk->main_quit;
};
return 0;
});
main Gtk;