gdkdisplay-x11.h 4.93 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
/*
 * gdkdisplay-x11.h
 * 
 * Copyright 2001 Sun Microsystems Inc. 
 *
 * Erwann Chenede <erwann.chenede@sun.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library 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
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library 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.
 */

#ifndef __GDK_DISPLAY_X11__
#define __GDK_DISPLAY_X11__

#include <X11/X.h>
#include <X11/Xlib.h>
#include <glib.h>
#include <gdk/gdkdisplay.h>
#include <gdk/gdkkeys.h>
#include <gdk/gdkwindow.h>
#include <gdk/gdk.h>		/* For gdk_get_program_class() */

G_BEGIN_DECLS

typedef struct _GdkDisplayX11 GdkDisplayX11;
typedef struct _GdkDisplayX11Class GdkDisplayX11Class;

40
#define GDK_TYPE_DISPLAY_X11              (_gdk_display_x11_get_type())
41 42 43 44 45 46
#define GDK_DISPLAY_X11(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DISPLAY_X11, GdkDisplayX11))
#define GDK_DISPLAY_X11_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DISPLAY_X11, GdkDisplayX11Class))
#define GDK_IS_DISPLAY_X11(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_DISPLAY_X11))
#define GDK_IS_DISPLAY_X11_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_DISPLAY_X11))
#define GDK_DISPLAY_X11_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_DISPLAY_X11, GdkDisplayX11Class))

Owen Taylor's avatar
Owen Taylor committed
47 48 49 50 51 52 53
typedef enum 
{
  GDK_UNKNOWN,
  GDK_NO,
  GDK_YES
} GdkTristate;

54 55 56 57 58
struct _GdkDisplayX11
{
  GdkDisplay parent_instance;
  Display *xdisplay;
  GdkScreen *default_screen;
59
  GdkScreen **screens;
60

61 62
  GSource *event_source;

63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
  gint grab_count;

  /* Keyboard related information */

  gint xkb_event_type;
  gboolean use_xkb;
  
  /* Whether we were able to turn on detectable-autorepeat using
   * XkbSetDetectableAutorepeat. If FALSE, we'll fall back
   * to checking the next event with XPending(). */
  gboolean have_xkb_autorepeat;

  GdkKeymap *keymap;
  guint	    keymap_serial;

  gboolean use_xshm;
  gboolean have_shm_pixmaps;
80
  GdkTristate have_render;
Matthias Clasen's avatar
Matthias Clasen committed
81 82 83
  gboolean have_xfixes;
  gint xfixes_event_base;

84 85 86 87 88
  /* If the SECURITY extension is in place, whether this client holds 
   * a trusted authorization and so is allowed to make various requests 
   * (grabs, properties etc.) Otherwise always TRUE. */
  gboolean trusted_client;

89 90 91 92 93 94 95
  /* Information about current pointer and keyboard grabs held by this
   * client. If gdk_pointer_xgrab_window or gdk_keyboard_xgrab_window
   * window is NULL, then the other associated fields are ignored
   */
  GdkWindowObject *pointer_xgrab_window;
  gulong pointer_xgrab_serial;
  gboolean pointer_xgrab_owner_events;
Matthias Clasen's avatar
Matthias Clasen committed
96
  gboolean pointer_xgrab_implicit;
Matthias Clasen's avatar
Matthias Clasen committed
97
  guint32 pointer_xgrab_time;
98 99 100 101

  GdkWindowObject *keyboard_xgrab_window;
  gulong keyboard_xgrab_serial;
  gboolean keyboard_xgrab_owner_events;
Matthias Clasen's avatar
Matthias Clasen committed
102
  guint32 keyboard_xgrab_time;
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120

  /* drag and drop information */
  GdkDragContext *current_dest_drag;

  /* data needed for MOTIF DnD */

  Window motif_drag_window;
  GdkWindow *motif_drag_gdk_window;
  GList **motif_target_lists;
  gint motif_n_target_lists;

  /* Mapping to/from virtual atoms */

  GHashTable *atom_from_virtual;
  GHashTable *atom_to_virtual;

  /* Session Management leader window see ICCCM */
  Window leader_window;
121
  GdkWindow *leader_gdk_window;
122
  gboolean leader_window_title_set;
123 124
  
  /* list of filters for client messages */
125 126 127 128
  GList *client_filters;

  /* List of functions to go from extension event => X window */
  GSList *event_types;
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
  
  /* X ID hashtable */
  GHashTable *xid_ht;

  /* translation queue */
  GQueue *translate_queue;

  /* Input device */
  /* input GdkDevice list */
  GList *input_devices;

  /* input GdkWindow list */
  GList *input_windows;

  gint input_ignore_core;
  /* information about network port and host for gxid daemon */
  gchar *input_gxid_host;
  gint   input_gxid_port;

148 149
  /* Startup notification */
  gchar *startup_notification_id;
150

151 152 153
  /* Time of most recent user interaction. */
  gulong user_time;

154 155 156 157
  /* Sets of atoms for DND */
  guint base_dnd_atoms_precached : 1;
  guint xdnd_atoms_precached : 1;
  guint motif_atoms_precached : 1;
158
  guint use_sync : 1;
159

160 161 162
  guint have_shapes : 1;
  guint have_input_shapes : 1;

163 164
  /* Alpha mask picture format */
  XRenderPictFormat *mask_format;
165 166 167 168 169 170 171
};

struct _GdkDisplayX11Class
{
  GdkDisplayClass parent_class;
};

172
GType      _gdk_display_x11_get_type            (void);
173 174 175 176 177 178
GdkScreen *_gdk_x11_display_screen_for_xrootwin (GdkDisplay *display,
						 Window      xrootwin);

G_END_DECLS

#endif				/* __GDK_DISPLAY_X11__ */