/*
 * Copyright (C) 2006 Apple Computer, Inc.
 *
 * 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.
 */

[
    EventConstructor,
] interface UIEvent : Event {
    [InitializedByEventConstructor] readonly attribute Window? view;
    [InitializedByEventConstructor] readonly attribute long detail;

     void initUIEvent([Default=Undefined] optional DOMString type,
                                    [Default=Undefined] optional boolean canBubble,
                                    [Default=Undefined] optional boolean cancelable,
                                    [Default=Undefined] optional Window view,
                                    [Default=Undefined] optional long detail);

    // Non-standard
    [MeasureAs=UIEventLayerX] readonly attribute long layerX;
    [MeasureAs=UIEventLayerY] readonly attribute long layerY;
    [MeasureAs=UIEventPageX] readonly attribute long pageX;
    [MeasureAs=UIEventPageY] readonly attribute long pageY;

    // FIXME: these belong on the KeyboardEvent interface
    readonly attribute long keyCode;
    readonly attribute long charCode;
    readonly attribute long which;
};
