private void SetSelectionVisible (bool value)
{
-#if NET_2_0
bool old_selection_visible = selection_visible;
-#endif
selection_visible = value;
// cursor and selection are enemies, we can't have both in the same room at the same time
if (owner.IsHandleCreated && !owner.show_caret_w_selection)
XplatUI.CaretVisible (owner.Handle, !selection_visible);
-#if NET_2_0
if (UIASelectionChanged != null && (selection_visible || old_selection_visible))
UIASelectionChanged (this, EventArgs.Empty);
-#endif
}
private void DecrementLines(int line_no) {
int start_line_top = line.Y;
- int end_line_bottom;
- Line end_line;
-
- end_line = GetLine (line.line_no + line_count);
+ Line end_line = GetLine (line.line_no + line_count);
if (end_line == null)
end_line = GetLine (lines);
-
- end_line_bottom = end_line.Y + end_line.height;
+ if (end_line == null)
+ return;
+
+ int end_line_bottom = end_line.Y + end_line.height;
if (RecalculateDocument(owner.CreateGraphicsInternal(), line.line_no, line.line_no + line_count, true)) {
// Lineheight changed, invalidate the rest of the document
int best_index = -1;
for (int i = 0; i < needles.Length; i++) {
-#if NET_2_0
int index = haystack.IndexOf (needles [i], start_index, StringComparison.InvariantCultureIgnoreCase);
-#else
- int index = haystack.ToLower().IndexOf(needles[i], start_index);
-#endif
if (index > -1) {
if (term_found > -1) {
internal void GetVisibleLineIndexes (Rectangle clip, out int start, out int end)
{
if (multiline) {
- start = GetLineByPixel(clip.Top + viewport_y - offset_y, false).line_no;
- end = GetLineByPixel(clip.Bottom + viewport_y - offset_y, false).line_no;
+ /* Expand the region slightly to be sure to
+ * paint the full extent of the line of text.
+ * See bug 464464.
+ */
+ start = GetLineByPixel(clip.Top + viewport_y - offset_y - 1, false).line_no;
+ end = GetLineByPixel(clip.Bottom + viewport_y - offset_y + 1, false).line_no;
} else {
start = GetLineByPixel(clip.Left + viewport_x - offset_x, false).line_no;
end = GetLineByPixel(clip.Right + viewport_x - offset_x, false).line_no;
base_line = line.line_no;
old_line_count = lines;
+ // Discard chars after any possible -unlikely- end of file
+ int eof_index = s.IndexOf ('\0');
+ if (eof_index != -1)
+ s = s.Substring (0, eof_index);
+
break_index = GetLineEnding (s, 0, out ending, LineEnding.Hard | LineEnding.Rich);
// There are no line feeds in our text to be pasted
if ((pos == 0 && forward == false) || (pos == line.text.Length && forward == true))
return;
- if (forward)
+ undo.BeginUserAction ("Delete");
+
+ if (forward) {
+ undo.RecordDeleteString (line, pos, line, pos + 1);
DeleteChars (line, pos, 1);
- else
+ } else {
+ undo.RecordDeleteString (line, pos - 1, line, pos);
DeleteChars (line, pos - 1, 1);
+ }
+
+ undo.EndUserAction ();
}
// Combine two lines
if (selection_visible == false) {
SetSelectionToCaret (true);
+ move_sel_start = false;
+ move_sel_end = false;
}
}
internal event EventHandler WidthChanged;
internal event EventHandler HeightChanged;
internal event EventHandler LengthChanged;
-#if NET_2_0
internal event EventHandler UIASelectionChanged;
-#endif
#endregion // Events
#region Administrative