Someone please approve.
Currently the ToolTipWindow text doesn't get updated when the mouse is
over the control that calls SetToolTip. This patch corrects it.
Cheers
Alexander
Index: ToolTip.cs
===================================================================
--- ToolTip.cs (revision 55225)
+++ ToolTip.cs (working copy)
@@ -45,8 +45,9 @@
internal ToolTipWindow tooltip_window; // The actual tooltip window
internal Hashtable tooltip_strings; // List of strings for each control, indexed by control
+ internal ArrayList controls;
internal Control active_control; // Control for which the tooltip is currently displayed
- internal Control last_control; // last control the mouse was in; null if the last control did not have a tooltip
+ internal Control last_control; // last control the mouse was in
internal Size display_size; // Size of the screen
internal Timer timer; // Used for the various intervals
#endregion // Local variables
@@ -156,6 +157,7 @@
show_always = false;
tooltip_strings = new Hashtable(5);
+ controls = new ArrayList(5);
tooltip_window = new ToolTipWindow(this);
tooltip_window.MouseLeave += new EventHandler(control_MouseLeave);
@@ -278,14 +280,29 @@
public void RemoveAll() {
tooltip_strings.Clear();
+ controls.Clear();
}
public void SetToolTip(Control control, string caption) {
tooltip_strings[control] = caption;
-
- control.MouseEnter += new EventHandler(control_MouseEnter);
- control.MouseMove += new MouseEventHandler(control_MouseMove);
- control.MouseLeave += new EventHandler(control_MouseLeave);
+
+ // no need for duplicates
+ if (!controls.Contains(control)) {
+ control.MouseEnter += new EventHandler(control_MouseEnter);
+ control.MouseMove += new MouseEventHandler(control_MouseMove);
+ control.MouseLeave += new EventHandler(control_MouseLeave);
+ controls.Add(control);
+ }
+
+ // if SetToolTip is called from a control and the mouse is currently in that control,
+ // make sure that the tooltip_window.Text gets updated
+ if (caption != null && last_control == control) {
+ Size size;
+ size = ThemeEngine.Current.ToolTipSize(tooltip_window, caption);
+ tooltip_window.Width = size.Width;
+ tooltip_window.Height = size.Height;
+ tooltip_window.Text = caption;
+ }
}
public override string ToString() {
@@ -304,6 +321,8 @@
tooltip_window.Dispose();
tooltip_strings.Clear();
+
+ controls.Clear();
}
}
#endregion // Protected Instance Methods
@@ -311,6 +330,8 @@
#region Private Methods
private void control_MouseEnter(object sender, EventArgs e) {
string text;
+
+ last_control = (Control)sender;
// Whatever we're displaying right now, we don't want it anymore
tooltip_window.Visible = false;
@@ -417,6 +438,9 @@
active_control = null;
tooltip_window.Visible = false;
}
+
+ if (last_control == (Control)sender)
+ last_control = null;
}
private void control_MouseMove(object sender, MouseEventArgs e) {
_______________________________________________
Mono-winforms-list maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-winforms-list