also, disable the call do BindColumns in
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / ToolStripDropDown.cs
index afb025358ba7ebbc2b56efb3d10a1a3f5c376031..320081fade10a05879cfa9a4e5fc27e199496289 100644 (file)
@@ -51,20 +51,20 @@ namespace System.Windows.Forms
 \r
                        this.auto_close = true;\r
                        is_visible = false;\r
+                       Hwnd.ObjectFromHandle (this.Handle).no_activate = true;\r
                        this.GripStyle = ToolStripGripStyle.Hidden;\r
                }\r
                #endregion\r
 \r
                #region Public Properties\r
                [Browsable (false)]\r
-               [EditorBrowsable (EditorBrowsableState.Never)]\r
                public bool AllowTransparency {\r
                        get { return allow_transparency; }\r
                        set {\r
                                if (value == allow_transparency)\r
                                        return;\r
 \r
-                               if (XplatUI.SupportsTransparency ()) {\r
+                               if ((XplatUI.SupportsTransparency () & TransparencySupport.Set) != 0) {\r
                                        allow_transparency = value;\r
 \r
                                        if (value) \r
@@ -76,14 +76,12 @@ namespace System.Windows.Forms
                }\r
 \r
                [Browsable (false)]\r
-               [DesignerSerializationVisibility (DesignerSerializationVisibility.Hidden)]\r
                public override AnchorStyles Anchor {\r
                        get { return base.Anchor; }\r
                        set { base.Anchor = value; }\r
                }\r
 \r
-               [Browsable (false)]\r
-               [EditorBrowsable (EditorBrowsableState.Never)]\r
+               [DefaultValue (true)]\r
                public bool AutoClose\r
                {\r
                        get { return this.auto_close; }\r
@@ -98,7 +96,7 @@ namespace System.Windows.Forms
 \r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public ContextMenu ContextMenu {\r
+               public new ContextMenu ContextMenu {\r
                        get { return null; }\r
                        set { }\r
                }\r
@@ -135,35 +133,33 @@ namespace System.Windows.Forms
 \r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public ToolStripGripDisplayStyle GripDisplayStyle {\r
+               public new ToolStripGripDisplayStyle GripDisplayStyle {\r
                        get { return ToolStripGripDisplayStyle.Vertical; }\r
-                       set { }\r
                }\r
 \r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public Padding GripMargin {\r
+               public new Padding GripMargin {\r
                        get { return Padding.Empty; }\r
                        set { }\r
                }\r
 \r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public Rectangle GripRectangle {\r
+               public new Rectangle GripRectangle {\r
                        get { return Rectangle.Empty; }\r
-                       set { }\r
                }\r
 \r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public ToolStripGripStyle GripStyle {\r
+               public new ToolStripGripStyle GripStyle {\r
                        get { return base.GripStyle; }\r
                        set { base.GripStyle = value; }\r
                }\r
 \r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public Point Location {\r
+               public new Point Location {\r
                        get { return base.Location; }\r
                        set { base.Location = value; }\r
                }\r
@@ -184,10 +180,15 @@ namespace System.Windows.Forms
 \r
                public ToolStripItem OwnerItem {\r
                        get { return this.owner_item; }\r
-                       set { this.owner_item = value; }\r
+                       set { this.owner_item = value; \r
+                               \r
+                               if (this.owner_item != null)\r
+                                       if (this.owner_item.Owner != null)\r
+                                               this.Renderer = this.owner_item.Owner.Renderer;\r
+                       }\r
                }\r
                \r
-               public Region Region {\r
+               public new Region Region {\r
                        get { return base.Region; }\r
                        set { base.Region = value; }\r
                }\r
@@ -200,14 +201,14 @@ namespace System.Windows.Forms
 \r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public bool Stretch {\r
+               public new bool Stretch {\r
                        get { return false; }\r
                        set { }\r
                }\r
 \r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public int TabIndex {\r
+               public new int TabIndex {\r
                        get { return 0; }\r
                        set { }\r
                }\r
@@ -218,7 +219,7 @@ namespace System.Windows.Forms
                }\r
                \r
                [Localizable (true)]\r
-               public bool Visible {\r
+               public new bool Visible {\r
                        get { return base.Visible; }\r
                        set { base.Visible = value; }\r
                }\r
@@ -280,9 +281,13 @@ namespace System.Windows.Forms
                        if (!this.auto_close && reason != ToolStripDropDownCloseReason.CloseCalled)\r
                                return;\r
 \r
+                       // Detach from the tracker\r
+                       ToolStripManager.AppClicked -= new EventHandler (ToolStripMenuTracker_AppClicked); ;\r
+                       ToolStripManager.AppFocusChange -= new EventHandler (ToolStripMenuTracker_AppFocusChange);\r
+\r
                        // Owner MenuItem needs to be told to redraw (it's no longer selected)\r
                        if (owner_item != null)\r
-                               (owner_item as ToolStripMenuItem).Invalidate ();\r
+                               owner_item.Invalidate ();\r
 \r
                        // Recursive hide all child dropdowns\r
                        foreach (ToolStripItem tsi in this.Items)\r
@@ -295,14 +300,18 @@ namespace System.Windows.Forms
                        this.OnClosed (new ToolStripDropDownClosedEventArgs (reason));\r
                }\r
 \r
-               public void Show ()\r
+               public new void Show ()\r
                {\r
                        CancelEventArgs e = new CancelEventArgs ();\r
                        this.OnOpening (e);\r
                        \r
                        if (e.Cancel)\r
                                return;\r
-                               \r
+\r
+                       // The tracker lets us know when the form is clicked or loses focus\r
+                       ToolStripManager.AppClicked += new EventHandler (ToolStripMenuTracker_AppClicked);\r
+                       ToolStripManager.AppFocusChange += new EventHandler (ToolStripMenuTracker_AppFocusChange);\r
+\r
                        base.Show ();\r
                        \r
                        this.OnOpened (EventArgs.Empty);\r
@@ -320,6 +329,7 @@ namespace System.Windows.Forms
                                throw new ArgumentNullException ("control");\r
                                \r
                        this.Location = control.PointToScreen (position);\r
+                       Show ();\r
                }\r
                \r
                public void Show (int x, int y)\r
@@ -327,6 +337,12 @@ namespace System.Windows.Forms
                        this.Location = new Point (x, y);\r
                        Show ();\r
                }\r
+               \r
+               public void Show (Control control, int x, int y)\r
+               {\r
+                       Show (control, new Point (x, y));\r
+                       \r
+               }\r
                #endregion\r
 \r
                #region Protected Methods\r
@@ -342,12 +358,16 @@ namespace System.Windows.Forms
 \r
                protected virtual void OnClosed (ToolStripDropDownClosedEventArgs e)\r
                {\r
-                       if (Closed != null) Closed (this, e);\r
+                       ToolStripDropDownClosedEventHandler eh = (ToolStripDropDownClosedEventHandler)(Events [ClosedEvent]);\r
+                       if (eh != null)\r
+                               eh (this, e);\r
                }\r
 \r
                protected virtual void OnClosing (ToolStripDropDownClosingEventArgs e)\r
                {\r
-                       if (Closing != null) Closing (this, e);\r
+                       ToolStripDropDownClosingEventHandler eh = (ToolStripDropDownClosingEventHandler)(Events [ClosingEvent]);\r
+                       if (eh != null)\r
+                               eh (this, e);\r
                }\r
 \r
                protected override void OnHandleCreated (EventArgs e)\r
@@ -367,15 +387,21 @@ namespace System.Windows.Forms
                        // Find the widest menu item\r
                        int widest = 0;\r
 \r
-                       foreach (ToolStripItem tsi in this.Items)\r
+                       foreach (ToolStripItem tsi in this.Items) {\r
+                               if (!tsi.Visible) \r
+                                       continue;\r
                                if (tsi.GetPreferredSize (Size.Empty).Width > widest)\r
                                        widest = tsi.GetPreferredSize (Size.Empty).Width;\r
-\r
+                       }\r
+                       \r
                        int x = this.Padding.Left;\r
                        widest += 68 - this.Padding.Horizontal;\r
                        int y = this.Padding.Top;\r
 \r
                        foreach (ToolStripItem tsi in this.Items) {\r
+                               if (!tsi.Visible)\r
+                                       continue;\r
+\r
                                y += tsi.Margin.Top;\r
 \r
                                int height = 0;\r
@@ -399,17 +425,24 @@ namespace System.Windows.Forms
 \r
                protected virtual void OnOpened (EventArgs e)\r
                {\r
-                       if (Opened != null) Opened (this, e);\r
+                       EventHandler eh = (EventHandler)(Events [OpenedEvent]);\r
+                       if (eh != null)\r
+                               eh (this, e);\r
                }\r
 \r
                protected virtual void OnOpening (CancelEventArgs e)\r
                {\r
-                       if (Opening != null) Opening (this, e);\r
+                       CancelEventHandler eh = (CancelEventHandler)(Events [OpeningEvent]);\r
+                       if (eh != null)\r
+                               eh (this, e);\r
                }\r
 \r
                protected override void OnParentChanged (EventArgs e)\r
                {\r
                        base.OnParentChanged (e);\r
+                       \r
+                       if (Parent is ToolStrip)\r
+                               this.Renderer = (Parent as ToolStrip).Renderer;\r
                }\r
 \r
                protected override void OnVisibleChanged (EventArgs e)\r
@@ -444,33 +477,7 @@ namespace System.Windows.Forms
 \r
                protected override void SetVisibleCore (bool value)\r
                {\r
-                       // Copied from Control.cs, changed XPlatUI.SetVisible(,,) to NO_ACTIVATE\r
-                       if (value != is_visible) {\r
-                               if (value && (window.Handle == IntPtr.Zero) || !is_created)\r
-                                       CreateControl ();\r
-\r
-                               is_visible = value;\r
-\r
-                               if (IsHandleCreated)\r
-                                       XplatUI.SetVisible (Handle, value, false);\r
-\r
-                               OnVisibleChanged (EventArgs.Empty);\r
-\r
-                               if (value == false && parent != null && Focused) {\r
-                                       Control container;\r
-\r
-                                       // Need to start at parent, GetContainerControl might return ourselves if we're a container\r
-                                       container = (Control)parent.GetContainerControl ();\r
-                                       \r
-                                       if (container != null)\r
-                                               container.SelectNextControl (this, true, true, true, true);\r
-                               }\r
-\r
-                               if (parent != null)\r
-                                       parent.PerformLayout (this, "visible");\r
-                               else\r
-                                       PerformLayout (this, "visible");\r
-                       }\r
+                       base.SetVisibleCore (value);\r
                }\r
 \r
                protected override void WndProc (ref Message m)\r
@@ -488,56 +495,188 @@ namespace System.Windows.Forms
                #endregion\r
 \r
                #region Public Events\r
-               public event EventHandler BackgroundImageChanged;\r
-               public event EventHandler BackgroundImageLayoutChanged;\r
-               public event EventHandler BindingContextChanged;\r
-               public event UICuesEventHandler ChangeUICues;\r
-               public event ToolStripDropDownClosedEventHandler Closed;\r
-               public event ToolStripDropDownClosingEventHandler Closing;\r
+               static object ClosedEvent = new object ();\r
+               static object ClosingEvent = new object ();\r
+               static object OpenedEvent = new object ();\r
+               static object OpeningEvent = new object ();\r
+               static object ScrollEvent = new object ();\r
+\r
+               public new event EventHandler BackgroundImageChanged {\r
+                       add { base.BackgroundImageChanged += value; }\r
+                       remove { base.BackgroundImageChanged -= value; }\r
+               }\r
+\r
+               public new event EventHandler BackgroundImageLayoutChanged {\r
+                       add { base.BackgroundImageLayoutChanged += value; }\r
+                       remove { base.BackgroundImageLayoutChanged -= value; }\r
+               }\r
+\r
+               public new event EventHandler BindingContextChanged {\r
+                       add { base.BindingContextChanged += value; }\r
+                       remove { base.BindingContextChanged -= value; }\r
+               }\r
+               public new event UICuesEventHandler ChangeUICues {\r
+                       add { base.ChangeUICues += value; }\r
+                       remove { base.ChangeUICues -= value; }\r
+               }\r
+\r
+               public event ToolStripDropDownClosedEventHandler Closed {\r
+                       add { Events.AddHandler (ClosedEvent, value); }\r
+                       remove { Events.RemoveHandler (ClosedEvent, value); }\r
+               }\r
+\r
+               public event ToolStripDropDownClosingEventHandler Closing {\r
+                       add { Events.AddHandler (ClosingEvent, value); }\r
+                       remove { Events.RemoveHandler (ClosingEvent, value); }\r
+               }\r
+\r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event EventHandler ContextMenuChanged;\r
+               public new event EventHandler ContextMenuChanged {\r
+                       add { base.ContextMenuChanged += value; }\r
+                       remove { base.ContextMenuChanged -= value; }\r
+               }\r
+\r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event EventHandler ContextMenuStripChanged;\r
+               public new event EventHandler ContextMenuStripChanged {\r
+                       add { base.ContextMenuStripChanged += value; }\r
+                       remove { base.ContextMenuStripChanged -= value; }\r
+               }\r
+\r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event EventHandler DockChanged;\r
-               public event EventHandler Enter;\r
-               public event EventHandler FontChanged;\r
-               public event EventHandler ForeColorChanged;\r
+               public new event EventHandler DockChanged {\r
+                       add { base.DockChanged += value; }\r
+                       remove { base.DockChanged -= value; }\r
+               }\r
+\r
+               public new event EventHandler Enter {\r
+                       add { base.Enter += value; }\r
+                       remove { base.Enter -= value; }\r
+               }\r
+\r
+               public new event EventHandler FontChanged {\r
+                       add { base.FontChanged += value; }\r
+                       remove { base.FontChanged -= value; }\r
+               }\r
+\r
+               public new event EventHandler ForeColorChanged {\r
+                       add { base.ForeColorChanged += value; }\r
+                       remove { base.ForeColorChanged -= value; }\r
+               }\r
+\r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event GiveFeedbackEventHandler GiveFeedback;\r
-               public event HelpEventHandler HelpRequested;\r
-               public event EventHandler ImeModeChanged;\r
-               public event KeyEventHandler KeyDown;\r
-               public event KeyPressEventHandler KeyPress;\r
-               public event KeyEventHandler KeyUp;\r
-               public event EventHandler Leave;\r
-               public event EventHandler Opened;\r
-               public event CancelEventHandler Opening;\r
-               public event EventHandler RegionChanged;\r
+               public new event GiveFeedbackEventHandler GiveFeedback {\r
+                       add { base.GiveFeedback += value; }\r
+                       remove { base.GiveFeedback -= value; }\r
+               }\r
+\r
+               public new event HelpEventHandler HelpRequested {\r
+                       add { base.HelpRequested += value; }\r
+                       remove { base.HelpRequested -= value; }\r
+               }\r
+\r
+               public new event EventHandler ImeModeChanged {\r
+                       add { base.ImeModeChanged += value; }\r
+                       remove { base.ImeModeChanged -= value; }\r
+               }\r
+\r
+               public new event KeyEventHandler KeyDown {\r
+                       add { base.KeyDown += value; }\r
+                       remove { base.KeyDown -= value; }\r
+               }\r
+\r
+               public new event KeyPressEventHandler KeyPress {\r
+                       add { base.KeyPress += value; }\r
+                       remove { base.KeyPress -= value; }\r
+               }\r
+\r
+               public new event KeyEventHandler KeyUp {\r
+                       add { base.KeyUp += value; }\r
+                       remove { base.KeyUp -= value; }\r
+               }\r
+\r
+               public new event EventHandler Leave {\r
+                       add { base.Leave += value; }\r
+                       remove { base.Leave -= value; }\r
+               }\r
+\r
+               public event EventHandler Opened {\r
+                       add { Events.AddHandler (OpenedEvent, value); }\r
+                       remove { Events.RemoveHandler (OpenedEvent, value); }\r
+               }\r
+\r
+               public event CancelEventHandler Opening {\r
+                       add { Events.AddHandler (OpeningEvent, value); }\r
+                       remove { Events.RemoveHandler (OpeningEvent, value); }\r
+               }\r
+\r
+               public new event EventHandler RegionChanged {\r
+                       add { base.RegionChanged += value; }\r
+                       remove { base.RegionChanged -= value; }\r
+               }\r
+\r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event ScrollEventHandler Scroll;\r
-               public event EventHandler StyleChanged;\r
+               public new event ScrollEventHandler Scroll {\r
+                       add { Events.AddHandler (ScrollEvent, value); }\r
+                       remove { Events.RemoveHandler (ScrollEvent, value); }\r
+               }\r
+\r
+               public new event EventHandler StyleChanged {\r
+                       add { base.StyleChanged += value; }\r
+                       remove { base.StyleChanged -= value; }\r
+               }\r
+\r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event EventHandler TabIndexChanged;\r
+               public new event EventHandler TabIndexChanged {\r
+                       add { base.TabIndexChanged += value; }\r
+                       remove { base.TabIndexChanged -= value; }\r
+               }\r
+\r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event EventHandler TabStopChanged;\r
+               public new event EventHandler TabStopChanged {\r
+                       add { base.TabStopChanged += value; }\r
+                       remove { base.TabStopChanged -= value; }\r
+               }\r
+\r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event EventHandler TextChanged;\r
+               public new event EventHandler TextChanged {\r
+                       add { base.TextChanged += value; }\r
+                       remove { base.TextChanged -= value; }\r
+               }\r
+\r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event EventHandler Validated;\r
+               public new event EventHandler Validated {\r
+                       add { base.Validated += value; }\r
+                       remove { base.Validated -= value; }\r
+               }\r
+\r
                [Browsable (false)]\r
                [EditorBrowsable (EditorBrowsableState.Never)]\r
-               public event CancelEventHandler Validating;\r
+               public new event CancelEventHandler Validating {\r
+                       add { base.Validating += value; }\r
+                       remove { base.Validating -= value; }\r
+               }\r
+               #endregion\r
+\r
+               #region Private Methods\r
+               private void ToolStripMenuTracker_AppFocusChange (object sender, EventArgs e)\r
+               {\r
+                       this.Close (ToolStripDropDownCloseReason.AppFocusChange);\r
+               }\r
+\r
+               private void ToolStripMenuTracker_AppClicked (object sender, EventArgs e)\r
+               {\r
+                       this.Close (ToolStripDropDownCloseReason.AppClicked);\r
+               }\r
                #endregion\r
        }\r
 }\r
-#endif
\ No newline at end of file
+#endif\r