GDK Reference Manual
<<< PrevHomeUpNext >>>

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);
GdkEvent*   gdk_event_get_graphics_expose   (GdkWindow *window);
void        gdk_event_put                   (GdkEvent *event);
GdkEvent*   gdk_event_new                   (GdkEventType type);
GdkEvent*   gdk_event_copy                  (GdkEvent *event);
void        gdk_event_free                  (GdkEvent *event);
guint32     gdk_event_get_time              (GdkEvent *event);
gboolean    gdk_event_get_state             (GdkEvent *event,
                                             GdkModifierType *state);
gboolean    gdk_event_get_axis              (GdkEvent *event,
                                             GdkAxisUse axis_use,
                                             gdouble *value);
gboolean    gdk_event_get_coords            (GdkEvent *event,
                                             gdouble *x_win,
                                             gdouble *y_win);
gboolean    gdk_event_get_root_coords       (GdkEvent *event,
                                             gdouble *x_root,
                                             gdouble *y_root);

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

gboolean    gdk_event_send_client_message   (GdkEvent *event,
                                             GdkNativeWindow winid);
gboolean    gdk_event_send_client_message_for_display
                                            (GdkDisplay *display,
                                             GdkEvent *event,
                                             GdkNativeWindow winid);
void        gdk_event_send_clientmessage_toall
                                            (GdkEvent *event);
void        gdk_add_client_message_filter   (GdkAtom message_type,
                                             GdkFilterFunc func,
                                             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            (GdkEvent *event);

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_NO_EXPOSE		= 30,
  GDK_SCROLL            = 31,
  GDK_WINDOW_STATE      = 32,
  GDK_SETTING           = 33
} 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_NO_EXPOSE

indicates that the source region was completely available when parts of a drawable were copied. This is not very useful.

GDK_SCROLL

GDK_WINDOW_STATE

GDK_SETTING


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 easily lag behind the position of the mouse. When using the GDK_POINTER_MOTION_HINT_MASK the server will only send GDK_MOTION_NOTIFY events when the application asks for them, by calling gdk_window_get_pointer().

GDK_EXPOSURE_MASK

GDK_POINTER_MOTION_MASK

GDK_POINTER_MOTION_HINT_MASK

GDK_BUTTON_MOTION_MASK

GDK_BUTTON1_MOTION_MASK

GDK_BUTTON2_MOTION_MASK

GDK_BUTTON3_MOTION_MASK

GDK_BUTTON_PRESS_MASK

GDK_BUTTON_RELEASE_MASK

GDK_KEY_PRESS_MASK

GDK_KEY_RELEASE_MASK

GDK_ENTER_NOTIFY_MASK

GDK_LEAVE_NOTIFY_MASK

GDK_FOCUS_CHANGE_MASK

GDK_STRUCTURE_MASK

GDK_PROPERTY_CHANGE_MASK

GDK_VISIBILITY_NOTIFY_MASK

GDK_PROXIMITY_IN_MASK

GDK_PROXIMITY_OUT_MASK

GDK_SUBSTRUCTURE_MASK

GDK_SCROLL_MASK

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_get_graphics_expose ()

GdkEvent*   gdk_event_get_graphics_expose   (GdkWindow *window);

Waits for a GraphicsExpose or NoExpose event from the X server. This is used in the GtkText and GtkCList widgets in GTK+ to make sure any GraphicsExpose events are handled before the widget is scrolled.

window :

the GdkWindow to wait for the events for.

Returns :

a GdkEventExpose if a GraphicsExpose was received, or NULL if a NoExpose event was received.


gdk_event_put ()

void        gdk_event_put                   (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().


gdk_event_copy ()

GdkEvent*   gdk_event_copy                  (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_get_graphics_expose() and gdk_event_copy().

event :

a GdkEvent.


gdk_event_get_time ()

guint32     gdk_event_get_time              (GdkEvent *event);

Returns the time stamp from event, if there is one; otherwise returns GDK_CURRENT_TIME. If event is NULL, returns GDK_CURRENT_TIME.

event :

a GdkEvent

Returns :

time stamp field from event


gdk_event_get_state ()

gboolean    gdk_event_get_state             (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

Returns :

TRUE if there was a state field in the event


gdk_event_get_axis ()

gboolean    gdk_event_get_axis              (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

Returns :

TRUE if the specified axis was found, otherwise FALSE


gdk_event_get_coords ()

gboolean    gdk_event_get_coords            (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

y_win :

location to put event window y coordinate

Returns :

TRUE if the event delivered event window coordinates


gdk_event_get_root_coords ()

gboolean    gdk_event_get_root_coords       (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

y_root :

location to put root window y coordinate

Returns :

TRUE if the event delivered root window coordinates


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().


gdk_event_send_client_message ()

gboolean    gdk_event_send_client_message   (GdkEvent *event,
                                             GdkNativeWindow winid);

Sends an X ClientMessage event to a given window (which must be on the default GdkDisplay.) This could be used for communicating between different applications, though the amount of data is limited to 20 bytes.

event :

the GdkEvent to send, which should be a GdkEventClient.

winid :

the window to send the X ClientMessage event to.

Returns :

non-zero on success.


gdk_event_send_client_message_for_display ()

gboolean    gdk_event_send_client_message_for_display
                                            (GdkDisplay *display,
                                             GdkEvent *event,
                                             GdkNativeWindow winid);

Sends an X ClientMessage event to a given window.

This could be used for communicating between different applications, though the amount of data is limited to 20 bytes.

display :

the GdkDisplay for the window where the message is to be sent.

event :

the GdkEvent to send, which should be a GdkEventClient.

winid :

the window to send the X ClientMessage event to.

Returns :

: non-zero on success.


gdk_event_send_clientmessage_toall ()

void        gdk_event_send_clientmessage_toall
                                            (GdkEvent *event);

Sends an X ClientMessage event to all toplevel windows on the default GdkScreen.

Toplevel windows are determined by checking for the WM_STATE property, as described in the Inter-Client Communication Conventions Manual (ICCCM). If no windows are found with the WM_STATE property set, the message is sent to all children of the root window.

event :

the GdkEvent to send, which should be a GdkEventClient.


gdk_add_client_message_filter ()

void        gdk_add_client_message_filter   (GdkAtom message_type,
                                             GdkFilterFunc func,
                                             gpointer data);

Adds a filter to the default display to be called when X ClientMessage events are received. See gdk_display_add_client_message_filter().

message_type :

the type of ClientMessage events to receive. This will be checked against the message_type field of the XClientMessage event struct.

func :

the function to call to process the event.

data :

user data to pass to func.


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


gdk_event_get_screen ()

GdkScreen*  gdk_event_get_screen            (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 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


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

The structs used for each type of event.

<<< PrevHomeUpNext >>>
WindowsEvent Structures