protected override bool OnMotionNotifyEvent (EventMotion evnt)
		{
			RemovePreviewPopupTimeout ();
			if (button != 0)
				MouseMove (evnt.Y);
			
			var h = IndicatorHeight;
			if (TextEditor.HighlightSearchPattern) {
				hoverOverIndicator = false;
				if (evnt.Y < h)
					this.TooltipText = string.Format (GettextCatalog.GetPluralString ("{0} match", "{0} matches", TextEditor.TextViewMargin.SearchResultMatchCount), TextEditor.TextViewMargin.SearchResultMatchCount);
			} else {
				hoverOverIndicator = evnt.Y < h;
				if (hoverOverIndicator) {
					int errors = 0, warnings = 0, hints = 0, suggestions = 0;
					foreach (var task in AllTasks) {
						switch (task.Severity) {
						case Severity.Error:
							errors++;
							break;
						case Severity.Warning:
							warnings++;
							break;
						case Severity.Hint:
							hints++;
							break;
						case Severity.Suggestion:
							suggestions++;
							break;
						}
					}
					string text = null;
					if (errors == 0 && warnings == 0) {
						text = GettextCatalog.GetString ("No errors or warnings");
					} else if (errors == 0) {
						text = string.Format (GettextCatalog.GetPluralString ("{0} warning", "{0} warnings", warnings), warnings);
					} else if (warnings == 0) {
						text = string.Format (GettextCatalog.GetPluralString ("{0} error", "{0} errors", errors), errors);
					} else {
						text = string.Format (GettextCatalog.GetString ("{0} errors and {1} warnings"), errors, warnings);
					}

					if (errors > 0) {
						text += Environment.NewLine + GettextCatalog.GetString ("Click to navigate to the next error");
						currentHoverMode = QuickTaskStrip.HoverMode.NextError;
					} else if (warnings > 0) {
						text += Environment.NewLine + GettextCatalog.GetString ("Click to navigate to the next warning");
						currentHoverMode = QuickTaskStrip.HoverMode.NextWarning;
					} else if (warnings + hints > 0) {
						text += Environment.NewLine + GettextCatalog.GetString ("Click to navigate to the next message");
						currentHoverMode = QuickTaskStrip.HoverMode.NextMessage;
					}

					TooltipText = text;
				} else {
//					TextEditorData editorData = TextEditor.GetTextEditorData ();
					foreach (var task in AllTasks) {
						double y = GetYPosition (task.Location.Line);
						if (Math.Abs (y - evnt.Y) < 3) {
							hoverTask = task;
						}
					}
					base.TooltipText = hoverTask != null ? hoverTask.Description : null;
				}
			}
			
			if (button == 0 && evnt.State.HasFlag (ModifierType.ShiftMask)) {
				int line = YToLine (evnt.Y);
				
				line = Math.Max (1, line - 2);
				int lastLine = Math.Min (TextEditor.LineCount, line + 5);
				var start = TextEditor.GetLine (line);
				var end = TextEditor.GetLine (lastLine);
				if (start == null || end == null) {
					return base.OnMotionNotifyEvent (evnt);
				}
				var showSegment = new TextSegment (start.Offset, end.Offset + end.Length - start.Offset);
				
				if (previewWindow != null) {
					previewWindow.SetSegment (showSegment, false);
					PositionPreviewWindow ((int)evnt.Y);
				} else {
					var popup = new PreviewPopup (this, showSegment, TextEditor.Allocation.Width * 4 / 7, (int)evnt.Y);
					previewPopupTimeout = GLib.Timeout.Add (450, new GLib.TimeoutHandler (popup.Run));
				}
			} else {
				RemovePreviewPopupTimeout ();
				DestroyPreviewWindow ();
			}
			return base.OnMotionNotifyEvent (evnt);
		}
        protected override bool OnMotionNotifyEvent(EventMotion evnt)
        {
            RemovePreviewPopupTimeout();
            if (button != 0)
            {
                MouseMove(evnt.Y);
            }

            var h = IndicatorHeight;

            if (TextEditor.HighlightSearchPattern)
            {
                hoverOverIndicator = false;
                if (evnt.Y < h)
                {
                    this.TooltipText = string.Format(GettextCatalog.GetPluralString("{0} match", "{0} matches", TextEditor.TextViewMargin.SearchResultMatchCount), TextEditor.TextViewMargin.SearchResultMatchCount);
                }
            }
            else
            {
                hoverOverIndicator = evnt.Y < h;
                if (hoverOverIndicator)
                {
                    int errors = 0, warnings = 0, hints = 0, suggestions = 0;
                    foreach (var task in AllTasks)
                    {
                        switch (task.Severity)
                        {
                        case Severity.Error:
                            errors++;
                            break;

                        case Severity.Warning:
                            warnings++;
                            break;

                        case Severity.Hint:
                            hints++;
                            break;

                        case Severity.Suggestion:
                            suggestions++;
                            break;
                        }
                    }
                    string text = null;
                    if (errors == 0 && warnings == 0)
                    {
                        text = GettextCatalog.GetString("No errors or warnings");
                    }
                    else if (errors == 0)
                    {
                        text = string.Format(GettextCatalog.GetPluralString("{0} warning", "{0} warnings", warnings), warnings);
                    }
                    else if (warnings == 0)
                    {
                        text = string.Format(GettextCatalog.GetPluralString("{0} error", "{0} errors", errors), errors);
                    }
                    else
                    {
                        text = string.Format(GettextCatalog.GetString("{0} errors and {1} warnings"), errors, warnings);
                    }

                    if (errors > 0)
                    {
                        text            += Environment.NewLine + GettextCatalog.GetString("Click to navigate to the next error");
                        currentHoverMode = QuickTaskStrip.HoverMode.NextError;
                    }
                    else if (warnings > 0)
                    {
                        text            += Environment.NewLine + GettextCatalog.GetString("Click to navigate to the next warning");
                        currentHoverMode = QuickTaskStrip.HoverMode.NextWarning;
                    }
                    else if (warnings + hints > 0)
                    {
                        text            += Environment.NewLine + GettextCatalog.GetString("Click to navigate to the next message");
                        currentHoverMode = QuickTaskStrip.HoverMode.NextMessage;
                    }

                    TooltipText = text;
                }
                else
                {
//					TextEditorData editorData = TextEditor.GetTextEditorData ();
                    foreach (var task in AllTasks)
                    {
                        double y = GetYPosition(task.Location.Line);
                        if (Math.Abs(y - evnt.Y) < 3)
                        {
                            hoverTask = task;
                        }
                    }
                    base.TooltipText = hoverTask != null ? hoverTask.Description : null;
                }
            }

            if (button == 0 && evnt.State.HasFlag(ModifierType.ShiftMask))
            {
                int line = YToLine(evnt.Y);

                line = Math.Max(1, line - 2);
                int lastLine = Math.Min(TextEditor.LineCount, line + 5);
                var start    = TextEditor.GetLine(line);
                var end      = TextEditor.GetLine(lastLine);
                if (start == null || end == null)
                {
                    return(base.OnMotionNotifyEvent(evnt));
                }
                var showSegment = new TextSegment(start.Offset, end.Offset + end.Length - start.Offset);

                if (previewWindow != null)
                {
                    previewWindow.SetSegment(showSegment, false);
                    PositionPreviewWindow((int)evnt.Y);
                }
                else
                {
                    var popup = new PreviewPopup(this, showSegment, TextEditor.Allocation.Width * 4 / 7, (int)evnt.Y);
                    previewPopupTimeout = GLib.Timeout.Add(450, new GLib.TimeoutHandler(popup.Run));
                }
            }
            else
            {
                RemovePreviewPopupTimeout();
                DestroyPreviewWindow();
            }
            return(base.OnMotionNotifyEvent(evnt));
        }