aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <unknown>2007-05-12 03:23:38 +0000
committernyamatongwe <unknown>2007-05-12 03:23:38 +0000
commit44334ce3fd1554d24a09b609e50d598b72a1e10e (patch)
tree57914ecaecd5d7f57d70c180058f7b52848f76a1
parent8586028dbd244755c40ebaaa12a1bc2cf6359154 (diff)
downloadscintilla-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.cxx21
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);