<!-- ##### SECTION Title ##### -->
Event Structures

<!-- ##### SECTION Short_Description ##### -->


<!-- ##### SECTION Long_Description ##### -->
<para>

</para>
<note>
<para>
A common mistake is to forget to set the event mask of a widget so that the
required events are received. See gtk_widget_set_events().
</para>
</note>

<!-- ##### SECTION See_Also ##### -->
<para>

</para>

<!-- ##### STRUCT GdkEventAny ##### -->
<para>
Contains the fields which are common to all event structs.
Any event can safely be cast to a #GdkEventAny to access these fields.
</para>

@type: the type of the event.
@window: the window which received the event.
@send_event: TRUE if the event was sent explicitly (e.g. using XSendEvent).

<!-- ##### STRUCT GdkEventExpose ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@area: 
@count: 

<!-- ##### STRUCT GdkEventNoExpose ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 

<!-- ##### STRUCT GdkEventVisibility ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@state: 

<!-- ##### ENUM GdkVisibilityState ##### -->
<para>

</para>

@GDK_VISIBILITY_UNOBSCURED: 
@GDK_VISIBILITY_PARTIAL: 
@GDK_VISIBILITY_FULLY_OBSCURED: 

<!-- ##### STRUCT GdkEventMotion ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@time: 
@x: 
@y: 
@pressure: 
@xtilt: 
@ytilt: 
@state: 
@is_hint: 
@source: 
@deviceid: 
@x_root: 
@y_root: 

<!-- ##### STRUCT GdkEventButton ##### -->
<para>
Used for button press and button release events. The
<structfield>type</structfield> field will be one of %GDK_BUTTON_PRESS,
%GDK_2BUTTON_PRESS, %GDK_3BUTTON_PRESS, and %GDK_BUTTON_RELEASE.
</para>
<para>
Double and treble-clicks result in a sequence of events being received.
For double-clicks the order of events will be:
<orderedlist>
<listitem><para>%GDK_BUTTON_PRESS</para></listitem>
<listitem><para>%GDK_BUTTON_RELEASE</para></listitem>
<listitem><para>%GDK_BUTTON_PRESS</para></listitem>
<listitem><para>%GDK_2BUTTON_PRESS</para></listitem>
<listitem><para>%GDK_BUTTON_RELEASE</para></listitem>
</orderedlist>
Note that the first click is received just like a normal
button press, while the second click results in a %GDK_2BUTTON_PRESS being
received just after the %GDK_BUTTON_PRESS.
</para>
<para>
Treble-clicks are very similar to double-clicks, except that %GDK_3BUTTON_PRESS
is inserted after the third click. The order of the events is:
<orderedlist>
<listitem><para>%GDK_BUTTON_PRESS</para></listitem>
<listitem><para>%GDK_BUTTON_RELEASE</para></listitem>
<listitem><para>%GDK_BUTTON_PRESS</para></listitem>
<listitem><para>%GDK_2BUTTON_PRESS</para></listitem>
<listitem><para>%GDK_BUTTON_RELEASE</para></listitem>
<listitem><para>%GDK_BUTTON_PRESS</para></listitem>
<listitem><para>%GDK_3BUTTON_PRESS</para></listitem>
<listitem><para>%GDK_BUTTON_RELEASE</para></listitem>
</orderedlist>
</para>

@type: the type of the event.
@window: the window which received the event.
@send_event: TRUE if the event was sent explicitly (e.g. using XSendEvent).
@time: the time of the event in milliseconds. This wraps around roughly every
50 days.
@x: the x coordinate of the mouse relative to the window.
@y: the y coordinate of the mouse relative to the window.
@pressure: the pressure of the button press, intended for input devices such
as graphics tablets. It defaults to 0.5.
@xtilt: 
@ytilt: 
@state: 
@button: 
@source: 
@deviceid: 
@x_root: the x coordinate of the mouse relative to the root of the screen.
@y_root: the y coordinate of the mouse relative to the root of the screen.

<!-- ##### STRUCT GdkEventKey ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@time: 
@state: 
@keyval: 
@length: 
@string: 

<!-- ##### STRUCT GdkEventCrossing ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@subwindow: 
@time: 
@x: 
@y: 
@x_root: 
@y_root: 
@mode: 
@detail: 
@focus: 
@state: 

<!-- ##### ENUM GdkCrossingMode ##### -->
<para>

</para>

@GDK_CROSSING_NORMAL: 
@GDK_CROSSING_GRAB: 
@GDK_CROSSING_UNGRAB: 

<!-- ##### ENUM GdkNotifyType ##### -->
<para>

</para>

@GDK_NOTIFY_ANCESTOR: 
@GDK_NOTIFY_VIRTUAL: 
@GDK_NOTIFY_INFERIOR: 
@GDK_NOTIFY_NONLINEAR: 
@GDK_NOTIFY_NONLINEAR_VIRTUAL: 
@GDK_NOTIFY_UNKNOWN: 

<!-- ##### STRUCT GdkEventFocus ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@in: 

<!-- ##### STRUCT GdkEventConfigure ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@x: 
@y: 
@width: 
@height: 

<!-- ##### STRUCT GdkEventProperty ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@atom: 
@time: 
@state: 

<!-- ##### STRUCT GdkEventSelection ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@selection: 
@target: 
@property: 
@requestor: 
@time: 

<!-- ##### STRUCT GdkEventProximity ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@time: 
@source: 
@deviceid: 

<!-- ##### STRUCT GdkEventClient ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@message_type: 
@data_format: 

<!-- ##### STRUCT GdkEventDND ##### -->
<para>

</para>

@type: 
@window: 
@send_event: 
@context: 
@time: 
@x_root: 
@y_root: 

<!-- ##### UNION GdkEvent ##### -->
<para>

</para>


<!-- ##### TYPEDEF GdkXEvent ##### -->
<para>

</para>


