Author: gert
Date: 2007-02-23 10:29:24 -0500 (Fri, 23 Feb 2007)
New Revision: 73368
Modified:
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListView.cs
Log:
* ListView.cs: Added bool argument to UpdateMultiSelection to specify
whether the item should be unselected and reselect. We do no want this
when we're starting to edit the label. Do not fire the
SelectedIndexChanged event from ListView when its already been fired
by modifying ListViewItem.Selected. Fixes bug #80943.
Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
2007-02-23 15:14:37 UTC (rev 73367)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
2007-02-23 15:29:24 UTC (rev 73368)
@@ -1,3 +1,11 @@
+2007-02-23 Gert Driesen <[EMAIL PROTECTED]>
+
+ * ListView.cs: Added bool argument to UpdateMultiSelection to specify
+ whether the item should be unselected and reselect. We do no want this
+ when we're starting to edit the label. Do not fire the
+ SelectedIndexChanged event from ListView when its already been fired
+ by modifying ListViewItem.Selected. Fixes bug #80943.
+
2007-02-23 Jonathan Pobst <[EMAIL PROTECTED]>
* TextRenderer.cs: Previos commit logic was backwards.
Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListView.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListView.cs
2007-02-23 15:14:37 UTC (rev 73367)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListView.cs
2007-02-23 15:29:24 UTC (rev 73368)
@@ -1369,7 +1369,7 @@
return changed;
}
- private void UpdateMultiSelection (int index)
+ private void UpdateMultiSelection (int index, bool reselect)
{
bool shift_pressed = (XplatUI.State.ModifierKeys &
Keys.Shift) != 0;
bool ctrl_pressed = (XplatUI.State.ModifierKeys &
Keys.Control) != 0;
@@ -1392,17 +1392,23 @@
curr.col >= left &&
curr.col <= right)
list.Add (curr);
}
- if (SelectItems (list))
- OnSelectedIndexChanged
(EventArgs.Empty);
+ SelectItems (list);
} else if (ctrl_pressed) {
item.Selected = !item.Selected;
selection_start = item;
- OnSelectedIndexChanged (EventArgs.Empty);
} else {
- SelectedItems.Clear ();
- item.Selected = true;
+ if (!reselect) {
+ // do not unselect, and reselect the
item
+ foreach (int itemIndex in
SelectedIndices) {
+ if (index == itemIndex)
+ continue;
+ items [itemIndex].Selected =
false;
+ }
+ } else {
+ SelectedItems.Clear ();
+ item.Selected = true;
+ }
selection_start = item;
- OnSelectedIndexChanged (EventArgs.Empty);
}
}
@@ -1455,11 +1461,9 @@
return;
if (MultiSelect)
- UpdateMultiSelection (index);
- else if (!items [index].Selected) {
+ UpdateMultiSelection (index, true);
+ else if (!items [index].Selected)
items [index].Selected = true;
- OnSelectedIndexChanged (EventArgs.Empty);
- }
SetFocusedItem (items [index]);
EnsureVisible (index);
@@ -1666,13 +1670,13 @@
if (clicked_item != null) {
owner.SetFocusedItem (clicked_item);
bool changed = !clicked_item.Selected;
- if (owner.MultiSelect)
- owner.UpdateMultiSelection
(clicked_item.Index);
- else
+
+ if (owner.MultiSelect) {
+ bool reselect =
(!owner.LabelEdit || changed);
+ owner.UpdateMultiSelection
(clicked_item.Index, reselect);
+ } else {
clicked_item.Selected = true;
-
- if (changed)
- owner.OnSelectedIndexChanged
(EventArgs.Empty);
+ }
// Raise double click if the item was
clicked. On MS the
// double click is only raised if you
double click an item
@@ -1698,7 +1702,6 @@
prev_selection =
owner.SelectedItems.List;
} else if (owner.SelectedItems.Count >
0) {
owner.SelectedItems.Clear ();
- owner.OnSelectedIndexChanged
(EventArgs.Empty);
}
}
@@ -1738,7 +1741,6 @@
return;
item.Selected = true;
- owner.OnSelectedIndexChanged (new EventArgs ());
}
private void ItemsMouseUp (object sender,
MouseEventArgs me)
@@ -1779,7 +1781,6 @@
} else if (!checking &&
owner.SelectedItems.Count > 0 && BoxSelectRectangle.Size.IsEmpty) {
// Need this to clean up background
clicks
owner.SelectedItems.Clear ();
- owner.OnSelectedIndexChanged
(EventArgs.Empty);
}
clicked_item = null;
@@ -1868,19 +1869,20 @@
owner.Focus ();
}
}
-
+
internal void EndEdit (ListViewItem item)
{
- if (edit_item != null && edit_item == item) {
- owner.OnAfterLabelEdit (edit_args);
+ // do nothing if there's no item being edited,
or if the
+ // item being edited if not the one passed in
+ if (edit_item == null || edit_item != item)
+ return;
- if (!edit_args.CancelEdit &&
edit_args.Label != null)
- edit_item.Text =
edit_text_box.Text;
- }
+ owner.OnAfterLabelEdit (edit_args);
+ if (!edit_args.CancelEdit && edit_args.Label !=
null)
+ edit_item.Text = edit_text_box.Text;
- if (edit_text_box != null &&
edit_text_box.Visible) {
+ if (edit_text_box != null &&
edit_text_box.Visible)
edit_text_box.Visible = false;
- }
edit_item = null;
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches