/*
 * Copyright (C) 2006 Apple Computer, Inc.
 * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public License
 * along with this library; see the file COPYING.LIB.  If not, write to
 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
 */

[
    ConstructorTemplate=Event
] interface KeyboardEvent : UIEvent {

    [InitializedByEventConstructor] readonly attribute DOMString        keyIdentifier;
    [InitializedByEventConstructor] readonly attribute unsigned long    keyLocation;
    [InitializedByEventConstructor] readonly attribute boolean          ctrlKey;
    [InitializedByEventConstructor] readonly attribute boolean          shiftKey;
    [InitializedByEventConstructor] readonly attribute boolean          altKey;
    [InitializedByEventConstructor] readonly attribute boolean          metaKey;
    readonly attribute boolean          altGraphKey;

    // FIXME: this does not match the version in the DOM spec.
    void initKeyboardEvent([Optional=DefaultIsUndefined] DOMString type, 
                           [Optional=DefaultIsUndefined] boolean canBubble, 
                           [Optional=DefaultIsUndefined] boolean cancelable, 
                           [Optional=DefaultIsUndefined] DOMWindow view, 
                           [Optional=DefaultIsUndefined] DOMString keyIdentifier,
                           [Optional=DefaultIsUndefined] unsigned long keyLocation,
                           [Optional=DefaultIsUndefined] boolean ctrlKey,
                           [Optional=DefaultIsUndefined] boolean altKey,
                           [Optional=DefaultIsUndefined] boolean shiftKey,
                           [Optional=DefaultIsUndefined] boolean metaKey,
                           [Optional=DefaultIsUndefined] boolean altGraphKey);
};

