Re: drag-data-received signal not being emitted
- From: Dave Howorth <dhoworth mrc-lmb cam ac uk>
- To: gtk-app-devel-list gnome org
- Subject: Re: drag-data-received signal not being emitted
- Date: Thu, 28 Jun 2007 13:25:08 +0100
Chris Morrison wrote:
On Wed, 2007-06-27 at 10:43 +0100, Dave Howorth wrote:
I wrote:
In particular, I believe you will also need to call
gtk_tree_view_enable_model_drag_dest and/or
gtk_tree_view_enable_model_drag_dest on the tree_view.
Oops. Second one should be gtk_tree_view_enable_model_drag_source of course.
I tried using gtk_tree_view_enable_model_drag_dest() on my tree view and
it caused some really strange stuff to happen:
Odd, I've just had a good experience with it. I looked at the code that
implements gtk_tree_view_set_reorderable and saw that it calls the two
functions I mentioned. So it's a layered API but that's helpfully not
mentioned in the doc. Anyway, once I realized that, it was obvious that
I needed to replace my call to set_reorderable with my calls to
enable_model_drag_dest and enable_model_drag_source, rather than call
them in addition to it. It was also obvious that I needed to make sure
that I used the same arguments that it did so that the whole built-in
drag'n'drop mechanism kept working. Except I needed to change the one
argument that I wanted different behaviour for.
Now I can drag nodes from one view of the tree and drop them on another
view. Eliminates dragging/scrolling across thousands of nodes.
I'm using the Perl bindings, so my actual working code looks like this:
# The target entry must match that used by
# gtk_tree_view_set_reorderable in order for the built-in
# drag'n'drop support to keep working
# Except I use 'same-app' instead of 'same-widget'
#
my $target_entry = {
target => 'GTK_TREE_MODEL_ROW',
flags => ['same-app'],# Gtk2::TargetFlags
info => 0,
};
# Alternatively:
# my $target_entry = [ 'GTK_TREE_MODEL_ROW', 'same-app', 0 ];
$tree_view->enable_model_drag_dest(
['move'],
$target_entry,
);
$tree_view->enable_model_drag_source(
'button1-mask', # $start_button_mask,
['move'],
$target_entry,
);
I got a segmentation fault when ever I tried to access the GList of
targets in drag_context->targets in my drag_drop handler.
If I returned FALSE from my drag_drop handler (i.e. to indicate the drop
was not over a valid area of the widget) the drag-data-received signal
was emitted but then I got a GTK critical assertion failed error.
I think I might give up on the GtkTreeView and use a GtkIconView widget
instead.
Not an option for me, since I'm playing with trees. I'd have to abandon
gtk altogether and move to another widget set, and probably language.
Swing, anybody? :)
Cheers, Dave
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]