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, see <http://www.gnu.org/licenses/>. 16 */ 17 18 /* 19 * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS 20 * file for a list of people on the GTK+ Team. See the ChangeLog 21 * files for a list of changes. These files are distributed with 22 * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 23 */ 24 25 /* 26 * Private uninstalled header defining things local to X windowing code 27 */ 28 29 #ifndef __GDK_PRIVATE_X11_H__ 30 #define __GDK_PRIVATE_X11_H__ 31 32 #include "gdkcursor.h" 33 #include "gdkinternals.h" 34 #include "gdkx.h" 35 #include "gdksurface-x11.h" 36 #include "gdkscreen-x11.h" 37 38 #include <X11/Xlib.h> 39 #include <X11/Xutil.h> 40 #include <X11/extensions/XInput2.h> 41 42 #include <cairo-xlib.h> 43 44 typedef enum { 45 GDK_FILTER_CONTINUE, 46 GDK_FILTER_TRANSLATE, 47 GDK_FILTER_REMOVE 48 } GdkFilterReturn; 49 50 typedef GdkFilterReturn (*GdkFilterFunc) (const XEvent *xevent, 51 GdkEvent *event, 52 gpointer data); 53 54 55 void _gdk_x11_error_handler_push (void); 56 void _gdk_x11_error_handler_pop (void); 57 58 int gdk_x11_display_get_window_depth (GdkX11Display *display); 59 Visual * gdk_x11_display_get_window_visual (GdkX11Display *display); 60 Colormap gdk_x11_display_get_window_colormap (GdkX11Display *display); 61 62 void _gdk_x11_display_add_window (GdkDisplay *display, 63 XID *xid, 64 GdkSurface *window); 65 void _gdk_x11_display_remove_window (GdkDisplay *display, 66 XID xid); 67 68 int _gdk_x11_display_send_xevent (GdkDisplay *display, 69 Window window, 70 gboolean propagate, 71 glong event_mask, 72 XEvent *event_send); 73 74 cairo_region_t* _gdk_x11_xwindow_get_shape (Display *xdisplay, 75 Window window, 76 int scale, 77 int shape_type); 78 79 void _gdk_x11_region_get_xrectangles (const cairo_region_t *region, 80 int x_offset, 81 int y_offset, 82 int scale, 83 XRectangle **rects, 84 int *n_rects); 85 86 gboolean _gdk_x11_moveresize_handle_event (const XEvent *event); 87 gboolean _gdk_x11_moveresize_configure_done (GdkDisplay *display, 88 GdkSurface *window); 89 90 void _gdk_x11_keymap_state_changed (GdkDisplay *display, 91 const XEvent *event); 92 void _gdk_x11_keymap_keys_changed (GdkDisplay *display); 93 void _gdk_x11_keymap_add_virt_mods (GdkKeymap *keymap, 94 GdkModifierType *modifiers); 95 96 void _gdk_x11_surfaceing_init (void); 97 98 void _gdk_x11_surface_grab_check_unmap (GdkSurface *window, 99 gulong serial); 100 void _gdk_x11_surface_grab_check_destroy (GdkSurface *window); 101 102 #ifdef HAVE_XDAMAGE 103 void _gdk_x11_surface_set_frame_still_painting (GdkSurface *surface, 104 gboolean painting); 105 #endif 106 107 gboolean _gdk_x11_display_is_root_window (GdkDisplay *display, 108 Window xroot_window); 109 110 void _gdk_x11_display_update_grab_info (GdkDisplay *display, 111 GdkDevice *device, 112 int status); 113 void _gdk_x11_display_update_grab_info_ungrab (GdkDisplay *display, 114 GdkDevice *device, 115 guint32 time, 116 gulong serial); 117 void _gdk_x11_display_queue_events (GdkDisplay *display); 118 119 120 GdkAppLaunchContext *_gdk_x11_display_get_app_launch_context (GdkDisplay *display); 121 122 int _gdk_x11_display_text_property_to_utf8_list (GdkDisplay *display, 123 const char *encoding, 124 int format, 125 const guchar *text, 126 int length, 127 char ***list); 128 char * gdk_x11_utf8_to_string_target (const char *utf8_str, 129 gboolean return_latin1); 130 131 void _gdk_x11_device_check_extension_events (GdkDevice *device); 132 133 GdkX11DeviceManagerXI2 *_gdk_x11_device_manager_new (GdkDisplay *display); 134 135 guchar * _gdk_x11_device_xi2_translate_event_mask (GdkX11DeviceManagerXI2 *device_manager_xi2, 136 GdkEventMask event_mask, 137 int *len); 138 guint _gdk_x11_device_xi2_translate_state (XIModifierState *mods_state, 139 XIButtonState *buttons_state, 140 XIGroupState *group_state); 141 int _gdk_x11_device_xi2_get_id (GdkX11DeviceXI2 *device); 142 void _gdk_device_xi2_unset_scroll_valuators (GdkX11DeviceXI2 *device); 143 144 145 GdkDevice * _gdk_x11_device_manager_xi2_lookup (GdkX11DeviceManagerXI2 *device_manager_xi2, 146 int device_id); 147 void _gdk_x11_device_xi2_add_scroll_valuator (GdkX11DeviceXI2 *device, 148 guint n_valuator, 149 GdkScrollDirection direction, 150 double increment); 151 gboolean _gdk_x11_device_xi2_get_scroll_delta (GdkX11DeviceXI2 *device, 152 guint n_valuator, 153 double valuator_value, 154 GdkScrollDirection *direction_ret, 155 double *delta_ret); 156 void _gdk_device_xi2_reset_scroll_valuators (GdkX11DeviceXI2 *device); 157 158 double gdk_x11_device_xi2_get_last_axis_value (GdkX11DeviceXI2 *device, 159 int n_axis); 160 161 void gdk_x11_device_xi2_store_axes (GdkX11DeviceXI2 *device, 162 double *axes, 163 int n_axes); 164 165 gboolean _gdk_x11_display_supports_cursor_alpha (GdkDisplay *display); 166 gboolean _gdk_x11_display_supports_cursor_color (GdkDisplay *display); 167 void _gdk_x11_display_get_default_cursor_size (GdkDisplay *display, 168 guint *width, 169 guint *height); 170 void _gdk_x11_display_get_maximal_cursor_size (GdkDisplay *display, 171 guint *width, 172 guint *height); 173 174 GdkSurface * _gdk_x11_display_create_surface (GdkDisplay *display, 175 GdkSurfaceType surface_type, 176 GdkSurface *parent, 177 int x, 178 int y, 179 int width, 180 int height); 181 GList * gdk_x11_display_get_toplevel_windows (GdkDisplay *display); 182 183 void _gdk_x11_precache_atoms (GdkDisplay *display, 184 const char * const *atom_names, 185 int n_atoms); 186 187 Atom _gdk_x11_get_xatom_for_display_printf (GdkDisplay *display, 188 const char *format, 189 ...) G_GNUC_PRINTF (2, 3); 190 191 GdkDrag *gdk_x11_drag_find (GdkDisplay *display, 192 Window source_xid, 193 Window dest_xid); 194 void gdk_x11_drag_handle_status (GdkDisplay *display, 195 const XEvent *xevent); 196 void gdk_x11_drag_handle_finished (GdkDisplay *display, 197 const XEvent *xevent); 198 void gdk_x11_drop_read_actions (GdkDrop *drop); 199 gboolean gdk_x11_drop_filter (GdkSurface *surface, 200 const XEvent *xevent); 201 202 typedef struct _GdkSurfaceCache GdkSurfaceCache; 203 204 GdkSurfaceCache * 205 gdk_surface_cache_get (GdkDisplay *display); 206 207 GdkFilterReturn 208 gdk_surface_cache_filter (const XEvent *xevent, 209 gpointer data); 210 GdkFilterReturn 211 gdk_surface_cache_shape_filter (const XEvent *xevent, 212 gpointer data); 213 214 void _gdk_x11_cursor_display_finalize (GdkDisplay *display); 215 216 void _gdk_x11_surface_register_dnd (GdkSurface *window); 217 218 void gdk_x11_surface_update_popups (GdkSurface *surface); 219 220 void gdk_x11_surface_enter_leave_monitors (GdkSurface *surface); 221 222 GdkDrag * _gdk_x11_surface_drag_begin (GdkSurface *window, 223 GdkDevice *device, 224 GdkContentProvider *content, 225 GdkDragAction actions, 226 double dx, 227 double dy); 228 229 void gdk_x11_surface_get_root_coords (GdkSurface *surface, 230 int x, 231 int y, 232 int *root_x, 233 int *root_y); 234 235 void gdk_x11_surface_show (GdkSurface *surface, 236 gboolean already_mapped); 237 void gdk_x11_surface_raise (GdkSurface *surface); 238 void gdk_x11_surface_set_opacity (GdkSurface *surface, 239 double opacity); 240 gboolean gdk_x11_surface_supports_edge_constraints (GdkSurface *surface); 241 242 GdkGrabStatus _gdk_x11_convert_grab_status (int status); 243 244 cairo_surface_t * _gdk_x11_display_create_bitmap_surface (GdkDisplay *display, 245 int width, 246 int height); 247 248 extern const int _gdk_x11_event_mask_table[]; 249 extern const int _gdk_x11_event_mask_table_size; 250 251 #define GDK_SCREEN_DISPLAY(screen) (GDK_X11_SCREEN (screen)->display) 252 #define GDK_SCREEN_XROOTWIN(screen) (GDK_X11_SCREEN (screen)->xroot_window) 253 #define GDK_DISPLAY_XROOTWIN(display) (GDK_SCREEN_XROOTWIN (GDK_X11_DISPLAY (display)->screen)) 254 #define GDK_SURFACE_SCREEN(win) (GDK_X11_DISPLAY (gdk_surface_get_display (win))->screen) 255 #define GDK_SURFACE_DISPLAY(win) (gdk_surface_get_display (win)) 256 #define GDK_SURFACE_XROOTWIN(win) (GDK_X11_SCREEN (GDK_SURFACE_SCREEN (win))->xroot_window) 257 258 /* override some macros from gdkx.h with direct-access variants */ 259 #undef GDK_DISPLAY_XDISPLAY 260 #undef GDK_SURFACE_XDISPLAY 261 #undef GDK_SURFACE_XID 262 #undef GDK_SCREEN_XDISPLAY 263 264 #define GDK_DISPLAY_XDISPLAY(display) (GDK_X11_DISPLAY(display)->xdisplay) 265 #define GDK_SURFACE_XDISPLAY(win) (GDK_X11_SCREEN (GDK_SURFACE_SCREEN (win))->xdisplay) 266 #define GDK_SURFACE_XID(win) (GDK_X11_SURFACE (win)->xid) 267 #define GDK_SCREEN_XDISPLAY(screen) (GDK_X11_SCREEN (screen)->xdisplay) 268 269 #endif /* __GDK_PRIVATE_X11_H__ */ 270