]> Pileus Git - ~andy/gtk/blob - gdk/x11/gdkprivate-x11.h
x11: Do dnd event handling via gdk_window_add_filter()
[~andy/gtk] / gdk / x11 / gdkprivate-x11.h
1 /* GDK - The GIMP Drawing Kit
2  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17  * Boston, MA 02111-1307, USA.
18  */
19
20 /*
21  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
22  * file for a list of people on the GTK+ Team.  See the ChangeLog
23  * files for a list of changes.  These files are distributed with
24  * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
25  */
26
27 /*
28  * Private uninstalled header defining things local to X windowing code
29  */
30
31 #ifndef __GDK_PRIVATE_X11_H__
32 #define __GDK_PRIVATE_X11_H__
33
34 #include "gdkcursor.h"
35 #include "gdkprivate.h"
36 #include "gdkinternals.h"
37 #include "gdkx.h"
38 #include "gdkwindow-x11.h"
39 #include "gdkscreen-x11.h"
40 #include "gdkdisplay-x11.h"
41
42 #include <X11/Xlib.h>
43 #include <X11/Xutil.h>
44 #include <X11/extensions/XInput.h>
45 #include <X11/extensions/XInput2.h>
46
47 #include <cairo-xlib.h>
48
49 void _gdk_x11_error_handler_push (void);
50 void _gdk_x11_error_handler_pop  (void);
51
52 Colormap _gdk_visual_get_x11_colormap (GdkVisual *visual);
53
54 gint          _gdk_x11_screen_visual_get_best_depth      (GdkScreen      *screen);
55 GdkVisualType _gdk_x11_screen_visual_get_best_type       (GdkScreen      *screen);
56 GdkVisual *   _gdk_x11_screen_get_system_visual          (GdkScreen      *screen);
57 GdkVisual*    _gdk_x11_screen_visual_get_best            (GdkScreen      *screen);
58 GdkVisual*    _gdk_x11_screen_visual_get_best_with_depth (GdkScreen      *screen,
59                                                           gint            depth);
60 GdkVisual*    _gdk_x11_screen_visual_get_best_with_type  (GdkScreen      *screen,
61                                                           GdkVisualType   visual_type);
62 GdkVisual*    _gdk_x11_screen_visual_get_best_with_both  (GdkScreen      *screen,
63                                                           gint            depth,
64                                                           GdkVisualType   visual_type);
65 void          _gdk_x11_screen_query_depths               (GdkScreen      *screen,
66                                                           gint          **depths,
67                                                           gint           *count);
68 void          _gdk_x11_screen_query_visual_types         (GdkScreen      *screen,
69                                                           GdkVisualType **visual_types,
70                                                           gint           *count);
71 GList *       _gdk_x11_screen_list_visuals               (GdkScreen      *screen);
72
73
74
75 void _gdk_x11_display_add_window    (GdkDisplay *display,
76                                      XID        *xid,
77                                      GdkWindow  *window);
78 void _gdk_x11_display_remove_window (GdkDisplay *display,
79                                      XID         xid);
80
81 gint _gdk_x11_display_send_xevent (GdkDisplay *display,
82                                    Window      window,
83                                    gboolean    propagate,
84                                    glong       event_mask,
85                                    XEvent     *event_send);
86
87 /* Routines from gdkgeometry-x11.c */
88 void _gdk_x11_window_move_resize_child (GdkWindow     *window,
89                                         gint           x,
90                                         gint           y,
91                                         gint           width,
92                                         gint           height);
93 void _gdk_x11_window_process_expose    (GdkWindow     *window,
94                                         gulong         serial,
95                                         GdkRectangle  *area);
96
97 void     _gdk_x11_window_sync_rendering    (GdkWindow       *window);
98 gboolean _gdk_x11_window_simulate_key      (GdkWindow       *window,
99                                             gint             x,
100                                             gint             y,
101                                             guint            keyval,
102                                             GdkModifierType  modifiers,
103                                             GdkEventType     key_pressrelease);
104 gboolean _gdk_x11_window_simulate_button   (GdkWindow       *window,
105                                             gint             x,
106                                             gint             y,
107                                             guint            button,
108                                             GdkModifierType  modifiers,
109                                             GdkEventType     button_pressrelease);
110 gboolean _gdk_x11_window_get_property      (GdkWindow    *window,
111                                             GdkAtom       property,
112                                             GdkAtom       type,
113                                             gulong        offset,
114                                             gulong        length,
115                                             gint          pdelete,
116                                             GdkAtom      *actual_property_type,
117                                             gint         *actual_format_type,
118                                             gint         *actual_length,
119                                             guchar      **data);
120 void     _gdk_x11_window_change_property   (GdkWindow    *window,
121                                             GdkAtom       property,
122                                             GdkAtom       type,
123                                             gint          format,
124                                             GdkPropMode   mode,
125                                             const guchar *data,
126                                             gint          nelements);
127 void     _gdk_x11_window_delete_property   (GdkWindow    *window,
128                                             GdkAtom       property);
129
130 gboolean _gdk_x11_window_queue_antiexpose  (GdkWindow *window,
131                                             cairo_region_t *area);
132 void     _gdk_x11_window_translate         (GdkWindow *window,
133                                             cairo_region_t *area,
134                                             gint       dx,
135                                             gint       dy);
136
137 void     _gdk_x11_selection_window_destroyed   (GdkWindow            *window);
138 gboolean _gdk_x11_selection_filter_clear_event (XSelectionClearEvent *event);
139
140 cairo_region_t* _gdk_x11_xwindow_get_shape  (Display *xdisplay,
141                                              Window   window,
142                                              gint     shape_type);
143
144 void     _gdk_x11_region_get_xrectangles   (const cairo_region_t  *region,
145                                             gint                   x_offset,
146                                             gint                   y_offset,
147                                             XRectangle           **rects,
148                                             gint                  *n_rects);
149
150 gboolean _gdk_x11_moveresize_handle_event   (XEvent     *event);
151 gboolean _gdk_x11_moveresize_configure_done (GdkDisplay *display,
152                                              GdkWindow  *window);
153
154 void     _gdk_x11_keymap_state_changed   (GdkDisplay      *display,
155                                           XEvent          *event);
156 void     _gdk_x11_keymap_keys_changed    (GdkDisplay      *display);
157 gint     _gdk_x11_get_group_for_state    (GdkDisplay      *display,
158                                           GdkModifierType  state);
159 void     _gdk_x11_keymap_add_virt_mods   (GdkKeymap       *keymap,
160                                           GdkModifierType *modifiers);
161 gboolean _gdk_x11_keymap_key_is_modifier (GdkKeymap       *keymap,
162                                           guint            keycode);
163
164 void _gdk_x11_windowing_init    (void);
165
166 void _gdk_x11_window_grab_check_unmap   (GdkWindow *window,
167                                          gulong     serial);
168 void _gdk_x11_window_grab_check_destroy (GdkWindow *window);
169
170 gboolean _gdk_x11_display_is_root_window (GdkDisplay *display,
171                                           Window      xroot_window);
172
173 GdkDisplay * _gdk_x11_display_open            (const gchar *display_name);
174 void _gdk_x11_display_make_default            (GdkDisplay *display);
175 void _gdk_x11_display_update_grab_info        (GdkDisplay *display,
176                                                GdkDevice  *device,
177                                                gint        status);
178 void _gdk_x11_display_update_grab_info_ungrab (GdkDisplay *display,
179                                                GdkDevice  *device,
180                                                guint32     time,
181                                                gulong      serial);
182 void _gdk_x11_display_queue_events            (GdkDisplay *display);
183
184
185 gboolean    _gdk_x11_display_set_selection_owner   (GdkDisplay *display,
186                                                     GdkWindow  *owner,
187                                                     GdkAtom     selection,
188                                                     guint32     time,
189                                                     gboolean    send_event);
190 GdkWindow * _gdk_x11_display_get_selection_owner   (GdkDisplay *display,
191                                                     GdkAtom     selection);
192 void        _gdk_x11_display_send_selection_notify (GdkDisplay       *display,
193                                                     GdkNativeWindow  requestor,
194                                                     GdkAtom          selection,
195                                                     GdkAtom          target,
196                                                     GdkAtom          property,
197                                                     guint32          time);
198 gint        _gdk_x11_display_get_selection_property (GdkDisplay     *display,
199                                                      GdkWindow      *requestor,
200                                                      guchar        **data,
201                                                      GdkAtom        *ret_type,
202                                                      gint           *ret_format);
203 void        _gdk_x11_display_convert_selection      (GdkDisplay     *display,
204                                                      GdkWindow      *requestor,
205                                                      GdkAtom         selection,
206                                                      GdkAtom         target,
207                                                      guint32         time);
208
209 gint        _gdk_x11_display_text_property_to_utf8_list (GdkDisplay     *display,
210                                                          GdkAtom         encoding,
211                                                          gint            format,
212                                                          const guchar   *text,
213                                                          gint            length,
214                                                          gchar        ***list);
215 gchar *     _gdk_x11_display_utf8_to_string_target      (GdkDisplay     *displayt,
216                                                          const gchar    *str);
217
218 void _gdk_x11_device_check_extension_events   (GdkDevice  *device);
219
220 GdkDeviceManager *_gdk_x11_device_manager_new (GdkDisplay *display);
221
222 void _gdk_x11_device_xi_update_window_info (GdkWindow *window);
223
224 void _gdk_x11_device_xi_update_axes        (GdkDevice *device,
225                                             gint       axes_count,
226                                             gint       first_axis,
227                                             gint      *axis_data);
228 void _gdk_x11_device_xi_translate_axes     (GdkDevice *device,
229                                             GdkWindow *window,
230                                             gint      *axis_data,
231                                             gdouble   *axes,
232                                             gdouble   *x,
233                                             gdouble   *y);
234
235 guchar * _gdk_x11_device_xi2_translate_event_mask (GdkEventMask     event_mask,
236                                                    gint            *len);
237 guint    _gdk_x11_device_xi2_translate_state      (XIModifierState *mods_state,
238                                                    XIButtonState   *buttons_state);
239
240 void _gdk_x11_display_manager_add_display      (GdkDisplayManager *manager,
241                                                 GdkDisplay        *display);
242 void _gdk_x11_display_manager_remove_display   (GdkDisplayManager *manager,
243                                                 GdkDisplay        *display);
244
245 GdkAtom _gdk_x11_display_manager_atom_intern   (GdkDisplayManager *manager,
246                                                 const gchar       *atom_name,
247                                                 gboolean           copy_name);
248 gchar * _gdk_x11_display_manager_get_atom_name (GdkDisplayManager *manager,
249                                                 GdkAtom            atom);
250 guint   _gdk_x11_display_manager_lookup_keyval (GdkDisplayManager *manager,
251                                                 const gchar       *name);
252 gchar * _gdk_x11_display_manager_get_keyval_name (GdkDisplayManager *manager,
253                                                   guint              keyval);
254 void    _gdk_x11_display_manager_keyval_convert_case (GdkDisplayManager *manager,
255                                                       guint              symbol,
256                                                       guint             *lower,
257                                                       guint             *upper);
258
259 GdkCursor *_gdk_x11_display_get_cursor_for_type     (GdkDisplay    *display,
260                                                      GdkCursorType  type);
261 GdkCursor *_gdk_x11_display_get_cursor_for_name     (GdkDisplay    *display,
262                                                      const gchar   *name);
263 GdkCursor *_gdk_x11_display_get_cursor_for_pixbuf   (GdkDisplay    *display,
264                                                      GdkPixbuf     *pixbuf,
265                                                      gint           x,
266                                                      gint           y);
267 gboolean   _gdk_x11_display_supports_cursor_alpha   (GdkDisplay    *display);
268 gboolean   _gdk_x11_display_supports_cursor_color   (GdkDisplay    *display);
269 void       _gdk_x11_display_get_default_cursor_size (GdkDisplay *display,
270                                                      guint      *width,
271                                                      guint      *height);
272 void       _gdk_x11_display_get_maximal_cursor_size (GdkDisplay *display,
273                                                      guint      *width,
274                                                      guint      *height);
275 void       _gdk_x11_display_before_process_all_updates (GdkDisplay *display);
276 void       _gdk_x11_display_after_process_all_updates  (GdkDisplay *display);
277 void       _gdk_x11_display_create_window_impl     (GdkDisplay    *display,
278                                                     GdkWindow     *window,
279                                                     GdkWindow     *real_parent,
280                                                     GdkScreen     *screen,
281                                                     GdkEventMask   event_mask,
282                                                     GdkWindowAttr *attributes,
283                                                     gint           attributes_mask);
284
285 void _gdk_x11_precache_atoms (GdkDisplay          *display,
286                               const gchar * const *atom_names,
287                               gint                 n_atoms);
288
289 GdkFilterReturn
290 _gdk_x11_dnd_filter (GdkXEvent *xev,
291                      GdkEvent  *event,
292                      gpointer   data);
293
294 void _gdk_x11_screen_init_root_window (GdkScreen *screen);
295 void _gdk_x11_screen_init_visuals     (GdkScreen *screen);
296 void _gdk_x11_screen_init_events      (GdkScreen *screen);
297
298 void _gdk_x11_cursor_update_theme (GdkCursor *cursor);
299 void _gdk_x11_cursor_display_finalize (GdkDisplay *display);
300
301 void _gdk_x11_window_register_dnd (GdkWindow *window);
302
303 gboolean _gdk_x11_get_xft_setting (GdkScreen   *screen,
304                                    const gchar *name,
305                                    GValue      *value);
306
307 GdkGrabStatus _gdk_x11_convert_grab_status (gint status);
308
309 cairo_surface_t * _gdk_x11_window_create_bitmap_surface (GdkWindow *window,
310                                                          int        width,
311                                                          int        height);
312
313 extern const gint        _gdk_x11_event_mask_table[];
314 extern const gint        _gdk_x11_event_mask_table_size;
315
316 #define GDK_SCREEN_DISPLAY(screen)    (GDK_X11_SCREEN (screen)->display)
317 #define GDK_SCREEN_XROOTWIN(screen)   (GDK_X11_SCREEN (screen)->xroot_window)
318 #define GDK_WINDOW_SCREEN(win)        (gdk_window_get_screen (win))
319 #define GDK_WINDOW_DISPLAY(win)       (GDK_X11_SCREEN (GDK_WINDOW_SCREEN (win))->display)
320 #define GDK_WINDOW_XROOTWIN(win)      (GDK_X11_SCREEN (GDK_WINDOW_SCREEN (win))->xroot_window)
321 #define GDK_GC_DISPLAY(gc)            (GDK_SCREEN_DISPLAY (GDK_GC_X11(gc)->screen))
322 #define GDK_WINDOW_IS_X11(win)        (GDK_IS_WINDOW_IMPL_X11 ((win)->impl))
323
324 /* override some macros from gdkx.h with direct-access variants */
325 #undef GDK_DISPLAY_XDISPLAY
326 #undef GDK_WINDOW_XDISPLAY
327 #undef GDK_WINDOW_XID
328 #undef GDK_SCREEN_XDISPLAY
329
330 #define GDK_DISPLAY_XDISPLAY(display) (GDK_X11_DISPLAY(display)->xdisplay)
331 #define GDK_WINDOW_XDISPLAY(win)      (GDK_X11_SCREEN (GDK_WINDOW_SCREEN (win))->xdisplay)
332 #define GDK_WINDOW_XID(win)           (GDK_WINDOW_IMPL_X11(GDK_WINDOW (win)->impl)->xid)
333 #define GDK_SCREEN_XDISPLAY(screen)   (GDK_X11_SCREEN (screen)->xdisplay)
334
335 #endif /* __GDK_PRIVATE_X11_H__ */