Disable the windows key only when in gameplay.

This commit is contained in:
Lucas A 2020-07-16 14:50:11 +02:00
parent 022e4b6335
commit 939441ae40
3 changed files with 22 additions and 9 deletions

View File

@ -11,26 +11,26 @@ namespace osu.Desktop.Windows
{
public class GameplayWinKeyHandler : Component
{
private Bindable<bool> allowScreenSuspension;
private Bindable<bool> disableWinKey;
private Bindable<bool> disableWinKeySetting;
private GameHost host;
[BackgroundDependencyLoader]
private void load(GameHost host, OsuConfigManager config)
private void load(GameHost host, OsuConfigManager config, SessionStatics statics)
{
this.host = host;
allowScreenSuspension = host.AllowScreenSuspension.GetBoundCopy();
allowScreenSuspension.ValueChanged += toggleWinKey;
disableWinKey = statics.GetBindable<bool>(Static.DisableWindowsKey);
disableWinKey.ValueChanged += toggleWinKey;
disableWinKey = config.GetBindable<bool>(OsuSetting.GameplayDisableWinKey);
disableWinKey.BindValueChanged(t => allowScreenSuspension.TriggerChange(), true);
disableWinKeySetting = config.GetBindable<bool>(OsuSetting.GameplayDisableWinKey);
disableWinKeySetting.BindValueChanged(t => disableWinKey.TriggerChange(), true);
}
private void toggleWinKey(ValueChangedEvent<bool> e)
{
if (!e.NewValue && disableWinKey.Value)
if (e.NewValue && disableWinKeySetting.Value)
host.InputThread.Scheduler.Add(WindowsKey.Disable);
else
host.InputThread.Scheduler.Add(WindowsKey.Enable);

View File

@ -12,12 +12,14 @@ namespace osu.Game.Configuration
{
Set(Static.LoginOverlayDisplayed, false);
Set(Static.MutedAudioNotificationShownOnce, false);
Set(Static.DisableWindowsKey, false);
}
}
public enum Static
{
LoginOverlayDisplayed,
MutedAudioNotificationShownOnce
MutedAudioNotificationShownOnce,
DisableWindowsKey
}
}

View File

@ -8,6 +8,7 @@ using osu.Framework.Allocation;
using osu.Framework.Bindables;
using osu.Framework.Graphics;
using osu.Framework.Platform;
using osu.Game.Configuration;
namespace osu.Game.Screens.Play
{
@ -22,6 +23,9 @@ namespace osu.Game.Screens.Play
[Resolved]
private GameHost host { get; set; }
[Resolved]
private SessionStatics statics { get; set; }
public ScreenSuspensionHandler([NotNull] GameplayClockContainer gameplayClockContainer)
{
this.gameplayClockContainer = gameplayClockContainer ?? throw new ArgumentNullException(nameof(gameplayClockContainer));
@ -36,7 +40,11 @@ namespace osu.Game.Screens.Play
Debug.Assert(host.AllowScreenSuspension.Value);
isPaused = gameplayClockContainer.IsPaused.GetBoundCopy();
isPaused.BindValueChanged(paused => host.AllowScreenSuspension.Value = paused.NewValue, true);
isPaused.BindValueChanged(paused =>
{
host.AllowScreenSuspension.Value = paused.NewValue;
statics.Set(Static.DisableWindowsKey, !paused.NewValue);
}, true);
}
protected override void Dispose(bool isDisposing)
@ -46,7 +54,10 @@ namespace osu.Game.Screens.Play
isPaused?.UnbindAll();
if (host != null)
{
host.AllowScreenSuspension.Value = true;
statics.Set(Static.DisableWindowsKey, false);
}
}
}
}