]> Pileus Git - ~andy/gtk/blobdiff - gdk/gdkevents.h
2.13.6
[~andy/gtk] / gdk / gdkevents.h
index 9997fbee2c9d05095a4b10aae682ca21d0205ccd..e64acb7b9f7f2a631d9d18476a2df364a99d75ad 100644 (file)
@@ -1,13 +1,44 @@
+/* GDK - The GIMP Drawing Kit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GTK+ Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#if defined(GTK_DISABLE_SINGLE_INCLUDES) && !defined (__GDK_H_INSIDE__) && !defined (GDK_COMPILATION)
+#error "Only <gdk/gdk.h> can be included directly."
+#endif
+
 #ifndef __GDK_EVENTS_H__
 #define __GDK_EVENTS_H__
 
+#include <gdk/gdkcolor.h>
 #include <gdk/gdktypes.h>
 #include <gdk/gdkdnd.h>
 #include <gdk/gdkinput.h>
 
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
+G_BEGIN_DECLS
+
+#define GDK_TYPE_EVENT          (gdk_event_get_type ())
 
 #define GDK_PRIORITY_EVENTS    (G_PRIORITY_DEFAULT)
 #define GDK_PRIORITY_REDRAW     (G_PRIORITY_HIGH_IDLE + 20)
@@ -26,10 +57,13 @@ typedef struct _GdkEventCrossing    GdkEventCrossing;
 typedef struct _GdkEventConfigure   GdkEventConfigure;
 typedef struct _GdkEventProperty    GdkEventProperty;
 typedef struct _GdkEventSelection   GdkEventSelection;
+typedef struct _GdkEventOwnerChange GdkEventOwnerChange;
 typedef struct _GdkEventProximity   GdkEventProximity;
 typedef struct _GdkEventClient     GdkEventClient;
-
 typedef struct _GdkEventDND         GdkEventDND;
+typedef struct _GdkEventWindowState GdkEventWindowState;
+typedef struct _GdkEventSetting     GdkEventSetting;
+typedef struct _GdkEventGrabBroken  GdkEventGrabBroken;
 
 typedef union  _GdkEvent           GdkEvent;
 
@@ -38,11 +72,15 @@ typedef void (*GdkEventFunc) (GdkEvent *event,
 
 /* Event filtering */
 
-typedef void GdkXEvent;          /* Can be cast to XEvent */
+typedef void GdkXEvent;          /* Can be cast to window system specific
+                          * even type, XEvent on X11, MSG on Win32.
+                          */
 
 typedef enum {
   GDK_FILTER_CONTINUE,   /* Event not handled, continue processesing */
-  GDK_FILTER_TRANSLATE,          /* Translated event stored */
+  GDK_FILTER_TRANSLATE,          /* Native event translated into a GDK event and
+                             stored in the "event" structure that was
+                             passed in */
   GDK_FILTER_REMOVE      /* Terminate processing, removing event */
 } GdkFilterReturn;
 
@@ -108,7 +146,12 @@ typedef enum
   GDK_CLIENT_EVENT     = 28,
   GDK_VISIBILITY_NOTIFY = 29,
   GDK_NO_EXPOSE                = 30,
-  GDK_SCROLL            = 31
+  GDK_SCROLL            = 31,
+  GDK_WINDOW_STATE      = 32,
+  GDK_SETTING           = 33,
+  GDK_OWNER_CHANGE      = 34,
+  GDK_GRAB_BROKEN       = 35,
+  GDK_DAMAGE            = 36
 } GdkEventType;
 
 /* Event masks. (Used to select what types of events a window
@@ -182,7 +225,10 @@ typedef enum
 {
   GDK_CROSSING_NORMAL,
   GDK_CROSSING_GRAB,
-  GDK_CROSSING_UNGRAB
+  GDK_CROSSING_UNGRAB,
+  GDK_CROSSING_GTK_GRAB,
+  GDK_CROSSING_GTK_UNGRAB,
+  GDK_CROSSING_STATE_CHANGED
 } GdkCrossingMode;
 
 typedef enum
@@ -191,6 +237,31 @@ typedef enum
   GDK_PROPERTY_DELETE
 } GdkPropertyState;
 
+typedef enum
+{
+  GDK_WINDOW_STATE_WITHDRAWN  = 1 << 0,
+  GDK_WINDOW_STATE_ICONIFIED  = 1 << 1,
+  GDK_WINDOW_STATE_MAXIMIZED  = 1 << 2,
+  GDK_WINDOW_STATE_STICKY     = 1 << 3,
+  GDK_WINDOW_STATE_FULLSCREEN = 1 << 4,
+  GDK_WINDOW_STATE_ABOVE      = 1 << 5,
+  GDK_WINDOW_STATE_BELOW      = 1 << 6
+} GdkWindowState;
+
+typedef enum
+{
+  GDK_SETTING_ACTION_NEW,
+  GDK_SETTING_ACTION_CHANGED,
+  GDK_SETTING_ACTION_DELETED
+} GdkSettingAction;
+
+typedef enum
+{
+  GDK_OWNER_CHANGE_NEW_OWNER,
+  GDK_OWNER_CHANGE_DESTROY,
+  GDK_OWNER_CHANGE_CLOSE
+} GdkOwnerChange;
+
 struct _GdkEventAny
 {
   GdkEventType type;
@@ -204,6 +275,7 @@ struct _GdkEventExpose
   GdkWindow *window;
   gint8 send_event;
   GdkRectangle area;
+  GdkRegion *region;
   gint count; /* If non-zero, how many more events follow. */
 };
 
@@ -212,7 +284,6 @@ struct _GdkEventNoExpose
   GdkEventType type;
   GdkWindow *window;
   gint8 send_event;
-  /* XXX: does anyone need the X major_code or minor_code fields? */
 };
 
 struct _GdkEventVisibility
@@ -231,13 +302,10 @@ struct _GdkEventMotion
   guint32 time;
   gdouble x;
   gdouble y;
-  gdouble pressure;
-  gdouble xtilt;
-  gdouble ytilt;
+  gdouble *axes;
   guint state;
   gint16 is_hint;
-  GdkInputSource source;
-  guint32 deviceid;
+  GdkDevice *device;
   gdouble x_root, y_root;
 };
 
@@ -249,13 +317,10 @@ struct _GdkEventButton
   guint32 time;
   gdouble x;
   gdouble y;
-  gdouble pressure;
-  gdouble xtilt;
-  gdouble ytilt;
+  gdouble *axes;
   guint state;
   guint button;
-  GdkInputSource source;
-  guint32 deviceid;
+  GdkDevice *device;
   gdouble x_root, y_root;
 };
 
@@ -267,13 +332,9 @@ struct _GdkEventScroll
   guint32 time;
   gdouble x;
   gdouble y;
-  gdouble pressure;
-  gdouble xtilt;
-  gdouble ytilt;
   guint state;
   GdkScrollDirection direction;
-  GdkInputSource source;
-  guint32 deviceid;
+  GdkDevice *device;
   gdouble x_root, y_root;
 };
 
@@ -287,6 +348,9 @@ struct _GdkEventKey
   guint keyval;
   gint length;
   gchar *string;
+  guint16 hardware_keycode;
+  guint8 group;
+  guint is_modifier : 1;
 };
 
 struct _GdkEventCrossing
@@ -346,6 +410,18 @@ struct _GdkEventSelection
   GdkNativeWindow requestor;
 };
 
+struct _GdkEventOwnerChange
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  GdkNativeWindow owner;
+  GdkOwnerChange reason;
+  GdkAtom selection;
+  guint32 time;
+  guint32 selection_time;
+};
+
 /* This event type will be used pretty rarely. It only is important
    for XInput aware programs that are drawing their own cursor */
 
@@ -355,8 +431,7 @@ struct _GdkEventProximity
   GdkWindow *window;
   gint8 send_event;
   guint32 time;
-  GdkInputSource source;
-  guint32 deviceid;
+  GdkDevice *device;
 };
 
 struct _GdkEventClient
@@ -373,6 +448,33 @@ struct _GdkEventClient
   } data;
 };
 
+struct _GdkEventSetting
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  GdkSettingAction action;
+  char *name;
+};
+
+struct _GdkEventWindowState
+{
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  GdkWindowState changed_mask;
+  GdkWindowState new_window_state;
+};
+
+struct _GdkEventGrabBroken {
+  GdkEventType type;
+  GdkWindow *window;
+  gint8 send_event;
+  gboolean keyboard;
+  gboolean implicit;
+  GdkWindow *grab_window;
+};
+
 /* Event types for DND */
 
 struct _GdkEventDND {
@@ -401,40 +503,61 @@ union _GdkEvent
   GdkEventConfigure        configure;
   GdkEventProperty         property;
   GdkEventSelection        selection;
+  GdkEventOwnerChange              owner_change;
   GdkEventProximity        proximity;
   GdkEventClient           client;
   GdkEventDND               dnd;
+  GdkEventWindowState       window_state;
+  GdkEventSetting           setting;
+  GdkEventGrabBroken        grab_broken;
 };
 
+GType     gdk_event_get_type            (void) G_GNUC_CONST;
+
 gboolean  gdk_events_pending           (void);
 GdkEvent* gdk_event_get                        (void);
 
 GdkEvent* gdk_event_peek                (void);
 GdkEvent* gdk_event_get_graphics_expose (GdkWindow     *window);
-void      gdk_event_put                        (GdkEvent       *event);
+void      gdk_event_put                        (const GdkEvent *event);
 
-GdkEvent* gdk_event_copy               (GdkEvent       *event);
+GdkEvent* gdk_event_new                 (GdkEventType    type);
+GdkEvent* gdk_event_copy               (const GdkEvent *event);
 void     gdk_event_free                (GdkEvent       *event);
-guint32   gdk_event_get_time           (GdkEvent       *event);
 
+guint32   gdk_event_get_time            (const GdkEvent  *event);
+gboolean  gdk_event_get_state           (const GdkEvent  *event,
+                                         GdkModifierType *state);
+gboolean  gdk_event_get_coords         (const GdkEvent  *event,
+                                        gdouble         *x_win,
+                                        gdouble         *y_win);
+gboolean  gdk_event_get_root_coords    (const GdkEvent  *event,
+                                        gdouble         *x_root,
+                                        gdouble         *y_root);
+gboolean  gdk_event_get_axis            (const GdkEvent  *event,
+                                         GdkAxisUse       axis_use,
+                                         gdouble         *value);
+void      gdk_event_request_motions     (const GdkEventMotion *event);
 void     gdk_event_handler_set         (GdkEventFunc    func,
                                         gpointer        data,
                                         GDestroyNotify  notify);
 
+void       gdk_event_set_screen         (GdkEvent        *event,
+                                         GdkScreen       *screen);
+GdkScreen *gdk_event_get_screen         (const GdkEvent  *event);
+
 void     gdk_set_show_events           (gboolean        show_events);
 gboolean  gdk_get_show_events          (void);
 
-/*
- * The following function adds a global filter for all client
- * messages of type message_type
- */
+#ifndef GDK_MULTIHEAD_SAFE
 void gdk_add_client_message_filter (GdkAtom       message_type,
                                    GdkFilterFunc func,
                                    gpointer      data);
 
+gboolean gdk_setting_get (const gchar *name,
+                         GValue      *value); 
+#endif /* GDK_MULTIHEAD_SAFE */
 
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
+G_END_DECLS
 
 #endif /* __GDK_EVENTS_H__ */