private void OnSeatCapabilities(IntPtr data, IntPtr seatHandle, SeatCapability seatCapabilities) { // Get a handle to, or add, this seat SeatInstance seat = Seats.FirstOrDefault(s => s.Handle == seatHandle); if (seat == null) { seat = new SeatInstance(seatHandle); Seats.Add(seat); } seat.UpdateCapabilities(seatCapabilities); }
internal void UpdateCapabilities(SeatCapability seatCapabilities) { // Determine newly added capabilities - if pointer is added let's grab a handle to it SeatCapability[] allFlags = new SeatCapability[] { SeatCapability.Keyboard, SeatCapability.Pointer, SeatCapability.Touch }; List <SeatCapability> newFlags = new List <SeatCapability>(); foreach (SeatCapability flag in allFlags) { if (seatCapabilities.HasFlag(flag) && !Capabilities.Contains(flag)) { Capabilities.Add(flag); newFlags.Add(flag); } } if (newFlags.Contains(SeatCapability.Pointer)) { Pointer = new Pointer(SeatPointerGet(Handle)); } if (newFlags.Contains(SeatCapability.Keyboard)) { Keyboard = new Keyboard(SeatKeyboardGet(Handle)); } // Determine removed capabilities - if pointer is removed we must dispose of it List <SeatCapability> removedFlags = new List <SeatCapability>(); foreach (SeatCapability flag in allFlags) { if (!seatCapabilities.HasFlag(flag) && Capabilities.Contains(flag)) { Capabilities.Remove(flag); removedFlags.Add(flag); } } if (removedFlags.Contains(SeatCapability.Pointer)) { Pointer = null; } if (removedFlags.Contains(SeatCapability.Keyboard)) { Keyboard = null; } }