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

Reply via email to