Subclassing a Gtk2::TreeStore
- From: Dave Howorth <dhoworth mrc-lmb cam ac uk>
- To: gtk-perl-list gnome org
- Subject: Subclassing a Gtk2::TreeStore
- Date: Fri, 26 Oct 2007 17:22:58 +0100
A while ago, I asked a question that received the answer below from
Emmanuele. I solved my problem at the time without having to subclass
anything but I'm now trying to override the drag_data_received method ...
Emmanuele Bassi wrote:
On Tue, 2007-06-12 at 13:41 +0100, Dave Howorth wrote:
I've seen mention of 'gtk_tree_drag_dest_row_drop_possible' and the Perl
equivalent 'boolean = $drag_dest->row_drop_possible ($dest_path,
$selection_data)', which looks like it might be related to what I want
to do. But I can't find any description that tells me where it's
implemented, how it's called or how to override it.
you'll have to subclass a tree model implementation (like
Gtk2::TreeStore or Gtk2::ListStore) and override the Gtk2::TreeDragDest
interface method above, in order to control whether the destination row
is a valid drop point.
to know how to subclass and override a GInterface, see the
Glib::Object::Subclass perldoc.
... so I've looked at the perldoc and have tried to subclass the
TreeStore but I haven't found the right incantations to be able to
override the drag_data_received method whilst inheriting all the other
behaviour of the TreeStore.
My [non-working] code looks like this:
package MyTreeStore;
use Glib::Object::Subclass
'Gtk2::TreeStore',
# interfaces => [ 'Gtk2::TreeDragDest' ],
# signals => { drag_data_received => \&_drag_data_received },
;
use Glib qw(TRUE FALSE);
sub DRAG_DATA_RECEIVED
{
my ($self, $dest_path, $selection_data) = @_;
warn "DRAG_data_received($dest_path, $selection_data)\n";
return SUPER->drag_data_received ($dest_path, $selection_data);
}
sub _drag_data_received
{
my ($self, $dest_path, $selection_data) = @_;
warn "_drag_data_received($dest_path, $selection_data)\n";
return TRUE;
return SUPER->drag_data_received ($dest_path, $selection_data);
}
1;
Like this, it says "type MyTreeStore does not support property
'Glib::String'" when I invoke MyTreeStore->new. In fact, it says this
even if I comment out both of the DRAG_DATA_RECEIVED and
_drag_data_received functions.
If I uncomment the interfaces line (suggested as needed by the
INTERFACES section of the Glib::Object::Subclass perldoc) it says
"GLib-GObject-WARNING **: cannot add interface type `GtkTreeDragDest' to
type `MyTreeStore', since type `MyTreeStore' already conforms to
interface" as well as the Glib::String problem.
If I uncomment the signals line (suggested by the OVERRIDING BASE
METHODS section) it says "can't override class closure for unknown
signal drag_data_received", which doesn't really surprise me since
drag_data_received is a method rather than a signal.
Any hints gratefully received.
Thanks, Dave
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]