示例#1
0
        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);
        }
示例#2
0
文件: SeatInstance.cs 项目: guytp/ztk
        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;
            }
        }