using Ryujinx.HLE.HOS.Kernel.Threading; using Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy; using System.Collections.Concurrent; namespace Ryujinx.HLE.HOS.SystemState { class AppletStateMgr { public ConcurrentQueue Messages { get; } public FocusState FocusState { get; private set; } public KEvent MessageEvent { get; } public IdDictionary AppletResourceUserIds { get; } public IdDictionary IndirectLayerHandles { get; } public AppletStateMgr(Horizon system) { Messages = new ConcurrentQueue(); MessageEvent = new KEvent(system.KernelContext); AppletResourceUserIds = new IdDictionary(); IndirectLayerHandles = new IdDictionary(); } public void SetFocus(bool isFocused) { FocusState = isFocused ? FocusState.InFocus : FocusState.OutOfFocus; Messages.Enqueue(AppletMessage.FocusStateChanged); if (isFocused) { Messages.Enqueue(AppletMessage.ChangeIntoForeground); } MessageEvent.ReadableEvent.Signal(); } } }