Re: Glib::Object::Subclass, embedding and multiple interpreters
- From: muppet <scott asofyet org>
- To: Eduardo M KALINOWSKI <ekalin bol com br>
- Cc: gtk-perl-list gnome org
- Subject: Re: Glib::Object::Subclass, embedding and multiple interpreters
- Date: Thu, 31 Mar 2005 07:54:30 -0500
On Mar 31, 2005, at 6:58 AM, Eduardo M KALINOWSKI wrote:
I'm doing something like this:
package KCWin;
eval {
Glib::Type->list_ancestors(__PACKAGE__);
# if we're alive here, the package is already registered.
} or Glib::Type->register_object('Gtk2::Window',
__PACKAGE__,
signals => { activate => {} });
sub new {
my $class = shift;
my $self = bless Gtk2::Window->new, $class;
that's your problem. you're registering a new GType, but not using.
re-blessing is not at all the same as creating a GType instance -- the
reblessed Window is still a Window as far as glib is concerned. you
want
sub new {
return Glib::Object::new (__PACKAGE__);
}
which actually triggers the whole GObject instantiation process for
your new subtype. the rest of your new impl would go into
INIT_INSTANCE.
GLib-GObject-WARNING **: gsignal.c:1664: signal `activate' is invalid
for instance `0x852cfd8' at <the line of $kcw->signal_connect>
Yes, because when you reblessed, you didn't actually affect the
underlying GType. The new instance is not of your newly-registered
subtype.
This worked with "use Glib::Object::Subclass etc", even tough what is
now a new method was INIT_INSTANCE and the Gtk2::Window creating and
blessing was not necessary.
Because Glib::Object::Subclass gives you the new() i listed above.
Your code should not change from what you had with
Glib::Object::Subclass --- you'll just have to provide a new() to
replace the one that Subclass is no longer giving you.
--
Without treatment, a common cold will last about seven days.
With treatment, it will last about a week.
-- conventional wisdom
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]