Events

Events — Functions for handling events from the window system

Synopsis

#include <gdk/gdk.h>

enum                GdkEventType;
enum                GdkEventMask;
#define             GDK_CURRENT_TIME
#define             GDK_PRIORITY_EVENTS
#define             GDK_PRIORITY_REDRAW

gboolean            gdk_events_pending                  (void);
GdkEvent *          gdk_event_peek                      (void);
GdkEvent *          gdk_event_get                       (void);
void                gdk_event_put                       (const GdkEvent *event);
GdkEvent *          gdk_event_new                       (GdkEventType type);
GdkEvent *          gdk_event_copy                      (const GdkEvent *event);
void                gdk_event_free                      (GdkEvent *event);
gboolean            gdk_event_get_axis                  (const GdkEvent *event,
                                                         GdkAxisUse axis_use,
                                                         gdouble *value);
gboolean            gdk_event_get_button                (const GdkEvent *event,
                                                         guint *button);
gboolean            gdk_event_get_click_count           (const GdkEvent *event,
                                                         guint *click_count);
gboolean            gdk_event_get_coords                (const GdkEvent *event,
                                                         gdouble *x_win,
                                                         gdouble *y_win);
gboolean            gdk_event_get_keycode               (const GdkEvent *event,
                                                         guint16 *keycode);
gboolean            gdk_event_get_keyval                (const GdkEvent *event,
                                                         guint *keyval);
gboolean            gdk_event_get_root_coords           (const GdkEvent *event,
                                                         gdouble *x_root,
                                                         gdouble *y_root);
gboolean            gdk_event_get_scroll_direction      (const GdkEvent *event,
                                                         GdkScrollDirection *direction);
gboolean            gdk_event_get_state                 (const GdkEvent *event,
                                                         GdkModifierType *state);
guint32             gdk_event_get_time                  (const GdkEvent *event);
void                gdk_event_request_motions           (const GdkEventMotion *event);
gboolean            gdk_events_get_angle                (GdkEvent *event1,
                                                         GdkEvent *event2,
                                                         gdouble *angle);
gboolean            gdk_events_get_center               (GdkEvent *event1,
                                                         GdkEvent *event2,
                                                         gdouble *x,
                                                         gdouble *y);
gboolean            gdk_events_get_distance             (GdkEvent *event1,
                                                         GdkEvent *event2,
                                                         gdouble *distance);

void                gdk_event_handler_set               (GdkEventFunc func,
                                                         gpointer data,
                                                         GDestroyNotify notify);
void                (*GdkEventFunc)                     (GdkEvent *event,
                                                         gpointer data);

gboolean            gdk_get_show_events                 (void);
void                gdk_set_show_events                 (gboolean show_events);
void                gdk_event_set_screen                (GdkEvent *event,
                                                         GdkScreen *screen);
GdkScreen *         gdk_event_get_screen                (const GdkEvent *event);
GdkDevice *         gdk_event_get_device                (const GdkEvent *event);
void                gdk_event_set_device                (GdkEvent *event,
                                                         GdkDevice *device);
GdkDevice *         gdk_event_get_source_device         (const GdkEvent *event);
void                gdk_event_set_source_device         (GdkEvent *event,
                                                         GdkDevice *device);

gboolean            gdk_setting_get                     (const gchar *name,
                                                         GValue *value);

Description

This section describes functions dealing with events from the window system.

In GTK+ applications the events are handled automatically in gtk_main_do_event() and passed on to the appropriate widgets, so these functions are rarely needed. Though some of the fields in the Event Structures are useful.

Details

enum GdkEventType

typedef enum {
  GDK_NOTHING		= -1,
  GDK_DELETE		= 0,
  GDK_DESTROY		= 1,
  GDK_EXPOSE		= 2,
  GDK_MOTION_NOTIFY = 3,
  GDK_BUTTON_PRESS = 4,
  GDK_2BUTTON_PRESS = 5,
  GDK_3BUTTON_PRESS = 6,
  GDK_BUTTON_RELEASE = 7,
  GDK_KEY_PRESS		= 8,
  GDK_KEY_RELEASE = 9,
  GDK_ENTER_NOTIFY = 10,
  GDK_LEAVE_NOTIFY = 11,
  GDK_FOCUS_CHANGE = 12,
  GDK_CONFIGURE		= 13,
  GDK_MAP		= 14,
  GDK_UNMAP		= 15,
  GDK_PROPERTY_NOTIFY = 16,
  GDK_SELECTION_CLEAR = 17,
  GDK_SELECTION_REQUEST = 18,
  GDK_SELECTION_NOTIFY = 19,
  GDK_PROXIMITY_IN = 20,
  GDK_PROXIMITY_OUT = 21,
  GDK_DRAG_ENTER        = 22,
  GDK_DRAG_LEAVE        = 23,
  GDK_DRAG_MOTION       = 24,
  GDK_DRAG_STATUS       = 25,
  GDK_DROP_START        = 26,
  GDK_DROP_FINISHED     = 27,
  GDK_CLIENT_EVENT = 28,
  GDK_VISIBILITY_NOTIFY = 29,
  GDK_SCROLL            = 31,
  GDK_WINDOW_STATE      = 32,
  GDK_SETTING           = 33,
  GDK_OWNER_CHANGE      = 34,
  GDK_GRAB_BROKEN       = 35,
  GDK_DAMAGE            = 36,
  GDK_EVENT_LAST        /* helper variable for decls */
} GdkEventType;

Specifies the type of the event.

Do not confuse these events with the signals that GTK+ widgets emit. Although many of these events result in corresponding signals being emitted, the events are often transformed or filtered along the way.

GDK_NOTHING

a special code to indicate a null event.

GDK_DELETE

the window manager has requested that the toplevel window be hidden or destroyed, usually when the user clicks on a special icon in the title bar.

GDK_DESTROY

the window has been destroyed.

GDK_EXPOSE

all or part of the window has become visible and needs to be redrawn.

GDK_MOTION_NOTIFY

the pointer (usually a mouse) has moved.

GDK_BUTTON_PRESS

a mouse button has been pressed.

GDK_2BUTTON_PRESS

a mouse button has been double-clicked (clicked twice within a short period of time). Note that each click also generates a GDK_BUTTON_PRESS event.

GDK_3BUTTON_PRESS

a mouse button has been clicked 3 times in a short period of time. Note that each click also generates a GDK_BUTTON_PRESS event.

GDK_BUTTON_RELEASE

a mouse button has been released.

GDK_KEY_PRESS

a key has been pressed.

GDK_KEY_RELEASE

a key has been released.

GDK_ENTER_NOTIFY

the pointer has entered the window.

GDK_LEAVE_NOTIFY

the pointer has left the window.

GDK_FOCUS_CHANGE

the keyboard focus has entered or left the window.

GDK_CONFIGURE

the size, position or stacking order of the window has changed. Note that GTK+ discards these events for GDK_WINDOW_CHILD windows.

GDK_MAP

the window has been mapped.

GDK_UNMAP

the window has been unmapped.

GDK_PROPERTY_NOTIFY

a property on the window has been changed or deleted.

GDK_SELECTION_CLEAR

the application has lost ownership of a selection.

GDK_SELECTION_REQUEST

another application has requested a selection.

GDK_SELECTION_NOTIFY

a selection has been received.

GDK_PROXIMITY_IN

an input device has moved into contact with a sensing surface (e.g. a touchscreen or graphics tablet).

GDK_PROXIMITY_OUT

an input device has moved out of contact with a sensing surface.

GDK_DRAG_ENTER

the mouse has entered the window while a drag is in progress.

GDK_DRAG_LEAVE

the mouse has left the window while a drag is in progress.

GDK_DRAG_MOTION

the mouse has moved in the window while a drag is in progress.

GDK_DRAG_STATUS

the status of the drag operation initiated by the window has changed.

GDK_DROP_START

a drop operation onto the window has started.

GDK_DROP_FINISHED

the drop operation initiated by the window has completed.

GDK_CLIENT_EVENT

a message has been received from another application.

GDK_VISIBILITY_NOTIFY

the window visibility status has changed.

GDK_SCROLL

the scroll wheel was turned

GDK_WINDOW_STATE

the state of a window has changed. See GdkWindowState for the possible window states

GDK_SETTING

a setting has been modified.

GDK_OWNER_CHANGE

the owner of a selection has changed. This event type was added in 2.6

GDK_GRAB_BROKEN

a pointer or keyboard grab was broken. This event type was added in 2.8.

GDK_DAMAGE

the content of the window has been changed. This event type was added in 2.14.

GDK_EVENT_LAST

marks the end of the GdkEventType enumeration. Added in 2.18

enum GdkEventMask

typedef enum {
  GDK_EXPOSURE_MASK             = 1 << 1,
  GDK_POINTER_MOTION_MASK       = 1 << 2,
  GDK_POINTER_MOTION_HINT_MASK  = 1 << 3,
  GDK_BUTTON_MOTION_MASK        = 1 << 4,
  GDK_BUTTON1_MOTION_MASK       = 1 << 5,
  GDK_BUTTON2_MOTION_MASK       = 1 << 6,
  GDK_BUTTON3_MOTION_MASK       = 1 << 7,
  GDK_BUTTON_PRESS_MASK         = 1 << 8,
  GDK_BUTTON_RELEASE_MASK       = 1 << 9,
  GDK_KEY_PRESS_MASK            = 1 << 10,
  GDK_KEY_RELEASE_MASK          = 1 << 11,
  GDK_ENTER_NOTIFY_MASK         = 1 << 12,
  GDK_LEAVE_NOTIFY_MASK         = 1 << 13,
  GDK_FOCUS_CHANGE_MASK         = 1 << 14,
  GDK_STRUCTURE_MASK            = 1 << 15,
  GDK_PROPERTY_CHANGE_MASK      = 1 << 16,
  GDK_VISIBILITY_NOTIFY_MASK    = 1 << 17,
  GDK_PROXIMITY_IN_MASK         = 1 << 18,
  GDK_PROXIMITY_OUT_MASK        = 1 << 19,
  GDK_SUBSTRUCTURE_MASK         = 1 << 20,
  GDK_SCROLL_MASK               = 1 << 21,
  GDK_ALL_EVENTS_MASK           = 0x3FFFFE
} GdkEventMask;

A set of bit-flags to indicate which events a window is to receive. Most of these masks map onto one or more of the GdkEventType event types above.

GDK_POINTER_MOTION_HINT_MASK is a special mask which is used to reduce the number of GDK_MOTION_NOTIFY events received. Normally a GDK_MOTION_NOTIFY event is received each time the mouse moves. However, if the application spends a lot of time processing the event (updating the display, for example), it can lag behind the position of the mouse. When using GDK_POINTER_MOTION_HINT_MASK, fewer GDK_MOTION_NOTIFY events will be sent, some of which are marked as a hint (the is_hint member is TRUE). To receive more motion events after a motion hint event, the application needs to asks for more, by calling gdk_event_request_motions().

GDK_EXPOSURE_MASK

receive expose events

GDK_POINTER_MOTION_MASK

receive all pointer motion events

GDK_POINTER_MOTION_HINT_MASK

see the explanation above

GDK_BUTTON_MOTION_MASK

receive pointer motion events while any button is pressed

GDK_BUTTON1_MOTION_MASK

receive pointer motion events while 1 button is pressed

GDK_BUTTON2_MOTION_MASK

receive pointer motion events while 2 button is pressed

GDK_BUTTON3_MOTION_MASK

receive pointer motion events while 3 button is pressed

GDK_BUTTON_PRESS_MASK

receive button press events

GDK_BUTTON_RELEASE_MASK

receive button release events

GDK_KEY_PRESS_MASK

receive key press events

GDK_KEY_RELEASE_MASK

receive key release events

GDK_ENTER_NOTIFY_MASK

receive window enter events

GDK_LEAVE_NOTIFY_MASK

receive window leave events

GDK_FOCUS_CHANGE_MASK

receive focus change events

GDK_STRUCTURE_MASK

receive events about window configuration change

GDK_PROPERTY_CHANGE_MASK

receive property change events

GDK_VISIBILITY_NOTIFY_MASK

receive visibility change events

GDK_PROXIMITY_IN_MASK

receive proximity in events

GDK_PROXIMITY_OUT_MASK

receive proximity out events

GDK_SUBSTRUCTURE_MASK

receive events about window configuration changes of child windows

GDK_SCROLL_MASK

receive scroll events

GDK_ALL_EVENTS_MASK

the combination of all the above event masks.

GDK_CURRENT_TIME

#define GDK_CURRENT_TIME     0L

Represents the current time, and can be used anywhere a time is expected.


GDK_PRIORITY_EVENTS

#define             GDK_PRIORITY_EVENTS

This is the priority that events from the X server are given in the GLib Main Loop.


GDK_PRIORITY_REDRAW

#define GDK_PRIORITY_REDRAW     (G_PRIORITY_HIGH_IDLE + 20)

This is the priority that the idle handler processing window updates is given in the GLib Main Loop.


gdk_events_pending ()

gboolean            gdk_events_pending                  (void);

Checks if any events are ready to be processed for any display.

Returns :

TRUE if any events are pending.

gdk_event_peek ()

GdkEvent *          gdk_event_peek                      (void);

If there is an event waiting in the event queue of some open display, returns a copy of it. See gdk_display_peek_event().

Returns :

a copy of the first GdkEvent on some event queue, or NULL if no events are in any queues. The returned GdkEvent should be freed with gdk_event_free().

gdk_event_get ()

GdkEvent *          gdk_event_get                       (void);

Checks all open displays for a GdkEvent to process,to be processed on, fetching events from the windowing system if necessary. See gdk_display_get_event().

Returns :

the next GdkEvent to be processed, or NULL if no events are pending. The returned GdkEvent should be freed with gdk_event_free().

gdk_event_put ()

void                gdk_event_put                       (const GdkEvent *event);

Appends a copy of the given event onto the front of the event queue for event->any.window's display, or the default event queue if event->any.window is NULL. See gdk_display_put_event().

event :

a GdkEvent.

gdk_event_new ()

GdkEvent *          gdk_event_new                       (GdkEventType type);

Creates a new event of the given type. All fields are set to 0.

type :

a GdkEventType

Returns :

a newly-allocated GdkEvent. The returned GdkEvent should be freed with gdk_event_free().

Since 2.2


gdk_event_copy ()

GdkEvent *          gdk_event_copy                      (const GdkEvent *event);

Copies a GdkEvent, copying or incrementing the reference count of the resources associated with it (e.g. GdkWindow's and strings).

event :

a GdkEvent

Returns :

a copy of event. The returned GdkEvent should be freed with gdk_event_free().

gdk_event_free ()

void                gdk_event_free                      (GdkEvent *event);

Frees a GdkEvent, freeing or decrementing any resources associated with it. Note that this function should only be called with events returned from functions such as gdk_event_peek(), gdk_event_get(), gdk_event_copy() and gdk_event_new().

event :

a GdkEvent.

gdk_event_get_axis ()

gboolean            gdk_event_get_axis                  (const GdkEvent *event,
                                                         GdkAxisUse axis_use,
                                                         gdouble *value);

Extract the axis value for a particular axis use from an event structure.

event :

a GdkEvent

axis_use :

the axis use to look for

value :

location to store the value found. [out]

Returns :

TRUE if the specified axis was found, otherwise FALSE

gdk_event_get_button ()

gboolean            gdk_event_get_button                (const GdkEvent *event,
                                                         guint *button);

Extract the button number from an event.

event :

a GdkEvent

button :

location to store mouse button number. [out]

Returns :

TRUE if the event delivered a button number

Since 3.2


gdk_event_get_click_count ()

gboolean            gdk_event_get_click_count           (const GdkEvent *event,
                                                         guint *click_count);

Extracts the click count from an event.

event :

a GdkEvent

click_count :

location to store click count. [out]

Returns :

TRUE if the event delivered a click count

Since 3.2


gdk_event_get_coords ()

gboolean            gdk_event_get_coords                (const GdkEvent *event,
                                                         gdouble *x_win,
                                                         gdouble *y_win);

Extract the event window relative x/y coordinates from an event.

event :

a GdkEvent

x_win :

location to put event window x coordinate. [out]

y_win :

location to put event window y coordinate. [out]

Returns :

TRUE if the event delivered event window coordinates

gdk_event_get_keycode ()

gboolean            gdk_event_get_keycode               (const GdkEvent *event,
                                                         guint16 *keycode);

Extracts the hardware keycode from an event.

event :

a GdkEvent

keycode :

location to store the keycode. [out]

Returns :

TRUE if the event delivered a hardware keycode

Since 3.2


gdk_event_get_keyval ()

gboolean            gdk_event_get_keyval                (const GdkEvent *event,
                                                         guint *keyval);

Extracts the keyval from an event.

event :

a GdkEvent

keyval :

location to store the keyval. [out]

Returns :

TRUE if the event delivered a key symbol

Since 3.2


gdk_event_get_root_coords ()

gboolean            gdk_event_get_root_coords           (const GdkEvent *event,
                                                         gdouble *x_root,
                                                         gdouble *y_root);

Extract the root window relative x/y coordinates from an event.

event :

a GdkEvent

x_root :

location to put root window x coordinate. [out]

y_root :

location to put root window y coordinate. [out]

Returns :

TRUE if the event delivered root window coordinates

gdk_event_get_scroll_direction ()

gboolean            gdk_event_get_scroll_direction      (const GdkEvent *event,
                                                         GdkScrollDirection *direction);

Extracts the scroll direction from an event.

event :

a GdkEvent

direction :

location to store the scroll direction. [out]

Returns :

TRUE if the event delivered a scroll direction

Since 3.2


gdk_event_get_state ()

gboolean            gdk_event_get_state                 (const GdkEvent *event,
                                                         GdkModifierType *state);

If the event contains a "state" field, puts that field in state. Otherwise stores an empty state (0). Returns TRUE if there was a state field in the event. event may be NULL, in which case it's treated as if the event had no state field.

event :

a GdkEvent or NULL

state :

return location for state. [out]

Returns :

TRUE if there was a state field in the event

gdk_event_get_time ()

guint32             gdk_event_get_time                  (const GdkEvent *event);

returns GDK_CURRENT_TIME. If event is NULL, returns GDK_CURRENT_TIME.

event :

a GdkEvent

Returns :

time stamp field from event

gdk_event_request_motions ()

void                gdk_event_request_motions           (const GdkEventMotion *event);

Request more motion notifies if event is a motion notify hint event.

This function should be used instead of gdk_window_get_pointer() to request further motion notifies, because it also works for extension events where motion notifies are provided for devices other than the core pointer. Coordinate extraction, processing and requesting more motion events from a GDK_MOTION_NOTIFY event usually works like this:

1
2
3
4
5
6
7
{
  /* motion_event handler */
  x = motion_event->x;
  y = motion_event->y;
  /* handle (x,y) motion */
  gdk_event_request_motions (motion_event); /* handles is_hint events */
}

event :

a valid GdkEvent

Since 2.12


gdk_events_get_angle ()

gboolean            gdk_events_get_angle                (GdkEvent *event1,
                                                         GdkEvent *event2,
                                                         gdouble *angle);

If both events contain X/Y information, this function will return TRUE and return in angle the relative angle from event1 to event2. The rotation direction for positive angles is from the positive X axis towards the positive Y axis.

event1 :

first GdkEvent

event2 :

second GdkEvent

angle :

return location for the relative angle between both events. [out]

Returns :

TRUE if the angle could be calculated.

Since 3.0


gdk_events_get_center ()

gboolean            gdk_events_get_center               (GdkEvent *event1,
                                                         GdkEvent *event2,
                                                         gdouble *x,
                                                         gdouble *y);

If both events contain X/Y information, the center of both coordinates will be returned in x and y.

event1 :

first GdkEvent

event2 :

second GdkEvent

x :

return location for the X coordinate of the center. [out]

y :

return location for the Y coordinate of the center. [out]

Returns :

TRUE if the center could be calculated.

Since 3.0


gdk_events_get_distance ()

gboolean            gdk_events_get_distance             (GdkEvent *event1,
                                                         GdkEvent *event2,
                                                         gdouble *distance);

If both events have X/Y information, the distance between both coordinates (as in a straight line going from event1 to event2) will be returned.

event1 :

first GdkEvent

event2 :

second GdkEvent

distance :

return location for the distance. [out]

Returns :

TRUE if the distance could be calculated.

Since 3.0


gdk_event_handler_set ()

void                gdk_event_handler_set               (GdkEventFunc func,
                                                         gpointer data,
                                                         GDestroyNotify notify);

Sets the function to call to handle all events from GDK.

Note that GTK+ uses this to install its own event handler, so it is usually not useful for GTK+ applications. (Although an application can call this function then call gtk_main_do_event() to pass events to GTK+.)

func :

the function to call to handle events from GDK.

data :

user data to pass to the function.

notify :

the function to call when the handler function is removed, i.e. when gdk_event_handler_set() is called with another event handler.

GdkEventFunc ()

void                (*GdkEventFunc)                     (GdkEvent *event,
                                                         gpointer data);

Specifies the type of function passed to gdk_event_handler_set() to handle all GDK events.

event :

the GdkEvent to process.

data :

user data set when the event handler was installed with gdk_event_handler_set(). [closure]

gdk_get_show_events ()

gboolean            gdk_get_show_events                 (void);

Gets whether event debugging output is enabled.

Returns :

TRUE if event debugging output is enabled.

gdk_set_show_events ()

void                gdk_set_show_events                 (gboolean show_events);

Sets whether a trace of received events is output. Note that GTK+ must be compiled with debugging (that is, configured using the --enable-debug option) to use this option.

show_events :

TRUE to output event debugging information.

gdk_event_set_screen ()

void                gdk_event_set_screen                (GdkEvent *event,
                                                         GdkScreen *screen);

Sets the screen for event to screen. The event must have been allocated by GTK+, for instance, by gdk_event_copy().

event :

a GdkEvent

screen :

a GdkScreen

Since 2.2


gdk_event_get_screen ()

GdkScreen *         gdk_event_get_screen                (const GdkEvent *event);

Returns the screen for the event. The screen is typically the screen for event->any.window, but for events such as mouse events, it is the screen where the pointer was when the event occurs - that is, the screen which has the root window to which event->motion.x_root and event->motion.y_root are relative.

event :

a GdkEvent

Returns :

the screen for the event. [transfer none]

Since 2.2


gdk_event_get_device ()

GdkDevice *         gdk_event_get_device                (const GdkEvent *event);

If the event contains a "device" field, this function will return it, else it will return NULL.

event :

a GdkEvent.

Returns :

a GdkDevice, or NULL. [transfer none]

Since 3.0


gdk_event_set_device ()

void                gdk_event_set_device                (GdkEvent *event,
                                                         GdkDevice *device);

Sets the device for event to device. The event must have been allocated by GTK+, for instance, by gdk_event_copy().

event :

a GdkEvent

device :

a GdkDevice

Since 3.0


gdk_event_get_source_device ()

GdkDevice *         gdk_event_get_source_device         (const GdkEvent *event);

This function returns the hardware (slave) GdkDevice that has triggered the event, falling back to the virtual (master) device (as in gdk_event_get_device()) if the event wasn't caused by interaction with a hardware device. This may happen for example in synthesized crossing events after a GdkWindow updates its geometry or a grab is acquired/released.

If the event does not contain a device field, this function will return NULL.

event :

a GdkEvent

Returns :

a GdkDevice, or NULL. [transfer none]

Since 3.0


gdk_event_set_source_device ()

void                gdk_event_set_source_device         (GdkEvent *event,
                                                         GdkDevice *device);

Sets the slave device for event to device.

The event must have been allocated by GTK+, for instance by gdk_event_copy().

event :

a GdkEvent

device :

a GdkDevice

Since 3.0


gdk_setting_get ()

gboolean            gdk_setting_get                     (const gchar *name,
                                                         GValue *value);

Obtains a desktop-wide setting, such as the double-click time, for the default screen. See gdk_screen_get_setting().

name :

the name of the setting.

value :

location to store the value of the setting.

Returns :

TRUE if the setting existed and a value was stored in value, FALSE otherwise.

See Also

Event Structures