| 
 типы событий 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;
}; |  
 
 
 |