]> Pileus Git - ~andy/gtk/blob - gdk/gdkdisplay.h
- Replace GdkPointerHooks with a multihead-safe GdkDisplayPointerHooks,
[~andy/gtk] / gdk / gdkdisplay.h
1 /*
2  * gdkdisplay.h
3  * 
4  * Copyright 2001 Sun Microsystems Inc. 
5  *
6  * Erwann Chenede <erwann.chenede@sun.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public
19  * License along with this library; if not, write to the
20  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  */
23
24 #ifndef __GDK_DISPLAY_H__
25 #define __GDK_DISPLAY_H__
26
27 #include <gdk/gdktypes.h>
28 #include <gdk/gdkevents.h>
29 #include <glib-object.h>
30
31 G_BEGIN_DECLS
32
33 typedef struct _GdkDisplayClass GdkDisplayClass;
34 typedef struct _GdkDisplayPointerHooks GdkDisplayPointerHooks;
35
36 #define GDK_TYPE_DISPLAY              (gdk_display_get_type ())
37 #define GDK_DISPLAY_OBJECT(object)    (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DISPLAY, GdkDisplay))
38 #define GDK_DISPLAY_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DISPLAY, GdkDisplayClass))
39 #define GDK_IS_DISPLAY(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_DISPLAY))
40 #define GDK_IS_DISPLAY_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_DISPLAY))
41 #define GDK_DISPLAY_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_DISPLAY, GdkDisplayClass))
42
43
44 struct _GdkDisplay
45 {
46   GObject parent_instance;
47
48   /*< private >*/
49   GList *queued_events;
50   GList *queued_tail;
51
52   /* Information for determining if the latest button click
53    * is part of a double-click or triple-click
54    */
55   guint32 button_click_time[2]; /* The last 2 button click times. */
56   GdkWindow *button_window[2];  /* The last 2 windows to receive button presses. */
57   gint button_number[2];        /* The last 2 buttons to be pressed. */
58
59   guint double_click_time;      /* Maximum time between clicks in msecs */
60   GdkDevice *core_pointer;      /* Core pointer device */
61
62   const GdkDisplayPointerHooks *pointer_hooks; /* Current hooks for querying pointer */
63   
64   guint closed : 1;             /* Whether this display has been closed */
65 };
66
67 struct _GdkDisplayClass
68 {
69   GObjectClass parent_class;
70   
71   G_CONST_RETURN gchar *     (*get_display_name)   (GdkDisplay *display);
72   gint                       (*get_n_screens)      (GdkDisplay *display);
73   GdkScreen *                (*get_screen)         (GdkDisplay *display,
74                                                     gint        screen_num);
75   GdkScreen *                (*get_default_screen) (GdkDisplay *display);
76
77   
78   /* Signals */
79   void (*closed) (GdkDisplay *display,
80                   gboolean    is_error);
81 };
82
83 struct _GdkDisplayPointerHooks
84 {
85   void (*get_pointer)              (GdkDisplay      *display,
86                                     GdkScreen      **screen,
87                                     gint            *x,
88                                     gint            *y,
89                                     GdkModifierType *mask);
90   GdkWindow* (*window_get_pointer) (GdkDisplay      *display,
91                                     GdkWindow       *window,
92                                     gint            *x,
93                                     gint            *y,
94                                     GdkModifierType *mask);
95   GdkWindow* (*window_at_pointer)  (GdkDisplay      *display,
96                                     gint            *win_x,
97                                     gint            *win_y);
98 };
99
100 GType       gdk_display_get_type (void);
101 GdkDisplay *gdk_display_open                (const gchar *display_name);
102
103 G_CONST_RETURN gchar * gdk_display_get_name (GdkDisplay *display);
104
105 gint        gdk_display_get_n_screens      (GdkDisplay  *display);
106 GdkScreen * gdk_display_get_screen         (GdkDisplay  *display,
107                                             gint         screen_num);
108 GdkScreen * gdk_display_get_default_screen (GdkDisplay  *display);
109 void        gdk_display_pointer_ungrab     (GdkDisplay  *display,
110                                             guint32      time);
111 void        gdk_display_keyboard_ungrab    (GdkDisplay  *display,
112                                             guint32      time);
113 gboolean    gdk_display_pointer_is_grabbed (GdkDisplay  *display);
114 void        gdk_display_beep               (GdkDisplay  *display);
115 void        gdk_display_sync               (GdkDisplay  *display);
116 void        gdk_display_close              (GdkDisplay  *display);
117
118 GList *     gdk_display_list_devices       (GdkDisplay  *display);
119
120 GdkEvent* gdk_display_get_event  (GdkDisplay *display);
121 GdkEvent* gdk_display_peek_event (GdkDisplay *display);
122 void      gdk_display_put_event  (GdkDisplay *display,
123                                   GdkEvent   *event);
124
125 void gdk_display_add_client_message_filter (GdkDisplay   *display,
126                                             GdkAtom       message_type,
127                                             GdkFilterFunc func,
128                                             gpointer      data);
129
130 void gdk_display_set_double_click_time (GdkDisplay  *display,
131                                         guint        msec);
132
133 GdkDisplay *gdk_display_get_default (void);
134
135 GdkDevice  *gdk_display_get_core_pointer (GdkDisplay *display);
136
137 void             gdk_display_get_pointer           (GdkDisplay             *display,
138                                                     GdkScreen             **screen,
139                                                     gint                   *x,
140                                                     gint                   *y,
141                                                     GdkModifierType        *mask);
142 GdkWindow *      gdk_display_get_window_at_pointer (GdkDisplay             *display,
143                                                     gint                   *win_x,
144                                                     gint                   *win_y);
145
146 GdkDisplayPointerHooks *gdk_display_set_pointer_hooks (GdkDisplay                   *display,
147                                                        const GdkDisplayPointerHooks *new_hooks);
148
149 G_END_DECLS
150
151 #endif                          /* __GDK_DISPLAY_H__ */