AppletStateMgr.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using Ryujinx.HLE.HOS.Kernel.Threading;
  2. using Ryujinx.HLE.HOS.Services.Am.AppletAE.AllSystemAppletProxiesService.SystemAppletProxy;
  3. using System.Collections.Concurrent;
  4. namespace Ryujinx.HLE.HOS.SystemState
  5. {
  6. class AppletStateMgr
  7. {
  8. public ConcurrentQueue<AppletMessage> Messages { get; }
  9. public FocusState FocusState { get; private set; }
  10. public KEvent MessageEvent { get; }
  11. public IdDictionary AppletResourceUserIds { get; }
  12. public IdDictionary IndirectLayerHandles { get; }
  13. public AppletStateMgr(Horizon system)
  14. {
  15. Messages = new ConcurrentQueue<AppletMessage>();
  16. MessageEvent = new KEvent(system.KernelContext);
  17. AppletResourceUserIds = new IdDictionary();
  18. IndirectLayerHandles = new IdDictionary();
  19. }
  20. public void SetFocus(bool isFocused)
  21. {
  22. FocusState = isFocused ? FocusState.InFocus : FocusState.OutOfFocus;
  23. Messages.Enqueue(AppletMessage.FocusStateChanged);
  24. if (isFocused)
  25. {
  26. Messages.Enqueue(AppletMessage.ChangeIntoForeground);
  27. }
  28. MessageEvent.ReadableEvent.Signal();
  29. }
  30. }
  31. }