/*
 * Copyright (C) 2023 Mohamad Al-Jaf
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#ifdef __WIDL__
#pragma winrt ns_prefix
#endif

import "inspectable.idl";
import "asyncinfo.idl";
import "eventtoken.idl";
import "windowscontracts.idl";
import "windows.foundation.idl";
import "windows.system.idl";
import "windows.ui.idl";
/* import "windows.ui.composition.idl"; */
import "windows.ui.input.idl";
/* import "windows.ui.input.inking.idl"; */
/* import "windows.ui.input.inking.core.idl"; */
/* import "windows.ui.popups.idl"; */

namespace Windows.UI.Input {
    runtimeclass PointerPoint;

    declare {
        interface Windows.Foundation.Collections.IVectorView<Windows.UI.Input.PointerPoint *>;
        interface Windows.Foundation.Collections.IVector<Windows.UI.Input.PointerPoint *>;
    }
}

namespace Windows.UI.Core {
    typedef enum CoreAcceleratorKeyEventType CoreAcceleratorKeyEventType;
    typedef enum CoreCursorType CoreCursorType;
    typedef enum CoreDispatcherPriority CoreDispatcherPriority;
    typedef enum CoreProcessEventsOption CoreProcessEventsOption;
    typedef enum CoreVirtualKeyStates CoreVirtualKeyStates;
    typedef enum CoreWindowActivationMode CoreWindowActivationMode;
    typedef enum CoreWindowActivationState CoreWindowActivationState;
    typedef enum CoreWindowFlowDirection CoreWindowFlowDirection;
    typedef struct CorePhysicalKeyStatus CorePhysicalKeyStatus;
    typedef struct CoreProximityEvaluation CoreProximityEvaluation;

    interface IAcceleratorKeyEventArgs;
    interface IAutomationProviderRequestedEventArgs;
    interface ICharacterReceivedEventArgs;
    interface IClosestInteractiveBoundsRequestedEventArgs;
    interface ICoreAcceleratorKeys;
    interface ICoreCursor;
    interface ICoreCursorFactory;
    interface ICoreDispatcher;
    interface ICoreDispatcher2;
    interface ICoreDispatcherWithTaskPriority;
    interface ICoreWindow;
    interface ICoreWindow2;
    interface ICoreWindow3;
    interface ICoreWindow4;
    interface ICoreWindow5;
    interface ICoreWindowEventArgs;
    interface ICoreWindowStatic;
    interface IIdleDispatchedHandlerArgs;
    interface IInputEnabledEventArgs;
    interface IKeyEventArgs;
    interface IKeyEventArgs2;
    interface IPointerEventArgs;
    interface ITouchHitTestingEventArgs;
    interface IVisibilityChangedEventArgs;
    interface IWindowActivatedEventArgs;
    interface IWindowSizeChangedEventArgs;

    runtimeclass AutomationProviderRequestedEventArgs;
    runtimeclass AcceleratorKeyEventArgs;
    runtimeclass CharacterReceivedEventArgs;
    runtimeclass ClosestInteractiveBoundsRequestedEventArgs;
    runtimeclass CoreCursor;
    runtimeclass CoreDispatcher;
    runtimeclass CoreWindow;
    runtimeclass CoreWindowEventArgs;
    runtimeclass IdleDispatchedHandlerArgs;
    runtimeclass InputEnabledEventArgs;
    runtimeclass KeyEventArgs;
    runtimeclass PointerEventArgs;
    runtimeclass TouchHitTestingEventArgs;
    runtimeclass VisibilityChangedEventArgs;
    runtimeclass WindowActivatedEventArgs;
    runtimeclass WindowSizeChangedEventArgs;

    declare {
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreDispatcher *, Windows.UI.Core.AcceleratorKeyEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, IInspectable *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.AutomationProviderRequestedEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.CharacterReceivedEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.ClosestInteractiveBoundsRequestedEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.CoreWindowEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.InputEnabledEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.KeyEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.PointerEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.TouchHitTestingEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.VisibilityChangedEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.WindowActivatedEventArgs *>;
        interface Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.WindowSizeChangedEventArgs *>;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum CoreAcceleratorKeyEventType
    {
        Character           = 2,
        DeadCharacter       = 3,
        KeyDown             = 0,
        KeyUp               = 1,
        SystemCharacter     = 6,
        SystemDeadCharacter = 7,
        SystemKeyDown       = 4,
        SystemKeyUp         = 5,
        UnicodeCharacter    = 8,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum CoreCursorType
    {
        Arrow                  = 0,
        Cross                  = 1,
        Custom                 = 2,
        Hand                   = 3,
        Help                   = 4,
        IBeam                  = 5,
        SizeAll                = 6,
        SizeNortheastSouthwest = 7,
        SizeNorthSouth         = 8,
        SizeNorthwestSoutheast = 9,
        SizeWestEast           = 10,
        UniversalNo            = 11,
        UpArrow                = 12,
        Wait                   = 13,
        [contract(Windows.Foundation.UniversalApiContract, 5.0)]
        Pin                    = 14,
        [contract(Windows.Foundation.UniversalApiContract, 5.0)]
        Person                 = 15
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum CoreDispatcherPriority
    {
        [contract(Windows.Foundation.UniversalApiContract, 1.0)]
        Idle   = -2,
        Low    = -1,
        Normal =  0,
        High   =  1,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum CoreProcessEventsOption
    {
        ProcessOneAndAllPending = 0,
        ProcessOneIfPresent     = 1,
        ProcessUntilQuit        = 2,
        ProcessAllIfPresent     = 3,
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        flags
    ]
    enum CoreVirtualKeyStates
    {
        None   = 0x0,
        Down   = 0x1,
        Locked = 0x2
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 5.0)
    ]
    enum CoreWindowActivationMode
    {
        None                   = 0,
        Deactivated            = 1,
        ActivatedNotForeground = 2,
        ActivatedInForeground  = 3
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum CoreWindowActivationState
    {
        CodeActivated    = 0,
        Deactivated      = 1,
        PointerActivated = 2
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    enum CoreWindowFlowDirection
    {
        LeftToRight = 0,
        RightToLeft = 1
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    struct CorePhysicalKeyStatus
    {
        UINT32 RepeatCount;
        UINT32 ScanCode;
        boolean IsExtendedKey;
        boolean IsMenuKeyDown;
        boolean WasKeyDown;
        boolean IsKeyReleased;
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0)
    ]
    struct CoreProximityEvaluation
    {
        INT32 Score;
        Windows.Foundation.Point AdjustedPoint;
    };

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        uuid(d1f276c4-98d8-4636-bf49-eb79507548e9)
    ]
    delegate HRESULT DispatchedHandler();

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        uuid(a42b0c24-7f21-4abc-99c1-8f01007f0880)
    ]
    delegate HRESULT IdleDispatchedHandler([in] Windows.UI.Core.IdleDispatchedHandlerArgs *e);

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.AcceleratorKeyEventArgs),
        uuid(ff1c4c4a-9287-470b-836e-9086e3126ade)
    ]
    interface IAcceleratorKeyEventArgs : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT EventType([out, retval] Windows.UI.Core.CoreAcceleratorKeyEventType *value);
        [propget] HRESULT VirtualKey([out, retval] Windows.System.VirtualKey *value);
        [propget] HRESULT KeyStatus([out, retval] Windows.UI.Core.CorePhysicalKeyStatus *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.AutomationProviderRequestedEventArgs),
        uuid(961ff258-21bf-4b42-a298-fa479d4c52e2)
    ]
    interface IAutomationProviderRequestedEventArgs : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT AutomationProvider([out, retval] IInspectable **value);
        [propput] HRESULT AutomationProvider([in] IInspectable *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.CharacterReceivedEventArgs),
        uuid(c584659f-99b2-4bcc-bd33-04e63f42902e)
    ]
    interface ICharacterReceivedEventArgs : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT KeyCode([out, retval] UINT32 *value);
        [propget] HRESULT KeyStatus([out, retval] Windows.UI.Core.CorePhysicalKeyStatus *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 3.0),
        exclusiveto(Windows.UI.Core.ClosestInteractiveBoundsRequestedEventArgs),
        uuid(347c11d7-f6f8-40e3-b29f-ae50d3e86486)
    ]
    interface IClosestInteractiveBoundsRequestedEventArgs : IInspectable
    {
        [propget] HRESULT PointerPosition([out, retval] Windows.Foundation.Point *value);
        [propget] HRESULT SearchBounds([out, retval] Windows.Foundation.Rect *value);
        [propget] HRESULT ClosestInteractiveBounds([out, retval] Windows.Foundation.Rect *value);
        [propput] HRESULT ClosestInteractiveBounds([in] Windows.Foundation.Rect value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        uuid(9ffdf7f5-b8c9-4ef0-b7d2-1de626561fc8)
    ]
    interface ICoreAcceleratorKeys : IInspectable
    {
        [eventadd] HRESULT AcceleratorKeyActivated([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreDispatcher *, Windows.UI.Core.AcceleratorKeyEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT AcceleratorKeyActivated([in] EventRegistrationToken cookie);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.CoreCursor),
        uuid(96893acf-111d-442c-8a77-b87992f8e2d6)
    ]
    interface ICoreCursor : IInspectable
    {
        [propget] HRESULT Id([out, retval] UINT32 *value);
        [propget] HRESULT Type([out, retval] Windows.UI.Core.CoreCursorType *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.CoreCursor),
        uuid(f6359621-a79d-4ed3-8c32-a9ef9d6b76a4)
    ]
    interface ICoreCursorFactory : IInspectable
    {
        HRESULT CreateCursor([in] Windows.UI.Core.CoreCursorType type, [in] UINT32 id, [out, retval] Windows.UI.Core.CoreCursor **cursor);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.CoreDispatcher),
        uuid(60db2fa8-b705-4fde-a7d6-ebbb1891d39e)
    ]
    interface ICoreDispatcher : IInspectable
        requires Windows.UI.Core.ICoreAcceleratorKeys
    {
        [propget] HRESULT HasThreadAccess([out, retval] boolean *value);
        HRESULT ProcessEvents([in] Windows.UI.Core.CoreProcessEventsOption options);
        HRESULT RunAsync([in] Windows.UI.Core.CoreDispatcherPriority priority, [in] Windows.UI.Core.DispatchedHandler *callback,
                         [out, retval] Windows.Foundation.IAsyncAction **action);
        HRESULT RunIdleAsync([in] Windows.UI.Core.IdleDispatchedHandler *callback, [out, retval] Windows.Foundation.IAsyncAction **action);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        uuid(79b9d5f2-879e-4b89-b798-79e47598030c)
    ]
    interface ICoreWindow : IInspectable
    {
        [propget] HRESULT AutomationHostProvider([out, retval] IInspectable **value);
        [propget] HRESULT Bounds([out, retval] Windows.Foundation.Rect *value);
        [propget] HRESULT CustomProperties([out, retval] Windows.Foundation.Collections.IPropertySet **value);
        [propget] HRESULT Dispatcher([out, retval] Windows.UI.Core.CoreDispatcher **value);
        [propget] HRESULT FlowDirection([out, retval] Windows.UI.Core.CoreWindowFlowDirection *value);
        [propput] HRESULT FlowDirection([in] Windows.UI.Core.CoreWindowFlowDirection value);
        [propget] HRESULT IsInputEnabled([out, retval] boolean *value);
        [propput] HRESULT IsInputEnabled([in] boolean value);
        [propget] HRESULT PointerCursor([out, retval] Windows.UI.Core.CoreCursor **value);
        [propput] HRESULT PointerCursor([in] Windows.UI.Core.CoreCursor *value);
        [propget] HRESULT PointerPosition([out, retval] Windows.Foundation.Point *value);
        [propget] HRESULT Visible([out, retval] boolean *value);
        HRESULT Activate();
        HRESULT Close();
        HRESULT GetAsyncKeyState([in] Windows.System.VirtualKey key, [out, retval] Windows.UI.Core.CoreVirtualKeyStates *state);
        HRESULT GetKeyState([in] Windows.System.VirtualKey key, [out, retval] Windows.UI.Core.CoreVirtualKeyStates *state);
        HRESULT ReleasePointerCapture();
        HRESULT SetPointerCapture();
        [eventadd] HRESULT Activated([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.WindowActivatedEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT Activated([in] EventRegistrationToken cookie);
        [eventadd] HRESULT AutomationProviderRequested([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.AutomationProviderRequestedEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT AutomationProviderRequested([in] EventRegistrationToken cookie);
        [eventadd] HRESULT CharacterReceived([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.CharacterReceivedEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT CharacterReceived([in] EventRegistrationToken cookie);
        [eventadd] HRESULT Closed([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.CoreWindowEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT Closed([in] EventRegistrationToken cookie);
        [eventadd] HRESULT InputEnabled([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.InputEnabledEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT InputEnabled([in] EventRegistrationToken cookie);
        [eventadd] HRESULT KeyDown([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.KeyEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT KeyDown([in] EventRegistrationToken cookie);
        [eventadd] HRESULT KeyUp([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.KeyEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT KeyUp([in] EventRegistrationToken cookie);
        [eventadd] HRESULT PointerCaptureLost([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.PointerEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT PointerCaptureLost([in] EventRegistrationToken cookie);
        [eventadd] HRESULT PointerEntered([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.PointerEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT PointerEntered([in] EventRegistrationToken cookie);
        [eventadd] HRESULT PointerExited([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.PointerEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT PointerExited([in] EventRegistrationToken cookie);
        [eventadd] HRESULT PointerMoved([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.PointerEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT PointerMoved([in] EventRegistrationToken cookie);
        [eventadd] HRESULT PointerPressed([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.PointerEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT PointerPressed([in] EventRegistrationToken cookie);
        [eventadd] HRESULT PointerReleased([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.PointerEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT PointerReleased([in] EventRegistrationToken cookie);
        [eventadd] HRESULT TouchHitTesting([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.TouchHitTestingEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT TouchHitTesting([in] EventRegistrationToken cookie);
        [eventadd] HRESULT PointerWheelChanged([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.PointerEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT PointerWheelChanged([in] EventRegistrationToken cookie);
        [eventadd] HRESULT SizeChanged([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.WindowSizeChangedEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT SizeChanged([in] EventRegistrationToken cookie);
        [eventadd] HRESULT VisibilityChanged([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.VisibilityChangedEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT VisibilityChanged([in] EventRegistrationToken cookie);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.CoreWindow),
        uuid(7c2b1b85-6917-4361-9c02-0d9e3a420b95)
    ]
    interface ICoreWindow2 : IInspectable
    {
        [propput] HRESULT PointerPosition([in] Windows.Foundation.Point value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 3.0),
        exclusiveto(Windows.UI.Core.CoreWindow),
        uuid(32c20dd8-faef-4375-a2ab-32640e4815c7)
    ]
    interface ICoreWindow3 : IInspectable
    {
        [eventadd] HRESULT ClosestInteractiveBoundsRequested([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, Windows.UI.Core.ClosestInteractiveBoundsRequestedEventArgs *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT ClosestInteractiveBoundsRequested([in] EventRegistrationToken cookie);
        HRESULT GetCurrentKeyEventDeviceId([out, retval] HSTRING *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 4.0),
        exclusiveto(Windows.UI.Core.CoreWindow),
        uuid(35caf0d0-47f0-436c-af97-0dd88f6f5f02)
    ]
    interface ICoreWindow4 : IInspectable
    {
        [eventadd] HRESULT ResizeStarted([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, IInspectable *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT ResizeStarted([in] EventRegistrationToken cookie);
        [eventadd] HRESULT ResizeCompleted([in] Windows.Foundation.TypedEventHandler<Windows.UI.Core.CoreWindow *, IInspectable *> *handler, [out, retval] EventRegistrationToken *cookie);
        [eventremove] HRESULT ResizeCompleted([in] EventRegistrationToken cookie);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 5.0),
        exclusiveto(Windows.UI.Core.CoreWindow),
        uuid(4b4ae1e1-2e6d-4eaa-bda1-1c5cc1bee141)
    ]
    interface ICoreWindow5 : IInspectable
    {
        [propget] HRESULT DispatcherQueue([out, retval] Windows.System.DispatcherQueue **value);
        [propget] HRESULT ActivationMode([out, retval] Windows.UI.Core.CoreWindowActivationMode *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        uuid(272b1ef3-c633-4da5-a26c-c6d0f56b29da)
    ]
    interface ICoreWindowEventArgs : IInspectable
    {
        [propget] HRESULT Handled([out, retval] boolean *value);
        [propput] HRESULT Handled([in] boolean value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.CoreWindow),
        uuid(4d239005-3c2a-41b1-9022-536bb9cf93b1)
    ]
    interface ICoreWindowStatic : IInspectable
    {
        HRESULT GetForCurrentThread([out, retval] Windows.UI.Core.CoreWindow **windows);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.IdleDispatchedHandlerArgs),
        uuid(98bb6a24-dc1c-43cb-b4ed-d1c0eb2391f3)
    ]
    interface IIdleDispatchedHandlerArgs : IInspectable
    {
        [propget] HRESULT IsDispatcherIdle([out, retval] boolean *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.InputEnabledEventArgs),
        uuid(80371d4f-2fd8-4c24-aa86-3163a87b4e5a)
    ]
    interface IInputEnabledEventArgs : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT InputEnabled([out, retval] boolean *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.KeyEventArgs),
        uuid(5ff5e930-2544-4a17-bd78-1f2fdebb106b)
    ]
    interface IKeyEventArgs : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT VirtualKey([out, retval] Windows.System.VirtualKey *value);
        [propget] HRESULT KeyStatus([out, retval] Windows.UI.Core.CorePhysicalKeyStatus *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 3.0),
        exclusiveto(Windows.UI.Core.KeyEventArgs),
        uuid(583add98-0790-4571-9b12-645ef9d79e42)
    ]
    interface IKeyEventArgs2 : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT DeviceId([out, retval] HSTRING *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.PointerEventArgs),
        uuid(920d9cb1-a5fc-4a21-8c09-49dfe6ffe25f)
    ]
    interface IPointerEventArgs : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT CurrentPoint([out, retval] Windows.UI.Input.PointerPoint **value);
        [propget] HRESULT KeyModifiers([out, retval] Windows.System.VirtualKeyModifiers *value);
        HRESULT GetIntermediatePoints([out, retval] Windows.Foundation.Collections.IVector<Windows.UI.Input.PointerPoint *> **value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.TouchHitTestingEventArgs),
        uuid(22f3b823-0b7c-424e-9df7-33d4f962931b)
    ]
    interface ITouchHitTestingEventArgs : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT ProximityEvaluation([out, retval] Windows.UI.Core.CoreProximityEvaluation *value);
        [propput] HRESULT ProximityEvaluation([in] Windows.UI.Core.CoreProximityEvaluation value);
        [propget] HRESULT Point([out, retval] Windows.Foundation.Point *value);
        [propget] HRESULT BoundingBox([out, retval] Windows.Foundation.Rect *value);
        [default_overload] [overload("EvaluateProximity")] HRESULT EvaluateProximityToRect([in] Windows.Foundation.Rect bounding_box, [out, retval] Windows.UI.Core.CoreProximityEvaluation *evaluation);
        [overload("EvaluateProximity")] HRESULT EvaluateProximityToPolygon([in] UINT32 vertice_size, [in] [size_is(vertice_size)] Windows.Foundation.Point *vertices, [out, retval] Windows.UI.Core.CoreProximityEvaluation *evaluation);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.VisibilityChangedEventArgs),
        uuid(bf9918ea-d801-4564-a495-b1e84f8ad085)
    ]
    interface IVisibilityChangedEventArgs : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT Visible([out, retval] boolean *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.WindowActivatedEventArgs),
        uuid(179d65e7-4658-4cb6-aa13-41d094ea255e)
    ]
    interface IWindowActivatedEventArgs : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT WindowActivationState([out, retval] Windows.UI.Core.CoreWindowActivationState *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        exclusiveto(Windows.UI.Core.WindowSizeChangedEventArgs),
        uuid(5a200ec7-0426-47dc-b86c-6f475915e451)
    ]
    interface IWindowSizeChangedEventArgs : IInspectable
        requires Windows.UI.Core.ICoreWindowEventArgs
    {
        [propget] HRESULT Size([out, retval] Windows.Foundation.Size *value);
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile)
    ]
    runtimeclass AcceleratorKeyEventArgs
    {
        [default] interface Windows.UI.Core.IAcceleratorKeyEventArgs;
        interface Windows.UI.Core.ICoreWindowEventArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass AutomationProviderRequestedEventArgs
    {
        [default] interface Windows.UI.Core.IAutomationProviderRequestedEventArgs;
        interface Windows.UI.Core.ICoreWindowEventArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass CharacterReceivedEventArgs
    {
        [default] interface Windows.UI.Core.ICharacterReceivedEventArgs;
        interface Windows.UI.Core.ICoreWindowEventArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 3.0),
        marshaling_behavior(standard)
    ]
    runtimeclass ClosestInteractiveBoundsRequestedEventArgs
    {
        [default] interface Windows.UI.Core.IClosestInteractiveBoundsRequestedEventArgs;
    }

    [
        activatable(Windows.UI.Core.ICoreCursorFactory, Windows.Foundation.UniversalApiContract, 1.0),
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile)
    ]
    runtimeclass CoreCursor
    {
        [default] interface Windows.UI.Core.ICoreCursor;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(agile)
    ]
    runtimeclass CoreDispatcher
    {
        [default] interface Windows.UI.Core.ICoreDispatcher;
        interface Windows.UI.Core.ICoreAcceleratorKeys;
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.UI.Core.ICoreDispatcherWithTaskPriority; */
        /* [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.UI.Core.ICoreDispatcher2; */
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard),
        static(Windows.UI.Core.ICoreWindowStatic, Windows.Foundation.UniversalApiContract, 1.0)
    ]
    runtimeclass CoreWindow
    {
        [default] interface Windows.UI.Core.ICoreWindow;
        [contract(Windows.Foundation.UniversalApiContract, 1.0)] interface Windows.UI.Core.ICoreWindow2;
        /* [contract(Windows.Foundation.UniversalApiContract, 2.0)] interface Windows.UI.Core.ICorePointerRedirector; */
        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.UI.Core.ICoreWindow3;
        [contract(Windows.Foundation.UniversalApiContract, 4.0)] interface Windows.UI.Core.ICoreWindow4;
        [contract(Windows.Foundation.UniversalApiContract, 5.0)] interface Windows.UI.Core.ICoreWindow5;
        /* [contract(Windows.Foundation.UniversalApiContract, 8.0)] interface Windows.UI.Core.ICoreWindowWithContext; */
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass CoreWindowEventArgs
    {
        [default] interface Windows.UI.Core.ICoreWindowEventArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass IdleDispatchedHandlerArgs
    {
        [default] interface Windows.UI.Core.IIdleDispatchedHandlerArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass InputEnabledEventArgs
    {
        [default] interface Windows.UI.Core.IInputEnabledEventArgs;
        interface Windows.UI.Core.ICoreWindowEventArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass KeyEventArgs
    {
        [default] interface Windows.UI.Core.IKeyEventArgs;
        interface Windows.UI.Core.ICoreWindowEventArgs;
        [contract(Windows.Foundation.UniversalApiContract, 3.0)] interface Windows.UI.Core.IKeyEventArgs2;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass PointerEventArgs
    {
        [default] interface Windows.UI.Core.IPointerEventArgs;
        interface Windows.UI.Core.ICoreWindowEventArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass TouchHitTestingEventArgs
    {
        [default] interface Windows.UI.Core.ITouchHitTestingEventArgs;
        interface Windows.UI.Core.ICoreWindowEventArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass VisibilityChangedEventArgs
    {
        [default] interface Windows.UI.Core.IVisibilityChangedEventArgs;
        interface Windows.UI.Core.ICoreWindowEventArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass WindowActivatedEventArgs
    {
        [default] interface Windows.UI.Core.IWindowActivatedEventArgs;
        interface Windows.UI.Core.ICoreWindowEventArgs;
    }

    [
        contract(Windows.Foundation.UniversalApiContract, 1.0),
        marshaling_behavior(standard)
    ]
    runtimeclass WindowSizeChangedEventArgs
    {
        [default] interface Windows.UI.Core.IWindowSizeChangedEventArgs;
        interface Windows.UI.Core.ICoreWindowEventArgs;
    }
}
