@@ -68,6 +68,15 @@ namespace Gala {
6868 */
6969 public signal void destination_crossed (Actor destination , bool hovered );
7070
71+ /**
72+ * Emitted on the source when we are hovering over a destination.
73+ *
74+ * @param destination The destination actor that we are hovering over
75+ * @param x The x coordinate relative to the destination actor
76+ * @param y The y coordinate relative to the destination actor
77+ */
78+ public signal void destination_motion (Actor destination , float x , float y );
79+
7180 /**
7281 * The source has been clicked, but the movement was not larger than
7382 * the drag threshold. Useful if the source is also activable.
@@ -354,7 +363,7 @@ namespace Gala {
354363 last_y = y;
355364
356365 var stage = actor. get_stage ();
357- var actor = stage. get_actor_at_pos (PickMode . REACTIVE , (int ) x, (int ) y);
366+ var actor = stage. get_actor_at_pos (PickMode . NONE , (int ) x, (int ) y);
358367 DragDropAction action = null ;
359368 // if we're allowed to bubble and this actor is not a destination, check its parents
360369 if (actor != null && (action = get_drag_drop_action (actor)) == null && allow_bubbling) {
@@ -365,8 +374,12 @@ namespace Gala {
365374 }
366375
367376 // didn't change, no need to do anything
368- if (actor == hovered)
377+ if (actor == hovered) {
378+ if (hovered != null ) {
379+ destination_motion (hovered, x - hovered. x, y - hovered. y);
380+ }
369381 return Clutter . EVENT_STOP ;
382+ }
370383
371384 if (action == null ) {
372385 // apparently we left ours if we had one before
@@ -449,12 +462,12 @@ namespace Gala {
449462 }
450463
451464 private void finish () {
465+ drag_end (hovered);
466+
452467 // make sure they reset the style or whatever they changed when hovered
453468 emit_crossed (hovered, false );
454469
455470 cleanup ();
456-
457- drag_end (hovered);
458471 }
459472
460473 private void cleanup () {
0 commit comments