stub out things to get the beatles xbox site up and running
[moon.git] / class / System.Windows / System.Windows.Controls.Primitives / Popup.cs
blobd92ce7f8a70b4248ed32ad55d6beef10ec1a269f
1 //
2 // Popup.cs
3 //
4 // Contact:
5 // Moonlight List (moonlight-list@lists.ximian.com)
6 //
7 // Copyright 2008 Novell, Inc.
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 using Mono;
30 using System.Collections.Generic;
31 using System.Windows;
32 using System.Windows.Markup;
33 using System.Windows.Media;
34 using System.Windows.Input;
36 namespace System.Windows.Controls.Primitives {
38 public sealed partial class Popup : FrameworkElement
40 static UnmanagedEventHandler on_opened = Events.SafeDispatcher (
41 (IntPtr target, IntPtr calldata, IntPtr closure) =>
42 ((Popup) NativeDependencyObjectHelper.FromIntPtr (closure)).OnOpened ());
44 void Initialize ()
46 Events.AddOnEventHandler (this, EventIds.Popup_OpenedEvent, on_opened);
49 internal event EventHandler ClickedOutside;
51 internal UIElement RealChild {
52 get {
53 if (_clickCatcher != null) {
54 Canvas root = Child as Canvas;
55 return root.Children[1];
58 return Child;
63 private void OnOpened ()
65 UpdateCatcher ();
67 NativeMethods.event_object_do_emit_current_context (native, EventIds.Popup_OpenedEvent, IntPtr.Zero);
70 Canvas _clickCatcher;
72 internal void CatchClickedOutside ()
74 RearrangePopup ();
77 void RearrangePopup ()
79 if (Child == null)
80 return;
82 UIElement child = Child;
83 Canvas root = new Canvas ();
84 _clickCatcher = new Canvas { Background = new SolidColorBrush (Colors.Transparent) };
85 Child = root;
86 root.Children.Add (_clickCatcher);
87 root.Children.Add (child);
89 Child = root;
91 _clickCatcher.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e) {
92 EventHandler h = ClickedOutside;
93 if (h != null)
94 h (this, EventArgs.Empty);
98 void UpdateCatcher ()
100 if (_clickCatcher == null)
101 return;
103 try {
104 GeneralTransform xform = Application.Current.RootVisual.TransformToVisual (this);
106 _clickCatcher.RenderTransform = (Transform)xform;
107 } catch (ArgumentException) {
108 // Drop errors looking up the transform
111 Canvas.SetTop (_clickCatcher, -VerticalOffset);
112 Canvas.SetLeft (_clickCatcher, -HorizontalOffset);
113 _clickCatcher.Height = Application.Current.Host.Content.ActualHeight;
114 _clickCatcher.Width = Application.Current.Host.Content.ActualWidth;