типы событий gdk
следующие типы данных передают в
обработчики событий gtk+. для каждого
перечисленного типа данных, перечислены
сигналы, которые используют этот тип
данных.
тип данных 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_begin = 22,
gdk_drag_request = 23,
gdk_drop_enter = 24,
gdk_drop_leave = 25,
gdk_drop_data_avail = 26,
gdk_client_event = 27,
gdk_visibility_notify = 28,
gdk_no_expose = 29,
gdk_other_event = 9999 /* не рекомендуемый, используйте вместо этого фильтры */
} gdkeventtype;
|
другой тип события отличается от этих
- gdkevent. это объединение всех других
типов данных, которое позволяет быть
приведенным к определенному типу данных
события в пределах обработчика сигнала.
типы
данных события определены следующим
образом:
struct _gdkeventany
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
};
struct _gdkeventexpose
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
gdkrectangle area;
gint count; /* если ненулевое, следует больше событий. */
};
struct _gdkeventnoexpose
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
/* xxx: любой нуждается в x major_code или minor_code областях? */
};
struct _gdkeventvisibility
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
gdkvisibilitystate state;
};
struct _gdkeventmotion
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
guint32 time;
gdouble x;
gdouble y;
gdouble pressure;
gdouble xtilt;
gdouble ytilt;
guint state;
gint16 is_hint;
gdkinputsource source;
guint32 deviceid;
gdouble x_root, y_root;
};
struct _gdkeventbutton
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
guint32 time;
gdouble x;
gdouble y;
gdouble pressure;
gdouble xtilt;
gdouble ytilt;
guint state;
guint button;
gdkinputsource source;
guint32 deviceid;
gdouble x_root, y_root;
};
struct _gdkeventkey
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
guint32 time;
guint state;
guint keyval;
gint length;
gchar *string;
};
struct _gdkeventcrossing
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
gdkwindow *subwindow;
gdknotifytype detail;
};
struct _gdkeventfocus
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
gint16 in;
};
struct _gdkeventconfigure
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
gint16 x, y;
gint16 width;
gint16 height;
};
struct _gdkeventproperty
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
gdkatom atom;
guint32 time;
guint state;
};
struct _gdkeventselection
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
gdkatom selection;
gdkatom target;
gdkatom property;
guint32 requestor;
guint32 time;
};
/* этот тип события используется довольно редко. это важно только
для xinput программ которые рисуют свой курсор */
struct _gdkeventproximity
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
guint32 time;
gdkinputsource source;
guint32 deviceid;
};
struct _gdkeventdragrequest
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
guint32 requestor;
union {
struct {
guint protocol_version:4;
guint sendreply:1;
guint willaccept:1;
guint delete_data:1; /* do *not* delete if link is sent, only
if data is sent */
guint senddata:1;
guint reserved:22;
} flags;
glong allflags;
} u;
guint8 isdrop; /* this gdk event can be generated by a couple of
x events - this lets the app know whether the
drop really occurred or we just set the data */
gdkpoint drop_coords;
gchar *data_type;
guint32 timestamp;
};
struct _gdkeventdragbegin
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
union {
struct {
guint protocol_version:4;
guint reserved:28;
} flags;
glong allflags;
} u;
};
struct _gdkeventdropenter
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
guint32 requestor;
union {
struct {
guint protocol_version:4;
guint sendreply:1;
guint extended_typelist:1;
guint reserved:26;
} flags;
glong allflags;
} u;
};
struct _gdkeventdropleave
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
guint32 requestor;
union {
struct {
guint protocol_version:4;
guint reserved:28;
} flags;
glong allflags;
} u;
};
struct _gdkeventdropdataavailable
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
guint32 requestor;
union {
struct {
guint protocol_version:4;
guint isdrop:1;
guint reserved:25;
} flags;
glong allflags;
} u;
gchar *data_type; /* mime type */
gulong data_numbytes;
gpointer data;
guint32 timestamp;
gdkpoint coords;
};
struct _gdkeventclient
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
gdkatom message_type;
gushort data_format;
union {
char b[20];
short s[10];
long l[5];
} data;
};
struct _gdkeventother
{
gdkeventtype type;
gdkwindow *window;
gint8 send_event;
gdkxevent *xevent;
};
|
|