gdkprivate.h 7.32 KB
Newer Older
Elliot Lee's avatar
Elliot Lee committed
1 2 3 4 5 6 7 8 9 10
/* 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 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
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the GNU
Elliot Lee's avatar
Elliot Lee committed
12 13 14
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
15 16 17
 * License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
Elliot Lee's avatar
Elliot Lee committed
18 19 20 21 22 23 24 25 26 27 28
 */
#ifndef __GDK_PRIVATE_H__
#define __GDK_PRIVATE_H__


#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <gdk/gdktypes.h>

#define DND_PROTOCOL_VERSION 0

29 30 31
#define gdk_window_lookup(xid)	   ((GdkWindow*) gdk_xid_table_lookup (xid))
#define gdk_pixmap_lookup(xid)	   ((GdkPixmap*) gdk_xid_table_lookup (xid))
#define gdk_font_lookup(xid)	   ((GdkFont*) gdk_xid_table_lookup (xid))
Elliot Lee's avatar
Elliot Lee committed
32 33 34 35 36 37 38


#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */


39 40
typedef struct _GdkWindowPrivate       GdkWindowPrivate;
typedef struct _GdkWindowPrivate       GdkPixmapPrivate;
41 42
typedef struct _GdkImagePrivate	       GdkImagePrivate;
typedef struct _GdkGCPrivate	       GdkGCPrivate;
43 44
typedef struct _GdkColormapPrivate     GdkColormapPrivate;
typedef struct _GdkVisualPrivate       GdkVisualPrivate;
45
typedef struct _GdkFontPrivate	       GdkFontPrivate;
46
typedef struct _GdkCursorPrivate       GdkCursorPrivate;
47
typedef struct _GdkEventFilter	       GdkEventFilter;
48
typedef struct _GdkColorContextPrivate GdkColorContextPrivate;
49
typedef struct _GdkRegionPrivate       GdkRegionPrivate;
Elliot Lee's avatar
Elliot Lee committed
50 51 52 53 54 55 56 57 58 59 60 61 62 63


struct _GdkWindowPrivate
{
  GdkWindow window;
  GdkWindow *parent;
  Window xwindow;
  Display *xdisplay;
  gint16 x;
  gint16 y;
  guint16 width;
  guint16 height;
  guint8 resize_count;
  guint8 window_type;
64
  guint ref_count;
65 66
  guint destroyed : 2;
  guint dnd_drag_enabled : 1,
Elliot Lee's avatar
Elliot Lee committed
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
    dnd_drag_datashow : 1,
    dnd_drag_destructive_op : 1,
    dnd_drag_accepted : 1,
    dnd_drop_enabled : 1,
    dnd_drop_destructive_op : 1;
  GdkAtom dnd_drag_data_type, *dnd_drag_data_typesavail;
  guint dnd_drag_data_numtypesavail;
  /* We have to turn on MotionMask/EnterWindowMask/LeaveWindowMask
     during drags, then set it back to what it was after */
  glong dnd_drag_savedeventmask, dnd_drag_eventmask;
  GdkAtom *dnd_drop_data_typesavail;
  guint dnd_drop_data_numtypesavail;
  /* need to allow custom drag/drop cursors */

  gint extension_events;
82 83

  GList *filters;
Elliot Lee's avatar
Elliot Lee committed
84 85 86 87 88 89 90 91 92 93
};

struct _GdkImagePrivate
{
  GdkImage image;
  XImage *ximage;
  Display *xdisplay;
  gpointer x_shm_info;

  void (*image_put) (GdkDrawable *window,
94 95 96 97 98 99 100 101
		     GdkGC	 *gc,
		     GdkImage	 *image,
		     gint	  xsrc,
		     gint	  ysrc,
		     gint	  xdest,
		     gint	  ydest,
		     gint	  width,
		     gint	  height);
Elliot Lee's avatar
Elliot Lee committed
102 103 104 105 106 107 108
};

struct _GdkGCPrivate
{
  GdkGC gc;
  GC xgc;
  Display *xdisplay;
109
  guint ref_count;
Elliot Lee's avatar
Elliot Lee committed
110 111 112 113 114 115 116 117 118 119
};

struct _GdkColormapPrivate
{
  GdkColormap colormap;
  Colormap xcolormap;
  Display *xdisplay;
  GdkVisual *visual;
  gint private_val;
  gint next_color;
120
  guint ref_count;
Elliot Lee's avatar
Elliot Lee committed
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
};

struct _GdkVisualPrivate
{
  GdkVisual visual;
  Visual *xvisual;
};

struct _GdkFontPrivate
{
  GdkFont font;
  /* XFontStruct *xfont; */
  /* generic pointer point to XFontStruct or XFontSet */
  gpointer xfont;
  Display *xdisplay;
136
  guint ref_count;
Elliot Lee's avatar
Elliot Lee committed
137 138 139 140 141 142 143 144 145
};

struct _GdkCursorPrivate
{
  GdkCursor cursor;
  Cursor xcursor;
  Display *xdisplay;
};

146
struct _GdkDndCursorInfo {
147 148 149
  Cursor	  gdk_cursor_dragdefault, gdk_cursor_dragok;
  GdkWindow	 *drag_pm_default, *drag_pm_ok;
  GdkPoint	  default_hotspot, ok_hotspot;
150
  GList *xids;
151 152 153
};
typedef struct _GdkDndCursorInfo GdkDndCursorInfo;

Elliot Lee's avatar
Elliot Lee committed
154
struct _GdkDndGlobals {
155 156 157
  GdkAtom	     gdk_XdeEnter, gdk_XdeLeave, gdk_XdeRequest;
  GdkAtom	     gdk_XdeDataAvailable, gdk_XdeDataShow, gdk_XdeCancel;
  GdkAtom	     gdk_XdeTypelist;
158 159

  GdkDndCursorInfo  *c;
160 161 162 163 164
  GdkWindow	**drag_startwindows;
  guint		  drag_numwindows;
  gboolean	  drag_really, drag_perhaps, dnd_grabbed;
  Window	  dnd_drag_target;
  GdkPoint	  drag_dropcoords;
165 166 167 168 169

  GdkPoint dnd_drag_start, dnd_drag_oldpos;
  GdkRectangle dnd_drag_dropzone;
  GdkWindowPrivate *real_sw;
  Window dnd_drag_curwin;
170
  Time last_drop_time; /* An incredible hack, sosumi miguel */
Elliot Lee's avatar
Elliot Lee committed
171 172 173
};
typedef struct _GdkDndGlobals GdkDndGlobals;

174 175 176 177
struct _GdkEventFilter {
  GdkFilterFunc function;
  gpointer data;
};
178 179 180

#ifdef USE_XIM

181
struct _GdkICPrivate
182 183 184 185
{
  XIC xic;
  GdkIMStyle style;
};
186

187 188 189 190
typedef struct _GdkICPrivate GdkICPrivate;

#endif /* USE_XIM */

191 192 193 194 195 196 197
struct _GdkColorContextPrivate
{
  GdkColorContext color_context;
  Display *xdisplay;
  XStandardColormap std_cmap;
};

198 199 200 201 202 203
struct _GdkRegionPrivate
{
  GdkRegion region;
  Region xregion;
};

204 205 206 207 208 209 210
typedef enum {
  GDK_DEBUG_MISC = 1<<0,
  GDK_DEBUG_EVENTS = 1 << 1,
  GDK_DEBUG_DND = 1<<2,
  GDK_DEBUG_COLOR_CONTEXT = 1<<3,
  GDK_DEBUG_XIM = 1<<4
} GdkDebugFlag;
211

Elliot Lee's avatar
Elliot Lee committed
212 213 214 215 216 217 218
void gdk_window_init (void);
void gdk_visual_init (void);

void gdk_image_init  (void);
void gdk_image_exit (void);

GdkColormap* gdk_colormap_lookup (Colormap  xcolormap);
219
GdkVisual*   gdk_visual_lookup	 (Visual   *xvisual);
Elliot Lee's avatar
Elliot Lee committed
220 221

void gdk_window_add_colormap_windows (GdkWindow *window);
222
void gdk_window_destroy_notify	     (GdkWindow *window);
Elliot Lee's avatar
Elliot Lee committed
223

224 225 226 227
void	 gdk_xid_table_insert (XID	*xid,
			       gpointer	 data);
void	 gdk_xid_table_remove (XID	 xid);
gpointer gdk_xid_table_lookup (XID	 xid);
Elliot Lee's avatar
Elliot Lee committed
228

229 230 231
gint gdk_send_xevent (Window window, gboolean propagate, glong event_mask,
		      XEvent *event_send);

232 233 234 235 236 237 238 239 240 241
/* If you pass x = y = -1, it queries the pointer
   to find out where it currently is.
   If you pass x = y = -2, it does anything necessary
   to know that the drag is ending.
*/
void gdk_dnd_display_drag_cursor(gint x,
				 gint y,
				 gboolean drag_ok,
				 gboolean change_made);

rhlabs's avatar
rhlabs committed
242
/* Please see gdkwindow.c for comments on how to use */ 
rhlabs's avatar
rhlabs committed
243 244
Window gdk_window_xid_at(Window base, gint bx, gint by, gint x, gint y, GList *excludes, gboolean excl_child);
Window gdk_window_xid_at_coords(gint x, gint y, GList *excludes, gboolean excl_child);
Elliot Lee's avatar
Elliot Lee committed
245

246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266
extern gint		 gdk_debug_level;
extern gint		 gdk_show_events;
extern gint		 gdk_use_xshm;
extern gint		 gdk_stack_trace;
extern gchar		*gdk_display_name;
extern Display		*gdk_display;
extern gint		 gdk_screen;
extern Window		 gdk_root_window;
extern Window		 gdk_leader_window;
extern GdkWindowPrivate	 gdk_root_parent;
extern Atom		 gdk_wm_delete_window;
extern Atom		 gdk_wm_take_focus;
extern Atom		 gdk_wm_protocols;
extern Atom		 gdk_wm_window_protocols[];
extern Atom		 gdk_selection_property;
extern GdkDndGlobals	 gdk_dnd;
extern GdkWindow	*selection_owner[];
extern gchar		*gdk_progname;
extern gchar		*gdk_progclass;
extern gint		 gdk_error_code;
extern gint		 gdk_error_warnings;
267
extern gint              gdk_null_window_warnings;
268
extern GList            *gdk_default_filters;
Elliot Lee's avatar
Elliot Lee committed
269

270 271 272 273
/* Debugging support */

#ifdef G_ENABLE_DEBUG

274 275 276
#define GDK_NOTE(type,action)		     G_STMT_START { \
    if (gdk_debug_flags & GDK_DEBUG_##type)		    \
       { action; };			     } G_STMT_END
277 278 279 280 281 282 283 284 285

#else /* !G_ENABLE_DEBUG */

#define GDK_NOTE(type,action)
      
#endif /* G_ENABLE_DEBUG */

extern guint gdk_debug_flags;

Elliot Lee's avatar
Elliot Lee committed
286 287 288 289 290 291 292

#ifdef __cplusplus
}
#endif /* __cplusplus */


#endif /* __GDK_PRIVATE_H__ */