diff --git a/Robust.Client.WebView/Cef/WebViewManagerCef.Control.cs b/Robust.Client.WebView/Cef/WebViewManagerCef.Control.cs index 1b205bee5..9107ee254 100644 --- a/Robust.Client.WebView/Cef/WebViewManagerCef.Control.cs +++ b/Robust.Client.WebView/Cef/WebViewManagerCef.Control.cs @@ -162,9 +162,10 @@ namespace Robust.Client.WebView.Cef } } + public bool IsOpen => _data != null; public bool IsLoading => _data?.Browser.IsLoading ?? false; - public void EnteredTree() + public void StartBrowser() { DebugTools.AssertNull(_data); @@ -195,7 +196,7 @@ namespace Robust.Client.WebView.Cef _data = new LiveData(texture, client, browser, renderer); } - public void ExitedTree() + public void CloseBrowser() { DebugTools.AssertNotNull(_data); diff --git a/Robust.Client.WebView/Headless/WebViewManagerHeadless.cs b/Robust.Client.WebView/Headless/WebViewManagerHeadless.cs index 6beb0cd1f..2b2e9641e 100644 --- a/Robust.Client.WebView/Headless/WebViewManagerHeadless.cs +++ b/Robust.Client.WebView/Headless/WebViewManagerHeadless.cs @@ -81,11 +81,13 @@ namespace Robust.Client.WebView.Headless private sealed class WebViewControlImplDummy : DummyBase, IWebViewControlImpl { - public void EnteredTree() + public bool IsOpen => false; + + public void StartBrowser() { } - public void ExitedTree() + public void CloseBrowser() { } diff --git a/Robust.Client.WebView/IWebViewControlImpl.cs b/Robust.Client.WebView/IWebViewControlImpl.cs index 47c182571..a563eb2b7 100644 --- a/Robust.Client.WebView/IWebViewControlImpl.cs +++ b/Robust.Client.WebView/IWebViewControlImpl.cs @@ -9,8 +9,10 @@ namespace Robust.Client.WebView /// internal interface IWebViewControlImpl : IWebViewControl { - void EnteredTree(); - void ExitedTree(); + public bool IsOpen { get; } + + void StartBrowser(); + void CloseBrowser(); void MouseMove(GUIMouseMoveEventArgs args); void MouseExited(); void MouseWheel(GUIMouseWheelEventArgs args); diff --git a/Robust.Client.WebView/WebViewControl.cs b/Robust.Client.WebView/WebViewControl.cs index 999bcdbd2..c232c87b2 100644 --- a/Robust.Client.WebView/WebViewControl.cs +++ b/Robust.Client.WebView/WebViewControl.cs @@ -14,6 +14,7 @@ namespace Robust.Client.WebView [Dependency] private readonly IWebViewManagerInternal _webViewManager = default!; private readonly IWebViewControlImpl _controlImpl; + private bool _alwaysActive; [ViewVariables(VVAccess.ReadWrite)] public string Url @@ -22,6 +23,21 @@ namespace Robust.Client.WebView set => _controlImpl.Url = value; } + [ViewVariables(VVAccess.ReadWrite)] + public bool AlwaysActive + { + get => _alwaysActive; + set + { + _alwaysActive = value; + + if (_alwaysActive && !_controlImpl.IsOpen) + _controlImpl.StartBrowser(); + else if (!_alwaysActive && _controlImpl.IsOpen && !IsInsideTree) + _controlImpl.CloseBrowser(); + } + } + [ViewVariables] public bool IsLoading => _controlImpl.IsLoading; public WebViewControl() @@ -39,14 +55,16 @@ namespace Robust.Client.WebView { base.EnteredTree(); - _controlImpl.EnteredTree(); + if (!_controlImpl.IsOpen) + _controlImpl.StartBrowser(); } protected override void ExitedTree() { base.ExitedTree(); - _controlImpl.ExitedTree(); + if (!_alwaysActive) + _controlImpl.CloseBrowser(); } protected internal override void MouseMove(GUIMouseMoveEventArgs args)