Author: mkrueger
Date: 2008-02-18 09:41:35 -0500 (Mon, 18 Feb 2008)
New Revision: 96053
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/BookmarkMargin.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/FoldMarkerMargin.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/GutterMargin.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/IMargin.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditor.cs
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
Log:
* Mono.TextEditor/TextViewMargin.cs,
Mono.TextEditor/FoldMarkerMargin.cs, Mono.TextEditor/IMargin.cs,
Mono.TextEditor/TextEditor.cs, Mono.TextEditor/BookmarkMargin.cs,
Mono.TextEditor/GutterMargin.cs: Worked on mouse behavior.
Fixing Bug 362683 - Double click + drag selection not working
Bug 362687 - Triple-click should select the whole line
Modified: trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog
===================================================================
--- trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog 2008-02-18
14:35:15 UTC (rev 96052)
+++ trunk/monodevelop/main/src/addins/Mono.Texteditor/ChangeLog 2008-02-18
14:41:35 UTC (rev 96053)
@@ -1,6 +1,17 @@
2008-02-18 Mike Krüger <[EMAIL PROTECTED]>
* Mono.TextEditor/TextViewMargin.cs,
Mono.TextEditor/FoldMarkerMargin.cs,
+ Mono.TextEditor/IMargin.cs, Mono.TextEditor/TextEditor.cs,
+ Mono.TextEditor/BookmarkMargin.cs, Mono.TextEditor/GutterMargin.cs:
+ Worked on mouse behavior.
+
+ Fixing Bug 362683 - Double click + drag selection not working
+
+ Bug 362687 - Triple-click should select the whole line
+
+2008-02-18 Mike Krüger <[EMAIL PROTECTED]>
+
+ * Mono.TextEditor/TextViewMargin.cs,
Mono.TextEditor/FoldMarkerMargin.cs,
Mono.TextEditor/TextEditor.cs, Mono.TextEditor/BookmarkMargin.cs,
Mono.TextEditor/TextEditorOptions.cs: Implemented mouse wheel zoom.
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/BookmarkMargin.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/BookmarkMargin.cs
2008-02-18 14:35:15 UTC (rev 96052)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/BookmarkMargin.cs
2008-02-18 14:41:35 UTC (rev 96053)
@@ -98,10 +98,10 @@
cr.LineTo (x, y + r);
cr.CurveTo (x, y, x, y, x + r, y);
}
-
- public override void MousePressed (int button, int x, int y,
bool doubleClick, Gdk.ModifierType modifierState)
+
+ public override void MousePressed (int button, int x, int y,
Gdk.EventType type, Gdk.ModifierType modifierState)
{
- if (button != 1 || doubleClick)
+ if (button != 1 || type != Gdk.EventType.ButtonPress)
return;
int lineNumber = editor.VisualToDocumentLocation (x,
y).Line;
if (lineNumber < editor.Document.LineCount) {
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/FoldMarkerMargin.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/FoldMarkerMargin.cs
2008-02-18 14:35:15 UTC (rev 96052)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/FoldMarkerMargin.cs
2008-02-18 14:41:35 UTC (rev 96053)
@@ -50,7 +50,7 @@
this.editor = editor;
}
- public override void MousePressed (int button, int x, int y,
bool doubleClick, Gdk.ModifierType modifierState)
+ public override void MousePressed (int button, int x, int y,
Gdk.EventType type, Gdk.ModifierType modifierState)
{
if (lineHover == null)
return;
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/GutterMargin.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/GutterMargin.cs
2008-02-18 14:35:15 UTC (rev 96052)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/GutterMargin.cs
2008-02-18 14:41:35 UTC (rev 96053)
@@ -67,7 +67,7 @@
}
}
- public override void MousePressed (int button, int x, int y,
bool doubleClick, Gdk.ModifierType modifierState)
+ public override void MousePressed (int button, int x, int y,
Gdk.EventType type, Gdk.ModifierType modifierState)
{
int lineNumber = editor.Document.VisualToLogicalLine
((int)(y + editor.VAdjustment.Value) / editor.LineHeight);
if (lineNumber < editor.Document.LineCount) {
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/IMargin.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/IMargin.cs
2008-02-18 14:35:15 UTC (rev 96052)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/IMargin.cs
2008-02-18 14:41:35 UTC (rev 96053)
@@ -48,7 +48,7 @@
void Draw (Gdk.Drawable drawable, Gdk.Rectangle area, int line,
int x, int y);
- void MousePressed (int button, int x, int y, bool doubleClick,
Gdk.ModifierType modifierState);
+ void MousePressed (int button, int x, int y, Gdk.EventType
type, Gdk.ModifierType modifierState);
void MouseHover (int x, int y, bool buttonPressed);
void MouseLeft ();
}
@@ -85,7 +85,7 @@
{
}
- public virtual void MousePressed (int button, int x, int y,
bool doubleClick, Gdk.ModifierType modifierState)
+ public virtual void MousePressed (int button, int x, int y,
Gdk.EventType type, Gdk.ModifierType modifierState)
{
}
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditor.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditor.cs
2008-02-18 14:35:15 UTC (rev 96052)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextEditor.cs
2008-02-18 14:41:35 UTC (rev 96053)
@@ -462,15 +462,14 @@
if (lastTime != e.Time) {// filter double clicks
if (e.Type == EventType.TwoButtonPress) {
lastTime = e.Time;
- mousePressed = false;
} else {
lastTime = 0;
- mousePressed = true;
}
+ mousePressed = true;
int startPos;
IMargin margin = GetMarginAtX ((int)e.X, out
startPos);
if (margin != null) {
- margin.MousePressed ((int)e.Button,
(int)(e.X - startPos), (int)e.Y, e.Type == EventType.TwoButtonPress, e.State);
+ margin.MousePressed ((int)e.Button,
(int)(e.X - startPos), (int)e.Y, e.Type, e.State);
}
}
return base.OnButtonPressEvent (e);
Modified:
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
===================================================================
---
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
2008-02-18 14:35:15 UTC (rev 96052)
+++
trunk/monodevelop/main/src/addins/Mono.Texteditor/Mono.TextEditor/TextViewMargin.cs
2008-02-18 14:41:35 UTC (rev 96053)
@@ -475,8 +475,10 @@
public bool inSelectionDrag = false;
public bool inDrag = false;
public DocumentLocation clickLocation;
+ DocumentLocation selectionStartLocation;
+ ISegment minimalSelection = null;
- public override void MousePressed (int button, int x, int y,
bool doubleClick, Gdk.ModifierType modifierState)
+ public override void MousePressed (int button, int x, int y,
Gdk.EventType type, Gdk.ModifierType modifierState)
{
inSelectionDrag = false;
inDrag = false;
@@ -487,19 +489,22 @@
textEditor.RunAction (new
CaretMoveToDocumentEnd ());
return;
}
- if (doubleClick) {
+
+ if (type == EventType.TwoButtonPress) {
int start = ScanWord (offset, false);
int end = ScanWord (offset, true);
- if (textEditor.IsSomethingSelected) {
- if
(textEditor.SelectionRange.Offset == start &&
textEditor.SelectionRange.EndOffset == end) {
-
textEditor.SelectionRange = Document.GetLineByOffset (offset);
- return;
- }
- }
- textEditor.SelectionRange = new Segment
(start, end - start);
+ textEditor.SelectionRange =
minimalSelection = new Segment (start, end - start);
+ selectionStartLocation =
Document.OffsetToLocation (start);
+ inSelectionDrag = true;
return;
+ } else if (type == EventType.ThreeButtonPress) {
+ textEditor.SelectionRange =
minimalSelection = Document.GetLineByOffset (offset);
+ selectionStartLocation =
Document.OffsetToLocation (minimalSelection.Offset);
+ inSelectionDrag = true;
+ return;
}
-
+ selectionStartLocation = clickLocation;
+ minimalSelection = null;
if (textEditor.IsSomethingSelected &&
textEditor.SelectionRange.Offset <= offset && offset <
textEditor.SelectionRange.EndOffset) {
inDrag = true;
} else {
@@ -539,17 +544,23 @@
if (!buttonPressed)
return;
if (inSelectionDrag) {
- if (!textEditor.IsSomethingSelected)
- SelectionMoveLeft.StartSelection
(textEditor.GetTextEditorData ());
+ DocumentLocation loc = VisualToDocumentLocation
(x, y);
+ int offset1 = Document.LocationToOffset
(this.selectionStartLocation);
+ int offset2 = Document.LocationToOffset (loc);
+ ISegment requestedSelection = offset1 < offset2
? new Segment (offset1, offset2 - offset1) : new Segment (offset2, offset1 -
offset2);
+ if (this.minimalSelection != null) {
+ if (requestedSelection.EndOffset <
minimalSelection.EndOffset) {
+ requestedSelection = new
Segment (requestedSelection.Offset, minimalSelection.EndOffset -
requestedSelection.Offset);
+ }
+
+ if (requestedSelection.Offset >
minimalSelection.Offset) {
+ requestedSelection = new
Segment (minimalSelection.Offset, requestedSelection.EndOffset -
minimalSelection.Offset);
+ }
+ }
Caret.PreserveSelection = true;
- Caret.AutoScrollToCaret = false;
-// int oldLine = Caret.Line;
- Caret.Location = VisualToDocumentLocation (x,
y);
+ textEditor.SelectionRange = requestedSelection;
+ Caret.Location = loc;
Caret.PreserveSelection = false;
- Caret.AutoScrollToCaret = true;
- SelectionMoveLeft.EndSelection
(textEditor.GetTextEditorData ());
- this.textEditor.ScrollToCaret ();
- this.caretBlink = false;
// textEditor.RedrawLines (System.Math.Min
(oldLine, Caret.Line), System.Math.Max (oldLine, Caret.Line));
}
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches