2006-05-18 Mike Kestner <mkestner@novell.com>
authorMike Kestner <mkestner@gmail.com>
Thu, 18 May 2006 19:16:26 +0000 (19:16 -0000)
committerMike Kestner <mkestner@gmail.com>
Thu, 18 May 2006 19:16:26 +0000 (19:16 -0000)
* ListView.cs: do focused item selection like MS on clicks.
Rework focus handling for ItemControl so LostFocus invalidates as
well.
* ThemeWin32Classic.cs: only draw focus rectangle for ListViewItems if
the ListView ItemControl has focus.

svn path=/trunk/mcs/; revision=60832

mcs/class/Managed.Windows.Forms/System.Windows.Forms/ListView.cs
mcs/class/Managed.Windows.Forms/System.Windows.Forms/ThemeWin32Classic.cs

index aaa8db1c945f43566676080fff9121f6b1cf4d53..98659fa5f17662d5555e4401d7d2fb2de83a7524 100644 (file)
@@ -328,8 +328,6 @@ namespace System.Windows.Forms
                [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]
                public ListViewItem FocusedItem {
                        get {
-                               if (focused_item == null && Focused && items.Count > 0)
-                                       focused_item = items [0];
                                return focused_item;
                        }
                }
@@ -1240,6 +1238,8 @@ namespace System.Windows.Forms
                                MouseHover += new EventHandler(ItemsMouseHover);
                                MouseUp += new MouseEventHandler(ItemsMouseUp);
                                MouseWheel += new MouseEventHandler(ItemsMouseWheel);
+                               GotFocus += new EventHandler (FocusChanged);
+                               LostFocus += new EventHandler (FocusChanged);
                        }
 
                        void ItemsDoubleClick (object sender, EventArgs e)
@@ -1425,8 +1425,6 @@ namespace System.Windows.Forms
                                        else if (me.Clicks == 1 && clicked_item != null)
                                                owner.OnClick (EventArgs.Empty);
                                } else {
-                                       if (owner.FocusedItem == null)
-                                               owner.SetFocusedItem (owner.Items [0]);
                                        if (owner.MultiSelect) {
                                                Keys mods = XplatUI.State.ModifierKeys;
                                                if ((mods & Keys.Shift) != 0)
@@ -1550,6 +1548,17 @@ namespace System.Windows.Forms
                                }
                        }
 
+                       void FocusChanged (object o, EventArgs args)
+                       {
+                               if (owner.Items.Count == 0)
+                                       return;
+
+                               if (owner.FocusedItem == null)
+                                       owner.SetFocusedItem (owner.Items [0]);
+
+                               Invalidate (owner.FocusedItem.Bounds);
+                       }
+
                        internal override void OnPaintInternal (PaintEventArgs pe)
                        {
                                ThemeEngine.Current.DrawListViewItems (pe.Graphics, pe.ClipRectangle, owner);
index 72709c5f927e52ddfe114f1df3c5e6675a101d4a..cddf5392d689ccf678e35b9882ed17df0e876f7d 100644 (file)
@@ -1614,7 +1614,7 @@ namespace System.Windows.Forms
                                }
                        }
                        
-                       if (item.Focused) {                             
+                       if (item.Focused && control.item_control.Focused) {                             
                                Rectangle focus_rect = text_rect;
                                if (control.FullRowSelect && control.View == View.Details) {
                                        int width = 0;