Hi Tsuyoshi,

On Tue, 13 May 2014 15:02:18 +0900
tsuyoshi okita <825...@gmail.com> wrote:

> Dear,
> 
> I am a newbie to Moose.
> I have been trying to use Moose for Gtk3, and I do not think Moose is 
> happy with Builder.
> After Moose load ui file, has 'root_window' tries to get main_window 
> object, and it seems this is where the problem gets generated.
> 

I've attached a patch to fix the problem. With it, the program runs fine her.
Note that I removed some isa => ... specifiers because I thought they were the
problem, but I don't think they were necessary. The main change was adding
sanity checks (Which are also not necessary) and converting an attribute to
"lazy => 1" so it will be initialised in the right time.

Hope it works fine for you.

Regards,

        Shlomi Fish

-- 
-----------------------------------------------------------------
Shlomi Fish       http://www.shlomifish.org/
Optimising Code for Speed - http://shlom.in/optimise

Q: I’ll be about 6.5 milliard Terran years next September.
    — http://www.shlomifish.org/humour/Star-Trek/We-the-Living-Dead/

Please reply to list if it's a mailing list post - http://shlom.in/reply .
diff -u -r ORIG/gtk3_moose_with_builder.pl NEW/gtk3_moose_with_builder.pl
--- ORIG/gtk3_moose_with_builder.pl	2014-05-13 09:33:48.941813572 +0300
+++ NEW/gtk3_moose_with_builder.pl	2014-05-13 09:38:19.203687439 +0300
@@ -38,9 +38,19 @@
 );
 has 'builder' => (
 	is	=> 'rw',
-	isa	=> 'Gtk3::Builder',
+    lazy	=> 1,
+    # isa	=> 'Gtk3::Builder',
 	default	=> sub {
-		return Gtk3::Builder->new;
+		my ( $self ) = @_;
+		my $ret = Gtk3::Builder->new;
+
+		if (!defined($ret)) {
+			die "Cannot init Gtk3::Builder";
+		}
+		$ret->add_from_file($self->ui_file);
+		$ret->connect_signals(undef);
+
+		return $ret;
 	},
 	trigger	=> sub {
 		my ( $self ) = @_;
@@ -53,7 +63,7 @@
 #--------------------
 # I believe this is causing the problem.
 #--------------------
-	isa	=> 'GObject',
+	# isa	=> 'GObject',
 	#isa	=> 'Gtk3::Object',
 	lazy_build	=> 1,
 	trigger	=> sub {
@@ -63,10 +73,17 @@
 );
 sub _build_root_window {
 	my ( $self ) = @_;
+
 #--------------------
 # I believe this is causing the problem.
 #--------------------
-	return $self->builder->get_object('toplevel');
+	my $ret = $self->builder->get_object('toplevel');
+
+	if (!defined($ret)) {
+		die "Could not get toplevel object.";
+	}
+
+    return $ret;
 }
 sub quit_app {
     Gtk3->main_quit;
Only in NEW/: gtk3_moose_with_builder.pl~

Reply via email to