diff options
Diffstat (limited to 'gtk/ScintillaGTK.cxx')
-rw-r--r-- | gtk/ScintillaGTK.cxx | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/gtk/ScintillaGTK.cxx b/gtk/ScintillaGTK.cxx index 07794b208..6ad5a16bf 100644 --- a/gtk/ScintillaGTK.cxx +++ b/gtk/ScintillaGTK.cxx @@ -260,8 +260,9 @@ private: static gint SelectionNotify(GtkWidget *widget, GdkEventSelection *selection_event); #endif static void DragBegin(GtkWidget *widget, GdkDragContext *context); + gboolean DragMotionThis(GdkDragContext *context, gint x, gint y, guint dragtime); static gboolean DragMotion(GtkWidget *widget, GdkDragContext *context, - gint x, gint y, guint time); + gint x, gint y, guint dragtime); static void DragLeave(GtkWidget *widget, GdkDragContext *context, guint time); static void DragEnd(GtkWidget *widget, GdkDragContext *context); @@ -2353,13 +2354,17 @@ void ScintillaGTK::DragBegin(GtkWidget *, GdkDragContext *) { //Platform::DebugPrintf("DragBegin\n"); } -gboolean ScintillaGTK::DragMotion(GtkWidget *widget, GdkDragContext *context, +gboolean ScintillaGTK::DragMotionThis(GdkDragContext *context, gint x, gint y, guint dragtime) { - ScintillaGTK *sciThis = ScintillaFromWidget(widget); Point npt(x, y); - sciThis->SetDragPosition(sciThis->PositionFromLocation(npt)); + SetDragPosition(PositionFromLocation(npt)); GdkDragAction preferredAction = context->suggested_action; - if (context->actions == static_cast<GdkDragAction> + int pos = PositionFromLocation(npt); + if ((inDragDrop == ddDragging) && (0 == PositionInSelection(pos))) { + // Avoid dragging selection onto itself as that produces a move + // with no real effect but which creates undo actions. + preferredAction = static_cast<GdkDragAction>(0); + } else if (context->actions == static_cast<GdkDragAction> (GDK_ACTION_COPY | GDK_ACTION_MOVE)) { preferredAction = GDK_ACTION_MOVE; } @@ -2367,6 +2372,12 @@ gboolean ScintillaGTK::DragMotion(GtkWidget *widget, GdkDragContext *context, return FALSE; } +gboolean ScintillaGTK::DragMotion(GtkWidget *widget, GdkDragContext *context, + gint x, gint y, guint dragtime) { + ScintillaGTK *sciThis = ScintillaFromWidget(widget); + return sciThis->DragMotionThis(context, x, y, dragtime); +} + void ScintillaGTK::DragLeave(GtkWidget *widget, GdkDragContext * /*context*/, guint) { ScintillaGTK *sciThis = ScintillaFromWidget(widget); sciThis->SetDragPosition(invalidPosition); |