diff --git a/src/Gtk/Perspex.Gtk/WindowImpl.cs b/src/Gtk/Perspex.Gtk/WindowImpl.cs index 1faab58bc2..1914207d08 100644 --- a/src/Gtk/Perspex.Gtk/WindowImpl.cs +++ b/src/Gtk/Perspex.Gtk/WindowImpl.cs @@ -16,7 +16,7 @@ namespace Perspex.Gtk public class WindowImpl : Gtk.Window, IWindowImpl { - private TopLevel _owner; + private IInputRoot _inputRoot; private IPlatformHandle _windowHandle; @@ -105,9 +105,9 @@ namespace Perspex.Gtk return new Point(point.X + x, point.Y + y); } - public void SetOwner(TopLevel owner) + public void SetInputRoot(IInputRoot inputRoot) { - _owner = owner; + _inputRoot = inputRoot; } public void SetTitle(string title) @@ -158,7 +158,7 @@ namespace Perspex.Gtk var e = new RawMouseEventArgs( GtkMouseDevice.Instance, evnt.Time, - _owner, + _inputRoot, evnt.Button == 0 ? RawMouseEventType.LeftButtonDown : evnt.Button == 1 ? RawMouseEventType.RightButtonDown : RawMouseEventType.MiddleButtonDown, @@ -172,7 +172,7 @@ namespace Perspex.Gtk var e = new RawMouseEventArgs( GtkMouseDevice.Instance, evnt.Time, - _owner, + _inputRoot, evnt.Button == 0 ? RawMouseEventType.LeftButtonUp : evnt.Button == 1 ? RawMouseEventType.RightButtonUp : RawMouseEventType.MiddleButtonUp, @@ -241,7 +241,7 @@ namespace Perspex.Gtk var e = new RawMouseEventArgs( GtkMouseDevice.Instance, evnt.Time, - _owner, + _inputRoot, RawMouseEventType.Move, position, GetModifierKeys(evnt.State)); Input(e); diff --git a/src/Perspex.Controls/Platform/ITopLevelImpl.cs b/src/Perspex.Controls/Platform/ITopLevelImpl.cs index 116e029505..1cbc5f7c60 100644 --- a/src/Perspex.Controls/Platform/ITopLevelImpl.cs +++ b/src/Perspex.Controls/Platform/ITopLevelImpl.cs @@ -30,7 +30,7 @@ namespace Perspex.Platform void Invalidate(Rect rect); - void SetOwner(TopLevel owner); + void SetInputRoot(IInputRoot inputRoot); Point PointToScreen(Point point); diff --git a/src/Perspex.Controls/TopLevel.cs b/src/Perspex.Controls/TopLevel.cs index d6e3c37a75..82cfc0e03e 100644 --- a/src/Perspex.Controls/TopLevel.cs +++ b/src/Perspex.Controls/TopLevel.cs @@ -111,7 +111,7 @@ namespace Perspex.Controls LayoutManager = TryGetService(dependencyResolver); _renderManager = TryGetService(dependencyResolver); - PlatformImpl.SetOwner(this); + PlatformImpl.SetInputRoot(this); PlatformImpl.Activated = HandleActivated; PlatformImpl.Deactivated = HandleDeactivated; PlatformImpl.Closed = HandleClosed; diff --git a/src/Windows/Perspex.Win32/WindowImpl.cs b/src/Windows/Perspex.Win32/WindowImpl.cs index 197f178fd8..fa3313c232 100644 --- a/src/Windows/Perspex.Win32/WindowImpl.cs +++ b/src/Windows/Perspex.Win32/WindowImpl.cs @@ -31,10 +31,12 @@ namespace Perspex.Win32 private IntPtr _hwnd; - private TopLevel _owner; + private IInputRoot _owner; private bool _trackingMouse; + private bool _isActive; + public WindowImpl() { CreateWindow(); @@ -163,9 +165,9 @@ namespace Perspex.Win32 return new Point(p.X, p.Y); } - public void SetOwner(TopLevel owner) + public void SetInputRoot(IInputRoot inputRoot) { - _owner = owner; + _owner = inputRoot; } public void SetTitle(string title) @@ -181,13 +183,13 @@ namespace Perspex.Win32 public virtual IDisposable ShowDialog() { var disabled = s_instances.Where(x => x != this && x.IsEnabled).ToList(); - TopLevel activated = null; + WindowImpl activated = null; foreach (var window in disabled) { - if (window._owner.IsActive) + if (window._isActive) { - activated = window._owner; + activated = window; } window.IsEnabled = false; @@ -253,6 +255,7 @@ namespace Perspex.Win32 { case UnmanagedMethods.WindowActivate.WA_ACTIVE: case UnmanagedMethods.WindowActivate.WA_CLICKACTIVE: + _isActive = true; if (Activated != null) { Activated(); @@ -261,6 +264,7 @@ namespace Perspex.Win32 break; case UnmanagedMethods.WindowActivate.WA_INACTIVE: + _isActive = false; if (Deactivated != null) { Deactivated();