diff options
author | nyamatongwe <unknown> | 2007-05-12 03:23:38 +0000 |
---|---|---|
committer | nyamatongwe <unknown> | 2007-05-12 03:23:38 +0000 |
commit | 44334ce3fd1554d24a09b609e50d598b72a1e10e (patch) | |
tree | 57914ecaecd5d7f57d70c180058f7b52848f76a1 | |
parent | 8586028dbd244755c40ebaaa12a1bc2cf6359154 (diff) | |
download | scintilla-mirror-44334ce3fd1554d24a09b609e50d598b72a1e10e.tar.gz |
Avoid dragging text onto itself as this produces undo actions but no
real effect and is often accidental.
-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); |