summaryrefslogtreecommitdiff
path: root/gdk/x11
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>1999-11-08 20:14:59 +0000
committerOwen Taylor <otaylor@src.gnome.org>1999-11-08 20:14:59 +0000
commite9b6bfcc01c0d76c2e5392a0d332bd0d00544ae7 (patch)
treef2f741cf95b0b49eabf3a756a404413724c5d248 /gdk/x11
parentcd02981bf22833edfca5c5af03278f5701246411 (diff)
downloadgtk+-e9b6bfcc01c0d76c2e5392a0d332bd0d00544ae7.tar.gz
Move all X specific code into the x11/ directory. Aside from shuffling
Mon Nov 8 14:47:04 1999 Owen Taylor <otaylor@redhat.com> Move all X specific code into the x11/ directory. Aside from shuffling things around, did the following: * gdk/gdkprivate.h gdk/gdk.h gdk/x11/gdkmain-x11.h: Add gdk_arg_context_* - a simple argument parsing system in the style of popt. * gdk/gdkdrawable.[ch] gdk/gdkprivate.h gdk/gdkwindow.[ch] gdk/x11/gdkprivate-x11.h: Remove X specific stuff from GdkDrawable and GdkWindowPrivate - add ->klass and ->klass_data fields. The klass_data field points to an auxilliary structure that is windowing system dependent. * gdk/gdkfont.c: Make most of the measurement functions simply wrappers around gdk_text_extents(). * gdk/gdkfont.c gdk/gdkprivate.h gdk/x11/gdkfont-x11.c: Add a _gdk_font_strlen() function that hides the weird behavior in gtk+-1.[02] where a string is interpreted differently for 8-bit and 16-bit fonts. * gdk/gdkevents.c: Add a new function gdk_event_button_generate() to store common code for synthesizing double/triple press events. * gdk/gdkgc.[ch]: Virtualize in the same way as gdkdrawable.h. Make all the function that modify an existing GC simply wrappers around gdk_gc_set_values(). * gdk/gdkcc.[ch]: Moved into x11/ directory in preparation for throwing out later. * gdk/gdkfont.c gdk/gdkimage.c gdk/gdkcolor.c: Change GdkFontPrivate, GdkImagePrivate and GdkColormapPrivate to have a windowing system dependent part (GdkFontPrivateX etc.) that "derives" from the system-independent part. * configure.in gdk/x11/Makefile.in gdk/x11/gdkinput*.c: Got rid of the included-source-files for XInput in favor of automake conditionals. (Which didn't exist when XInput support was originally added.) * gdk/gdkrgb.c: Remove the visual id from the debugging statements since that is X11 specific; print out type/depth info instead.
Diffstat (limited to 'gdk/x11')
-rw-r--r--gdk/x11/Makefile.am49
-rw-r--r--gdk/x11/gdkcc-x11.c1
-rw-r--r--gdk/x11/gdkcolor-x11.c314
-rw-r--r--gdk/x11/gdkcursor-x11.c2
-rw-r--r--gdk/x11/gdkdnd-x11.c128
-rw-r--r--gdk/x11/gdkdrawable-x11.c409
-rw-r--r--gdk/x11/gdkevents-x11.c584
-rw-r--r--gdk/x11/gdkfont-x11.c415
-rw-r--r--gdk/x11/gdkgc-x11.c505
-rw-r--r--gdk/x11/gdkglobals-x11.c40
-rw-r--r--gdk/x11/gdkimage-x11.c117
-rw-r--r--gdk/x11/gdkinput-gxi.c4
-rw-r--r--gdk/x11/gdkinput-none.c4
-rw-r--r--gdk/x11/gdkinput-x11.c77
-rw-r--r--gdk/x11/gdkinput-xfree.c15
-rw-r--r--gdk/x11/gdkinput.c33
-rw-r--r--gdk/x11/gdkinputprivate.h65
-rw-r--r--gdk/x11/gdkmain-x11.c680
-rw-r--r--gdk/x11/gdkpixmap-x11.c165
-rw-r--r--gdk/x11/gdkprivate-x11.h158
-rw-r--r--gdk/x11/gdkproperty-x11.c23
-rw-r--r--gdk/x11/gdkregion-x11.c6
-rw-r--r--gdk/x11/gdkvisual-x11.c2
-rw-r--r--gdk/x11/gdkwindow-x11.c703
-rw-r--r--gdk/x11/gdkx.h27
-rw-r--r--gdk/x11/gdkxid.c2
26 files changed, 1906 insertions, 2622 deletions
diff --git a/gdk/x11/Makefile.am b/gdk/x11/Makefile.am
index 1da1965a55..6f9c12e429 100644
--- a/gdk/x11/Makefile.am
+++ b/gdk/x11/Makefile.am
@@ -3,6 +3,7 @@
INCLUDES = @STRIP_BEGIN@ \
-DG_LOG_DOMAIN=\"Gdk\" \
-I$(top_srcdir) \
+ -I$(top_srcdir)/gdk \
@GTK_DEBUG_FLAGS@ \
@GTK_XIM_FLAGS@ \
@GTK_LOCALE_FLAGS@ \
@@ -19,10 +20,47 @@ LDADDS = @STRIP_BEGIN@ \
noinst_LTLIBRARIES = libgdk-x11.la
-libgdk_x11_la_SOURCES = \
- gxid_lib.c \
- gxid_lib.h \
- gxid_proto.h
+if XINPUT_GXI
+xinput_sources = \
+ gdkinput-x11.c \
+ gdkinput-gxi.c
+else
+if XINPUT_XFREE
+xinput_sources = \
+ gdkinput-x11.c \
+ gdkinput-xfree.c
+else
+xinput_sources =
+ gdkinput-none.c
+endif
+endif
+
+libgdk_x11_la_SOURCES = \
+ MwmUtil.h \
+ gdkcc-x11.c \
+ gdkcolor-x11.c \
+ gdkcursor-x11.c \
+ gdkdnd-x11.c \
+ gdkdrawable-x11.c \
+ gdkevents-x11.c \
+ gdkfont-x11.c \
+ gdkgc-x11.c \
+ gdkglobals-x11.c \
+ gdkim-x11.c \
+ gdkimage-x11.c \
+ gdkinput.c \
+ gdkmain-x11.c \
+ gdkpixmap-x11.c \
+ gdkproperty-x11.c \
+ gdkregion-x11.c \
+ gdkselection-x11.c \
+ gdkvisual-x11.c \
+ gdkwindow-x11.c \
+ gdkxid.c \
+ gxid_lib.c \
+ gxid_lib.h \
+ gxid_proto.h \
+ $(xinput_sources)
EXTRA_PROGRAMS = gxid
bin_PROGRAMS = @xinput_progs@
@@ -30,7 +68,4 @@ bin_PROGRAMS = @xinput_progs@
gxid_SOURCES = gxid.c
gxid_LDADD = $(LDADDS)
-#EXTRA_DIST = \
-# MwmUtil.h \
-
diff --git a/gdk/x11/gdkcc-x11.c b/gdk/x11/gdkcc-x11.c
index f592fa8e54..91e873453b 100644
--- a/gdk/x11/gdkcc-x11.c
+++ b/gdk/x11/gdkcc-x11.c
@@ -61,6 +61,7 @@
*/
#include <X11/Xlib.h>
+#include <X11/Xutil.h>
#include <stdlib.h>
#include <string.h>
diff --git a/gdk/x11/gdkcolor-x11.c b/gdk/x11/gdkcolor-x11.c
index 03222cc3d6..26994cbe8b 100644
--- a/gdk/x11/gdkcolor-x11.c
+++ b/gdk/x11/gdkcolor-x11.c
@@ -25,11 +25,9 @@
*/
#include <time.h>
-#include <X11/Xlib.h>
#include "gdkcolor.h"
-#include "gdkprivate.h"
-
+#include "gdkx.h"
static gint gdk_colormap_match_color (GdkColormap *cmap,
GdkColor *color,
@@ -39,7 +37,6 @@ static void gdk_colormap_remove (GdkColormap *cmap);
static guint gdk_colormap_hash (Colormap *cmap);
static gint gdk_colormap_cmp (Colormap *a,
Colormap *b);
-static void gdk_colormap_real_destroy (GdkColormap *colormap);
static GHashTable *colormap_hash = NULL;
@@ -49,19 +46,19 @@ gdk_colormap_new (GdkVisual *visual,
gint private_cmap)
{
GdkColormap *colormap;
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
Visual *xvisual;
int size;
int i;
g_return_val_if_fail (visual != NULL, NULL);
- private = g_new (GdkColormapPrivate, 1);
+ private = g_new (GdkColormapPrivateX, 1);
colormap = (GdkColormap*) private;
private->xdisplay = gdk_display;
- private->visual = visual;
- private->ref_count = 1;
+ private->base.visual = visual;
+ private->base.ref_count = 1;
private->hash = NULL;
private->last_sync_time = 0;
@@ -148,13 +145,10 @@ gdk_colormap_new (GdkVisual *visual,
return colormap;
}
-static void
-gdk_colormap_real_destroy (GdkColormap *colormap)
+void
+_gdk_colormap_real_destroy (GdkColormap *colormap)
{
- GdkColormapPrivate *private = (GdkColormapPrivate*) colormap;
-
- g_return_if_fail (colormap != NULL);
- g_return_if_fail (private->ref_count == 0);
+ GdkColormapPrivateX *private = (GdkColormapPrivateX*) colormap;
gdk_colormap_remove (colormap);
XFreeColormap (private->xdisplay, private->xcolormap);
@@ -167,42 +161,6 @@ gdk_colormap_real_destroy (GdkColormap *colormap)
g_free (colormap);
}
-GdkColormap*
-gdk_colormap_ref (GdkColormap *cmap)
-{
- GdkColormapPrivate *private = (GdkColormapPrivate *)cmap;
-
- g_return_val_if_fail (cmap != NULL, NULL);
-
- private->ref_count += 1;
- return cmap;
-}
-
-void
-gdk_colormap_unref (GdkColormap *cmap)
-{
- GdkColormapPrivate *private = (GdkColormapPrivate *)cmap;
-
- g_return_if_fail (cmap != NULL);
- g_return_if_fail (private->ref_count > 0);
-
- private->ref_count -= 1;
- if (private->ref_count == 0)
- gdk_colormap_real_destroy (cmap);
-}
-
-GdkVisual *
-gdk_colormap_get_visual (GdkColormap *colormap)
-{
- GdkColormapPrivate *private;
-
- g_return_val_if_fail (colormap != NULL, NULL);
-
- private = (GdkColormapPrivate *)colormap;
-
- return private->visual;
-}
-
#define MIN_SYNC_TIME 2
void
@@ -210,7 +168,7 @@ gdk_colormap_sync (GdkColormap *colormap,
gboolean force)
{
time_t current_time;
- GdkColormapPrivate *private = (GdkColormapPrivate *)colormap;
+ GdkColormapPrivateX *private = (GdkColormapPrivateX *)colormap;
XColor *xpalette;
gint nlookup;
gint i;
@@ -257,28 +215,28 @@ GdkColormap*
gdk_colormap_get_system (void)
{
static GdkColormap *colormap = NULL;
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
if (!colormap)
{
- private = g_new (GdkColormapPrivate, 1);
+ private = g_new (GdkColormapPrivateX, 1);
colormap = (GdkColormap*) private;
private->xdisplay = gdk_display;
private->xcolormap = DefaultColormap (gdk_display, gdk_screen);
- private->visual = gdk_visual_get_system ();
+ private->base.visual = gdk_visual_get_system ();
private->private_val = FALSE;
- private->ref_count = 1;
+ private->base.ref_count = 1;
private->hash = NULL;
private->last_sync_time = 0;
private->info = NULL;
colormap->colors = NULL;
- colormap->size = private->visual->colormap_size;
+ colormap->size = private->base.visual->colormap_size;
- if ((private->visual->type == GDK_VISUAL_GRAYSCALE) ||
- (private->visual->type == GDK_VISUAL_PSEUDO_COLOR))
+ if ((private->base.visual->type == GDK_VISUAL_GRAYSCALE) ||
+ (private->base.visual->type == GDK_VISUAL_PSEUDO_COLOR))
{
private->info = g_new0 (GdkColorInfo, colormap->size);
colormap->colors = g_new (GdkColor, colormap->size);
@@ -305,7 +263,7 @@ void
gdk_colormap_change (GdkColormap *colormap,
gint ncolors)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
GdkVisual *visual;
XColor *palette;
gint shift;
@@ -317,8 +275,8 @@ gdk_colormap_change (GdkColormap *colormap,
palette = g_new (XColor, ncolors);
- private = (GdkColormapPrivate*) colormap;
- switch (private->visual->type)
+ private = (GdkColormapPrivateX*) colormap;
+ switch (private->base.visual->type)
{
case GDK_VISUAL_GRAYSCALE:
case GDK_VISUAL_PSEUDO_COLOR:
@@ -335,7 +293,7 @@ gdk_colormap_change (GdkColormap *colormap,
break;
case GDK_VISUAL_DIRECT_COLOR:
- visual = private->visual;
+ visual = private->base.visual;
shift = visual->red_shift;
max_colors = 1 << visual->red_prec;
@@ -384,24 +342,6 @@ gdk_colormap_change (GdkColormap *colormap,
g_free (palette);
}
-void
-gdk_colors_store (GdkColormap *colormap,
- GdkColor *colors,
- gint ncolors)
-{
- gint i;
-
- for (i = 0; i < ncolors; i++)
- {
- colormap->colors[i].pixel = colors[i].pixel;
- colormap->colors[i].red = colors[i].red;
- colormap->colors[i].green = colors[i].green;
- colormap->colors[i].blue = colors[i].blue;
- }
-
- gdk_colormap_change (colormap, ncolors);
-}
-
gboolean
gdk_colors_alloc (GdkColormap *colormap,
gint contiguous,
@@ -410,13 +350,13 @@ gdk_colors_alloc (GdkColormap *colormap,
gulong *pixels,
gint npixels)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
gint return_val;
gint i;
g_return_val_if_fail (colormap != NULL, 0);
- private = (GdkColormapPrivate*) colormap;
+ private = (GdkColormapPrivateX*) colormap;
return_val = XAllocColorCells (private->xdisplay, private->xcolormap,
contiguous, planes, nplanes, pixels, npixels);
@@ -433,108 +373,6 @@ gdk_colors_alloc (GdkColormap *colormap,
return return_val != 0;
}
-/*
- *--------------------------------------------------------------
- * gdk_color_copy
- *
- * Copy a color structure into new storage.
- *
- * Arguments:
- * "color" is the color struct to copy.
- *
- * Results:
- * A new color structure. Free it with gdk_color_free.
- *
- *--------------------------------------------------------------
- */
-
-static GMemChunk *color_chunk;
-
-GdkColor*
-gdk_color_copy (GdkColor *color)
-{
- GdkColor *new_color;
-
- g_return_val_if_fail (color != NULL, NULL);
-
- if (color_chunk == NULL)
- color_chunk = g_mem_chunk_new ("colors",
- sizeof (GdkColor),
- 4096,
- G_ALLOC_AND_FREE);
-
- new_color = g_chunk_new (GdkColor, color_chunk);
- *new_color = *color;
- return new_color;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_color_free
- *
- * Free a color structure obtained from gdk_color_copy. Do not use
- * with other color structures.
- *
- * Arguments:
- * "color" is the color struct to free.
- *
- *-------------------------------------------------------------- */
-
-void
-gdk_color_free (GdkColor *color)
-{
- g_assert (color_chunk != NULL);
- g_return_if_fail (color != NULL);
-
- g_mem_chunk_free (color_chunk, color);
-}
-
-gboolean
-gdk_color_white (GdkColormap *colormap,
- GdkColor *color)
-{
- gint return_val;
-
- g_return_val_if_fail (colormap != NULL, FALSE);
-
- if (color)
- {
- color->pixel = WhitePixel (gdk_display, gdk_screen);
- color->red = 65535;
- color->green = 65535;
- color->blue = 65535;
-
- return_val = gdk_color_alloc (colormap, color);
- }
- else
- return_val = FALSE;
-
- return return_val;
-}
-
-gboolean
-gdk_color_black (GdkColormap *colormap,
- GdkColor *color)
-{
- gint return_val;
-
- g_return_val_if_fail (colormap != NULL, FALSE);
-
- if (color)
- {
- color->pixel = BlackPixel (gdk_display, gdk_screen);
- color->red = 0;
- color->green = 0;
- color->blue = 0;
-
- return_val = gdk_color_alloc (colormap, color);
- }
- else
- return_val = FALSE;
-
- return return_val;
-}
-
gboolean
gdk_color_parse (const gchar *spec,
GdkColor *color)
@@ -570,7 +408,7 @@ gdk_colors_free (GdkColormap *colormap,
gint in_npixels,
gulong planes)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
gulong *pixels;
gint npixels = 0;
gint i;
@@ -578,10 +416,10 @@ gdk_colors_free (GdkColormap *colormap,
g_return_if_fail (colormap != NULL);
g_return_if_fail (in_pixels != NULL);
- private = (GdkColormapPrivate*) colormap;
+ private = (GdkColormapPrivateX*) colormap;
- if ((private->visual->type != GDK_VISUAL_PSEUDO_COLOR) &&
- (private->visual->type != GDK_VISUAL_GRAYSCALE))
+ if ((private->base.visual->type != GDK_VISUAL_PSEUDO_COLOR) &&
+ (private->base.visual->type != GDK_VISUAL_GRAYSCALE))
return;
pixels = g_new (gulong, in_npixels);
@@ -618,7 +456,7 @@ gdk_colormap_free_colors (GdkColormap *colormap,
GdkColor *colors,
gint ncolors)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
gulong *pixels;
gint npixels = 0;
gint i;
@@ -626,10 +464,10 @@ gdk_colormap_free_colors (GdkColormap *colormap,
g_return_if_fail (colormap != NULL);
g_return_if_fail (colors != NULL);
- private = (GdkColormapPrivate*) colormap;
+ private = (GdkColormapPrivateX*) colormap;
- if ((private->visual->type != GDK_VISUAL_PSEUDO_COLOR) &&
- (private->visual->type != GDK_VISUAL_GRAYSCALE))
+ if ((private->base.visual->type != GDK_VISUAL_PSEUDO_COLOR) &&
+ (private->base.visual->type != GDK_VISUAL_GRAYSCALE))
return;
pixels = g_new (gulong, ncolors);
@@ -671,10 +509,10 @@ gdk_colormap_alloc1 (GdkColormap *colormap,
GdkColor *color,
GdkColor *ret)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
XColor xcolor;
- private = (GdkColormapPrivate*) colormap;
+ private = (GdkColormapPrivateX*) colormap;
xcolor.red = color->red;
xcolor.green = color->green;
@@ -723,12 +561,12 @@ gdk_colormap_alloc_colors_writeable (GdkColormap *colormap,
gboolean best_match,
gboolean *success)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
gulong *pixels;
Status status;
gint i, index;
- private = (GdkColormapPrivate*) colormap;
+ private = (GdkColormapPrivateX*) colormap;
if (private->private_val)
{
@@ -781,13 +619,13 @@ gdk_colormap_alloc_colors_private (GdkColormap *colormap,
gboolean best_match,
gboolean *success)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
gint i, index;
XColor *store = g_new (XColor, ncolors);
gint nstore = 0;
gint nremaining = 0;
- private = (GdkColormapPrivate*) colormap;
+ private = (GdkColormapPrivateX*) colormap;
index = -1;
/* First, store the colors we have room for */
@@ -860,12 +698,12 @@ gdk_colormap_alloc_colors_shared (GdkColormap *colormap,
gboolean best_match,
gboolean *success)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
gint i, index;
gint nremaining = 0;
gint nfailed = 0;
- private = (GdkColormapPrivate*) colormap;
+ private = (GdkColormapPrivateX*) colormap;
index = -1;
for (i=0; i<ncolors; i++)
@@ -952,12 +790,12 @@ gdk_colormap_alloc_colors_pseudocolor (GdkColormap *colormap,
gboolean best_match,
gboolean *success)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
GdkColor *lookup_color;
gint i;
gint nremaining = 0;
- private = (GdkColormapPrivate*) colormap;
+ private = (GdkColormapPrivateX*) colormap;
/* Check for an exact match among previously allocated colors */
@@ -999,7 +837,7 @@ gdk_colormap_alloc_colors (GdkColormap *colormap,
gboolean best_match,
gboolean *success)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
GdkVisual *visual;
gint i;
gint nremaining = 0;
@@ -1008,14 +846,14 @@ gdk_colormap_alloc_colors (GdkColormap *colormap,
g_return_val_if_fail (colormap != NULL, FALSE);
g_return_val_if_fail (colors != NULL, FALSE);
- private = (GdkColormapPrivate*) colormap;
+ private = (GdkColormapPrivateX*) colormap;
for (i=0; i<ncolors; i++)
{
success[i] = FALSE;
}
- switch (private->visual->type)
+ switch (private->base.visual->type)
{
case GDK_VISUAL_PSEUDO_COLOR:
case GDK_VISUAL_GRAYSCALE:
@@ -1029,7 +867,7 @@ gdk_colormap_alloc_colors (GdkColormap *colormap,
case GDK_VISUAL_DIRECT_COLOR:
case GDK_VISUAL_TRUE_COLOR:
- visual = private->visual;
+ visual = private->base.visual;
for (i=0; i<ncolors; i++)
{
@@ -1064,35 +902,10 @@ gdk_colormap_alloc_colors (GdkColormap *colormap,
}
gboolean
-gdk_colormap_alloc_color (GdkColormap *colormap,
- GdkColor *color,
- gboolean writeable,
- gboolean best_match)
-{
- gboolean success;
-
- gdk_colormap_alloc_colors (colormap, color, 1, writeable, best_match,
- &success);
-
- return success;
-}
-
-gboolean
-gdk_color_alloc (GdkColormap *colormap,
- GdkColor *color)
-{
- gboolean success;
-
- gdk_colormap_alloc_colors (colormap, color, 1, FALSE, TRUE, &success);
-
- return success;
-}
-
-gboolean
gdk_color_change (GdkColormap *colormap,
GdkColor *color)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
XColor xcolor;
g_return_val_if_fail (colormap != NULL, FALSE);
@@ -1104,33 +917,12 @@ gdk_color_change (GdkColormap *colormap,
xcolor.blue = color->blue;
xcolor.flags = DoRed | DoGreen | DoBlue;
- private = (GdkColormapPrivate*) colormap;
+ private = (GdkColormapPrivateX*) colormap;
XStoreColor (private->xdisplay, private->xcolormap, &xcolor);
return TRUE;
}
-guint
-gdk_color_hash (const GdkColor *colora)
-{
- return ((colora->red) +
- (colora->green << 11) +
- (colora->blue << 22) +
- (colora->blue >> 6));
-}
-
-gint
-gdk_color_equal (const GdkColor *colora,
- const GdkColor *colorb)
-{
- g_return_val_if_fail (colora != NULL, FALSE);
- g_return_val_if_fail (colorb != NULL, FALSE);
-
- return ((colora->red == colorb->red) &&
- (colora->green == colorb->green) &&
- (colora->blue == colorb->blue));
-}
-
/* XXX: Do not use this function until it is fixed. An X Colormap
* is useless unless we also have the visual.
*/
@@ -1138,7 +930,7 @@ GdkColormap*
gdkx_colormap_get (Colormap xcolormap)
{
GdkColormap *colormap;
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
colormap = gdk_colormap_lookup (xcolormap);
if (colormap)
@@ -1147,12 +939,12 @@ gdkx_colormap_get (Colormap xcolormap)
if (xcolormap == DefaultColormap (gdk_display, gdk_screen))
return gdk_colormap_get_system ();
- private = g_new (GdkColormapPrivate, 1);
+ private = g_new (GdkColormapPrivateX, 1);
colormap = (GdkColormap*) private;
private->xdisplay = gdk_display;
private->xcolormap = xcolormap;
- private->visual = NULL;
+ private->base.visual = NULL;
private->private_val = TRUE;
/* To do the following safely, we would have to have some way of finding
@@ -1243,13 +1035,13 @@ gdk_colormap_lookup (Colormap xcolormap)
static void
gdk_colormap_add (GdkColormap *cmap)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
if (!colormap_hash)
colormap_hash = g_hash_table_new ((GHashFunc) gdk_colormap_hash,
(GCompareFunc) gdk_colormap_cmp);
- private = (GdkColormapPrivate*) cmap;
+ private = (GdkColormapPrivateX*)cmap;
g_hash_table_insert (colormap_hash, &private->xcolormap, cmap);
}
@@ -1257,13 +1049,13 @@ gdk_colormap_add (GdkColormap *cmap)
static void
gdk_colormap_remove (GdkColormap *cmap)
{
- GdkColormapPrivate *private;
+ GdkColormapPrivateX *private;
if (!colormap_hash)
colormap_hash = g_hash_table_new ((GHashFunc) gdk_colormap_hash,
(GCompareFunc) gdk_colormap_cmp);
- private = (GdkColormapPrivate*) cmap;
+ private = (GdkColormapPrivateX *)cmap;
g_hash_table_remove (colormap_hash, &private->xcolormap);
}
diff --git a/gdk/x11/gdkcursor-x11.c b/gdk/x11/gdkcursor-x11.c
index 04260a2cde..66d0f34ddc 100644
--- a/gdk/x11/gdkcursor-x11.c
+++ b/gdk/x11/gdkcursor-x11.c
@@ -29,8 +29,6 @@
#include "gdkx.h"
#include "gdkcursor.h"
-#include "gdkprivate.h"
-
GdkCursor*
gdk_cursor_new (GdkCursorType cursor_type)
diff --git a/gdk/x11/gdkdnd-x11.c b/gdk/x11/gdkdnd-x11.c
index a58da225b1..653f2086d4 100644
--- a/gdk/x11/gdkdnd-x11.c
+++ b/gdk/x11/gdkdnd-x11.c
@@ -201,12 +201,12 @@ gdk_drag_context_find (gboolean is_source,
context_dest_xid = context->dest_window ?
(private->drop_xid ?
private->drop_xid :
- GDK_WINDOW_XWINDOW (context->dest_window)) :
+ GDK_DRAWABLE_XID (context->dest_window)) :
None;
if ((!context->is_source == !is_source) &&
((source_xid == None) || (context->source_window &&
- (GDK_WINDOW_XWINDOW (context->source_window) == source_xid))) &&
+ (GDK_DRAWABLE_XID (context->source_window) == source_xid))) &&
((dest_xid == None) || (context_dest_xid == dest_xid)))
return context;
@@ -372,7 +372,7 @@ gdk_window_cache_new (void)
result->old_event_mask = xwa.your_event_mask;
XSelectInput (gdk_display, gdk_root_window,
result->old_event_mask | SubstructureNotifyMask);
- gdk_window_add_filter ((GdkWindow *)&gdk_root_parent,
+ gdk_window_add_filter (gdk_parent_root,
gdk_window_cache_filter, result);
gdk_error_code = 0;
@@ -411,7 +411,7 @@ static void
gdk_window_cache_destroy (GdkWindowCache *cache)
{
XSelectInput (gdk_display, gdk_root_window, cache->old_event_mask);
- gdk_window_remove_filter ((GdkWindow *)&gdk_root_parent,
+ gdk_window_remove_filter (gdk_parent_root,
gdk_window_cache_filter, cache);
g_list_foreach (cache->children, (GFunc)g_free, NULL);
@@ -1273,8 +1273,8 @@ motif_set_targets (GdkDragContext *context)
info.selection_atom = private->motif_selection;
- XChangeProperty (GDK_WINDOW_XDISPLAY (context->source_window),
- GDK_WINDOW_XWINDOW (context->source_window),
+ XChangeProperty (GDK_DRAWABLE_XDISPLAY (context->source_window),
+ GDK_DRAWABLE_XID (context->source_window),
private->motif_selection,
motif_drag_initiator_info, 8, PropModeReplace,
(guchar *)&info, sizeof (info));
@@ -1333,24 +1333,24 @@ motif_send_enter (GdkDragContext *context,
xev.xclient.type = ClientMessage;
xev.xclient.message_type = gdk_atom_intern ("_MOTIF_DRAG_AND_DROP_MESSAGE", FALSE);
xev.xclient.format = 8;
- xev.xclient.window = GDK_WINDOW_XWINDOW (context->dest_window);
+ xev.xclient.window = GDK_DRAWABLE_XID (context->dest_window);
MOTIF_XCLIENT_BYTE (&xev, 0) = XmTOP_LEVEL_ENTER;
MOTIF_XCLIENT_BYTE (&xev, 1) = local_byte_order;
MOTIF_XCLIENT_SHORT (&xev, 1) = 0;
MOTIF_XCLIENT_LONG (&xev, 1) = time;
- MOTIF_XCLIENT_LONG (&xev, 2) = GDK_WINDOW_XWINDOW (context->source_window);
+ MOTIF_XCLIENT_LONG (&xev, 2) = GDK_DRAWABLE_XID (context->source_window);
if (!private->motif_targets_set)
motif_set_targets (context);
MOTIF_XCLIENT_LONG (&xev, 3) = private->motif_selection;
- if (!gdk_send_xevent (GDK_WINDOW_XWINDOW (context->dest_window),
+ if (!gdk_send_xevent (GDK_DRAWABLE_XID (context->dest_window),
FALSE, 0, &xev))
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->dest_window)));
+ GDK_DRAWABLE_XID (context->dest_window)));
}
static void
@@ -1362,20 +1362,20 @@ motif_send_leave (GdkDragContext *context,
xev.xclient.type = ClientMessage;
xev.xclient.message_type = gdk_atom_intern ("_MOTIF_DRAG_AND_DROP_MESSAGE", FALSE);
xev.xclient.format = 8;
- xev.xclient.window = GDK_WINDOW_XWINDOW (context->dest_window);
+ xev.xclient.window = GDK_DRAWABLE_XID (context->dest_window);
MOTIF_XCLIENT_BYTE (&xev, 0) = XmTOP_LEVEL_LEAVE;
MOTIF_XCLIENT_BYTE (&xev, 1) = local_byte_order;
MOTIF_XCLIENT_SHORT (&xev, 1) = 0;
MOTIF_XCLIENT_LONG (&xev, 1) = time;
- MOTIF_XCLIENT_LONG (&xev, 2) = GDK_WINDOW_XWINDOW (context->source_window);
+ MOTIF_XCLIENT_LONG (&xev, 2) = GDK_DRAWABLE_XID (context->source_window);
MOTIF_XCLIENT_LONG (&xev, 3) = 0;
- if (!gdk_send_xevent (GDK_WINDOW_XWINDOW (context->dest_window),
+ if (!gdk_send_xevent (GDK_DRAWABLE_XID (context->dest_window),
FALSE, 0, &xev))
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->dest_window)));
+ GDK_DRAWABLE_XID (context->dest_window)));
}
static gboolean
@@ -1392,7 +1392,7 @@ motif_send_motion (GdkDragContext *context,
xev.xclient.type = ClientMessage;
xev.xclient.message_type = gdk_atom_intern ("_MOTIF_DRAG_AND_DROP_MESSAGE", FALSE);
xev.xclient.format = 8;
- xev.xclient.window = GDK_WINDOW_XWINDOW (context->dest_window);
+ xev.xclient.window = GDK_DRAWABLE_XID (context->dest_window);
MOTIF_XCLIENT_BYTE (&xev, 1) = local_byte_order;
MOTIF_XCLIENT_SHORT (&xev, 1) = motif_dnd_get_flags (context);
@@ -1417,11 +1417,11 @@ motif_send_motion (GdkDragContext *context,
retval = FALSE;
}
- if (!gdk_send_xevent (GDK_WINDOW_XWINDOW (context->dest_window),
+ if (!gdk_send_xevent (GDK_DRAWABLE_XID (context->dest_window),
FALSE, 0, &xev))
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->dest_window)));
+ GDK_DRAWABLE_XID (context->dest_window)));
return retval;
}
@@ -1435,7 +1435,7 @@ motif_send_drop (GdkDragContext *context, guint32 time)
xev.xclient.type = ClientMessage;
xev.xclient.message_type = gdk_atom_intern ("_MOTIF_DRAG_AND_DROP_MESSAGE", FALSE);
xev.xclient.format = 8;
- xev.xclient.window = GDK_WINDOW_XWINDOW (context->dest_window);
+ xev.xclient.window = GDK_DRAWABLE_XID (context->dest_window);
MOTIF_XCLIENT_BYTE (&xev, 0) = XmDROP_START;
MOTIF_XCLIENT_BYTE (&xev, 1) = local_byte_order;
@@ -1446,13 +1446,13 @@ motif_send_drop (GdkDragContext *context, guint32 time)
MOTIF_XCLIENT_SHORT (&xev, 5) = private->last_y;
MOTIF_XCLIENT_LONG (&xev, 3) = private->motif_selection;
- MOTIF_XCLIENT_LONG (&xev, 4) = GDK_WINDOW_XWINDOW (context->source_window);
+ MOTIF_XCLIENT_LONG (&xev, 4) = GDK_DRAWABLE_XID (context->source_window);
- if (!gdk_send_xevent (GDK_WINDOW_XWINDOW (context->dest_window),
+ if (!gdk_send_xevent (GDK_DRAWABLE_XID (context->dest_window),
FALSE, 0, &xev))
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->dest_window)));
+ GDK_DRAWABLE_XID (context->dest_window)));
}
/* Target Side */
@@ -1756,7 +1756,7 @@ motif_drag_status (GdkEvent *event,
g_message ("Motif status message: flags %x", flags));
context = gdk_drag_context_find (TRUE,
- GDK_WINDOW_XWINDOW (event->any.window),
+ GDK_DRAWABLE_XID (event->any.window),
None);
if (context)
@@ -2028,8 +2028,8 @@ xdnd_set_targets (GdkDragContext *context)
i++;
}
- XChangeProperty (GDK_WINDOW_XDISPLAY (context->source_window),
- GDK_WINDOW_XWINDOW (context->source_window),
+ XChangeProperty (GDK_DRAWABLE_XDISPLAY (context->source_window),
+ GDK_DRAWABLE_XID (context->source_window),
gdk_atom_intern ("XdndTypeList", FALSE),
XA_ATOM, 32, PropModeReplace,
(guchar *)atomlist, n_atoms);
@@ -2076,8 +2076,8 @@ xdnd_set_actions (GdkDragContext *context)
}
}
- XChangeProperty (GDK_WINDOW_XDISPLAY (context->source_window),
- GDK_WINDOW_XWINDOW (context->source_window),
+ XChangeProperty (GDK_DRAWABLE_XDISPLAY (context->source_window),
+ GDK_DRAWABLE_XID (context->source_window),
gdk_atom_intern ("XdndActionList", FALSE),
XA_ATOM, 32, PropModeReplace,
(guchar *)atomlist, n_atoms);
@@ -2119,8 +2119,8 @@ xdnd_send_enter (GdkDragContext *context)
xev.xclient.format = 32;
xev.xclient.window = private->drop_xid ?
private->drop_xid :
- GDK_WINDOW_XWINDOW (context->dest_window);
- xev.xclient.data.l[0] = GDK_WINDOW_XWINDOW (context->source_window);
+ GDK_DRAWABLE_XID (context->dest_window);
+ xev.xclient.data.l[0] = GDK_DRAWABLE_XID (context->source_window);
xev.xclient.data.l[1] = (3 << 24); /* version */
xev.xclient.data.l[2] = 0;
xev.xclient.data.l[3] = 0;
@@ -2148,12 +2148,12 @@ xdnd_send_enter (GdkDragContext *context)
}
}
- if (!xdnd_send_xevent (GDK_WINDOW_XWINDOW (context->dest_window),
+ if (!xdnd_send_xevent (GDK_DRAWABLE_XID (context->dest_window),
FALSE, &xev))
{
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->dest_window)));
+ GDK_DRAWABLE_XID (context->dest_window)));
gdk_window_unref (context->dest_window);
context->dest_window = NULL;
}
@@ -2171,19 +2171,19 @@ xdnd_send_leave (GdkDragContext *context)
xev.xclient.format = 32;
xev.xclient.window = private->drop_xid ?
private->drop_xid :
- GDK_WINDOW_XWINDOW (context->dest_window);
- xev.xclient.data.l[0] = GDK_WINDOW_XWINDOW (context->source_window);
+ GDK_DRAWABLE_XID (context->dest_window);
+ xev.xclient.data.l[0] = GDK_DRAWABLE_XID (context->source_window);
xev.xclient.data.l[1] = 0;
xev.xclient.data.l[2] = 0;
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = 0;
- if (!xdnd_send_xevent (GDK_WINDOW_XWINDOW (context->dest_window),
+ if (!xdnd_send_xevent (GDK_DRAWABLE_XID (context->dest_window),
FALSE, &xev))
{
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->dest_window)));
+ GDK_DRAWABLE_XID (context->dest_window)));
gdk_window_unref (context->dest_window);
context->dest_window = NULL;
}
@@ -2200,19 +2200,19 @@ xdnd_send_drop (GdkDragContext *context, guint32 time)
xev.xclient.format = 32;
xev.xclient.window = private->drop_xid ?
private->drop_xid :
- GDK_WINDOW_XWINDOW (context->dest_window);
- xev.xclient.data.l[0] = GDK_WINDOW_XWINDOW (context->source_window);
+ GDK_DRAWABLE_XID (context->dest_window);
+ xev.xclient.data.l[0] = GDK_DRAWABLE_XID (context->source_window);
xev.xclient.data.l[1] = 0;
xev.xclient.data.l[2] = time;
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = 0;
- if (!xdnd_send_xevent (GDK_WINDOW_XWINDOW (context->dest_window),
+ if (!xdnd_send_xevent (GDK_DRAWABLE_XID (context->dest_window),
FALSE, &xev))
{
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->dest_window)));
+ GDK_DRAWABLE_XID (context->dest_window)));
gdk_window_unref (context->dest_window);
context->dest_window = NULL;
}
@@ -2233,19 +2233,19 @@ xdnd_send_motion (GdkDragContext *context,
xev.xclient.format = 32;
xev.xclient.window = private->drop_xid ?
private->drop_xid :
- GDK_WINDOW_XWINDOW (context->dest_window);
- xev.xclient.data.l[0] = GDK_WINDOW_XWINDOW (context->source_window);
+ GDK_DRAWABLE_XID (context->dest_window);
+ xev.xclient.data.l[0] = GDK_DRAWABLE_XID (context->source_window);
xev.xclient.data.l[1] = 0;
xev.xclient.data.l[2] = (x_root << 16) | y_root;
xev.xclient.data.l[3] = time;
xev.xclient.data.l[4] = xdnd_action_to_atom (action);
- if (!xdnd_send_xevent (GDK_WINDOW_XWINDOW (context->dest_window),
+ if (!xdnd_send_xevent (GDK_DRAWABLE_XID (context->dest_window),
FALSE, &xev))
{
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->dest_window)));
+ GDK_DRAWABLE_XID (context->dest_window)));
gdk_window_unref (context->dest_window);
context->dest_window = NULL;
}
@@ -2345,8 +2345,8 @@ xdnd_read_actions (GdkDragContext *context)
/* Get the XdndActionList, if set */
- XGetWindowProperty (GDK_WINDOW_XDISPLAY (context->source_window),
- GDK_WINDOW_XWINDOW (context->source_window),
+ XGetWindowProperty (GDK_DRAWABLE_XDISPLAY (context->source_window),
+ GDK_DRAWABLE_XID (context->source_window),
gdk_atom_intern ("XdndActionList", FALSE), 0, 65536,
False, XA_ATOM, &type, &format, &nitems,
&after, (guchar **)&data);
@@ -2511,7 +2511,7 @@ xdnd_enter_filter (GdkXEvent *xev,
new_context->targets = NULL;
if (get_types)
{
- XGetWindowProperty (GDK_WINDOW_XDISPLAY (event->any.window),
+ XGetWindowProperty (GDK_DRAWABLE_XDISPLAY (event->any.window),
source_window,
gdk_atom_intern ("XdndTypeList", FALSE), 0, 65536,
False, XA_ATOM, &type, &format, &nitems,
@@ -2570,7 +2570,7 @@ xdnd_leave_filter (GdkXEvent *xev,
if ((current_dest_drag != NULL) &&
(current_dest_drag->protocol == GDK_DRAG_PROTO_XDND) &&
- (GDK_WINDOW_XWINDOW (current_dest_drag->source_window) == source_window))
+ (GDK_DRAWABLE_XID (current_dest_drag->source_window) == source_window))
{
event->dnd.type = GDK_DRAG_LEAVE;
/* Pass ownership of context to the event */
@@ -2603,7 +2603,7 @@ xdnd_position_filter (GdkXEvent *xev,
if ((current_dest_drag != NULL) &&
(current_dest_drag->protocol == GDK_DRAG_PROTO_XDND) &&
- (GDK_WINDOW_XWINDOW (current_dest_drag->source_window) == source_window))
+ (GDK_DRAWABLE_XID (current_dest_drag->source_window) == source_window))
{
event->dnd.type = GDK_DRAG_MOTION;
event->dnd.context = current_dest_drag;
@@ -2642,7 +2642,7 @@ xdnd_drop_filter (GdkXEvent *xev,
if ((current_dest_drag != NULL) &&
(current_dest_drag->protocol == GDK_DRAG_PROTO_XDND) &&
- (GDK_WINDOW_XWINDOW (current_dest_drag->source_window) == source_window))
+ (GDK_DRAWABLE_XID (current_dest_drag->source_window) == source_window))
{
GdkDragContextPrivate *private;
private = (GdkDragContextPrivate *)current_dest_drag;
@@ -2843,7 +2843,7 @@ gdk_drag_find_window (GdkDragContext *context,
dest = get_client_window_at_coords (private->window_cache,
drag_window ?
- GDK_WINDOW_XWINDOW (drag_window) : GDK_NONE,
+ GDK_DRAWABLE_XID (drag_window) : GDK_NONE,
x_root, y_root);
if (private->dest_xid != dest)
@@ -3077,7 +3077,7 @@ gdk_drag_status (GdkDragContext *context,
xev.xclient.type = ClientMessage;
xev.xclient.message_type = gdk_atom_intern ("_MOTIF_DRAG_AND_DROP_MESSAGE", FALSE);
xev.xclient.format = 8;
- xev.xclient.window = GDK_WINDOW_XWINDOW (context->source_window);
+ xev.xclient.window = GDK_DRAWABLE_XID (context->source_window);
if (private->drag_status == GDK_DRAG_STATUS_ACTION_WAIT)
{
@@ -3123,30 +3123,30 @@ gdk_drag_status (GdkDragContext *context,
MOTIF_XCLIENT_SHORT (&xev, 4) = private->last_x;
MOTIF_XCLIENT_SHORT (&xev, 5) = private->last_y;
- if (!gdk_send_xevent (GDK_WINDOW_XWINDOW (context->source_window),
+ if (!gdk_send_xevent (GDK_DRAWABLE_XID (context->source_window),
FALSE, 0, &xev))
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->source_window)));
+ GDK_DRAWABLE_XID (context->source_window)));
}
else if (context->protocol == GDK_DRAG_PROTO_XDND)
{
xev.xclient.type = ClientMessage;
xev.xclient.message_type = gdk_atom_intern ("XdndStatus", FALSE);
xev.xclient.format = 32;
- xev.xclient.window = GDK_WINDOW_XWINDOW (context->source_window);
+ xev.xclient.window = GDK_DRAWABLE_XID (context->source_window);
- xev.xclient.data.l[0] = GDK_WINDOW_XWINDOW (context->dest_window);
+ xev.xclient.data.l[0] = GDK_DRAWABLE_XID (context->dest_window);
xev.xclient.data.l[1] = (action != 0) ? (2 | 1) : 0;
xev.xclient.data.l[2] = 0;
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = xdnd_action_to_atom (action);
- if (!xdnd_send_xevent (GDK_WINDOW_XWINDOW (context->source_window),
+ if (!xdnd_send_xevent (GDK_DRAWABLE_XID (context->source_window),
FALSE, &xev))
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->source_window)));
+ GDK_DRAWABLE_XID (context->source_window)));
}
private->old_action = action;
@@ -3186,7 +3186,7 @@ gdk_drop_reply (GdkDragContext *context,
MOTIF_XCLIENT_SHORT (&xev, 2) = private->last_x;
MOTIF_XCLIENT_SHORT (&xev, 3) = private->last_y;
- gdk_send_xevent (GDK_WINDOW_XWINDOW (context->source_window),
+ gdk_send_xevent (GDK_DRAWABLE_XID (context->source_window),
FALSE, 0, &xev);
}
}
@@ -3205,19 +3205,19 @@ gdk_drop_finish (GdkDragContext *context,
xev.xclient.type = ClientMessage;
xev.xclient.message_type = gdk_atom_intern ("XdndFinished", FALSE);
xev.xclient.format = 32;
- xev.xclient.window = GDK_WINDOW_XWINDOW (context->source_window);
+ xev.xclient.window = GDK_DRAWABLE_XID (context->source_window);
- xev.xclient.data.l[0] = GDK_WINDOW_XWINDOW (context->dest_window);
+ xev.xclient.data.l[0] = GDK_DRAWABLE_XID (context->dest_window);
xev.xclient.data.l[1] = 0;
xev.xclient.data.l[2] = 0;
xev.xclient.data.l[3] = 0;
xev.xclient.data.l[4] = 0;
- if (!xdnd_send_xevent (GDK_WINDOW_XWINDOW (context->source_window),
+ if (!xdnd_send_xevent (GDK_DRAWABLE_XID (context->source_window),
FALSE, &xev))
GDK_NOTE (DND,
g_message ("Send event to %lx failed",
- GDK_WINDOW_XWINDOW (context->source_window)));
+ GDK_DRAWABLE_XID (context->source_window)));
}
}
@@ -3242,7 +3242,7 @@ gdk_window_register_dnd (GdkWindow *window)
info.num_drop_sites = 0;
info.total_size = sizeof(info);
- XChangeProperty (gdk_display, GDK_WINDOW_XWINDOW (window),
+ XChangeProperty (gdk_display, GDK_DRAWABLE_XID (window),
motif_drag_receiver_info_atom,
motif_drag_receiver_info_atom,
8, PropModeReplace,
@@ -3255,8 +3255,8 @@ gdk_window_register_dnd (GdkWindow *window)
xdnd_aware_atom = gdk_atom_intern ("XdndAware", FALSE);
/* The property needs to be of type XA_ATOM, not XA_INTEGER. Blech */
- XChangeProperty (GDK_WINDOW_XDISPLAY (window),
- GDK_WINDOW_XWINDOW (window),
+ XChangeProperty (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
xdnd_aware_atom, XA_ATOM,
32, PropModeReplace,
(guchar *)&xdnd_version, 1);
diff --git a/gdk/x11/gdkdrawable-x11.c b/gdk/x11/gdkdrawable-x11.c
new file mode 100644
index 0000000000..c99de5bc23
--- /dev/null
+++ b/gdk/x11/gdkdrawable-x11.c
@@ -0,0 +1,409 @@
+#include "gdkx.h"
+
+static void gdk_x11_drawable_destroy (GdkDrawable *drawable);
+
+static void gdk_x11_draw_rectangle (GdkDrawable *drawable,
+ GdkGC *gc,
+ gint filled,
+ gint x,
+ gint y,
+ gint width,
+ gint height);
+static void gdk_x11_draw_arc (GdkDrawable *drawable,
+ GdkGC *gc,
+ gint filled,
+ gint x,
+ gint y,
+ gint width,
+ gint height,
+ gint angle1,
+ gint angle2);
+static void gdk_x11_draw_polygon (GdkDrawable *drawable,
+ GdkGC *gc,
+ gint filled,
+ GdkPoint *points,
+ gint npoints);
+static void gdk_x11_draw_text (GdkDrawable *drawable,
+ GdkFont *font,
+ GdkGC *gc,
+ gint x,
+ gint y,
+ const gchar *text,
+ gint text_length);
+static void gdk_x11_draw_text_wc (GdkDrawable *drawable,
+ GdkFont *font,
+ GdkGC *gc,
+ gint x,
+ gint y,
+ const GdkWChar *text,
+ gint text_length);
+static void gdk_x11_draw_drawable (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkPixmap *src,
+ gint xsrc,
+ gint ysrc,
+ gint xdest,
+ gint ydest,
+ gint width,
+ gint height);
+static void gdk_x11_draw_points (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkPoint *points,
+ gint npoints);
+static void gdk_x11_draw_segments (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkSegment *segs,
+ gint nsegs);
+static void gdk_x11_draw_lines (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkPoint *points,
+ gint npoints);
+
+
+GdkDrawableClass _gdk_x11_drawable_class = {
+ gdk_x11_drawable_destroy,
+ _gdk_x11_gc_new,
+ gdk_x11_draw_rectangle,
+ gdk_x11_draw_arc,
+ gdk_x11_draw_polygon,
+ gdk_x11_draw_text,
+ gdk_x11_draw_text_wc,
+ gdk_x11_draw_drawable,
+ gdk_x11_draw_points,
+ gdk_x11_draw_segments,
+ gdk_x11_draw_lines
+};
+
+/*****************************************************
+ * X11 specific implementations of generic functions *
+ *****************************************************/
+
+GdkColormap*
+gdk_drawable_get_colormap (GdkDrawable *drawable)
+{
+ GdkDrawablePrivate *drawable_private;
+ XWindowAttributes window_attributes;
+
+ g_return_val_if_fail (drawable != NULL, NULL);
+ drawable_private = (GdkDrawablePrivate*) drawable;
+
+ if (!GDK_DRAWABLE_DESTROYED (drawable))
+ {
+ if (drawable_private->colormap == NULL &&
+ GDK_IS_WINDOW (drawable))
+ {
+ XGetWindowAttributes (GDK_DRAWABLE_XDISPLAY (drawable),
+ GDK_DRAWABLE_XID (drawable),
+ &window_attributes);
+ drawable_private->colormap = gdk_colormap_lookup (window_attributes.colormap);
+ }
+
+ return drawable_private->colormap;
+ }
+
+ return NULL;
+}
+
+void
+gdk_drawable_set_colormap (GdkDrawable *drawable,
+ GdkColormap *colormap)
+{
+ GdkDrawablePrivate *drawable_private;
+ GdkColormapPrivateX *colormap_private;
+
+ g_return_if_fail (drawable != NULL);
+ g_return_if_fail (colormap != NULL);
+
+ drawable_private = (GdkDrawablePrivate *)drawable;
+ colormap_private = (GdkColormapPrivateX *)colormap;
+
+ if (!GDK_DRAWABLE_DESTROYED (drawable))
+ {
+ if (GDK_IS_WINDOW (drawable))
+ {
+ g_return_if_fail (colormap_private->base.visual !=
+ ((GdkColormapPrivate *)(drawable_private->colormap))->visual);
+
+ XSetWindowColormap (GDK_DRAWABLE_XDISPLAY (drawable),
+ GDK_DRAWABLE_XID (drawable),
+ colormap_private->xcolormap);
+ }
+
+ if (drawable_private->colormap)
+ gdk_colormap_unref (drawable_private->colormap);
+ drawable_private->colormap = colormap;
+ gdk_colormap_ref (drawable_private->colormap);
+
+ if (GDK_IS_WINDOW (drawable) &&
+ drawable_private->window_type != GDK_WINDOW_TOPLEVEL)
+ gdk_window_add_colormap_windows (drawable);
+ }
+}
+
+/* Drawing
+ */
+static void
+gdk_x11_drawable_destroy (GdkDrawable *drawable)
+{
+
+}
+
+static void
+gdk_x11_draw_rectangle (GdkDrawable *drawable,
+ GdkGC *gc,
+ gint filled,
+ gint x,
+ gint y,
+ gint width,
+ gint height)
+{
+ if (filled)
+ XFillRectangle (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc), x, y, width, height);
+ else
+ XDrawRectangle (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc), x, y, width, height);
+}
+
+static void
+gdk_x11_draw_arc (GdkDrawable *drawable,
+ GdkGC *gc,
+ gint filled,
+ gint x,
+ gint y,
+ gint width,
+ gint height,
+ gint angle1,
+ gint angle2)
+{
+ if (filled)
+ XFillArc (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc), x, y, width, height, angle1, angle2);
+ else
+ XDrawArc (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc), x, y, width, height, angle1, angle2);
+}
+
+static void
+gdk_x11_draw_polygon (GdkDrawable *drawable,
+ GdkGC *gc,
+ gint filled,
+ GdkPoint *points,
+ gint npoints)
+{
+ if (filled)
+ {
+ XFillPolygon (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc), (XPoint*) points, npoints, Complex, CoordModeOrigin);
+ }
+ else
+ {
+ GdkPoint *local_points = points;
+ gint local_npoints = npoints;
+ gint local_alloc = 0;
+
+ if ((points[0].x != points[npoints-1].x) ||
+ (points[0].y != points[npoints-1].y))
+ {
+ local_alloc = 1;
+ ++local_npoints;
+ local_points = (GdkPoint*) g_malloc (local_npoints * sizeof(GdkPoint));
+ memcpy (local_points, points, npoints * sizeof(GdkPoint));
+ local_points[npoints].x = points[0].x;
+ local_points[npoints].y = points[0].y;
+ }
+
+ XDrawLines (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc),
+ (XPoint*) local_points, local_npoints,
+ CoordModeOrigin);
+
+ if (local_alloc)
+ g_free (local_points);
+ }
+}
+
+/* gdk_x11_draw_text
+ *
+ * Modified by Li-Da Lho to draw 16 bits and Multibyte strings
+ *
+ * Interface changed: add "GdkFont *font" to specify font or fontset explicitely
+ */
+static void
+gdk_x11_draw_text (GdkDrawable *drawable,
+ GdkFont *font,
+ GdkGC *gc,
+ gint x,
+ gint y,
+ const gchar *text,
+ gint text_length)
+{
+ if (font->type == GDK_FONT_FONT)
+ {
+ XFontStruct *xfont = (XFontStruct *) GDK_FONT_XFONT (font);
+ XSetFont(GDK_DRAWABLE_XDISPLAY (drawable), GDK_GC_XGC (gc), xfont->fid);
+ if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
+ {
+ XDrawString (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc), x, y, text, text_length);
+ }
+ else
+ {
+ XDrawString16 (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc), x, y, (XChar2b *) text, text_length / 2);
+ }
+ }
+ else if (font->type == GDK_FONT_FONTSET)
+ {
+ XFontSet fontset = (XFontSet) GDK_FONT_XFONT (font);
+ XmbDrawString (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ fontset, GDK_GC_XGC (gc), x, y, text, text_length);
+ }
+ else
+ g_error("undefined font type\n");
+}
+
+static void
+gdk_x11_draw_text_wc (GdkDrawable *drawable,
+ GdkFont *font,
+ GdkGC *gc,
+ gint x,
+ gint y,
+ const GdkWChar *text,
+ gint text_length)
+{
+ if (font->type == GDK_FONT_FONT)
+ {
+ XFontStruct *xfont = (XFontStruct *) GDK_FONT_XFONT (font);
+ gchar *text_8bit;
+ gint i;
+ XSetFont(GDK_DRAWABLE_XDISPLAY (drawable), GDK_GC_XGC (gc), xfont->fid);
+ text_8bit = g_new (gchar, text_length);
+ for (i=0; i<text_length; i++) text_8bit[i] = text[i];
+ XDrawString (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc), x, y, text_8bit, text_length);
+ g_free (text_8bit);
+ }
+ else if (font->type == GDK_FONT_FONTSET)
+ {
+ if (sizeof(GdkWChar) == sizeof(wchar_t))
+ {
+ XwcDrawString (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ (XFontSet) GDK_FONT_XFONT (font),
+ GDK_GC_XGC (gc), x, y, (wchar_t *)text, text_length);
+ }
+ else
+ {
+ wchar_t *text_wchar;
+ gint i;
+ text_wchar = g_new (wchar_t, text_length);
+ for (i=0; i<text_length; i++) text_wchar[i] = text[i];
+ XwcDrawString (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ (XFontSet) GDK_FONT_XFONT (font),
+ GDK_GC_XGC (gc), x, y, text_wchar, text_length);
+ g_free (text_wchar);
+ }
+ }
+ else
+ g_error("undefined font type\n");
+}
+
+static void
+gdk_x11_draw_drawable (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkPixmap *src,
+ gint xsrc,
+ gint ysrc,
+ gint xdest,
+ gint ydest,
+ gint width,
+ gint height)
+{
+ /* FIXME: this doesn't work because bitmaps don't have visuals */
+ if (gdk_drawable_get_visual (src)->depth == 1)
+ {
+ XCopyArea (GDK_DRAWABLE_XDISPLAY (drawable),
+ GDK_DRAWABLE_XID (src),
+ GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc),
+ xsrc, ysrc,
+ width, height,
+ xdest, ydest);
+ }
+ else
+ {
+ XCopyArea (GDK_DRAWABLE_XDISPLAY (drawable),
+ GDK_DRAWABLE_XID (src),
+ GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc),
+ xsrc, ysrc,
+ width, height,
+ xdest, ydest);
+ }
+}
+
+static void
+gdk_x11_draw_points (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkPoint *points,
+ gint npoints)
+{
+ /* We special-case npoints == 1, because X will merge multiple
+ * consecutive XDrawPoint requests into a PolyPoint request
+ */
+ if (npoints == 1)
+ {
+ XDrawPoint (GDK_DRAWABLE_XDISPLAY (drawable),
+ GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc),
+ points[0].x, points[0].y);
+ }
+ else
+ {
+ XDrawPoints (GDK_DRAWABLE_XDISPLAY (drawable),
+ GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc),
+ (XPoint *) points,
+ npoints,
+ CoordModeOrigin);
+ }
+}
+
+static void
+gdk_x11_draw_segments (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkSegment *segs,
+ gint nsegs)
+{
+ /* We special-case nsegs == 1, because X will merge multiple
+ * consecutive XDrawLine requests into a PolySegment request
+ */
+ if (nsegs == 1)
+ {
+ XDrawLine (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc), segs[0].x1, segs[0].y1,
+ segs[0].x2, segs[0].y2);
+ }
+ else
+ {
+ XDrawSegments (GDK_DRAWABLE_XDISPLAY (drawable),
+ GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc),
+ (XSegment *) segs,
+ nsegs);
+ }
+}
+
+static void
+gdk_x11_draw_lines (GdkDrawable *drawable,
+ GdkGC *gc,
+ GdkPoint *points,
+ gint npoints)
+{
+ XDrawLines (GDK_DRAWABLE_XDISPLAY (drawable),
+ GDK_DRAWABLE_XID (drawable),
+ GDK_GC_XGC (gc),
+ (XPoint *) points,
+ npoints,
+ CoordModeOrigin);
+}
diff --git a/gdk/x11/gdkevents-x11.c b/gdk/x11/gdkevents-x11.c
index 1738a0dbbe..c15fe8ce2b 100644
--- a/gdk/x11/gdkevents-x11.c
+++ b/gdk/x11/gdkevents-x11.c
@@ -73,7 +73,6 @@ struct _GdkEventPrivate
* Private function declarations
*/
-static GdkEvent *gdk_event_new (void);
static gint gdk_event_apply_filters (XEvent *xevent,
GdkEvent *event,
GList *filters);
@@ -84,8 +83,6 @@ static Bool gdk_event_get_type (Display *display,
XEvent *xevent,
XPointer arg);
#endif
-static void gdk_events_queue (void);
-static GdkEvent* gdk_event_unqueue (void);
static gboolean gdk_event_prepare (gpointer source_data,
GTimeVal *current_time,
@@ -98,9 +95,6 @@ static gboolean gdk_event_dispatch (gpointer source_data,
GTimeVal *current_time,
gpointer user_data);
-static void gdk_synthesize_click (GdkEvent *event,
- gint nclicks);
-
GdkFilterReturn gdk_wm_protocols_filter (GdkXEvent *xev,
GdkEvent *event,
gpointer data);
@@ -114,28 +108,8 @@ static int connection_number = 0; /* The file descriptor number of our
* when events are pending by using
* the "select" system call.
*/
-static guint32 button_click_time[2]; /* The last 2 button click times. Used
- * to determine if the latest button click
- * is part of a double or triple click.
- */
-static GdkWindow *button_window[2]; /* The last 2 windows to receive button presses.
- * Also used to determine if the latest button
- * click is part of a double or triple click.
- */
-static guint button_number[2]; /* The last 2 buttons to be pressed.
- */
-static GdkEventFunc event_func = NULL; /* Callback for events */
-static gpointer event_data = NULL;
-static GDestroyNotify event_notify = NULL;
-
static GList *client_filters; /* Filters for client messages */
-/* FIFO's for event queue, and for events put back using
- * gdk_event_put().
- */
-static GList *queued_events = NULL;
-static GList *queued_tail = NULL;
-
static GSourceFuncs event_funcs = {
gdk_event_prepare,
gdk_event_check,
@@ -149,75 +123,6 @@ GPollFD event_poll_fd;
* Functions for maintaining the event queue *
*********************************************/
-/*************************************************************
- * gdk_event_queue_find_first:
- * Find the first event on the queue that is not still
- * being filled in.
- * arguments:
- *
- * results:
- * Pointer to the list node for that event, or NULL
- *************************************************************/
-
-static GList*
-gdk_event_queue_find_first (void)
-{
- GList *tmp_list = queued_events;
-
- while (tmp_list)
- {
- GdkEventPrivate *event = tmp_list->data;
- if (!(event->flags & GDK_EVENT_PENDING))
- return tmp_list;
-
- tmp_list = g_list_next (tmp_list);
- }
-
- return NULL;
-}
-
-/*************************************************************
- * gdk_event_queue_remove_link:
- * Remove a specified list node from the event queue.
- * arguments:
- * node: Node to remove.
- * results:
- *************************************************************/
-
-static void
-gdk_event_queue_remove_link (GList *node)
-{
- if (node->prev)
- node->prev->next = node->next;
- else
- queued_events = node->next;
-
- if (node->next)
- node->next->prev = node->prev;
- else
- queued_tail = node->prev;
-
-}
-
-/*************************************************************
- * gdk_event_queue_append:
- * Append an event onto the tail of the event queue.
- * arguments:
- * event: Event to append.
- * results:
- *************************************************************/
-
-static void
-gdk_event_queue_append (GdkEvent *event)
-{
- queued_tail = g_list_append (queued_tail, event);
-
- if (!queued_events)
- queued_events = queued_tail;
- else
- queued_tail = queued_tail->next;
-}
-
void
gdk_events_init (void)
{
@@ -232,13 +137,6 @@ gdk_events_init (void)
g_main_add_poll (&event_poll_fd, GDK_PRIORITY_EVENTS);
- button_click_time[0] = 0;
- button_click_time[1] = 0;
- button_window[0] = NULL;
- button_window[1] = NULL;
- button_number[0] = -1;
- button_number[1] = -1;
-
gdk_add_client_message_filter (gdk_wm_protocols,
gdk_wm_protocols_filter, NULL);
}
@@ -525,410 +423,6 @@ gdk_compress_exposures (XEvent *xevent,
xevent->xexpose.height = rect1.height;
}
-/*************************************************************
- * gdk_event_handler_set:
- *
- * arguments:
- * func: Callback function to be called for each event.
- * data: Data supplied to the function
- * notify: function called when function is no longer needed
- *
- * results:
- *************************************************************/
-
-void
-gdk_event_handler_set (GdkEventFunc func,
- gpointer data,
- GDestroyNotify notify)
-{
- if (event_notify)
- (*event_notify) (event_data);
-
- event_func = func;
- event_data = data;
- event_notify = notify;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_event_get
- *
- * Gets the next event.
- *
- * Arguments:
- *
- * Results:
- * If an event is waiting that we care about, returns
- * a pointer to that event, to be freed with gdk_event_free.
- * Otherwise, returns NULL.
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-GdkEvent*
-gdk_event_get (void)
-{
- gdk_events_queue ();
-
- return gdk_event_unqueue ();
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_event_peek
- *
- * Gets the next event.
- *
- * Arguments:
- *
- * Results:
- * If an event is waiting that we care about, returns
- * a copy of that event, but does not remove it from
- * the queue. The pointer is to be freed with gdk_event_free.
- * Otherwise, returns NULL.
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-GdkEvent*
-gdk_event_peek (void)
-{
- GList *tmp_list;
-
- tmp_list = gdk_event_queue_find_first ();
-
- if (tmp_list)
- return gdk_event_copy (tmp_list->data);
- else
- return NULL;
-}
-
-void
-gdk_event_put (GdkEvent *event)
-{
- GdkEvent *new_event;
-
- g_return_if_fail (event != NULL);
-
- new_event = gdk_event_copy (event);
-
- gdk_event_queue_append (new_event);
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_event_copy
- *
- * Copy a event structure into new storage.
- *
- * Arguments:
- * "event" is the event struct to copy.
- *
- * Results:
- * A new event structure. Free it with gdk_event_free.
- *
- * Side effects:
- * The reference count of the window in the event is increased.
- *
- *--------------------------------------------------------------
- */
-
-static GMemChunk *event_chunk = NULL;
-
-static GdkEvent*
-gdk_event_new (void)
-{
- GdkEventPrivate *new_event;
-
- if (event_chunk == NULL)
- event_chunk = g_mem_chunk_new ("events",
- sizeof (GdkEventPrivate),
- 4096,
- G_ALLOC_AND_FREE);
-
- new_event = g_chunk_new (GdkEventPrivate, event_chunk);
- new_event->flags = 0;
-
- return (GdkEvent*) new_event;
-}
-
-GdkEvent*
-gdk_event_copy (GdkEvent *event)
-{
- GdkEvent *new_event;
-
- g_return_val_if_fail (event != NULL, NULL);
-
- new_event = gdk_event_new ();
-
- *new_event = *event;
- gdk_window_ref (new_event->any.window);
-
- switch (event->any.type)
- {
- case GDK_KEY_PRESS:
- case GDK_KEY_RELEASE:
- new_event->key.string = g_strdup (event->key.string);
- break;
-
- case GDK_ENTER_NOTIFY:
- case GDK_LEAVE_NOTIFY:
- if (event->crossing.subwindow != NULL)
- gdk_window_ref (event->crossing.subwindow);
- break;
-
- case GDK_DRAG_ENTER:
- case GDK_DRAG_LEAVE:
- case GDK_DRAG_MOTION:
- case GDK_DRAG_STATUS:
- case GDK_DROP_START:
- case GDK_DROP_FINISHED:
- gdk_drag_context_ref (event->dnd.context);
- break;
-
- default:
- break;
- }
-
- return new_event;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_event_free
- *
- * Free a event structure obtained from gdk_event_copy. Do not use
- * with other event structures.
- *
- * Arguments:
- * "event" is the event struct to free.
- *
- * Results:
- *
- * Side effects:
- * The reference count of the window in the event is decreased and
- * might be freed, too.
- *
- *-------------------------------------------------------------- */
-
-void
-gdk_event_free (GdkEvent *event)
-{
- g_return_if_fail (event != NULL);
-
- g_assert (event_chunk != NULL); /* paranoid */
-
- if (event->any.window)
- gdk_window_unref (event->any.window);
-
- switch (event->any.type)
- {
- case GDK_KEY_PRESS:
- case GDK_KEY_RELEASE:
- g_free (event->key.string);
- break;
-
- case GDK_ENTER_NOTIFY:
- case GDK_LEAVE_NOTIFY:
- if (event->crossing.subwindow != NULL)
- gdk_window_unref (event->crossing.subwindow);
- break;
-
- case GDK_DRAG_ENTER:
- case GDK_DRAG_LEAVE:
- case GDK_DRAG_MOTION:
- case GDK_DRAG_STATUS:
- case GDK_DROP_START:
- case GDK_DROP_FINISHED:
- gdk_drag_context_unref (event->dnd.context);
- break;
-
- default:
- break;
- }
-
- g_mem_chunk_free (event_chunk, event);
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_event_get_time:
- * Get the timestamp from an event.
- * arguments:
- * event:
- * results:
- * The event's time stamp, if it has one, otherwise
- * GDK_CURRENT_TIME.
- *--------------------------------------------------------------
- */
-
-guint32
-gdk_event_get_time (GdkEvent *event)
-{
- if (event)
- switch (event->type)
- {
- case GDK_MOTION_NOTIFY:
- return event->motion.time;
- case GDK_BUTTON_PRESS:
- case GDK_2BUTTON_PRESS:
- case GDK_3BUTTON_PRESS:
- case GDK_BUTTON_RELEASE:
- return event->button.time;
- case GDK_KEY_PRESS:
- case GDK_KEY_RELEASE:
- return event->key.time;
- case GDK_ENTER_NOTIFY:
- case GDK_LEAVE_NOTIFY:
- return event->crossing.time;
- case GDK_PROPERTY_NOTIFY:
- return event->property.time;
- case GDK_SELECTION_CLEAR:
- case GDK_SELECTION_REQUEST:
- case GDK_SELECTION_NOTIFY:
- return event->selection.time;
- case GDK_PROXIMITY_IN:
- case GDK_PROXIMITY_OUT:
- return event->proximity.time;
- case GDK_DRAG_ENTER:
- case GDK_DRAG_LEAVE:
- case GDK_DRAG_MOTION:
- case GDK_DRAG_STATUS:
- case GDK_DROP_START:
- case GDK_DROP_FINISHED:
- return event->dnd.time;
- default: /* use current time */
- break;
- }
-
- return GDK_CURRENT_TIME;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_set_show_events
- *
- * Turns on/off the showing of events.
- *
- * Arguments:
- * "show_events" is a boolean describing whether or
- * not to show the events gdk receives.
- *
- * Results:
- *
- * Side effects:
- * When "show_events" is TRUE, calls to "gdk_event_get"
- * will output debugging informatin regarding the event
- * received to stdout.
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_set_show_events (gint show_events)
-{
- if (show_events)
- gdk_debug_flags |= GDK_DEBUG_EVENTS;
- else
- gdk_debug_flags &= ~GDK_DEBUG_EVENTS;
-}
-
-gint
-gdk_get_show_events (void)
-{
- return gdk_debug_flags & GDK_DEBUG_EVENTS;
-}
-
-static void
-gdk_io_destroy (gpointer data)
-{
- GdkIOClosure *closure = data;
-
- if (closure->notify)
- closure->notify (closure->data);
-
- g_free (closure);
-}
-
-/* What do we do with G_IO_NVAL?
- */
-#define READ_CONDITION (G_IO_IN | G_IO_HUP | G_IO_ERR)
-#define WRITE_CONDITION (G_IO_OUT | G_IO_ERR)
-#define EXCEPTION_CONDITION (G_IO_PRI)
-
-static gboolean
-gdk_io_invoke (GIOChannel *source,
- GIOCondition condition,
- gpointer data)
-{
- GdkIOClosure *closure = data;
- GdkInputCondition gdk_cond = 0;
-
- if (condition & READ_CONDITION)
- gdk_cond |= GDK_INPUT_READ;
- if (condition & WRITE_CONDITION)
- gdk_cond |= GDK_INPUT_WRITE;
- if (condition & EXCEPTION_CONDITION)
- gdk_cond |= GDK_INPUT_EXCEPTION;
-
- if (closure->condition & gdk_cond)
- closure->function (closure->data, g_io_channel_unix_get_fd (source), gdk_cond);
-
- return TRUE;
-}
-
-gint
-gdk_input_add_full (gint source,
- GdkInputCondition condition,
- GdkInputFunction function,
- gpointer data,
- GdkDestroyNotify destroy)
-{
- guint result;
- GdkIOClosure *closure = g_new (GdkIOClosure, 1);
- GIOChannel *channel;
- GIOCondition cond = 0;
-
- closure->function = function;
- closure->condition = condition;
- closure->notify = destroy;
- closure->data = data;
-
- if (condition & GDK_INPUT_READ)
- cond |= READ_CONDITION;
- if (condition & GDK_INPUT_WRITE)
- cond |= WRITE_CONDITION;
- if (condition & GDK_INPUT_EXCEPTION)
- cond |= EXCEPTION_CONDITION;
-
- channel = g_io_channel_unix_new (source);
- result = g_io_add_watch_full (channel, G_PRIORITY_DEFAULT, cond,
- gdk_io_invoke,
- closure, gdk_io_destroy);
- g_io_channel_unref (channel);
-
- return result;
-}
-
-gint
-gdk_input_add (gint source,
- GdkInputCondition condition,
- GdkInputFunction function,
- gpointer data)
-{
- return gdk_input_add_full (source, condition, function, data, NULL);
-}
-
-void
-gdk_input_remove (gint tag)
-{
- g_source_remove (tag);
-}
-
static gint
gdk_event_apply_filters (XEvent *xevent,
GdkEvent *event,
@@ -1220,43 +714,9 @@ gdk_event_translate (GdkEvent *event,
event->button.button = xevent->xbutton.button;
event->button.source = GDK_SOURCE_MOUSE;
event->button.deviceid = GDK_CORE_POINTER;
-
- if ((event->button.time < (button_click_time[1] + TRIPLE_CLICK_TIME)) &&
- (event->button.window == button_window[1]) &&
- (event->button.button == button_number[1]))
- {
- gdk_synthesize_click (event, 3);
-
- button_click_time[1] = 0;
- button_click_time[0] = 0;
- button_window[1] = NULL;
- button_window[0] = 0;
- button_number[1] = -1;
- button_number[0] = -1;
- }
- else if ((event->button.time < (button_click_time[0] + DOUBLE_CLICK_TIME)) &&
- (event->button.window == button_window[0]) &&
- (event->button.button == button_number[0]))
- {
- gdk_synthesize_click (event, 2);
-
- button_click_time[1] = button_click_time[0];
- button_click_time[0] = event->button.time;
- button_window[1] = button_window[0];
- button_window[0] = event->button.window;
- button_number[1] = button_number[0];
- button_number[0] = event->button.button;
- }
- else
- {
- button_click_time[1] = 0;
- button_click_time[0] = event->button.time;
- button_window[1] = NULL;
- button_window[0] = event->button.window;
- button_number[1] = -1;
- button_number[0] = event->button.button;
- }
+ gdk_event_button_generate (event);
+
break;
case ButtonRelease:
@@ -1972,7 +1432,7 @@ gdk_event_get_type (Display *display,
}
#endif
-static void
+void
gdk_events_queue (void)
{
GList *node;
@@ -2011,7 +1471,7 @@ gdk_events_queue (void)
((GdkEventPrivate *)event)->flags |= GDK_EVENT_PENDING;
gdk_event_queue_append (event);
- node = queued_tail;
+ node = gdk_queued_tail;
if (gdk_event_translate (event, &xevent))
{
@@ -2064,24 +1524,6 @@ gdk_event_check (gpointer source_data,
return retval;
}
-static GdkEvent*
-gdk_event_unqueue (void)
-{
- GdkEvent *event = NULL;
- GList *tmp_list;
-
- tmp_list = gdk_event_queue_find_first ();
-
- if (tmp_list)
- {
- event = tmp_list->data;
- gdk_event_queue_remove_link (tmp_list);
- g_list_free_1 (tmp_list);
- }
-
- return event;
-}
-
static gboolean
gdk_event_dispatch (gpointer source_data,
GTimeVal *current_time,
@@ -2096,8 +1538,8 @@ gdk_event_dispatch (gpointer source_data,
if (event)
{
- if (event_func)
- (*event_func) (event, event_data);
+ if (gdk_event_func)
+ (*gdk_event_func) (event, gdk_event_data);
gdk_event_free (event);
}
@@ -2107,20 +1549,6 @@ gdk_event_dispatch (gpointer source_data,
return TRUE;
}
-static void
-gdk_synthesize_click (GdkEvent *event,
- gint nclicks)
-{
- GdkEvent temp_event;
-
- g_return_if_fail (event != NULL);
-
- temp_event = *event;
- temp_event.type = (nclicks == 2) ? GDK_2BUTTON_PRESS : GDK_3BUTTON_PRESS;
-
- gdk_event_put (&temp_event);
-}
-
/* Sends a ClientMessage to all toplevel client windows */
gboolean
gdk_event_send_client_message (GdkEvent *event, guint32 xid)
diff --git a/gdk/x11/gdkfont-x11.c b/gdk/x11/gdkfont-x11.c
index a3a3502fba..55b4524fce 100644
--- a/gdk/x11/gdkfont-x11.c
+++ b/gdk/x11/gdkfont-x11.c
@@ -27,7 +27,7 @@
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include "gdkfont.h"
-#include "gdkprivate.h"
+#include "gdkx.h"
static GHashTable *font_name_hash = NULL;
static GHashTable *fontset_name_hash = NULL;
@@ -35,7 +35,7 @@ static GHashTable *fontset_name_hash = NULL;
static void
gdk_font_hash_insert (GdkFontType type, GdkFont *font, const gchar *font_name)
{
- GdkFontPrivate *private = (GdkFontPrivate *)font;
+ GdkFontPrivateX *private = (GdkFontPrivateX *)font;
GHashTable **hashp = (type == GDK_FONT_FONT) ?
&font_name_hash : &fontset_name_hash;
@@ -49,7 +49,7 @@ gdk_font_hash_insert (GdkFontType type, GdkFont *font, const gchar *font_name)
static void
gdk_font_hash_remove (GdkFontType type, GdkFont *font)
{
- GdkFontPrivate *private = (GdkFontPrivate *)font;
+ GdkFontPrivateX *private = (GdkFontPrivateX *)font;
GSList *tmp_list;
GHashTable *hash = (type == GDK_FONT_FONT) ?
font_name_hash : fontset_name_hash;
@@ -90,7 +90,7 @@ GdkFont*
gdk_font_load (const gchar *font_name)
{
GdkFont *font;
- GdkFontPrivate *private;
+ GdkFontPrivateX *private;
XFontStruct *xfont;
g_return_val_if_fail (font_name != NULL, NULL);
@@ -106,7 +106,7 @@ gdk_font_load (const gchar *font_name)
font = gdk_font_lookup (xfont->fid);
if (font != NULL)
{
- private = (GdkFontPrivate *) font;
+ private = (GdkFontPrivateX *) font;
if (xfont != private->xfont)
XFreeFont (gdk_display, xfont);
@@ -114,10 +114,10 @@ gdk_font_load (const gchar *font_name)
}
else
{
- private = g_new (GdkFontPrivate, 1);
+ private = g_new (GdkFontPrivateX, 1);
private->xdisplay = gdk_display;
private->xfont = xfont;
- private->ref_count = 1;
+ private->base.ref_count = 1;
private->names = NULL;
font = (GdkFont*) private;
@@ -137,7 +137,7 @@ GdkFont*
gdk_fontset_load (gchar *fontset_name)
{
GdkFont *font;
- GdkFontPrivate *private;
+ GdkFontPrivateX *private;
XFontSet fontset;
gint missing_charset_count;
gchar **missing_charset_list;
@@ -147,7 +147,7 @@ gdk_fontset_load (gchar *fontset_name)
if (font)
return font;
- private = g_new (GdkFontPrivate, 1);
+ private = g_new (GdkFontPrivateX, 1);
font = (GdkFont*) private;
private->xdisplay = gdk_display;
@@ -164,7 +164,7 @@ gdk_fontset_load (gchar *fontset_name)
XFreeStringList (missing_charset_list);
}
- private->ref_count = 1;
+ private->base.ref_count = 1;
if (!fontset)
{
@@ -197,57 +197,74 @@ gdk_fontset_load (gchar *fontset_name)
}
}
-GdkFont*
-gdk_font_ref (GdkFont *font)
+void
+_gdk_font_destroy (GdkFont *font)
{
- GdkFontPrivate *private;
-
- g_return_val_if_fail (font != NULL, NULL);
-
- private = (GdkFontPrivate*) font;
- private->ref_count += 1;
- return font;
+ GdkFontPrivateX *private = (GdkFontPrivateX *)font;
+
+ gdk_font_hash_remove (font->type, font);
+
+ switch (font->type)
+ {
+ case GDK_FONT_FONT:
+ gdk_xid_table_remove (((XFontStruct *) private->xfont)->fid);
+ XFreeFont (private->xdisplay, (XFontStruct *) private->xfont);
+ break;
+ case GDK_FONT_FONTSET:
+ XFreeFontSet (private->xdisplay, (XFontSet) private->xfont);
+ break;
+ default:
+ g_error ("unknown font type.");
+ break;
+ }
+ g_free (font);
}
-void
-gdk_font_unref (GdkFont *font)
+gint
+_gdk_font_strlen (GdkFont *font,
+ const gchar *str)
{
- GdkFontPrivate *private;
- private = (GdkFontPrivate*) font;
+ GdkFontPrivateX *font_private;
+ gint length = 0;
- g_return_if_fail (font != NULL);
- g_return_if_fail (private->ref_count > 0);
+ g_return_val_if_fail (font != NULL, -1);
+ g_return_val_if_fail (str != NULL, -1);
- private->ref_count -= 1;
- if (private->ref_count == 0)
+ font_private = (GdkFontPrivateX*) font;
+
+ if (font->type == GDK_FONT_FONT)
{
- gdk_font_hash_remove (font->type, font);
-
- switch (font->type)
+ XFontStruct *xfont = (XFontStruct *) font_private->xfont;
+ if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
{
- case GDK_FONT_FONT:
- gdk_xid_table_remove (((XFontStruct *) private->xfont)->fid);
- XFreeFont (private->xdisplay, (XFontStruct *) private->xfont);
- break;
- case GDK_FONT_FONTSET:
- XFreeFontSet (private->xdisplay, (XFontSet) private->xfont);
- break;
- default:
- g_error ("unknown font type.");
- break;
+ length = strlen (str);
}
- g_free (font);
+ else
+ {
+ guint16 *string_2b = (guint16 *)str;
+
+ while (*(string_2b++))
+ length++;
+ }
+ }
+ else if (font->type == GDK_FONT_FONTSET)
+ {
+ length = strlen (str);
}
+ else
+ g_error("undefined font type\n");
+
+ return length;
}
gint
gdk_font_id (const GdkFont *font)
{
- const GdkFontPrivate *font_private;
+ const GdkFontPrivateX *font_private;
g_return_val_if_fail (font != NULL, 0);
- font_private = (const GdkFontPrivate*) font;
+ font_private = (const GdkFontPrivateX*) font;
if (font->type == GDK_FONT_FONT)
{
@@ -263,14 +280,14 @@ gint
gdk_font_equal (const GdkFont *fonta,
const GdkFont *fontb)
{
- const GdkFontPrivate *privatea;
- const GdkFontPrivate *privateb;
+ const GdkFontPrivateX *privatea;
+ const GdkFontPrivateX *privateb;
g_return_val_if_fail (fonta != NULL, FALSE);
g_return_val_if_fail (fontb != NULL, FALSE);
- privatea = (const GdkFontPrivate*) fonta;
- privateb = (const GdkFontPrivate*) fontb;
+ privatea = (const GdkFontPrivateX*) fonta;
+ privateb = (const GdkFontPrivateX*) fontb;
if (fonta->type == GDK_FONT_FONT && fontb->type == GDK_FONT_FONT)
{
@@ -292,49 +309,11 @@ gdk_font_equal (const GdkFont *fonta,
}
gint
-gdk_string_width (GdkFont *font,
- const gchar *string)
-{
- GdkFontPrivate *font_private;
- gint width;
- XFontStruct *xfont;
- XFontSet fontset;
-
- g_return_val_if_fail (font != NULL, -1);
- g_return_val_if_fail (string != NULL, -1);
-
- font_private = (GdkFontPrivate*) font;
-
- switch (font->type)
- {
- case GDK_FONT_FONT:
- xfont = (XFontStruct *) font_private->xfont;
- if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
- {
- width = XTextWidth (xfont, string, strlen (string));
- }
- else
- {
- width = XTextWidth16 (xfont, (XChar2b *) string, strlen (string) / 2);
- }
- break;
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) font_private->xfont;
- width = XmbTextEscapement (fontset, string, strlen(string));
- break;
- default:
- width = 0;
- }
-
- return width;
-}
-
-gint
gdk_text_width (GdkFont *font,
const gchar *text,
gint text_length)
{
- GdkFontPrivate *private;
+ GdkFontPrivateX *private;
gint width;
XFontStruct *xfont;
XFontSet fontset;
@@ -342,7 +321,7 @@ gdk_text_width (GdkFont *font,
g_return_val_if_fail (font != NULL, -1);
g_return_val_if_fail (text != NULL, -1);
- private = (GdkFontPrivate*) font;
+ private = (GdkFontPrivateX*) font;
switch (font->type)
{
@@ -372,7 +351,7 @@ gdk_text_width_wc (GdkFont *font,
const GdkWChar *text,
gint text_length)
{
- GdkFontPrivate *private;
+ GdkFontPrivateX *private;
gint width;
XFontStruct *xfont;
XFontSet fontset;
@@ -380,7 +359,7 @@ gdk_text_width_wc (GdkFont *font,
g_return_val_if_fail (font != NULL, -1);
g_return_val_if_fail (text != NULL, -1);
- private = (GdkFontPrivate*) font;
+ private = (GdkFontPrivateX*) font;
switch (font->type)
{
@@ -423,113 +402,6 @@ gdk_text_width_wc (GdkFont *font,
return width;
}
-/* Problem: What if a character is a 16 bits character ?? */
-gint
-gdk_char_width (GdkFont *font,
- gchar character)
-{
- GdkFontPrivate *private;
- XCharStruct *chars;
- gint width;
- guint ch = character & 0xff; /* get rid of sign-extension */
- XFontStruct *xfont;
- XFontSet fontset;
-
- g_return_val_if_fail (font != NULL, -1);
-
- private = (GdkFontPrivate*) font;
-
- switch (font->type)
- {
- case GDK_FONT_FONT:
- /* only 8 bits characters are considered here */
- xfont = (XFontStruct *) private->xfont;
- if ((xfont->min_byte1 == 0) &&
- (xfont->max_byte1 == 0) &&
- (ch >= xfont->min_char_or_byte2) &&
- (ch <= xfont->max_char_or_byte2))
- {
- chars = xfont->per_char;
- if (chars)
- width = chars[ch - xfont->min_char_or_byte2].width;
- else
- width = xfont->min_bounds.width;
- }
- else
- {
- width = XTextWidth (xfont, &character, 1);
- }
- break;
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- width = XmbTextEscapement (fontset, &character, 1) ;
- break;
- default:
- width = 0;
- }
- return width;
-}
-
-gint
-gdk_char_width_wc (GdkFont *font,
- GdkWChar character)
-{
- GdkFontPrivate *private;
- XCharStruct *chars;
- gint width;
- guint ch = character & 0xff; /* get rid of sign-extension */
- XFontStruct *xfont;
- XFontSet fontset;
-
- g_return_val_if_fail (font != NULL, -1);
-
- private = (GdkFontPrivate*) font;
-
- switch (font->type)
- {
- case GDK_FONT_FONT:
- /* only 8 bits characters are considered here */
- xfont = (XFontStruct *) private->xfont;
- if ((xfont->min_byte1 == 0) &&
- (xfont->max_byte1 == 0) &&
- (ch >= xfont->min_char_or_byte2) &&
- (ch <= xfont->max_char_or_byte2))
- {
- chars = xfont->per_char;
- if (chars)
- width = chars[ch - xfont->min_char_or_byte2].width;
- else
- width = xfont->min_bounds.width;
- }
- else
- {
- char ch2 = character;
- width = XTextWidth (xfont, &ch2, 1);
- }
- break;
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- {
- wchar_t char_wc = character;
- width = XwcTextEscapement (fontset, &char_wc, 1) ;
- }
- break;
- default:
- width = 0;
- }
- return width;
-}
-
-gint
-gdk_string_measure (GdkFont *font,
- const gchar *string)
-{
- g_return_val_if_fail (font != NULL, -1);
- g_return_val_if_fail (string != NULL, -1);
-
- return gdk_text_measure (font, string, strlen (string));
-}
-
void
gdk_text_extents (GdkFont *font,
const gchar *text,
@@ -540,7 +412,7 @@ gdk_text_extents (GdkFont *font,
gint *ascent,
gint *descent)
{
- GdkFontPrivate *private;
+ GdkFontPrivateX *private;
XCharStruct overall;
XFontStruct *xfont;
XFontSet fontset;
@@ -552,7 +424,7 @@ gdk_text_extents (GdkFont *font,
g_return_if_fail (font != NULL);
g_return_if_fail (text != NULL);
- private = (GdkFontPrivate*) font;
+ private = (GdkFontPrivateX*) font;
switch (font->type)
{
@@ -609,7 +481,7 @@ gdk_text_extents_wc (GdkFont *font,
gint *ascent,
gint *descent)
{
- GdkFontPrivate *private;
+ GdkFontPrivateX *private;
XCharStruct overall;
XFontStruct *xfont;
XFontSet fontset;
@@ -621,7 +493,7 @@ gdk_text_extents_wc (GdkFont *font,
g_return_if_fail (font != NULL);
g_return_if_fail (text != NULL);
- private = (GdkFontPrivate*) font;
+ private = (GdkFontPrivateX*) font;
switch (font->type)
{
@@ -684,146 +556,3 @@ gdk_text_extents_wc (GdkFont *font,
}
}
-
-void
-gdk_string_extents (GdkFont *font,
- const gchar *string,
- gint *lbearing,
- gint *rbearing,
- gint *width,
- gint *ascent,
- gint *descent)
-{
- g_return_if_fail (font != NULL);
- g_return_if_fail (string != NULL);
-
- gdk_text_extents (font, string, strlen (string),
- lbearing, rbearing, width, ascent, descent);
-}
-
-
-gint
-gdk_text_measure (GdkFont *font,
- const gchar *text,
- gint text_length)
-{
- GdkFontPrivate *private;
- XCharStruct overall;
- XFontStruct *xfont;
- XFontSet fontset;
- XRectangle ink, log;
- int direction;
- int font_ascent;
- int font_descent;
- gint width;
-
- g_return_val_if_fail (font != NULL, -1);
- g_return_val_if_fail (text != NULL, -1);
-
- private = (GdkFontPrivate*) font;
-
- switch (font->type)
- {
- case GDK_FONT_FONT:
- xfont = (XFontStruct *) private->xfont;
- if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
- {
- XTextExtents (xfont, text, text_length,
- &direction, &font_ascent, &font_descent,
- &overall);
- }
- else
- {
- XTextExtents16 (xfont, (XChar2b *) text, text_length / 2,
- &direction, &font_ascent, &font_descent,
- &overall);
- }
- width = overall.rbearing;
- break;
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- XmbTextExtents (fontset, text, text_length, &ink, &log);
- width = ink.x + ink.width;
- break;
- default:
- width = 0;
- }
- return width;
-}
-
-gint
-gdk_char_measure (GdkFont *font,
- gchar character)
-{
- g_return_val_if_fail (font != NULL, -1);
-
- return gdk_text_measure (font, &character, 1);
-}
-
-gint
-gdk_string_height (GdkFont *font,
- const gchar *string)
-{
- g_return_val_if_fail (font != NULL, -1);
- g_return_val_if_fail (string != NULL, -1);
-
- return gdk_text_height (font, string, strlen (string));
-}
-
-gint
-gdk_text_height (GdkFont *font,
- const gchar *text,
- gint text_length)
-{
- GdkFontPrivate *private;
- XCharStruct overall;
- XFontStruct *xfont;
- XFontSet fontset;
- XRectangle ink, log;
- int direction;
- int font_ascent;
- int font_descent;
- gint height;
-
- g_return_val_if_fail (font != NULL, -1);
- g_return_val_if_fail (text != NULL, -1);
-
- private = (GdkFontPrivate*) font;
-
- switch (font->type)
- {
- case GDK_FONT_FONT:
- xfont = (XFontStruct *) private->xfont;
- if ((xfont->min_byte1 == 0) && (xfont->max_byte1 == 0))
- {
- XTextExtents (xfont, text, text_length,
- &direction, &font_ascent, &font_descent,
- &overall);
- }
- else
- {
- XTextExtents16 (xfont, (XChar2b *) text, text_length / 2,
- &direction, &font_ascent, &font_descent,
- &overall);
- }
- height = overall.ascent + overall.descent;
- break;
- case GDK_FONT_FONTSET:
- fontset = (XFontSet) private->xfont;
- XmbTextExtents (fontset, text, text_length, &ink, &log);
- height = log.height;
- break;
- default:
- height = 0;
- }
- return height;
-}
-
-gint
-gdk_char_height (GdkFont *font,
- gchar character)
-{
- g_return_val_if_fail (font != NULL, -1);
-
- return gdk_text_height (font, &character, 1);
-}
diff --git a/gdk/x11/gdkgc-x11.c b/gdk/x11/gdkgc-x11.c
new file mode 100644
index 0000000000..bf3ff6617d
--- /dev/null
+++ b/gdk/x11/gdkgc-x11.c
@@ -0,0 +1,505 @@
+#include "gdkgc.h"
+#include "gdkx.h"
+
+static void gdk_x11_gc_values_to_xvalues (GdkGCValues *values,
+ GdkGCValuesMask mask,
+ XGCValues *xvalues,
+ unsigned long *xvalues_mask);
+
+static void gdk_x11_gc_destroy (GdkGC *gc);
+static void gdk_x11_gc_get_values (GdkGC *gc,
+ GdkGCValues *values);
+static void gdk_x11_gc_set_values (GdkGC *gc,
+ GdkGCValues *values,
+ GdkGCValuesMask values_mask);
+static void gdk_x11_gc_set_dashes (GdkGC *gc,
+ gint dash_offset,
+ gchar dash_list[],
+ gint n);
+
+static GdkGCClass gdk_x11_gc_class = {
+ gdk_x11_gc_destroy,
+ gdk_x11_gc_get_values,
+ gdk_x11_gc_set_values,
+ gdk_x11_gc_set_dashes
+};
+
+GdkGC *
+_gdk_x11_gc_new (GdkDrawable *drawable,
+ GdkGCValues *values,
+ GdkGCValuesMask values_mask)
+{
+ GdkGC *gc;
+ GdkGCPrivate *private;
+
+ XGCValues xvalues;
+ unsigned long xvalues_mask;
+
+ gc = gdk_gc_alloc ();
+ private = (GdkGCPrivate *)gc;
+
+ private->klass = &gdk_x11_gc_class;
+ private->klass_data = g_new (GdkGCXData, 1);
+
+ GDK_GC_XDATA (gc)->xdisplay = GDK_DRAWABLE_XDISPLAY (drawable);
+
+ xvalues.function = GXcopy;
+ xvalues.fill_style = FillSolid;
+ xvalues.arc_mode = ArcPieSlice;
+ xvalues.subwindow_mode = ClipByChildren;
+ xvalues.graphics_exposures = True;
+ xvalues_mask = GCFunction | GCFillStyle | GCArcMode | GCSubwindowMode | GCGraphicsExposures;
+
+ gdk_x11_gc_values_to_xvalues (values, values_mask, &xvalues, &xvalues_mask);
+
+ GDK_GC_XDATA (gc)->xgc = XCreateGC (GDK_GC_XDISPLAY (gc),
+ GDK_DRAWABLE_XID (drawable),
+ xvalues_mask, &xvalues);
+
+ return gc;
+}
+
+static void
+gdk_x11_gc_destroy (GdkGC *gc)
+{
+ XFreeGC (GDK_GC_XDISPLAY (gc), GDK_GC_XGC (gc));
+ g_free (GDK_GC_XDATA (gc));
+}
+
+static void
+gdk_x11_gc_get_values (GdkGC *gc,
+ GdkGCValues *values)
+{
+ XGCValues xvalues;
+
+ if (XGetGCValues (GDK_GC_XDISPLAY (gc), GDK_GC_XGC (gc),
+ GCForeground | GCBackground | GCFont |
+ GCFunction | GCTile | GCStipple | /* GCClipMask | */
+ GCSubwindowMode | GCGraphicsExposures |
+ GCTileStipXOrigin | GCTileStipYOrigin |
+ GCClipXOrigin | GCClipYOrigin |
+ GCLineWidth | GCLineStyle | GCCapStyle |
+ GCFillStyle | GCJoinStyle, &xvalues))
+ {
+ values->foreground.pixel = xvalues.foreground;
+ values->background.pixel = xvalues.background;
+ values->font = gdk_font_lookup (xvalues.font);
+
+ switch (xvalues.function)
+ {
+ case GXcopy:
+ values->function = GDK_COPY;
+ break;
+ case GXinvert:
+ values->function = GDK_INVERT;
+ break;
+ case GXxor:
+ values->function = GDK_XOR;
+ break;
+ case GXclear:
+ values->function = GDK_CLEAR;
+ break;
+ case GXand:
+ values->function = GDK_AND;
+ break;
+ case GXandReverse:
+ values->function = GDK_AND_REVERSE;
+ break;
+ case GXandInverted:
+ values->function = GDK_AND_INVERT;
+ break;
+ case GXnoop:
+ values->function = GDK_NOOP;
+ break;
+ case GXor:
+ values->function = GDK_OR;
+ break;
+ case GXequiv:
+ values->function = GDK_EQUIV;
+ break;
+ case GXorReverse:
+ values->function = GDK_OR_REVERSE;
+ break;
+ case GXcopyInverted:
+ values->function =GDK_COPY_INVERT;
+ break;
+ case GXorInverted:
+ values->function = GDK_OR_INVERT;
+ break;
+ case GXnand:
+ values->function = GDK_NAND;
+ break;
+ case GXset:
+ values->function = GDK_SET;
+ break;
+ }
+
+ switch (xvalues.fill_style)
+ {
+ case FillSolid:
+ values->fill = GDK_SOLID;
+ break;
+ case FillTiled:
+ values->fill = GDK_TILED;
+ break;
+ case FillStippled:
+ values->fill = GDK_STIPPLED;
+ break;
+ case FillOpaqueStippled:
+ values->fill = GDK_OPAQUE_STIPPLED;
+ break;
+ }
+
+ values->tile = gdk_pixmap_lookup (xvalues.tile);
+ values->stipple = gdk_pixmap_lookup (xvalues.stipple);
+ values->clip_mask = NULL;
+ values->subwindow_mode = xvalues.subwindow_mode;
+ values->ts_x_origin = xvalues.ts_x_origin;
+ values->ts_y_origin = xvalues.ts_y_origin;
+ values->clip_x_origin = xvalues.clip_x_origin;
+ values->clip_y_origin = xvalues.clip_y_origin;
+ values->graphics_exposures = xvalues.graphics_exposures;
+ values->line_width = xvalues.line_width;
+
+ switch (xvalues.line_style)
+ {
+ case LineSolid:
+ values->line_style = GDK_LINE_SOLID;
+ break;
+ case LineOnOffDash:
+ values->line_style = GDK_LINE_ON_OFF_DASH;
+ break;
+ case LineDoubleDash:
+ values->line_style = GDK_LINE_DOUBLE_DASH;
+ break;
+ }
+
+ switch (xvalues.cap_style)
+ {
+ case CapNotLast:
+ values->cap_style = GDK_CAP_NOT_LAST;
+ break;
+ case CapButt:
+ values->cap_style = GDK_CAP_BUTT;
+ break;
+ case CapRound:
+ values->cap_style = GDK_CAP_ROUND;
+ break;
+ case CapProjecting:
+ values->cap_style = GDK_CAP_PROJECTING;
+ break;
+ }
+
+ switch (xvalues.join_style)
+ {
+ case JoinMiter:
+ values->join_style = GDK_JOIN_MITER;
+ break;
+ case JoinRound:
+ values->join_style = GDK_JOIN_ROUND;
+ break;
+ case JoinBevel:
+ values->join_style = GDK_JOIN_BEVEL;
+ break;
+ }
+ }
+ else
+ {
+ memset (values, 0, sizeof (GdkGCValues));
+ }
+}
+
+
+static void
+gdk_x11_gc_set_values (GdkGC *gc,
+ GdkGCValues *values,
+ GdkGCValuesMask values_mask)
+{
+ XGCValues xvalues;
+ unsigned long xvalues_mask = 0;
+
+ gdk_x11_gc_values_to_xvalues (values, values_mask, &xvalues, &xvalues_mask);
+
+ XChangeGC (GDK_GC_XDISPLAY (gc),
+ GDK_GC_XGC (gc),
+ xvalues_mask,
+ &xvalues);
+}
+
+static void
+gdk_x11_gc_set_dashes (GdkGC *gc,
+ gint dash_offset,
+ gchar dash_list[],
+ gint n)
+{
+ g_return_if_fail (gc != NULL);
+ g_return_if_fail (dash_list != NULL);
+
+ XSetDashes (GDK_GC_XDISPLAY (gc), GDK_GC_XGC (gc),
+ dash_offset, dash_list, n);
+}
+
+static void
+gdk_x11_gc_values_to_xvalues (GdkGCValues *values,
+ GdkGCValuesMask mask,
+ XGCValues *xvalues,
+ unsigned long *xvalues_mask)
+{
+ if (mask & GDK_GC_FOREGROUND)
+ {
+ xvalues->foreground = values->foreground.pixel;
+ *xvalues_mask |= GCForeground;
+ }
+ if (mask & GDK_GC_BACKGROUND)
+ {
+ xvalues->background = values->background.pixel;
+ *xvalues_mask |= GCBackground;
+ }
+ if ((mask & GDK_GC_FONT) && (values->font->type == GDK_FONT_FONT))
+ {
+ xvalues->font = ((XFontStruct *) (GDK_FONT_XFONT (values->font)))->fid;
+ *xvalues_mask |= GCFont;
+ }
+ if (mask & GDK_GC_FUNCTION)
+ {
+ switch (values->function)
+ {
+ case GDK_COPY:
+ xvalues->function = GXcopy;
+ break;
+ case GDK_INVERT:
+ xvalues->function = GXinvert;
+ break;
+ case GDK_XOR:
+ xvalues->function = GXxor;
+ break;
+ case GDK_CLEAR:
+ xvalues->function = GXclear;
+ break;
+ case GDK_AND:
+ xvalues->function = GXand;
+ break;
+ case GDK_AND_REVERSE:
+ xvalues->function = GXandReverse;
+ break;
+ case GDK_AND_INVERT:
+ xvalues->function = GXandInverted;
+ break;
+ case GDK_NOOP:
+ xvalues->function = GXnoop;
+ break;
+ case GDK_OR:
+ xvalues->function = GXor;
+ break;
+ case GDK_EQUIV:
+ xvalues->function = GXequiv;
+ break;
+ case GDK_OR_REVERSE:
+ xvalues->function = GXorReverse;
+ break;
+ case GDK_COPY_INVERT:
+ xvalues->function = GXcopyInverted;
+ break;
+ case GDK_OR_INVERT:
+ xvalues->function = GXorInverted;
+ break;
+ case GDK_NAND:
+ xvalues->function = GXnand;
+ break;
+ case GDK_SET:
+ xvalues->function = GXset;
+ break;
+ }
+ *xvalues_mask |= GCFunction;
+ }
+ if (mask & GDK_GC_FILL)
+ {
+ switch (values->fill)
+ {
+ case GDK_SOLID:
+ xvalues->fill_style = FillSolid;
+ break;
+ case GDK_TILED:
+ xvalues->fill_style = FillTiled;
+ break;
+ case GDK_STIPPLED:
+ xvalues->fill_style = FillStippled;
+ break;
+ case GDK_OPAQUE_STIPPLED:
+ xvalues->fill_style = FillOpaqueStippled;
+ break;
+ }
+ *xvalues_mask |= GCFillStyle;
+ }
+ if (mask & GDK_GC_TILE)
+ {
+ if (values->tile)
+ xvalues->tile = GDK_DRAWABLE_XID (values->tile);
+ else
+ xvalues->tile = None;
+
+ *xvalues_mask |= GCTile;
+ }
+ if (mask & GDK_GC_STIPPLE)
+ {
+ if (values->stipple)
+ xvalues->stipple = GDK_DRAWABLE_XID (values->stipple);
+ else
+ xvalues->stipple = None;
+
+ *xvalues_mask |= GCStipple;
+ }
+ if (mask & GDK_GC_CLIP_MASK)
+ {
+ if (values->clip_mask)
+ xvalues->clip_mask = GDK_DRAWABLE_XID (values->clip_mask);
+ else
+ xvalues->clip_mask = None;
+
+ *xvalues_mask |= GCClipMask;
+
+ }
+ if (mask & GDK_GC_SUBWINDOW)
+ {
+ xvalues->subwindow_mode = values->subwindow_mode;
+ *xvalues_mask |= GCSubwindowMode;
+ }
+ if (mask & GDK_GC_TS_X_ORIGIN)
+ {
+ xvalues->ts_x_origin = values->ts_x_origin;
+ *xvalues_mask |= GCTileStipXOrigin;
+ }
+ if (mask & GDK_GC_TS_Y_ORIGIN)
+ {
+ xvalues->ts_y_origin = values->ts_y_origin;
+ *xvalues_mask |= GCTileStipYOrigin;
+ }
+ if (mask & GDK_GC_CLIP_X_ORIGIN)
+ {
+ xvalues->clip_x_origin = values->clip_x_origin;
+ *xvalues_mask |= GCClipXOrigin;
+ }
+ if (mask & GDK_GC_CLIP_Y_ORIGIN)
+ {
+ xvalues->clip_y_origin = values->clip_y_origin;
+ *xvalues_mask |= GCClipYOrigin;
+ }
+
+ if (mask & GDK_GC_EXPOSURES)
+ xvalues->graphics_exposures = values->graphics_exposures;
+ else
+ xvalues->graphics_exposures = False;
+ *xvalues_mask |= GCGraphicsExposures;
+
+ if (mask & GDK_GC_LINE_WIDTH)
+ {
+ xvalues->line_width = values->line_width;
+ *xvalues_mask |= GCLineWidth;
+ }
+ if (mask & GDK_GC_LINE_STYLE)
+ {
+ switch (values->line_style)
+ {
+ case GDK_LINE_SOLID:
+ xvalues->line_style = LineSolid;
+ break;
+ case GDK_LINE_ON_OFF_DASH:
+ xvalues->line_style = LineOnOffDash;
+ break;
+ case GDK_LINE_DOUBLE_DASH:
+ xvalues->line_style = LineDoubleDash;
+ break;
+ }
+ *xvalues_mask |= GCLineStyle;
+ }
+ if (mask & GDK_GC_CAP_STYLE)
+ {
+ switch (values->cap_style)
+ {
+ case GDK_CAP_NOT_LAST:
+ xvalues->cap_style = CapNotLast;
+ break;
+ case GDK_CAP_BUTT:
+ xvalues->cap_style = CapButt;
+ break;
+ case GDK_CAP_ROUND:
+ xvalues->cap_style = CapRound;
+ break;
+ case GDK_CAP_PROJECTING:
+ xvalues->cap_style = CapProjecting;
+ break;
+ }
+ *xvalues_mask |= GCCapStyle;
+ }
+ if (mask & GDK_GC_JOIN_STYLE)
+ {
+ switch (values->join_style)
+ {
+ case GDK_JOIN_MITER:
+ xvalues->join_style = JoinMiter;
+ break;
+ case GDK_JOIN_ROUND:
+ xvalues->join_style = JoinRound;
+ break;
+ case GDK_JOIN_BEVEL:
+ xvalues->join_style = JoinBevel;
+ break;
+ }
+ *xvalues_mask |= GCJoinStyle;
+ }
+
+}
+
+void
+gdk_gc_set_clip_rectangle (GdkGC *gc,
+ GdkRectangle *rectangle)
+{
+ XRectangle xrectangle;
+
+ g_return_if_fail (gc != NULL);
+
+ if (rectangle)
+ {
+ xrectangle.x = rectangle->x;
+ xrectangle.y = rectangle->y;
+ xrectangle.width = rectangle->width;
+ xrectangle.height = rectangle->height;
+
+ XSetClipRectangles (GDK_GC_XDISPLAY (gc), GDK_GC_XGC (gc), 0, 0,
+ &xrectangle, 1, Unsorted);
+ }
+ else
+ XSetClipMask (GDK_GC_XDISPLAY (gc), GDK_GC_XGC (gc), None);
+}
+
+void
+gdk_gc_set_clip_region (GdkGC *gc,
+ GdkRegion *region)
+{
+ GdkGCPrivate *private;
+
+ g_return_if_fail (gc != NULL);
+
+ private = (GdkGCPrivate*) gc;
+
+ if (region)
+ {
+ GdkRegionPrivate *region_private;
+
+ region_private = (GdkRegionPrivate*) region;
+ XSetRegion (GDK_GC_XDISPLAY (gc), GDK_GC_XGC (gc), region_private->xregion);
+ }
+ else
+ XSetClipMask (GDK_GC_XDISPLAY (gc), GDK_GC_XGC (gc), None);
+}
+
+
+void
+gdk_gc_copy (GdkGC *dst_gc, GdkGC *src_gc)
+{
+ g_return_if_fail (dst_gc != NULL);
+ g_return_if_fail (src_gc != NULL);
+
+ XCopyGC (GDK_GC_XDISPLAY (src_gc), GDK_GC_XGC (src_gc), ~((~1) << GCLastBit),
+ GDK_GC_XGC (dst_gc));
+}
diff --git a/gdk/x11/gdkglobals-x11.c b/gdk/x11/gdkglobals-x11.c
index ae6c066f96..9a3d6c5f95 100644
--- a/gdk/x11/gdkglobals-x11.c
+++ b/gdk/x11/gdkglobals-x11.c
@@ -25,57 +25,31 @@
*/
#include <stdio.h>
-#include <X11/Xlib.h>
+
#include "gdktypes.h"
-#include "gdkprivate.h"
+#include "gdkprivate-x11.h"
#include "config.h"
-guint gdk_debug_flags = 0;
-gint gdk_use_xshm = TRUE;
+gboolean gdk_use_xshm = TRUE;
gchar *gdk_display_name = NULL;
Display *gdk_display = NULL;
gint gdk_screen;
Window gdk_root_window;
Window gdk_leader_window;
-GdkWindowPrivate gdk_root_parent = { { NULL, }, NULL, };
Atom gdk_wm_delete_window;
Atom gdk_wm_take_focus;
Atom gdk_wm_protocols;
Atom gdk_wm_window_protocols[2];
Atom gdk_selection_property;
-GdkDndCursorInfo gdk_dnd_cursorinfo = {None, None, NULL, NULL,
- {0,0}, {0,0}, NULL};
-GdkDndGlobals gdk_dnd = {None,None,None,
- None,None,None,
- None,
- &gdk_dnd_cursorinfo,
- NULL,
- 0,
- FALSE, FALSE, FALSE,
- None,
- {0,0},
- {0,0}, {0,0},
- {0,0,0,0}, NULL, None, 0};
gchar *gdk_progclass = NULL;
-gint gdk_error_code = 0;
-gint gdk_error_warnings = TRUE;
-gint gdk_null_window_warnings = TRUE;
-GList *gdk_default_filters = NULL;
+gboolean gdk_null_window_warnings = TRUE;
-gboolean gdk_xim_using; /* using XIM Protocol if TRUE */
+gboolean gdk_xim_using; /* using XIM Protocol if TRUE */
#ifdef USE_XIM
-GdkICPrivate *gdk_xim_ic; /* currently using IC */
+GdkICPrivate *gdk_xim_ic; /* currently using IC */
#endif /* USE_XIM */
-GdkWindow *gdk_xim_window; /* currently using Widow */
+GdkWindow *gdk_xim_window; /* currently using Widow */
GdkWindowPrivate *gdk_xgrab_window = NULL; /* Window that currently holds the
* x pointer grab
*/
-
-GMutex *gdk_threads_mutex = NULL; /* Global GDK lock */
-
-#ifdef USE_XIM
-GdkICPrivate *gdk_xim_ic; /* currently using IC */
-GdkWindow *gdk_xim_window; /* currently using Window */
-#endif
-
diff --git a/gdk/x11/gdkimage-x11.c b/gdk/x11/gdkimage-x11.c
index 4facec7e75..cee55c7115 100644
--- a/gdk/x11/gdkimage-x11.c
+++ b/gdk/x11/gdkimage-x11.c
@@ -58,26 +58,35 @@
#include "gdkprivate.h"
#include "gdkx.h"
-
-static void gdk_image_put_normal (GdkDrawable *drawable,
- GdkGC *gc,
- GdkImage *image,
- gint xsrc,
- gint ysrc,
- gint xdest,
- gint ydest,
- gint width,
- gint height);
-static void gdk_image_put_shared (GdkDrawable *drawable,
- GdkGC *gc,
- GdkImage *image,
- gint xsrc,
- gint ysrc,
- gint xdest,
- gint ydest,
- gint width,
- gint height);
-
+static void gdk_x11_image_destroy (GdkImage *image);
+static void gdk_image_put_normal (GdkImage *image,
+ GdkDrawable *drawable,
+ GdkGC *gc,
+ gint xsrc,
+ gint ysrc,
+ gint xdest,
+ gint ydest,
+ gint width,
+ gint height);
+static void gdk_image_put_shared (GdkImage *image,
+ GdkDrawable *drawable,
+ GdkGC *gc,
+ gint xsrc,
+ gint ysrc,
+ gint xdest,
+ gint ydest,
+ gint width,
+ gint height);
+
+static GdkImageClass image_class_normal = {
+ gdk_x11_image_destroy,
+ gdk_image_put_normal
+};
+
+static GdkImageClass image_class_shared = {
+ gdk_x11_image_destroy,
+ gdk_image_put_shared
+};
static GList *image_list = NULL;
@@ -90,7 +99,7 @@ gdk_image_exit (void)
while (image_list)
{
image = image_list->data;
- gdk_image_destroy (image);
+ gdk_x11_image_destroy (image);
}
}
@@ -102,11 +111,12 @@ gdk_image_new_bitmap(GdkVisual *visual, gpointer data, gint w, gint h)
{
Visual *xvisual;
GdkImage *image;
- GdkImagePrivate *private;
- private = g_new(GdkImagePrivate, 1);
+ GdkImagePrivateX *private;
+ private = g_new(GdkImagePrivateX, 1);
image = (GdkImage *) private;
private->xdisplay = gdk_display;
- private->image_put = gdk_image_put_normal;
+ private->base.ref_count = 1;
+ private->base.klass = &image_class_normal;
image->type = GDK_IMAGE_NORMAL;
image->visual = visual;
image->width = w;
@@ -168,7 +178,7 @@ gdk_image_new (GdkImageType type,
gint height)
{
GdkImage *image;
- GdkImagePrivate *private;
+ GdkImagePrivateX *private;
#ifdef USE_SHM
XShmSegmentInfo *x_shm_info;
#endif /* USE_SHM */
@@ -184,11 +194,11 @@ gdk_image_new (GdkImageType type,
break;
default:
- private = g_new (GdkImagePrivate, 1);
+ private = g_new (GdkImagePrivateX, 1);
image = (GdkImage*) private;
+ private->base.ref_count = 1;
private->xdisplay = gdk_display;
- private->image_put = NULL;
image->type = type;
image->visual = visual;
@@ -204,7 +214,7 @@ gdk_image_new (GdkImageType type,
#ifdef USE_SHM
if (gdk_use_xshm)
{
- private->image_put = gdk_image_put_shared;
+ private->base.klass = &image_class_shared;
private->x_shm_info = g_new (XShmSegmentInfo, 1);
x_shm_info = private->x_shm_info;
@@ -295,7 +305,7 @@ gdk_image_new (GdkImageType type,
return NULL;
#endif /* USE_SHM */
case GDK_IMAGE_NORMAL:
- private->image_put = gdk_image_put_normal;
+ private->base.klass = &image_class_normal;
private->ximage = XCreateImage (private->xdisplay, xvisual, visual->depth,
ZPixmap, 0, 0, width, height, 32, 0);
@@ -308,6 +318,7 @@ gdk_image_new (GdkImageType type,
break;
case GDK_IMAGE_FASTEST:
+ case GDK_IMAGE_SHARED_PIXMAP:
g_assert_not_reached ();
}
@@ -331,18 +342,19 @@ gdk_image_get (GdkWindow *window,
gint height)
{
GdkImage *image;
- GdkImagePrivate *private;
+ GdkImagePrivateX *private;
g_return_val_if_fail (window != NULL, NULL);
if (GDK_DRAWABLE_DESTROYED (window))
return NULL;
- private = g_new (GdkImagePrivate, 1);
+ private = g_new (GdkImagePrivateX, 1);
image = (GdkImage*) private;
+ private->base.ref_count = 1;
+ private->base.klass = &image_class_normal;
private->xdisplay = gdk_display;
- private->image_put = gdk_image_put_normal;
private->ximage = XGetImage (private->xdisplay,
GDK_DRAWABLE_XID (window),
x, y, width, height,
@@ -375,11 +387,11 @@ gdk_image_get_pixel (GdkImage *image,
gint y)
{
guint32 pixel;
- GdkImagePrivate *private;
+ GdkImagePrivateX *private;
g_return_val_if_fail (image != NULL, 0);
- private = (GdkImagePrivate *) image;
+ private = (GdkImagePrivateX *) image;
pixel = XGetPixel (private->ximage, x, y);
@@ -392,26 +404,26 @@ gdk_image_put_pixel (GdkImage *image,
gint y,
guint32 pixel)
{
- GdkImagePrivate *private;
+ GdkImagePrivateX *private;
g_return_if_fail (image != NULL);
- private = (GdkImagePrivate *) image;
+ private = (GdkImagePrivateX *) image;
pixel = XPutPixel (private->ximage, x, y, pixel);
}
-void
-gdk_image_destroy (GdkImage *image)
+static void
+gdk_x11_image_destroy (GdkImage *image)
{
- GdkImagePrivate *private;
+ GdkImagePrivateX *private;
#ifdef USE_SHM
XShmSegmentInfo *x_shm_info;
#endif /* USE_SHM */
g_return_if_fail (image != NULL);
- private = (GdkImagePrivate*) image;
+ private = (GdkImagePrivateX*) image;
switch (image->type)
{
case GDK_IMAGE_NORMAL:
@@ -437,6 +449,7 @@ gdk_image_destroy (GdkImage *image)
break;
case GDK_IMAGE_FASTEST:
+ case GDK_IMAGE_SHARED_PIXMAP:
g_assert_not_reached ();
}
@@ -444,9 +457,9 @@ gdk_image_destroy (GdkImage *image)
}
static void
-gdk_image_put_normal (GdkDrawable *drawable,
+gdk_image_put_normal (GdkImage *image,
+ GdkDrawable *drawable,
GdkGC *gc,
- GdkImage *image,
gint xsrc,
gint ysrc,
gint xdest,
@@ -454,8 +467,7 @@ gdk_image_put_normal (GdkDrawable *drawable,
gint width,
gint height)
{
- GdkImagePrivate *image_private;
- GdkGCPrivate *gc_private;
+ GdkImagePrivateX *image_private;
g_return_if_fail (drawable != NULL);
g_return_if_fail (image != NULL);
@@ -463,20 +475,19 @@ gdk_image_put_normal (GdkDrawable *drawable,
if (GDK_DRAWABLE_DESTROYED (drawable))
return;
- image_private = (GdkImagePrivate*) image;
- gc_private = (GdkGCPrivate*) gc;
+ image_private = (GdkImagePrivateX*) image;
g_return_if_fail (image->type == GDK_IMAGE_NORMAL);
XPutImage (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
- gc_private->xgc, image_private->ximage,
+ GDK_GC_XGC (gc), image_private->ximage,
xsrc, ysrc, xdest, ydest, width, height);
}
static void
-gdk_image_put_shared (GdkDrawable *drawable,
+gdk_image_put_shared (GdkImage *image,
+ GdkDrawable *drawable,
GdkGC *gc,
- GdkImage *image,
gint xsrc,
gint ysrc,
gint xdest,
@@ -485,8 +496,7 @@ gdk_image_put_shared (GdkDrawable *drawable,
gint height)
{
#ifdef USE_SHM
- GdkImagePrivate *image_private;
- GdkGCPrivate *gc_private;
+ GdkImagePrivateX *image_private;
g_return_if_fail (drawable != NULL);
g_return_if_fail (image != NULL);
@@ -494,13 +504,12 @@ gdk_image_put_shared (GdkDrawable *drawable,
if (GDK_DRAWABLE_DESTROYED (drawable))
return;
- image_private = (GdkImagePrivate*) image;
- gc_private = (GdkGCPrivate*) gc;
+ image_private = (GdkImagePrivateX*) image;
g_return_if_fail (image->type == GDK_IMAGE_SHARED);
XShmPutImage (GDK_DRAWABLE_XDISPLAY (drawable), GDK_DRAWABLE_XID (drawable),
- gc_private->xgc, image_private->ximage,
+ GDK_GC_XGC (gc), image_private->ximage,
xsrc, ysrc, xdest, ydest, width, height, False);
#else /* USE_SHM */
g_error ("trying to draw shared memory image when gdk was compiled without shared memory support");
diff --git a/gdk/x11/gdkinput-gxi.c b/gdk/x11/gdkinput-gxi.c
index 773a0436b7..982e85c7c8 100644
--- a/gdk/x11/gdkinput-gxi.c
+++ b/gdk/x11/gdkinput-gxi.c
@@ -24,8 +24,6 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
-#ifdef XINPUT_GXI
-
/* #define DEBUG_SWITCHING */
#include <gxid_lib.h>
@@ -645,5 +643,3 @@ gdk_input_gxi_ungrab_pointer (guint32 time)
tmp_list = tmp_list->next;
}
}
-
-#endif /* XINPUT_GXI */
diff --git a/gdk/x11/gdkinput-none.c b/gdk/x11/gdkinput-none.c
index 7695726bf7..f04ef190ea 100644
--- a/gdk/x11/gdkinput-none.c
+++ b/gdk/x11/gdkinput-none.c
@@ -24,8 +24,6 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
-#ifdef XINPUT_NONE
-
static void gdk_input_none_get_pointer (GdkWindow *window,
guint32 deviceid,
gdouble *x,
@@ -77,5 +75,3 @@ gdk_input_none_get_pointer (GdkWindow *window,
if (xtilt) *xtilt = 0;
if (ytilt) *ytilt = 0;
}
-
-#endif /* XINPUT_NONE */
diff --git a/gdk/x11/gdkinput-x11.c b/gdk/x11/gdkinput-x11.c
index d9bb835b89..4e395ef0ab 100644
--- a/gdk/x11/gdkinput-x11.c
+++ b/gdk/x11/gdkinput-x11.c
@@ -24,22 +24,12 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
-#if defined(XINPUT_GXI) || defined(XINPUT_XFREE)
+#include "gdkinputprivate.h"
+#include "gdkx.h"
/* Forward declarations */
-static void gdk_input_get_root_relative_geometry (Display *dpy, Window w,
- int *x_ret, int *y_ret,
- int *width_ret,
- int *height_ret);
static GdkDevicePrivate *gdk_input_device_new(XDeviceInfo *device,
gint include_core);
-static void gdk_input_common_find_events(GdkWindow *window,
- GdkDevicePrivate *gdkdev,
- gint mask,
- XEventClass *classes,
- int *num_classes);
-static void gdk_input_common_select_events(GdkWindow *window,
- GdkDevicePrivate *gdkdev);
static void gdk_input_translate_coordinates(GdkDevicePrivate *gdkdev,
GdkInputWindow *input_window,
gint *axis_data,
@@ -47,34 +37,21 @@ static void gdk_input_translate_coordinates(GdkDevicePrivate *gdkdev,
gdouble *pressure,
gdouble *xtilt, gdouble *ytilt);
static guint gdk_input_translate_state(guint state, guint device_state);
-static gint gdk_input_common_init(gint include_core);
-static gint gdk_input_common_other_event (GdkEvent *event,
- XEvent *xevent,
- GdkInputWindow *input_window,
- GdkDevicePrivate *gdkdev);
-static void gdk_input_common_set_axes (guint32 deviceid, GdkAxisUse *axes);
-static GdkTimeCoord * gdk_input_common_motion_events (GdkWindow *window,
- guint32 deviceid,
- guint32 start,
- guint32 stop,
- gint *nevents_return);
-static void gdk_input_common_get_pointer (GdkWindow *window,
- guint32 deviceid,
- gdouble *x,
- gdouble *y,
- gdouble *pressure,
- gdouble *xtilt,
- gdouble *ytilt,
- GdkModifierType *mask);
-
-#define GDK_MAX_DEVICE_CLASSES 13
+void gdk_input_common_get_pointer (GdkWindow *window,
+ guint32 deviceid,
+ gdouble *x,
+ gdouble *y,
+ gdouble *pressure,
+ gdouble *xtilt,
+ gdouble *ytilt,
+ GdkModifierType *mask);
/* Global variables */
static gint gdk_input_root_width;
static gint gdk_input_root_height;
-static void
+void
gdk_input_get_root_relative_geometry(Display *dpy, Window w, int *x_ret, int *y_ret,
int *width_ret, int *height_ret)
{
@@ -301,7 +278,7 @@ gdk_input_device_new(XDeviceInfo *device, gint include_core)
return gdkdev;
}
-static void
+void
gdk_input_common_find_events(GdkWindow *window,
GdkDevicePrivate *gdkdev,
gint mask,
@@ -403,7 +380,7 @@ gdk_input_common_find_events(GdkWindow *window,
*num_classes = i;
}
-static void
+void
gdk_input_common_select_events(GdkWindow *window,
GdkDevicePrivate *gdkdev)
{
@@ -460,7 +437,7 @@ gdk_input_common_init(gint include_core)
XFreeDeviceList(devices);
}
- gdk_input_devices = g_list_append (gdk_input_devices, &gdk_input_core_info);
+ gdk_input_devices = g_list_append (gdk_input_devices, (gpointer)&gdk_input_core_info);
return TRUE;
}
@@ -581,10 +558,11 @@ gdk_input_translate_state(guint state, guint device_state)
return device_state | (state & 0xFF);
}
-static gint
-gdk_input_common_other_event (GdkEvent *event,
- XEvent *xevent,
- GdkInputWindow *input_window,
+
+gint
+gdk_input_common_other_event (GdkEvent *event,
+ XEvent *xevent,
+ GdkInputWindow *input_window,
GdkDevicePrivate *gdkdev)
{
if ((xevent->type == gdkdev->buttonpress_type) ||
@@ -736,7 +714,7 @@ gdk_input_common_other_event (GdkEvent *event,
return -1; /* wasn't one of our event types */
}
-static void
+void
gdk_input_common_set_axes (guint32 deviceid, GdkAxisUse *axes)
{
int i;
@@ -755,10 +733,11 @@ gdk_input_common_set_axes (guint32 deviceid, GdkAxisUse *axes)
}
}
-void gdk_input_common_set_key (guint32 deviceid,
- guint index,
- guint keyval,
- GdkModifierType modifiers)
+void
+gdk_input_common_set_key (guint32 deviceid,
+ guint index,
+ guint keyval,
+ GdkModifierType modifiers)
{
GdkDevicePrivate *gdkdev = gdk_input_find_device(deviceid);
@@ -770,7 +749,7 @@ void gdk_input_common_set_key (guint32 deviceid,
gdkdev->info.keys[index].modifiers = modifiers;
}
-static GdkTimeCoord *
+GdkTimeCoord *
gdk_input_common_motion_events (GdkWindow *window,
guint32 deviceid,
guint32 start,
@@ -819,7 +798,7 @@ gdk_input_common_motion_events (GdkWindow *window,
return NULL;
}
-static void
+void
gdk_input_common_get_pointer (GdkWindow *window,
guint32 deviceid,
gdouble *x,
@@ -888,5 +867,3 @@ gdk_input_common_get_pointer (GdkWindow *window,
}
}
}
-
-#endif
diff --git a/gdk/x11/gdkinput-xfree.c b/gdk/x11/gdkinput-xfree.c
index d4020ae163..6cb6d87b6d 100644
--- a/gdk/x11/gdkinput-xfree.c
+++ b/gdk/x11/gdkinput-xfree.c
@@ -17,6 +17,9 @@
* Boston, MA 02111-1307, USA.
*/
+#include "gdkinputprivate.h"
+#include "gdkx.h"
+
/*
* Modified by the GTK+ Team and others 1997-1999. See the AUTHORS
* file for a list of people on the GTK+ Team. See the ChangeLog
@@ -24,8 +27,6 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
-#ifdef XINPUT_XFREE
-
/* forward declarations */
static gint gdk_input_xfree_set_mode (guint32 deviceid, GdkInputMode mode);
@@ -42,10 +43,10 @@ static gint gdk_input_xfree_enable_window(GdkWindow *window,
static gint gdk_input_xfree_disable_window(GdkWindow *window,
GdkDevicePrivate *gdkdev);
static gint gdk_input_xfree_grab_pointer (GdkWindow * window,
- gint owner_events,
- GdkEventMask event_mask,
- GdkWindow * confine_to,
- guint32 time);
+ gint owner_events,
+ GdkEventMask event_mask,
+ GdkWindow * confine_to,
+ guint32 time);
static void gdk_input_xfree_ungrab_pointer (guint32 time);
void
@@ -370,5 +371,3 @@ gdk_input_xfree_ungrab_pointer (guint32 time)
}
}
}
-
-#endif /* XINPUT_XFREE */
diff --git a/gdk/x11/gdkinput.c b/gdk/x11/gdkinput.c
index 334c3d46d8..348251458d 100644
--- a/gdk/x11/gdkinput.c
+++ b/gdk/x11/gdkinput.c
@@ -34,21 +34,9 @@
#include "gdkprivate.h"
#include "gdkinputprivate.h"
-/* Forward declarations */
-
-static gint gdk_input_enable_window (GdkWindow *window,
- GdkDevicePrivate *gdkdev);
-static gint gdk_input_disable_window (GdkWindow *window,
- GdkDevicePrivate *gdkdev);
-static GdkInputWindow *gdk_input_window_find (GdkWindow *window);
-static GdkDevicePrivate *gdk_input_find_device (guint32 id);
-
-
-/* Incorporate the specific routines depending on compilation options */
-
static const GdkAxisUse gdk_input_core_axes[] = { GDK_AXIS_X, GDK_AXIS_Y };
-static const GdkDeviceInfo gdk_input_core_info =
+const GdkDeviceInfo gdk_input_core_info =
{
GDK_CORE_POINTER,
"Core Pointer",
@@ -67,15 +55,8 @@ gchar *gdk_input_gxid_host;
gint gdk_input_gxid_port;
gint gdk_input_ignore_core;
-/* Local variables */
-
-static GList *gdk_input_devices;
-static GList *gdk_input_windows;
-
-#include "gdkinputnone.h"
-#include "gdkinputcommon.h"
-#include "gdkinputxfree.h"
-#include "gdkinputgxi.h"
+GList *gdk_input_devices;
+GList *gdk_input_windows;
GList *
gdk_input_list_devices (void)
@@ -178,7 +159,7 @@ gdk_input_motion_events (GdkWindow *window,
}
}
-static gint
+gint
gdk_input_enable_window (GdkWindow *window, GdkDevicePrivate *gdkdev)
{
if (gdk_input_vtable.enable_window)
@@ -187,7 +168,7 @@ gdk_input_enable_window (GdkWindow *window, GdkDevicePrivate *gdkdev)
return TRUE;
}
-static gint
+gint
gdk_input_disable_window (GdkWindow *window, GdkDevicePrivate *gdkdev)
{
if (gdk_input_vtable.disable_window)
@@ -197,7 +178,7 @@ gdk_input_disable_window (GdkWindow *window, GdkDevicePrivate *gdkdev)
}
-static GdkInputWindow *
+GdkInputWindow *
gdk_input_window_find(GdkWindow *window)
{
GList *tmp_list;
@@ -324,7 +305,7 @@ gdk_input_exit (void)
g_list_free(gdk_input_windows);
}
-static GdkDevicePrivate *
+GdkDevicePrivate *
gdk_input_find_device(guint32 id)
{
GList *tmp_list = gdk_input_devices;
diff --git a/gdk/x11/gdkinputprivate.h b/gdk/x11/gdkinputprivate.h
index 0f41c462b4..d1f8a66d14 100644
--- a/gdk/x11/gdkinputprivate.h
+++ b/gdk/x11/gdkinputprivate.h
@@ -27,6 +27,10 @@
#ifndef __GDK_INPUTPRIVATE_H__
#define __GDK_INPUTPRIVATE_H__
+#include "config.h"
+#include "gdkinput.h"
+#include "gdkevents.h"
+
#ifndef XINPUT_NONE
#include <X11/extensions/XInput.h>
#endif
@@ -147,6 +151,10 @@ struct _GdkInputWindow
/* Global data */
+extern const GdkDeviceInfo gdk_input_core_info;
+extern GList *gdk_input_devices;
+extern GList *gdk_input_windows;
+
extern GdkInputVTable gdk_input_vtable;
/* information about network port and host for gxid daemon */
extern gchar *gdk_input_gxid_host;
@@ -155,8 +163,63 @@ extern gint gdk_input_ignore_core;
/* Function declarations */
+GdkDevicePrivate * gdk_input_find_device (guint32 id);
+GdkInputWindow * gdk_input_window_find (GdkWindow *window);
+void gdk_input_window_destroy (GdkWindow *window);
+void gdk_input_init (void);
+void gdk_input_exit (void);
+gint gdk_input_enable_window (GdkWindow *window,
+ GdkDevicePrivate *gdkdev);
+gint gdk_input_disable_window (GdkWindow *window,
+ GdkDevicePrivate *gdkdev);
+
+#ifndef XINPUT_NONE
+
+#define GDK_MAX_DEVICE_CLASSES 13
+
+gint gdk_input_common_init (gint include_core);
+void gdk_input_get_root_relative_geometry (Display *dpy,
+ Window w,
+ int *x_ret,
+ int *y_ret,
+ int *width_ret,
+ int *height_ret);
+void gdk_input_common_find_events (GdkWindow *window,
+ GdkDevicePrivate *gdkdev,
+ gint mask,
+ XEventClass *classes,
+ int *num_classes);
+void gdk_input_common_select_events (GdkWindow *window,
+ GdkDevicePrivate *gdkdev);
+gint gdk_input_common_other_event (GdkEvent *event,
+ XEvent *xevent,
+ GdkInputWindow *input_window,
+ GdkDevicePrivate *gdkdev);
+void gdk_input_common_get_pointer (GdkWindow *window,
+ guint32 deviceid,
+ gdouble *x,
+ gdouble *y,
+ gdouble *pressure,
+ gdouble *xtilt,
+ gdouble *ytilt,
+ GdkModifierType *mask);
+void gdk_input_common_set_key (guint32 deviceid,
+ guint index,
+ guint keyval,
+ GdkModifierType modifiers);
+void gdk_input_common_set_axes (guint32 deviceid,
+ GdkAxisUse *axes);
+GdkTimeCoord * gdk_input_common_motion_events (GdkWindow *window,
+ guint32 deviceid,
+ guint32 start,
+ guint32 stop,
+ gint *nevents_return);
+
+#endif /* !XINPUT_NONE */
+
+GdkDevicePrivate *gdk_input_find_device (guint32 id);
+GdkInputWindow *gdk_input_window_find (GdkWindow *window);
void gdk_input_window_destroy (GdkWindow *window);
-void gdk_input_init (void);
void gdk_input_exit (void);
#endif /* __GDK_INPUTPRIVATE_H__ */
diff --git a/gdk/x11/gdkmain-x11.c b/gdk/x11/gdkmain-x11.c
index 4e8b83f803..de696cca98 100644
--- a/gdk/x11/gdkmain-x11.c
+++ b/gdk/x11/gdkmain-x11.c
@@ -77,15 +77,10 @@ static void gdkx_XConvertCase (KeySym symbol,
#define XConvertCase gdkx_XConvertCase
#endif
-static void gdk_exit_func (void);
static int gdk_x_error (Display *display,
XErrorEvent *error);
static int gdk_x_io_error (Display *display);
-GdkFilterReturn gdk_wm_protocols_filter (GdkXEvent *xev,
- GdkEvent *event,
- gpointer data);
-
/* Private variable declarations
*/
static int gdk_initialized = 0; /* 1 if the library is initialized,
@@ -93,9 +88,7 @@ static int gdk_initialized = 0; /* 1 if the library is initialized,
*/
static gint autorepeat;
-
-static GSList *gdk_error_traps = NULL; /* List of error traps */
-static GSList *gdk_error_trap_free_list = NULL; /* Free list */
+static gboolean gdk_synchronize = FALSE;
#ifdef G_ENABLE_DEBUG
static const GDebugKey gdk_debug_keys[] = {
@@ -110,258 +103,60 @@ static const int gdk_ndebug_keys = sizeof(gdk_debug_keys)/sizeof(GDebugKey);
#endif /* G_ENABLE_DEBUG */
-/*
- *--------------------------------------------------------------
- * gdk_init_heck
- *
- * Initialize the library for use.
- *
- * Arguments:
- * "argc" is the number of arguments.
- * "argv" is an array of strings.
- *
- * Results:
- * "argc" and "argv" are modified to reflect any arguments
- * which were not handled. (Such arguments should either
- * be handled by the application or dismissed). If initialization
- * fails, returns FALSE, otherwise TRUE.
- *
- * Side effects:
- * The library is initialized.
- *
- *--------------------------------------------------------------
- */
+static void
+gdk_arg_xim_preedit_cb (const gchar *arg, const gchar *value, gpointer cb_data)
+{
+ if (strcmp ("none", value) == 0)
+ gdk_im_set_best_style (GDK_IM_PREEDIT_NONE);
+ else if (strcmp ("nothing", value) == 0)
+ gdk_im_set_best_style (GDK_IM_PREEDIT_NOTHING);
+ else if (strcmp ("area", value) == 0)
+ gdk_im_set_best_style (GDK_IM_PREEDIT_AREA);
+ else if (strcmp ("position", value) == 0)
+ gdk_im_set_best_style (GDK_IM_PREEDIT_POSITION);
+ else if (strcmp ("callbacks", value) == 0)
+ gdk_im_set_best_style (GDK_IM_PREEDIT_CALLBACKS);
+}
+
+static void
+gdk_arg_xim_status_cb (const gchar *arg, const gchar *value, gpointer cb_data)
+{
+ if (strcmp ("none", value) == 0)
+ gdk_im_set_best_style (GDK_IM_STATUS_NONE);
+ else if (strcmp ("nothing", value) == 0)
+ gdk_im_set_best_style (GDK_IM_STATUS_NOTHING);
+ else if (strcmp ("area", value) == 0)
+ gdk_im_set_best_style (GDK_IM_STATUS_AREA);
+ else if (strcmp ("callbacks", value) == 0)
+ gdk_im_set_best_style (GDK_IM_STATUS_CALLBACKS);
+}
+
+GdkArgDesc _gdk_windowing_args[] = {
+ { "display", GDK_ARG_STRING, &gdk_display_name, (GdkArgFunc)NULL },
+ { "sync", GDK_ARG_BOOL, &gdk_synchronize, (GdkArgFunc)NULL },
+ { "no-xshm", GDK_ARG_NOBOOL, &gdk_use_xshm, (GdkArgFunc)NULL },
+ { "class", GDK_ARG_STRING, &gdk_progclass, (GdkArgFunc)NULL },
+ { "gxid-host", GDK_ARG_STRING, &gdk_input_gxid_host, (GdkArgFunc)NULL },
+ { "gxid-port", GDK_ARG_INT, &gdk_input_gxid_port, (GdkArgFunc)NULL },
+ { "xim-preedit", GDK_ARG_CALLBACK, NULL, gdk_arg_xim_preedit_cb },
+ { "xim-status", GDK_ARG_CALLBACK, NULL, gdk_arg_xim_status_cb },
+ { NULL }
+};
gboolean
-gdk_init_check (int *argc,
- char ***argv)
+_gdk_windowing_init_check (int argc, char **argv)
{
XKeyboardState keyboard_state;
- gint synchronize;
- gint i, j, k;
XClassHint *class_hint;
- gchar **argv_orig = NULL;
- gint argc_orig = 0;
-
- if (gdk_initialized)
- return TRUE;
-
- if (g_thread_supported ())
- gdk_threads_mutex = g_mutex_new ();
-
- if (argc && argv)
- {
- argc_orig = *argc;
-
- argv_orig = g_malloc ((argc_orig + 1) * sizeof (char*));
- for (i = 0; i < argc_orig; i++)
- argv_orig[i] = g_strdup ((*argv)[i]);
- argv_orig[argc_orig] = NULL;
- }
-
- gdk_display_name = NULL;
XSetErrorHandler (gdk_x_error);
XSetIOErrorHandler (gdk_x_io_error);
- synchronize = FALSE;
-
-#ifdef G_ENABLE_DEBUG
- {
- gchar *debug_string = getenv("GDK_DEBUG");
- if (debug_string != NULL)
- gdk_debug_flags = g_parse_debug_string (debug_string,
- (GDebugKey *) gdk_debug_keys,
- gdk_ndebug_keys);
- }
-#endif /* G_ENABLE_DEBUG */
-
- if (argc && argv)
- {
- if (*argc > 0)
- {
- gchar *d;
-
- d = strrchr((*argv)[0],'/');
- if (d != NULL)
- g_set_prgname (d + 1);
- else
- g_set_prgname ((*argv)[0]);
- }
-
- for (i = 1; i < *argc;)
- {
-#ifdef G_ENABLE_DEBUG
- if ((strcmp ("--gdk-debug", (*argv)[i]) == 0) ||
- (strncmp ("--gdk-debug=", (*argv)[i], 12) == 0))
- {
- gchar *equal_pos = strchr ((*argv)[i], '=');
-
- if (equal_pos != NULL)
- {
- gdk_debug_flags |= g_parse_debug_string (equal_pos+1,
- (GDebugKey *) gdk_debug_keys,
- gdk_ndebug_keys);
- }
- else if ((i + 1) < *argc && (*argv)[i + 1])
- {
- gdk_debug_flags |= g_parse_debug_string ((*argv)[i+1],
- (GDebugKey *) gdk_debug_keys,
- gdk_ndebug_keys);
- (*argv)[i] = NULL;
- i += 1;
- }
- (*argv)[i] = NULL;
- }
- else if ((strcmp ("--gdk-no-debug", (*argv)[i]) == 0) ||
- (strncmp ("--gdk-no-debug=", (*argv)[i], 15) == 0))
- {
- gchar *equal_pos = strchr ((*argv)[i], '=');
-
- if (equal_pos != NULL)
- {
- gdk_debug_flags &= ~g_parse_debug_string (equal_pos+1,
- (GDebugKey *) gdk_debug_keys,
- gdk_ndebug_keys);
- }
- else if ((i + 1) < *argc && (*argv)[i + 1])
- {
- gdk_debug_flags &= ~g_parse_debug_string ((*argv)[i+1],
- (GDebugKey *) gdk_debug_keys,
- gdk_ndebug_keys);
- (*argv)[i] = NULL;
- i += 1;
- }
- (*argv)[i] = NULL;
- }
- else
-#endif /* G_ENABLE_DEBUG */
- if (strcmp ("--display", (*argv)[i]) == 0)
- {
- (*argv)[i] = NULL;
-
- if ((i + 1) < *argc && (*argv)[i + 1])
- {
- gdk_display_name = g_strdup ((*argv)[i + 1]);
- (*argv)[i + 1] = NULL;
- i += 1;
- }
- }
- else if (strcmp ("--sync", (*argv)[i]) == 0)
- {
- (*argv)[i] = NULL;
- synchronize = TRUE;
- }
- else if (strcmp ("--no-xshm", (*argv)[i]) == 0)
- {
- (*argv)[i] = NULL;
- gdk_use_xshm = FALSE;
- }
- else if (strcmp ("--name", (*argv)[i]) == 0)
- {
- if ((i + 1) < *argc && (*argv)[i + 1])
- {
- (*argv)[i++] = NULL;
- g_set_prgname ((*argv)[i]);
- (*argv)[i] = NULL;
- }
- }
- else if (strcmp ("--class", (*argv)[i]) == 0)
- {
- if ((i + 1) < *argc && (*argv)[i + 1])
- {
- (*argv)[i++] = NULL;
- gdk_progclass = (*argv)[i];
- (*argv)[i] = NULL;
- }
- }
-#ifdef XINPUT_GXI
- else if (strcmp ("--gxid_host", (*argv)[i]) == 0)
- {
- if ((i + 1) < *argc && (*argv)[i + 1])
- {
- (*argv)[i++] = NULL;
- gdk_input_gxid_host = ((*argv)[i]);
- (*argv)[i] = NULL;
- }
- }
- else if (strcmp ("--gxid_port", (*argv)[i]) == 0)
- {
- if ((i + 1) < *argc && (*argv)[i + 1])
- {
- (*argv)[i++] = NULL;
- gdk_input_gxid_port = atoi ((*argv)[i]);
- (*argv)[i] = NULL;
- }
- }
-#endif
-#ifdef USE_XIM
- else if (strcmp ("--xim-preedit", (*argv)[i]) == 0)
- {
- if ((i + 1) < *argc && (*argv)[i + 1])
- {
- (*argv)[i++] = NULL;
- if (strcmp ("none", (*argv)[i]) == 0)
- gdk_im_set_best_style (GDK_IM_PREEDIT_NONE);
- else if (strcmp ("nothing", (*argv)[i]) == 0)
- gdk_im_set_best_style (GDK_IM_PREEDIT_NOTHING);
- else if (strcmp ("area", (*argv)[i]) == 0)
- gdk_im_set_best_style (GDK_IM_PREEDIT_AREA);
- else if (strcmp ("position", (*argv)[i]) == 0)
- gdk_im_set_best_style (GDK_IM_PREEDIT_POSITION);
- else if (strcmp ("callbacks", (*argv)[i]) == 0)
- gdk_im_set_best_style (GDK_IM_PREEDIT_CALLBACKS);
- (*argv)[i] = NULL;
- }
- }
- else if (strcmp ("--xim-status", (*argv)[i]) == 0)
- {
- if ((i + 1) < *argc && (*argv)[i + 1])
- {
- (*argv)[i++] = NULL;
- if (strcmp ("none", (*argv)[i]) == 0)
- gdk_im_set_best_style (GDK_IM_STATUS_NONE);
- else if (strcmp ("nothing", (*argv)[i]) == 0)
- gdk_im_set_best_style (GDK_IM_STATUS_NOTHING);
- else if (strcmp ("area", (*argv)[i]) == 0)
- gdk_im_set_best_style (GDK_IM_STATUS_AREA);
- else if (strcmp ("callbacks", (*argv)[i]) == 0)
- gdk_im_set_best_style (GDK_IM_STATUS_CALLBACKS);
- (*argv)[i] = NULL;
- }
- }
-#endif
-
- i += 1;
- }
-
- for (i = 1; i < *argc; i++)
- {
- for (k = i; k < *argc; k++)
- if ((*argv)[k] != NULL)
- break;
-
- if (k > i)
- {
- k -= i;
- for (j = i + k; j < *argc; j++)
- (*argv)[j-k] = (*argv)[j];
- *argc -= k;
- }
- }
- }
- else
- {
- g_set_prgname ("<unknown>");
- }
-
- GDK_NOTE (MISC, g_message ("progname: \"%s\"", g_get_prgname ()));
-
gdk_display = XOpenDisplay (gdk_display_name);
if (!gdk_display)
return FALSE;
- if (synchronize)
+ if (gdk_synchronize)
XSynchronize (gdk_display, True);
gdk_screen = DefaultScreen (gdk_display);
@@ -378,14 +173,10 @@ gdk_init_check (int *argc,
}
class_hint->res_class = gdk_progclass;
XmbSetWMProperties (gdk_display, gdk_leader_window,
- NULL, NULL, argv_orig, argc_orig,
+ NULL, NULL, argv, argc,
NULL, NULL, class_hint);
XFree (class_hint);
- for (i = 0; i < argc_orig; i++)
- g_free(argv_orig[i]);
- g_free(argv_orig);
-
gdk_wm_delete_window = XInternAtom (gdk_display, "WM_DELETE_WINDOW", False);
gdk_wm_take_focus = XInternAtom (gdk_display, "WM_TAKE_FOCUS", False);
gdk_wm_protocols = XInternAtom (gdk_display, "WM_PROTOCOLS", False);
@@ -396,62 +187,10 @@ gdk_init_check (int *argc,
XGetKeyboardControl (gdk_display, &keyboard_state);
autorepeat = keyboard_state.global_auto_repeat;
- g_atexit (gdk_exit_func);
-
- gdk_events_init ();
- gdk_visual_init ();
- gdk_window_init ();
- gdk_image_init ();
- gdk_input_init ();
- gdk_dnd_init ();
-
-#ifdef USE_XIM
- gdk_im_open ();
-#endif
-
- gdk_initialized = 1;
-
return TRUE;
}
void
-gdk_init (int *argc, char ***argv)
-{
- if (!gdk_init_check (argc, argv))
- {
- g_warning ("cannot open display: %s", gdk_get_display ());
- exit(1);
- }
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_exit
- *
- * Restores the library to an un-itialized state and exits
- * the program using the "exit" system call.
- *
- * Arguments:
- * "errorcode" is the error value to pass to "exit".
- *
- * Results:
- * Allocated structures are freed and the program exits
- * cleanly.
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_exit (gint errorcode)
-{
- /* de-initialisation is done by the gdk_exit_funct(),
- no need to do this here (Alex J.) */
- exit (errorcode);
-}
-
-void
gdk_set_use_xshm (gint use_xshm)
{
gdk_use_xshm = use_xshm;
@@ -822,50 +561,10 @@ gdk_beep (void)
XBell(gdk_display, 0);
}
-/*
- *--------------------------------------------------------------
- * gdk_exit_func
- *
- * This is the "atexit" function that makes sure the
- * library gets a chance to cleanup.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- * The library is un-initialized and the program exits.
- *
- *--------------------------------------------------------------
- */
-
-static void
-gdk_exit_func (void)
+void
+gdk_windowing_exit (void)
{
- static gboolean in_gdk_exit_func = FALSE;
-
- /* This is to avoid an infinite loop if a program segfaults in
- an atexit() handler (and yes, it does happen, especially if a program
- has trounced over memory too badly for even g_message to work) */
- if (in_gdk_exit_func == TRUE)
- return;
- in_gdk_exit_func = TRUE;
-
- if (gdk_initialized)
- {
-#ifdef USE_XIM
- /* cleanup IC */
- gdk_ic_cleanup ();
- /* close IM */
- gdk_im_close ();
-#endif
- gdk_image_exit ();
- gdk_input_exit ();
- gdk_key_repeat_restore ();
-
- XCloseDisplay (gdk_display);
- gdk_initialized = 0;
- }
+ XCloseDisplay (gdk_display);
}
/*
@@ -977,77 +676,6 @@ gdk_get_display (void)
return (gchar *)XDisplayName (gdk_display_name);
}
-/*************************************************************
- * gdk_error_trap_push:
- * Push an error trap. X errors will be trapped until
- * the corresponding gdk_error_pop(), which will return
- * the error code, if any.
- * arguments:
- *
- * results:
- *************************************************************/
-
-void
-gdk_error_trap_push (void)
-{
- GSList *node;
- GdkErrorTrap *trap;
-
- if (gdk_error_trap_free_list)
- {
- node = gdk_error_trap_free_list;
- gdk_error_trap_free_list = gdk_error_trap_free_list->next;
- }
- else
- {
- node = g_slist_alloc ();
- node->data = g_new (GdkErrorTrap, 1);
- }
-
- node->next = gdk_error_traps;
- gdk_error_traps = node;
-
- trap = node->data;
- trap->error_code = gdk_error_code;
- trap->error_warnings = gdk_error_warnings;
-
- gdk_error_code = 0;
- gdk_error_warnings = 0;
-}
-
-/*************************************************************
- * gdk_error_trap_pop:
- * Pop an error trap added with gdk_error_push()
- * arguments:
- *
- * results:
- * 0, if no error occured, otherwise the error code.
- *************************************************************/
-
-gint
-gdk_error_trap_pop (void)
-{
- GSList *node;
- GdkErrorTrap *trap;
- gint result;
-
- g_return_val_if_fail (gdk_error_traps != NULL, 0);
-
- node = gdk_error_traps;
- gdk_error_traps = gdk_error_traps->next;
-
- node->next = gdk_error_trap_free_list;
- gdk_error_trap_free_list = node;
-
- result = gdk_error_code;
-
- trap = node->data;
- gdk_error_code = trap->error_code;
- gdk_error_warnings = trap->error_warnings;
-
- return result;
-}
-
gint
gdk_send_xevent (Window window, gboolean propagate, glong event_mask,
XEvent *event_send)
@@ -1065,138 +693,6 @@ gdk_send_xevent (Window window, gboolean propagate, glong event_mask,
return result && !gdk_error_code;
}
-#ifndef HAVE_XCONVERTCASE
-/* compatibility function from X11R6.3, since XConvertCase is not
- * supplied by X11R5.
- */
-static void
-gdkx_XConvertCase (KeySym symbol,
- KeySym *lower,
- KeySym *upper)
-{
- register KeySym sym = symbol;
-
- g_return_if_fail (lower != NULL);
- g_return_if_fail (upper != NULL);
-
- *lower = sym;
- *upper = sym;
-
- switch (sym >> 8)
- {
-#if defined (GDK_A) && defined (GDK_Ooblique)
- case 0: /* Latin 1 */
- if ((sym >= GDK_A) && (sym <= GDK_Z))
- *lower += (GDK_a - GDK_A);
- else if ((sym >= GDK_a) && (sym <= GDK_z))
- *upper -= (GDK_a - GDK_A);
- else if ((sym >= GDK_Agrave) && (sym <= GDK_Odiaeresis))
- *lower += (GDK_agrave - GDK_Agrave);
- else if ((sym >= GDK_agrave) && (sym <= GDK_odiaeresis))
- *upper -= (GDK_agrave - GDK_Agrave);
- else if ((sym >= GDK_Ooblique) && (sym <= GDK_Thorn))
- *lower += (GDK_oslash - GDK_Ooblique);
- else if ((sym >= GDK_oslash) && (sym <= GDK_thorn))
- *upper -= (GDK_oslash - GDK_Ooblique);
- break;
-#endif /* LATIN1 */
-
-#if defined (GDK_Aogonek) && defined (GDK_tcedilla)
- case 1: /* Latin 2 */
- /* Assume the KeySym is a legal value (ignore discontinuities) */
- if (sym == GDK_Aogonek)
- *lower = GDK_aogonek;
- else if (sym >= GDK_Lstroke && sym <= GDK_Sacute)
- *lower += (GDK_lstroke - GDK_Lstroke);
- else if (sym >= GDK_Scaron && sym <= GDK_Zacute)
- *lower += (GDK_scaron - GDK_Scaron);
- else if (sym >= GDK_Zcaron && sym <= GDK_Zabovedot)
- *lower += (GDK_zcaron - GDK_Zcaron);
- else if (sym == GDK_aogonek)
- *upper = GDK_Aogonek;
- else if (sym >= GDK_lstroke && sym <= GDK_sacute)
- *upper -= (GDK_lstroke - GDK_Lstroke);
- else if (sym >= GDK_scaron && sym <= GDK_zacute)
- *upper -= (GDK_scaron - GDK_Scaron);
- else if (sym >= GDK_zcaron && sym <= GDK_zabovedot)
- *upper -= (GDK_zcaron - GDK_Zcaron);
- else if (sym >= GDK_Racute && sym <= GDK_Tcedilla)
- *lower += (GDK_racute - GDK_Racute);
- else if (sym >= GDK_racute && sym <= GDK_tcedilla)
- *upper -= (GDK_racute - GDK_Racute);
- break;
-#endif /* LATIN2 */
-
-#if defined (GDK_Hstroke) && defined (GDK_Cabovedot)
- case 2: /* Latin 3 */
- /* Assume the KeySym is a legal value (ignore discontinuities) */
- if (sym >= GDK_Hstroke && sym <= GDK_Hcircumflex)
- *lower += (GDK_hstroke - GDK_Hstroke);
- else if (sym >= GDK_Gbreve && sym <= GDK_Jcircumflex)
- *lower += (GDK_gbreve - GDK_Gbreve);
- else if (sym >= GDK_hstroke && sym <= GDK_hcircumflex)
- *upper -= (GDK_hstroke - GDK_Hstroke);
- else if (sym >= GDK_gbreve && sym <= GDK_jcircumflex)
- *upper -= (GDK_gbreve - GDK_Gbreve);
- else if (sym >= GDK_Cabovedot && sym <= GDK_Scircumflex)
- *lower += (GDK_cabovedot - GDK_Cabovedot);
- else if (sym >= GDK_cabovedot && sym <= GDK_scircumflex)
- *upper -= (GDK_cabovedot - GDK_Cabovedot);
- break;
-#endif /* LATIN3 */
-
-#if defined (GDK_Rcedilla) && defined (GDK_Amacron)
- case 3: /* Latin 4 */
- /* Assume the KeySym is a legal value (ignore discontinuities) */
- if (sym >= GDK_Rcedilla && sym <= GDK_Tslash)
- *lower += (GDK_rcedilla - GDK_Rcedilla);
- else if (sym >= GDK_rcedilla && sym <= GDK_tslash)
- *upper -= (GDK_rcedilla - GDK_Rcedilla);
- else if (sym == GDK_ENG)
- *lower = GDK_eng;
- else if (sym == GDK_eng)
- *upper = GDK_ENG;
- else if (sym >= GDK_Amacron && sym <= GDK_Umacron)
- *lower += (GDK_amacron - GDK_Amacron);
- else if (sym >= GDK_amacron && sym <= GDK_umacron)
- *upper -= (GDK_amacron - GDK_Amacron);
- break;
-#endif /* LATIN4 */
-
-#if defined (GDK_Serbian_DJE) && defined (GDK_Cyrillic_yu)
- case 6: /* Cyrillic */
- /* Assume the KeySym is a legal value (ignore discontinuities) */
- if (sym >= GDK_Serbian_DJE && sym <= GDK_Serbian_DZE)
- *lower -= (GDK_Serbian_DJE - GDK_Serbian_dje);
- else if (sym >= GDK_Serbian_dje && sym <= GDK_Serbian_dze)
- *upper += (GDK_Serbian_DJE - GDK_Serbian_dje);
- else if (sym >= GDK_Cyrillic_YU && sym <= GDK_Cyrillic_HARDSIGN)
- *lower -= (GDK_Cyrillic_YU - GDK_Cyrillic_yu);
- else if (sym >= GDK_Cyrillic_yu && sym <= GDK_Cyrillic_hardsign)
- *upper += (GDK_Cyrillic_YU - GDK_Cyrillic_yu);
- break;
-#endif /* CYRILLIC */
-
-#if defined (GDK_Greek_ALPHAaccent) && defined (GDK_Greek_finalsmallsigma)
- case 7: /* Greek */
- /* Assume the KeySym is a legal value (ignore discontinuities) */
- if (sym >= GDK_Greek_ALPHAaccent && sym <= GDK_Greek_OMEGAaccent)
- *lower += (GDK_Greek_alphaaccent - GDK_Greek_ALPHAaccent);
- else if (sym >= GDK_Greek_alphaaccent && sym <= GDK_Greek_omegaaccent &&
- sym != GDK_Greek_iotaaccentdieresis &&
- sym != GDK_Greek_upsilonaccentdieresis)
- *upper -= (GDK_Greek_alphaaccent - GDK_Greek_ALPHAaccent);
- else if (sym >= GDK_Greek_ALPHA && sym <= GDK_Greek_OMEGA)
- *lower += (GDK_Greek_alpha - GDK_Greek_ALPHA);
- else if (sym >= GDK_Greek_alpha && sym <= GDK_Greek_omega &&
- sym != GDK_Greek_finalsmallsigma)
- *upper -= (GDK_Greek_alpha - GDK_Greek_ALPHA);
- break;
-#endif /* GREEK */
- }
-}
-#endif
-
gchar*
gdk_keyval_name (guint keyval)
{
@@ -1211,71 +707,21 @@ gdk_keyval_from_name (const gchar *keyval_name)
return XStringToKeysym (keyval_name);
}
-guint
-gdk_keyval_to_upper (guint keyval)
-{
- if (keyval)
- {
- KeySym lower_val = 0;
- KeySym upper_val = 0;
-
- XConvertCase (keyval, &lower_val, &upper_val);
- return upper_val;
- }
- return 0;
-}
-
-guint
-gdk_keyval_to_lower (guint keyval)
-{
- if (keyval)
- {
- KeySym lower_val = 0;
- KeySym upper_val = 0;
-
- XConvertCase (keyval, &lower_val, &upper_val);
- return lower_val;
- }
- return 0;
-}
-
-gboolean
-gdk_keyval_is_upper (guint keyval)
-{
- if (keyval)
- {
- KeySym lower_val = 0;
- KeySym upper_val = 0;
-
- XConvertCase (keyval, &lower_val, &upper_val);
- return upper_val == keyval;
- }
- return TRUE;
-}
-
-gboolean
-gdk_keyval_is_lower (guint keyval)
-{
- if (keyval)
- {
- KeySym lower_val = 0;
- KeySym upper_val = 0;
-
- XConvertCase (keyval, &lower_val, &upper_val);
- return lower_val == keyval;
- }
- return TRUE;
-}
-
-void
-gdk_threads_enter ()
-{
- GDK_THREADS_ENTER ();
-}
-
+#ifdef HAVE_XCONVERTCASE
void
-gdk_threads_leave ()
-{
- GDK_THREADS_LEAVE ();
-}
-
+gdk_keyval_convert_case (guint symbol,
+ guint *lower,
+ guint *upper)
+{
+ KeySym xlower = 0;
+ KeySym xupper = 0;
+
+ if (symbol)
+ XConvertCase (symbol, &xlower, &xupper);
+
+ if (lower)
+ *lower = xlower;
+ if (upper)
+ *upper = xupper;
+}
+#endif HAVE_XCONVERTCASE
diff --git a/gdk/x11/gdkpixmap-x11.c b/gdk/x11/gdkpixmap-x11.c
index 8ee69db9cd..c27517c9a3 100644
--- a/gdk/x11/gdkpixmap-x11.c
+++ b/gdk/x11/gdkpixmap-x11.c
@@ -50,6 +50,44 @@ typedef struct
gulong pixels[1];
} _GdkPixmapInfo;
+GdkDrawableClass _gdk_x11_pixmap_class;
+
+static void
+gdk_x11_pixmap_destroy (GdkPixmap *pixmap)
+{
+ XFreePixmap (GDK_DRAWABLE_XDISPLAY (pixmap), GDK_DRAWABLE_XID (pixmap));
+ gdk_xid_table_remove (GDK_DRAWABLE_XID (pixmap));
+
+ g_free (GDK_DRAWABLE_XDATA (pixmap));
+}
+
+static GdkDrawable *
+gdk_x11_pixmap_alloc (void)
+{
+ GdkDrawable *drawable;
+ GdkDrawablePrivate *private;
+
+ static GdkDrawableClass klass;
+ static gboolean initialized = FALSE;
+
+ if (!initialized)
+ {
+ initialized = TRUE;
+
+ klass = _gdk_x11_drawable_class;
+ klass.destroy = gdk_x11_pixmap_destroy;
+ }
+
+ drawable = gdk_drawable_alloc ();
+ private = (GdkDrawablePrivate *)drawable;
+
+ private->klass = &klass;
+ private->klass_data = g_new (GdkDrawableXData, 1);
+ private->window_type = GDK_DRAWABLE_PIXMAP;
+
+ return drawable;
+}
+
GdkPixmap*
gdk_pixmap_new (GdkWindow *window,
gint width,
@@ -62,9 +100,9 @@ gdk_pixmap_new (GdkWindow *window,
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
g_return_val_if_fail ((window != NULL) || (depth != -1), NULL);
g_return_val_if_fail ((width != 0) && (height != 0), NULL);
-
+
if (!window)
- window = (GdkWindow*) &gdk_root_parent;
+ window = gdk_parent_root;
if (GDK_DRAWABLE_DESTROYED (window))
return NULL;
@@ -72,21 +110,17 @@ gdk_pixmap_new (GdkWindow *window,
if (depth == -1)
depth = gdk_drawable_get_visual (window)->depth;
- private = g_new0 (GdkDrawablePrivate, 1);
- pixmap = (GdkPixmap*) private;
+ pixmap = gdk_x11_pixmap_alloc ();
+ private = (GdkDrawablePrivate *)pixmap;
- private->xdisplay = GDK_DRAWABLE_XDISPLAY (window);
- private->window_type = GDK_DRAWABLE_PIXMAP;
- private->xwindow = XCreatePixmap (private->xdisplay,
- GDK_DRAWABLE_XID (window),
- width, height, depth);
- private->colormap = NULL;
+ GDK_DRAWABLE_XDATA (private)->xdisplay = GDK_DRAWABLE_XDISPLAY (window);
+ GDK_DRAWABLE_XDATA (private)->xid = XCreatePixmap (GDK_DRAWABLE_XDISPLAY (pixmap),
+ GDK_DRAWABLE_XID (window),
+ width, height, depth);
private->width = width;
private->height = height;
- private->ref_count = 1;
- private->destroyed = 0;
- gdk_xid_table_insert (&private->xwindow, pixmap);
+ gdk_xid_table_insert (&GDK_DRAWABLE_XID (pixmap), pixmap);
return pixmap;
}
@@ -105,26 +139,23 @@ gdk_bitmap_create_from_data (GdkWindow *window,
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
if (!window)
- window = (GdkWindow*) &gdk_root_parent;
+ window = gdk_parent_root;
if (GDK_DRAWABLE_DESTROYED (window))
return NULL;
- private = g_new0 (GdkDrawablePrivate, 1);
- pixmap = (GdkPixmap*) private;
+ pixmap = gdk_x11_pixmap_alloc ();
+ private = (GdkDrawablePrivate *)pixmap;
- private->xdisplay = GDK_DRAWABLE_XDISPLAY (window);
- private->window_type = GDK_DRAWABLE_PIXMAP;
private->width = width;
private->height = height;
- private->ref_count = 1;
- private->destroyed = FALSE;
- private->xwindow = XCreateBitmapFromData (private->xdisplay,
- GDK_DRAWABLE_XID (window),
- (char *)data, width, height);
+ GDK_DRAWABLE_XDATA (private)->xdisplay = GDK_DRAWABLE_XDISPLAY (window);
+ GDK_DRAWABLE_XDATA (private)->xid = XCreateBitmapFromData (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
+ (char *)data, width, height);
- gdk_xid_table_insert (&private->xwindow, pixmap);
+ gdk_xid_table_insert (&GDK_DRAWABLE_XID (pixmap), pixmap);
return pixmap;
}
@@ -149,7 +180,7 @@ gdk_pixmap_create_from_data (GdkWindow *window,
g_return_val_if_fail ((width != 0) && (height != 0), NULL);
if (!window)
- window = (GdkWindow*) &gdk_root_parent;
+ window = gdk_parent_root;
if (GDK_DRAWABLE_DESTROYED (window))
return NULL;
@@ -157,22 +188,19 @@ gdk_pixmap_create_from_data (GdkWindow *window,
if (depth == -1)
depth = gdk_drawable_get_visual (window)->depth;
- private = g_new0 (GdkDrawablePrivate, 1);
- pixmap = (GdkPixmap*) private;
+ pixmap = gdk_x11_pixmap_alloc ();
+ private = (GdkDrawablePrivate *)pixmap;
- private->xdisplay = GDK_DRAWABLE_XDISPLAY (window);
- private->window_type = GDK_DRAWABLE_PIXMAP;
private->width = width;
private->height = height;
- private->ref_count = 1;
- private->destroyed = FALSE;
- private->xwindow = XCreatePixmapFromBitmapData (private->xdisplay,
- GDK_DRAWABLE_XID (window),
- (char *)data, width, height,
- fg->pixel, bg->pixel, depth);
+ GDK_DRAWABLE_XDATA (private)->xdisplay = GDK_DRAWABLE_XDISPLAY (window);
+ GDK_DRAWABLE_XDATA (private)->xid = XCreatePixmapFromBitmapData (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
+ (char *)data, width, height,
+ fg->pixel, bg->pixel, depth);
- gdk_xid_table_insert (&private->xwindow, pixmap);
+ gdk_xid_table_insert (&GDK_DRAWABLE_XID (pixmap), pixmap);
return pixmap;
}
@@ -443,7 +471,7 @@ _gdk_pixmap_create_from_xpm (GdkWindow *window,
g_warning ("Creating pixmap from xpm with NULL window and colormap");
if (window == NULL)
- window = (GdkWindow *)&gdk_root_parent;
+ window = gdk_parent_root;
if (colormap == NULL)
{
@@ -588,7 +616,7 @@ _gdk_pixmap_create_from_xpm (GdkWindow *window,
error:
if (mask)
- gdk_gc_destroy (gc);
+ gdk_gc_unref (gc);
if (image != NULL)
{
@@ -601,8 +629,8 @@ _gdk_pixmap_create_from_xpm (GdkWindow *window,
gc = gdk_gc_new (pixmap);
gdk_gc_set_foreground (gc, transparent_color);
gdk_draw_image (pixmap, gc, image, 0, 0, 0, 0, image->width, image->height);
- gdk_gc_destroy (gc);
- gdk_image_destroy (image);
+ gdk_gc_unref (gc);
+ gdk_image_unref (image);
}
else if (color_info)
gdk_xpm_destroy_notify (color_info);
@@ -766,61 +794,16 @@ gdk_pixmap_foreign_new (guint32 anid)
&x_ret, &y_ret, &w_ret, &h_ret, &bw_ret, &depth_ret))
return NULL;
- /* allocate a new gdk pixmap */
- private = g_new(GdkDrawablePrivate, 1);
- pixmap = (GdkPixmap *)private;
+ pixmap = gdk_x11_pixmap_alloc ();
+ private = (GdkDrawablePrivate *)pixmap;
+
+ GDK_DRAWABLE_XDATA (private)->xdisplay = GDK_DISPLAY ();
+ GDK_DRAWABLE_XDATA (private)->xid = xpixmap;
- private->xdisplay = GDK_DISPLAY();
- private->window_type = GDK_DRAWABLE_PIXMAP;
- private->xwindow = xpixmap;
- private->colormap = NULL;
private->width = w_ret;
private->height = h_ret;
- private->ref_count = 1;
- private->destroyed = 0;
- gdk_xid_table_insert(&private->xwindow, pixmap);
+ gdk_xid_table_insert(&GDK_DRAWABLE_XID (pixmap), pixmap);
return pixmap;
}
-
-GdkPixmap*
-gdk_pixmap_ref (GdkPixmap *pixmap)
-{
- GdkDrawablePrivate *private = (GdkDrawablePrivate *)pixmap;
- g_return_val_if_fail (pixmap != NULL, NULL);
- g_return_val_if_fail (GDK_IS_PIXMAP (private), NULL);
-
- private->ref_count += 1;
- return pixmap;
-}
-
-void
-gdk_pixmap_unref (GdkPixmap *pixmap)
-{
- GdkDrawablePrivate *private = (GdkDrawablePrivate *)pixmap;
- g_return_if_fail (pixmap != NULL);
- g_return_if_fail (GDK_IS_PIXMAP (private));
- g_return_if_fail (private->ref_count > 0);
-
- private->ref_count -= 1;
- if (private->ref_count == 0)
- {
- XFreePixmap (private->xdisplay, private->xwindow);
- gdk_xid_table_remove (private->xwindow);
- g_dataset_destroy (private);
- g_free (private);
- }
-}
-
-GdkBitmap *
-gdk_bitmap_ref (GdkBitmap *bitmap)
-{
- return (GdkBitmap *)gdk_pixmap_ref ((GdkPixmap *)bitmap);
-}
-
-void
-gdk_bitmap_unref (GdkBitmap *bitmap)
-{
- gdk_pixmap_unref ((GdkPixmap *)bitmap);
-}
diff --git a/gdk/x11/gdkprivate-x11.h b/gdk/x11/gdkprivate-x11.h
new file mode 100644
index 0000000000..27d3451dec
--- /dev/null
+++ b/gdk/x11/gdkprivate-x11.h
@@ -0,0 +1,158 @@
+#ifndef __GDK_PRIVATE_X11_H__
+#define __GDK_PRIVATE_X11_H__
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#include <gdk/gdkfont.h>
+#include <gdk/gdkprivate.h>
+#include <gdk/gdkcursor.h>
+
+typedef struct _GdkGCXData GdkGCXData;
+typedef struct _GdkDrawableXData GdkDrawableXData;
+typedef struct _GdkColormapPrivateX GdkColormapPrivateX;
+typedef struct _GdkCursorPrivate GdkCursorPrivate;
+typedef struct _GdkFontPrivateX GdkFontPrivateX;
+typedef struct _GdkImagePrivateX GdkImagePrivateX;
+typedef struct _GdkVisualPrivate GdkVisualPrivate;
+typedef struct _GdkRegionPrivate GdkRegionPrivate;
+
+#ifdef USE_XIM
+typedef struct _GdkICPrivate GdkICPrivate;
+#endif /* USE_XIM */
+
+#define GDK_DRAWABLE_XDATA(win) ((GdkDrawableXData *)(((GdkDrawablePrivate*)(win))->klass_data))
+#define GDK_GC_XDATA(gc) ((GdkGCXData *)(((GdkGCPrivate*)(gc))->klass_data))
+
+struct _GdkGCXData
+{
+ GC xgc;
+ Display *xdisplay;
+};
+
+struct _GdkDrawableXData
+{
+ Window xid;
+ Display *xdisplay;
+};
+
+struct _GdkCursorPrivate
+{
+ GdkCursor cursor;
+ Cursor xcursor;
+ Display *xdisplay;
+};
+
+struct _GdkFontPrivateX
+{
+ GdkFontPrivate base;
+ /* XFontStruct *xfont; */
+ /* generic pointer point to XFontStruct or XFontSet */
+ gpointer xfont;
+ Display *xdisplay;
+
+ GSList *names;
+};
+
+struct _GdkVisualPrivate
+{
+ GdkVisual visual;
+ Visual *xvisual;
+};
+
+struct _GdkColormapPrivateX
+{
+ GdkColormapPrivate base;
+
+ Colormap xcolormap;
+ Display *xdisplay;
+ gint private_val;
+
+ GHashTable *hash;
+ GdkColorInfo *info;
+ time_t last_sync_time;
+};
+
+struct _GdkImagePrivateX
+{
+ GdkImagePrivate base;
+
+ XImage *ximage;
+ Display *xdisplay;
+ gpointer x_shm_info;
+};
+
+struct _GdkRegionPrivate
+{
+ GdkRegion region;
+ Region xregion;
+};
+
+
+#ifdef USE_XIM
+
+struct _GdkICPrivate
+{
+ XIC xic;
+ GdkICAttr *attr;
+ GdkICAttributesType mask;
+};
+
+#endif /* USE_XIM */
+
+void gdk_xid_table_insert (XID *xid,
+ gpointer data);
+void gdk_xid_table_remove (XID xid);
+gpointer gdk_xid_table_lookup (XID xid);
+gint gdk_send_xevent (Window window,
+ gboolean propagate,
+ glong event_mask,
+ XEvent *event_send);
+GdkGC * _gdk_x11_gc_new (GdkDrawable *drawable,
+ GdkGCValues *values,
+ GdkGCValuesMask values_mask);
+GdkColormap * gdk_colormap_lookup (Colormap xcolormap);
+GdkVisual * gdk_visual_lookup (Visual *xvisual);
+
+/* Please see gdkwindow.c for comments on how to use */
+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);
+
+extern GdkDrawableClass _gdk_x11_drawable_class;
+extern gboolean gdk_use_xshm;
+extern gchar *gdk_display_name;
+extern Display *gdk_display;
+extern Window gdk_root_window;
+extern Window gdk_leader_window;
+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 GdkWindow *selection_owner[];
+extern gchar *gdk_progclass;
+extern gboolean gdk_null_window_warnings;
+extern const int gdk_nevent_masks;
+extern const int gdk_event_mask_table[];
+
+extern GdkWindowPrivate *gdk_xgrab_window; /* Window that currently holds the
+ * x pointer grab
+ */
+
+#ifdef USE_XIM
+extern GdkICPrivate *gdk_xim_ic; /* currently using IC */
+extern GdkWindow *gdk_xim_window; /* currently using Window */
+#endif /* USE_XIM */
+
+
+#endif /* __GDK_PRIVATE_X11_H__ */
+
diff --git a/gdk/x11/gdkproperty-x11.c b/gdk/x11/gdkproperty-x11.c
index b91b787d1b..ee270b1e74 100644
--- a/gdk/x11/gdkproperty-x11.c
+++ b/gdk/x11/gdkproperty-x11.c
@@ -39,6 +39,8 @@ gdk_atom_intern (const gchar *atom_name,
GdkAtom retval;
static GHashTable *atom_hash = NULL;
+ g_return_val_if_fail (atom_name != NULL, GDK_NONE);
+
if (!atom_hash)
atom_hash = g_hash_table_new (g_str_hash, g_str_equal);
@@ -110,13 +112,16 @@ gdk_property_get (GdkWindow *window,
gulong ret_length;
guchar *ret_data;
+ g_return_val_if_fail (window != NULL, FALSE);
+ g_return_val_if_fail (!GDK_IS_WINDOW (window), FALSE);
+
if (window)
{
if (GDK_DRAWABLE_DESTROYED (window))
return FALSE;
- xdisplay = GDK_WINDOW_XDISPLAY (window);
- xwindow = GDK_WINDOW_XWINDOW (window);
+ xdisplay = GDK_DRAWABLE_XDISPLAY (window);
+ xwindow = GDK_DRAWABLE_XID (window);
}
else
{
@@ -196,13 +201,16 @@ gdk_property_change (GdkWindow *window,
Display *xdisplay;
Window xwindow;
+ g_return_if_fail (window != NULL);
+ g_return_if_fail (!GDK_IS_WINDOW (window));
+
if (window)
{
if (GDK_DRAWABLE_DESTROYED (window))
return;
- xdisplay = GDK_WINDOW_XDISPLAY (window);
- xwindow = GDK_WINDOW_XWINDOW (window);
+ xdisplay = GDK_DRAWABLE_XDISPLAY (window);
+ xwindow = GDK_DRAWABLE_XID (window);
}
else
{
@@ -221,13 +229,16 @@ gdk_property_delete (GdkWindow *window,
Display *xdisplay;
Window xwindow;
+ g_return_if_fail (window != NULL);
+ g_return_if_fail (!GDK_IS_WINDOW (window));
+
if (window)
{
if (GDK_DRAWABLE_DESTROYED (window))
return;
- xdisplay = GDK_WINDOW_XDISPLAY (window);
- xwindow = GDK_WINDOW_XWINDOW (window);
+ xdisplay = GDK_DRAWABLE_XDISPLAY (window);
+ xwindow = GDK_DRAWABLE_XID (window);
}
else
{
diff --git a/gdk/x11/gdkregion-x11.c b/gdk/x11/gdkregion-x11.c
index d09f38865d..b21aba8938 100644
--- a/gdk/x11/gdkregion-x11.c
+++ b/gdk/x11/gdkregion-x11.c
@@ -26,11 +26,7 @@
#include <X11/Xlib.h>
#include <X11/Xutil.h>
-#include "gdk.h"
-#include "gdkprivate.h"
-
-
-
+#include "gdkprivate-x11.h"
GdkRegion*
gdk_region_new (void)
diff --git a/gdk/x11/gdkvisual-x11.c b/gdk/x11/gdkvisual-x11.c
index 072ff456e5..bb007d4a9b 100644
--- a/gdk/x11/gdkvisual-x11.c
+++ b/gdk/x11/gdkvisual-x11.c
@@ -28,7 +28,7 @@
#include <X11/Xutil.h>
#include "gdkvisual.h"
-#include "gdkprivate.h"
+#include "gdkprivate-x11.h"
static void gdk_visual_add (GdkVisual *visual);
static void gdk_visual_decompose_mask (gulong mask,
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
index 16bdb37d7c..74cf7d953d 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -33,7 +33,7 @@
#include "gdkwindow.h"
#include "gdkinputprivate.h"
-#include "gdkprivate.h"
+#include "gdkprivate-x11.h"
#include "gdkx.h"
#include "MwmUtil.h"
@@ -77,144 +77,50 @@ static void gdk_window_set_static_win_gravity (GdkWindow *window,
gboolean on);
static gboolean gdk_window_have_shape_ext (void);
-/* internal function created for and used by gdk_window_xid_at_coords */
-Window
-gdk_window_xid_at (Window base,
- gint bx,
- gint by,
- gint x,
- gint y,
- GList *excludes,
- gboolean excl_child)
+static void
+gdk_x11_window_destroy (GdkDrawable *drawable)
{
- GdkWindow *window;
- GdkDrawablePrivate *private;
- Display *disp;
- Window *list = NULL;
- Window child = 0, parent_win = 0, root_win = 0;
- int i;
- unsigned int ww, wh, wb, wd, num;
- int wx, wy;
-
- window = (GdkWindow*) &gdk_root_parent;
- private = (GdkDrawablePrivate*) window;
- disp = private->xdisplay;
- if (!XGetGeometry (disp, base, &root_win, &wx, &wy, &ww, &wh, &wb, &wd))
- return 0;
- wx += bx;
- wy += by;
-
- if (!((x >= wx) &&
- (y >= wy) &&
- (x < (int) (wx + ww)) &&
- (y < (int) (wy + wh))))
- return 0;
-
- if (!XQueryTree (disp, base, &root_win, &parent_win, &list, &num))
- return base;
-
- if (list)
+ if (!GDK_DRAWABLE_DESTROYED (drawable))
{
- for (i = num - 1; ; i--)
- {
- if ((!excl_child) || (!g_list_find (excludes, (gpointer *) list[i])))
- {
- if ((child = gdk_window_xid_at (list[i], wx, wy, x, y, excludes, excl_child)) != 0)
- {
- XFree (list);
- return child;
- }
- }
- if (!i)
- break;
- }
- XFree (list);
+ if (GDK_DRAWABLE_TYPE (drawable) == GDK_WINDOW_FOREIGN)
+ gdk_xid_table_remove (GDK_DRAWABLE_XID (drawable));
+ else
+ g_warning ("losing last reference to undestroyed window\n");
}
- return base;
+
+ g_free (GDK_DRAWABLE_XDATA (drawable));
}
-/*
- * The following fucntion by The Rasterman <raster@redhat.com>
- * This function returns the X Window ID in which the x y location is in
- * (x and y being relative to the root window), excluding any windows listed
- * in the GList excludes (this is a list of X Window ID's - gpointer being
- * the Window ID).
- *
- * This is primarily designed for internal gdk use - for DND for example
- * when using a shaped icon window as the drag object - you exclude the
- * X Window ID of the "icon" (perhaps more if excludes may be needed) and
- * You can get back an X Window ID as to what X Window ID is infact under
- * those X,Y co-ordinates.
- */
-Window
-gdk_window_xid_at_coords (gint x,
- gint y,
- GList *excludes,
- gboolean excl_child)
+static GdkWindow *
+gdk_x11_window_alloc (void)
{
GdkWindow *window;
- GdkDrawablePrivate *private;
- Display *disp;
- Window *list = NULL;
- Window root, child = 0, parent_win = 0, root_win = 0;
- unsigned int num;
- int i;
-
- window = (GdkWindow*) &gdk_root_parent;
- private = (GdkDrawablePrivate*) window;
- disp = private->xdisplay;
- root = private->xwindow;
- num = g_list_length (excludes);
+ GdkWindowPrivate *private;
- XGrabServer (disp);
- if (!XQueryTree (disp, root, &root_win, &parent_win, &list, &num))
- {
- XUngrabServer (disp);
- return root;
- }
- if (list)
+ static GdkDrawableClass klass;
+ static gboolean initialized = FALSE;
+
+ if (!initialized)
{
- i = num - 1;
- do
- {
- XWindowAttributes xwa;
-
- XGetWindowAttributes (disp, list [i], &xwa);
-
- if (xwa.map_state != IsViewable)
- continue;
-
- if (excl_child && g_list_find (excludes, (gpointer *) list[i]))
- continue;
-
- if ((child = gdk_window_xid_at (list[i], 0, 0, x, y, excludes, excl_child)) == 0)
- continue;
-
- if (excludes)
- {
- if (!g_list_find (excludes, (gpointer *) child))
- {
- XFree (list);
- XUngrabServer (disp);
- return child;
- }
- }
- else
- {
- XFree (list);
- XUngrabServer (disp);
- return child;
- }
- } while (--i > 0);
- XFree (list);
+ initialized = TRUE;
+
+ klass = _gdk_x11_drawable_class;
+ klass.destroy = gdk_x11_window_destroy;
}
- XUngrabServer (disp);
- return root;
+
+ window = _gdk_window_alloc ();
+ private = (GdkWindowPrivate *)window;
+
+ private->drawable.klass = &klass;
+ private->drawable.klass_data = g_new (GdkDrawableXData, 1);
+
+ return window;
}
void
gdk_window_init (void)
{
+ GdkWindowPrivate *private;
XWindowAttributes xattributes;
unsigned int width;
unsigned int height;
@@ -225,18 +131,18 @@ gdk_window_init (void)
XGetGeometry (gdk_display, gdk_root_window, &gdk_root_window,
&x, &y, &width, &height, &border_width, &depth);
XGetWindowAttributes (gdk_display, gdk_root_window, &xattributes);
+
+ gdk_parent_root = gdk_x11_window_alloc ();
+ private = (GdkWindowPrivate *)gdk_parent_root;
+
+ GDK_DRAWABLE_XDATA (gdk_parent_root)->xdisplay = gdk_display;
+ GDK_DRAWABLE_XDATA (gdk_parent_root)->xid = gdk_root_window;
+
+ private->drawable.window_type = GDK_WINDOW_ROOT;
+ private->drawable.width = width;
+ private->drawable.height = height;
- gdk_root_parent.drawable.xwindow = gdk_root_window;
- gdk_root_parent.drawable.xdisplay = gdk_display;
- gdk_root_parent.drawable.window_type = GDK_WINDOW_ROOT;
- gdk_root_parent.drawable.drawable.user_data = NULL;
- gdk_root_parent.drawable.width = width;
- gdk_root_parent.drawable.height = height;
- gdk_root_parent.children = NULL;
- gdk_root_parent.drawable.colormap = NULL;
- gdk_root_parent.drawable.ref_count = 1;
-
- gdk_xid_table_insert (&gdk_root_window, &gdk_root_parent);
+ gdk_xid_table_insert (&gdk_root_window, gdk_parent_root);
}
static GdkAtom wm_client_leader_atom = GDK_NONE;
@@ -249,16 +155,18 @@ gdk_window_new (GdkWindow *parent,
GdkWindow *window;
GdkWindowPrivate *private;
GdkWindowPrivate *parent_private;
+
GdkVisual *visual;
- Display *parent_display;
Window xparent;
Visual *xvisual;
+
XSetWindowAttributes xattributes;
long xattributes_mask;
XSizeHints size_hints;
XWMHints wm_hints;
XClassHint *class_hint;
int x, y, depth;
+
unsigned int class;
char *title;
int i;
@@ -266,26 +174,21 @@ gdk_window_new (GdkWindow *parent,
g_return_val_if_fail (attributes != NULL, NULL);
if (!parent)
- parent = (GdkWindow*) &gdk_root_parent;
+ parent = gdk_parent_root;
parent_private = (GdkWindowPrivate*) parent;
if (GDK_DRAWABLE_DESTROYED (parent))
return NULL;
- xparent = parent_private->drawable.xwindow;
- parent_display = parent_private->drawable.xdisplay;
+ xparent = GDK_DRAWABLE_XID (parent);
- private = g_new (GdkWindowPrivate, 1);
- window = (GdkWindow*) private;
+ window = gdk_x11_window_alloc ();
+ private = (GdkWindowPrivate *)window;
+
+ GDK_DRAWABLE_XDATA (window)->xdisplay = GDK_DRAWABLE_XDISPLAY (parent);
private->parent = parent;
-
- private->drawable.xdisplay = parent_display;
- private->drawable.destroyed = FALSE;
- private->mapped = FALSE;
- private->guffaw_gravity = FALSE;
- private->resize_count = 0;
- private->drawable.ref_count = 1;
+
xattributes_mask = 0;
if (attributes_mask & GDK_WA_X)
@@ -303,12 +206,6 @@ gdk_window_new (GdkWindow *parent,
private->drawable.width = (attributes->width > 1) ? (attributes->width) : (1);
private->drawable.height = (attributes->height > 1) ? (attributes->height) : (1);
private->drawable.window_type = attributes->window_type;
- private->extension_events = FALSE;
-
- private->filters = NULL;
- private->children = NULL;
-
- window->user_data = NULL;
if (attributes_mask & GDK_WA_VISUAL)
visual = attributes->visual;
@@ -363,26 +260,26 @@ gdk_window_new (GdkWindow *parent,
switch (private->drawable.window_type)
{
case GDK_WINDOW_TOPLEVEL:
- xattributes.colormap = ((GdkColormapPrivate*) private->drawable.colormap)->xcolormap;
+ xattributes.colormap = GDK_COLORMAP_XCOLORMAP (private->drawable.colormap);
xattributes_mask |= CWColormap;
xparent = gdk_root_window;
break;
case GDK_WINDOW_CHILD:
- xattributes.colormap = ((GdkColormapPrivate*) private->drawable.colormap)->xcolormap;
+ xattributes.colormap = GDK_COLORMAP_XCOLORMAP (private->drawable.colormap);
xattributes_mask |= CWColormap;
break;
case GDK_WINDOW_DIALOG:
- xattributes.colormap = ((GdkColormapPrivate*) private->drawable.colormap)->xcolormap;
+ xattributes.colormap = GDK_COLORMAP_XCOLORMAP (private->drawable.colormap);
xattributes_mask |= CWColormap;
xparent = gdk_root_window;
break;
case GDK_WINDOW_TEMP:
- xattributes.colormap = ((GdkColormapPrivate*) private->drawable.colormap)->xcolormap;
+ xattributes.colormap = GDK_COLORMAP_XCOLORMAP (private->drawable.colormap);
xattributes_mask |= CWColormap;
xparent = gdk_root_window;
@@ -406,13 +303,14 @@ gdk_window_new (GdkWindow *parent,
class = InputOnly;
private->drawable.colormap = NULL;
}
-
- private->drawable.xwindow = XCreateWindow (private->drawable.xdisplay, xparent,
- x, y, private->drawable.width, private->drawable.height,
- 0, depth, class, xvisual,
- xattributes_mask, &xattributes);
- gdk_window_ref (window);
- gdk_xid_table_insert (&private->drawable.xwindow, window);
+
+ GDK_DRAWABLE_XDATA (private)->xid = XCreateWindow (GDK_DRAWABLE_XDISPLAY (parent),
+ xparent,
+ x, y, private->drawable.width, private->drawable.height,
+ 0, depth, class, xvisual,
+ xattributes_mask, &xattributes);
+ gdk_drawable_ref (window);
+ gdk_xid_table_insert (&GDK_DRAWABLE_XID (window), window);
if (private->drawable.colormap)
gdk_colormap_ref (private->drawable.colormap);
@@ -427,10 +325,14 @@ gdk_window_new (GdkWindow *parent,
switch (private->drawable.window_type)
{
case GDK_WINDOW_DIALOG:
- XSetTransientForHint (private->drawable.xdisplay, private->drawable.xwindow, xparent);
+ XSetTransientForHint (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
+ xparent);
case GDK_WINDOW_TOPLEVEL:
case GDK_WINDOW_TEMP:
- XSetWMProtocols (private->drawable.xdisplay, private->drawable.xwindow, gdk_wm_window_protocols, 2);
+ XSetWMProtocols (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
+ gdk_wm_window_protocols, 2);
break;
case GDK_WINDOW_CHILD:
if ((attributes->wclass == GDK_INPUT_OUTPUT) &&
@@ -460,14 +362,19 @@ gdk_window_new (GdkWindow *parent,
* attention to PSize, and even if they do, is this the
* correct value???
*/
- XSetWMNormalHints (private->drawable.xdisplay, private->drawable.xwindow, &size_hints);
+ XSetWMNormalHints (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
+ &size_hints);
- XSetWMHints (private->drawable.xdisplay, private->drawable.xwindow, &wm_hints);
+ XSetWMHints (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
+ &wm_hints);
if (!wm_client_leader_atom)
wm_client_leader_atom = gdk_atom_intern ("WM_CLIENT_LEADER", FALSE);
- XChangeProperty (private->drawable.xdisplay, private->drawable.xwindow,
+ XChangeProperty (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
wm_client_leader_atom,
XA_WINDOW, 32, PropModeReplace,
(guchar*) &gdk_leader_window, 1);
@@ -477,7 +384,8 @@ gdk_window_new (GdkWindow *parent,
else
title = g_get_prgname ();
- XmbSetWMProperties (private->drawable.xdisplay, private->drawable.xwindow,
+ XmbSetWMProperties (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
title, title,
NULL, 0,
NULL, NULL, NULL);
@@ -487,11 +395,12 @@ gdk_window_new (GdkWindow *parent,
class_hint = XAllocClassHint ();
class_hint->res_name = attributes->wmclass_name;
class_hint->res_class = attributes->wmclass_class;
- XSetClassHint (private->drawable.xdisplay, private->drawable.xwindow, class_hint);
+ XSetClassHint (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
+ class_hint);
XFree (class_hint);
}
-
return window;
}
@@ -518,12 +427,13 @@ gdk_window_foreign_new (guint32 anid)
result = XQueryTree (gdk_display, anid, &root, &parent, &children, &nchildren);
if (gdk_error_trap_pop () || !result)
return NULL;
-
- private = g_new (GdkWindowPrivate, 1);
- window = (GdkWindow*) private;
-
+
if (children)
XFree (children);
+
+ window = gdk_x11_window_alloc ();
+ private = (GdkWindowPrivate *)window;
+
private->parent = gdk_xid_table_lookup (parent);
parent_private = (GdkWindowPrivate *)private->parent;
@@ -531,29 +441,19 @@ gdk_window_foreign_new (guint32 anid)
if (parent_private)
parent_private->children = g_list_prepend (parent_private->children, window);
- private->drawable.xwindow = anid;
- private->drawable.xdisplay = gdk_display;
+ GDK_DRAWABLE_XDATA (window)->xid = anid;
+ GDK_DRAWABLE_XDATA (window)->xdisplay = GDK_DRAWABLE_XDISPLAY (parent);
+
private->x = attrs.x;
private->y = attrs.y;
private->drawable.width = attrs.width;
private->drawable.height = attrs.height;
- private->resize_count = 0;
- private->drawable.ref_count = 1;
private->drawable.window_type = GDK_WINDOW_FOREIGN;
private->drawable.destroyed = FALSE;
private->mapped = (attrs.map_state != IsUnmapped);
- private->guffaw_gravity = FALSE;
- private->extension_events = 0;
-
- private->drawable.colormap = NULL;
- private->filters = NULL;
- private->children = NULL;
-
- window->user_data = NULL;
-
- gdk_window_ref (window);
- gdk_xid_table_insert (&private->drawable.xwindow, window);
+ gdk_drawable_ref (window);
+ gdk_xid_table_insert (&GDK_DRAWABLE_XID (window), window);
return window;
}
@@ -646,20 +546,22 @@ gdk_window_internal_destroy (GdkWindow *window,
gdk_window_reparent (window, NULL, 0, 0);
xevent.type = ClientMessage;
- xevent.window = private->drawable.xwindow;
+ xevent.window = GDK_DRAWABLE_XID (window);
xevent.message_type = gdk_wm_protocols;
xevent.format = 32;
xevent.data.l[0] = gdk_wm_delete_window;
xevent.data.l[1] = CurrentTime;
- XSendEvent (private->drawable.xdisplay, private->drawable.xwindow,
+ XSendEvent (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
False, 0, (XEvent *)&xevent);
gdk_flush ();
gdk_error_trap_pop ();
}
}
else if (xdestroy)
- XDestroyWindow (private->drawable.xdisplay, private->drawable.xwindow);
+ XDestroyWindow (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window));
if (private->drawable.colormap)
gdk_colormap_unref (private->drawable.colormap);
@@ -686,7 +588,7 @@ void
gdk_window_destroy (GdkWindow *window)
{
gdk_window_internal_destroy (window, TRUE, TRUE);
- gdk_window_unref (window);
+ gdk_drawable_unref (window);
}
/* This function is called when the XWindow is really gone. */
@@ -705,38 +607,7 @@ gdk_window_destroy_notify (GdkWindow *window)
}
gdk_xid_table_remove (GDK_DRAWABLE_XID (window));
- gdk_window_unref (window);
-}
-
-GdkWindow*
-gdk_window_ref (GdkWindow *window)
-{
- GdkWindowPrivate *private = (GdkWindowPrivate *)window;
- g_return_val_if_fail (window != NULL, NULL);
-
- private->drawable.ref_count += 1;
- return window;
-}
-
-void
-gdk_window_unref (GdkWindow *window)
-{
- GdkWindowPrivate *private = (GdkWindowPrivate *)window;
- g_return_if_fail (window != NULL);
-
- private->drawable.ref_count -= 1;
- if (private->drawable.ref_count == 0)
- {
- if (!private->drawable.destroyed)
- {
- if (private->drawable.window_type == GDK_WINDOW_FOREIGN)
- gdk_xid_table_remove (private->drawable.xwindow);
- else
- g_warning ("losing last reference to undestroyed window\n");
- }
- g_dataset_destroy (window);
- g_free (window);
- }
+ gdk_drawable_unref (window);
}
void
@@ -750,8 +621,10 @@ gdk_window_show (GdkWindow *window)
if (!private->drawable.destroyed)
{
private->mapped = TRUE;
- XRaiseWindow (private->drawable.xdisplay, private->drawable.xwindow);
- XMapWindow (private->drawable.xdisplay, private->drawable.xwindow);
+ XRaiseWindow (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window));
+ XMapWindow (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window));
}
}
@@ -766,7 +639,8 @@ gdk_window_hide (GdkWindow *window)
if (!private->drawable.destroyed)
{
private->mapped = FALSE;
- XUnmapWindow (private->drawable.xdisplay, private->drawable.xwindow);
+ XUnmapWindow (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window));
}
}
@@ -779,7 +653,8 @@ gdk_window_withdraw (GdkWindow *window)
private = (GdkWindowPrivate*) window;
if (!private->drawable.destroyed)
- XWithdrawWindow (private->drawable.xdisplay, private->drawable.xwindow, 0);
+ XWithdrawWindow (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window), 0);
}
void
@@ -794,7 +669,9 @@ gdk_window_move (GdkWindow *window,
private = (GdkWindowPrivate*) window;
if (!private->drawable.destroyed)
{
- XMoveWindow (private->drawable.xdisplay, private->drawable.xwindow, x, y);
+ XMoveWindow (GDK_DRAWABLE_XDISPLAY (window),
+ GDK_DRAWABLE_XID (window),
+ x, y);
if (private->drawable.window_type == GDK_WINDOW_CHILD)
{
@@ -904,7 +781,7 @@ gdk_window_reparent (GdkWindow *window,
g_return_if_fail (GDK_IS_WINDOW (new_parent));
if (!new_parent)
- new_parent = (GdkWindow*) &gdk_root_parent;
+ new_parent = gdk_parent_root;
window_private = (GdkWindowPrivate*) window;
old_parent_private = (GdkWindowPrivate*)window_private->parent;
@@ -990,15 +867,6 @@ gdk_window_lower (GdkWindow *window)
}
void
-gdk_window_set_user_data (GdkWindow *window,
- gpointer user_data)
-{
- g_return_if_fail (window != NULL);
-
- window->user_data = user_data;
-}
-
-void
gdk_window_set_hints (GdkWindow *window,
gint x,
gint y,
@@ -1244,15 +1112,6 @@ gdk_window_set_cursor (GdkWindow *window,
}
void
-gdk_window_get_user_data (GdkWindow *window,
- gpointer *data)
-{
- g_return_if_fail (window != NULL);
-
- *data = window->user_data;
-}
-
-void
gdk_window_get_geometry (GdkWindow *window,
gint *x,
gint *y,
@@ -1271,7 +1130,7 @@ gdk_window_get_geometry (GdkWindow *window,
g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
if (!window)
- window = (GdkWindow *) &gdk_root_parent;
+ window = gdk_parent_root;
if (!GDK_DRAWABLE_DESTROYED (window))
{
@@ -1292,24 +1151,6 @@ gdk_window_get_geometry (GdkWindow *window,
}
}
-void
-gdk_window_get_position (GdkWindow *window,
- gint *x,
- gint *y)
-{
- GdkWindowPrivate *window_private;
-
- g_return_if_fail (window != NULL);
- g_return_if_fail (GDK_IS_WINDOW (window));
-
- window_private = (GdkWindowPrivate*) window;
-
- if (x)
- *x = window_private->x;
- if (y)
- *y = window_private->y;
-}
-
gint
gdk_window_get_origin (GdkWindow *window,
gint *x,
@@ -1481,7 +1322,7 @@ gdk_window_get_pointer (GdkWindow *window,
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
if (!window)
- window = (GdkWindow*) &gdk_root_parent;
+ window = gdk_parent_root;
return_val = NULL;
if (!GDK_DRAWABLE_DESTROYED (window) &&
@@ -1507,31 +1348,29 @@ GdkWindow*
gdk_window_at_pointer (gint *win_x,
gint *win_y)
{
- GdkWindowPrivate *private;
GdkWindow *window;
Window root;
Window xwindow;
Window xwindow_last = 0;
+ Display *xdisplay;
int rootx = -1, rooty = -1;
int winx, winy;
unsigned int xmask;
- private = &gdk_root_parent;
+ xwindow = GDK_ROOT_WINDOW ();
+ xdisplay = GDK_DISPLAY ();
- xwindow = private->drawable.xwindow;
-
- XGrabServer (private->drawable.xdisplay);
+ XGrabServer (xdisplay);
while (xwindow)
{
xwindow_last = xwindow;
- XQueryPointer (private->drawable.xdisplay,
- xwindow,
+ XQueryPointer (xdisplay, xwindow,
&root, &xwindow,
&rootx, &rooty,
&winx, &winy,
&xmask);
}
- XUngrabServer (private->drawable.xdisplay);
+ XUngrabServer (xdisplay);
window = gdk_window_lookup (xwindow_last);
@@ -1543,30 +1382,6 @@ gdk_window_at_pointer (gint *win_x,
return window;
}
-GdkWindow*
-gdk_window_get_parent (GdkWindow *window)
-{
- g_return_val_if_fail (window != NULL, NULL);
- g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
-
- return ((GdkWindowPrivate*) window)->parent;
-}
-
-GdkWindow*
-gdk_window_get_toplevel (GdkWindow *window)
-{
- GdkWindowPrivate *private;
-
- g_return_val_if_fail (window != NULL, NULL);
- g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
-
- private = (GdkWindowPrivate *)window;
- while (GDK_DRAWABLE_TYPE (private) == GDK_WINDOW_CHILD)
- private = (GdkWindowPrivate *)private->parent;
-
- return (GdkWindow *)window;
-}
-
GList*
gdk_window_get_children (GdkWindow *window)
{
@@ -1765,84 +1580,6 @@ gdk_window_shape_combine_mask (GdkWindow *window,
#endif /* HAVE_SHAPE_EXT */
}
-void
-gdk_window_add_filter (GdkWindow *window,
- GdkFilterFunc function,
- gpointer data)
-{
- GdkWindowPrivate *private;
- GList *tmp_list;
- GdkEventFilter *filter;
-
- g_return_if_fail (window != NULL);
- g_return_if_fail (GDK_IS_WINDOW (window));
-
- private = (GdkWindowPrivate*) window;
- if (private && GDK_DRAWABLE_DESTROYED (window))
- return;
-
- if (private)
- tmp_list = private->filters;
- else
- tmp_list = gdk_default_filters;
-
- while (tmp_list)
- {
- filter = (GdkEventFilter *)tmp_list->data;
- if ((filter->function == function) && (filter->data == data))
- return;
- tmp_list = tmp_list->next;
- }
-
- filter = g_new (GdkEventFilter, 1);
- filter->function = function;
- filter->data = data;
-
- if (private)
- private->filters = g_list_append (private->filters, filter);
- else
- gdk_default_filters = g_list_append (gdk_default_filters, filter);
-}
-
-void
-gdk_window_remove_filter (GdkWindow *window,
- GdkFilterFunc function,
- gpointer data)
-{
- GdkWindowPrivate *private;
- GList *tmp_list, *node;
- GdkEventFilter *filter;
-
- g_return_if_fail (window != NULL);
- g_return_if_fail (GDK_IS_WINDOW (window));
-
- private = (GdkWindowPrivate*) window;
-
- if (private)
- tmp_list = private->filters;
- else
- tmp_list = gdk_default_filters;
-
- while (tmp_list)
- {
- filter = (GdkEventFilter *)tmp_list->data;
- node = tmp_list;
- tmp_list = tmp_list->next;
-
- if ((filter->function == function) && (filter->data == data))
- {
- if (private)
- private->filters = g_list_remove_link (private->filters, node);
- else
- gdk_default_filters = g_list_remove_link (gdk_default_filters, node);
- g_list_free_1 (node);
- g_free (filter);
-
- return;
- }
- }
-}
-
void
gdk_window_set_override_redirect (GdkWindow *window,
gboolean override_redirect)
@@ -2038,29 +1775,12 @@ gdk_window_set_functions (GdkWindow *window,
gdk_window_set_mwm_hints (window, &hints);
}
-GList *
-gdk_window_get_toplevels (void)
-{
- GList *new_list = NULL;
- GList *tmp_list;
-
- tmp_list = gdk_root_parent.children;
- while (tmp_list)
- {
- new_list = g_list_prepend (new_list, tmp_list->data);
- tmp_list = tmp_list->next;
- }
-
- return new_list;
-}
-
/*
* propagate the shapes from all child windows of a GDK window to the parent
* window. Shamelessly ripped from Enlightenment's code
*
* - Raster
*/
-
struct _gdk_span
{
gint start;
@@ -2395,59 +2115,6 @@ gdk_window_merge_child_shapes (GdkWindow *window)
#endif
}
-/*************************************************************
- * gdk_window_is_visible:
- * Check if the given window is mapped.
- * arguments:
- * window:
- * results:
- * is the window mapped
- *************************************************************/
-
-gboolean
-gdk_window_is_visible (GdkWindow *window)
-{
- GdkWindowPrivate *private = (GdkWindowPrivate *)window;
-
- g_return_val_if_fail (window != NULL, FALSE);
- g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
-
- return private->mapped;
-}
-
-/*************************************************************
- * gdk_window_is_viewable:
- * Check if the window and all ancestors of the window
- * are mapped. (This is not necessarily "viewable" in
- * the X sense, since we only check as far as we have
- * GDK window parents, not to the root window)
- * arguments:
- * window:
- * results:
- * is the window viewable
- *************************************************************/
-
-gboolean
-gdk_window_is_viewable (GdkWindow *window)
-{
- GdkWindowPrivate *private = (GdkWindowPrivate *)window;
-
- g_return_val_if_fail (window != NULL, FALSE);
- g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
-
- while (private &&
- (private != &gdk_root_parent) &&
- (private->drawable.window_type != GDK_WINDOW_FOREIGN))
- {
- if (!private->mapped)
- return FALSE;
-
- private = (GdkWindowPrivate *)private->parent;
- }
-
- return TRUE;
-}
-
/* Support for windows that can be guffaw-scrolled
* (See http://www.gtk.org/~otaylor/whitepapers/guffaw-scrolling.txt)
*/
@@ -2581,3 +2248,135 @@ gdk_window_set_static_gravities (GdkWindow *window,
return TRUE;
}
+
+/* internal function created for and used by gdk_window_xid_at_coords */
+Window
+gdk_window_xid_at (Window base,
+ gint bx,
+ gint by,
+ gint x,
+ gint y,
+ GList *excludes,
+ gboolean excl_child)
+{
+ Display *xdisplay;
+ Window *list = NULL;
+ Window child = 0, parent_win = 0, root_win = 0;
+ int i;
+ unsigned int ww, wh, wb, wd, num;
+ int wx, wy;
+
+ xdisplay = GDK_DISPLAY ();
+ if (!XGetGeometry (xdisplay, base, &root_win, &wx, &wy, &ww, &wh, &wb, &wd))
+ return 0;
+ wx += bx;
+ wy += by;
+
+ if (!((x >= wx) &&
+ (y >= wy) &&
+ (x < (int) (wx + ww)) &&
+ (y < (int) (wy + wh))))
+ return 0;
+
+ if (!XQueryTree (xdisplay, base, &root_win, &parent_win, &list, &num))
+ return base;
+
+ if (list)
+ {
+ for (i = num - 1; ; i--)
+ {
+ if ((!excl_child) || (!g_list_find (excludes, (gpointer *) list[i])))
+ {
+ if ((child = gdk_window_xid_at (list[i], wx, wy, x, y, excludes, excl_child)) != 0)
+ {
+ XFree (list);
+ return child;
+ }
+ }
+ if (!i)
+ break;
+ }
+ XFree (list);
+ }
+ return base;
+}
+
+/*
+ * The following fucntion by The Rasterman <raster@redhat.com>
+ * This function returns the X Window ID in which the x y location is in
+ * (x and y being relative to the root window), excluding any windows listed
+ * in the GList excludes (this is a list of X Window ID's - gpointer being
+ * the Window ID).
+ *
+ * This is primarily designed for internal gdk use - for DND for example
+ * when using a shaped icon window as the drag object - you exclude the
+ * X Window ID of the "icon" (perhaps more if excludes may be needed) and
+ * You can get back an X Window ID as to what X Window ID is infact under
+ * those X,Y co-ordinates.
+ */
+Window
+gdk_window_xid_at_coords (gint x,
+ gint y,
+ GList *excludes,
+ gboolean excl_child)
+{
+ GdkWindow *window;
+ GdkDrawablePrivate *private;
+ Display *xdisplay;
+ Window *list = NULL;
+ Window root, child = 0, parent_win = 0, root_win = 0;
+ unsigned int num;
+ int i;
+
+ window = gdk_parent_root;
+ private = (GdkDrawablePrivate*) window;
+ xdisplay = GDK_DRAWABLE_XDISPLAY (private);
+ root = GDK_DRAWABLE_XID (private);
+ num = g_list_length (excludes);
+
+ XGrabServer (xdisplay);
+ if (!XQueryTree (xdisplay, root, &root_win, &parent_win, &list, &num))
+ {
+ XUngrabServer (xdisplay);
+ return root;
+ }
+ if (list)
+ {
+ i = num - 1;
+ do
+ {
+ XWindowAttributes xwa;
+
+ XGetWindowAttributes (xdisplay, list [i], &xwa);
+
+ if (xwa.map_state != IsViewable)
+ continue;
+
+ if (excl_child && g_list_find (excludes, (gpointer *) list[i]))
+ continue;
+
+ if ((child = gdk_window_xid_at (list[i], 0, 0, x, y, excludes, excl_child)) == 0)
+ continue;
+
+ if (excludes)
+ {
+ if (!g_list_find (excludes, (gpointer *) child))
+ {
+ XFree (list);
+ XUngrabServer (xdisplay);
+ return child;
+ }
+ }
+ else
+ {
+ XFree (list);
+ XUngrabServer (xdisplay);
+ return child;
+ }
+ } while (--i > 0);
+ XFree (list);
+ }
+ XUngrabServer (xdisplay);
+ return root;
+}
+
diff --git a/gdk/x11/gdkx.h b/gdk/x11/gdkx.h
index 4f142bd1ef..dcbd26b803 100644
--- a/gdk/x11/gdkx.h
+++ b/gdk/x11/gdkx.h
@@ -27,26 +27,25 @@
#ifndef __GDK_X_H__
#define __GDK_X_H__
-#include <gdk/gdkprivate.h>
-
+#include <gdk/x11/gdkprivate-x11.h>
#define GDK_ROOT_WINDOW() gdk_root_window
-#define GDK_ROOT_PARENT() ((GdkWindow *)&gdk_root_parent)
+#define GDK_ROOT_PARENT() ((GdkWindow *)&gdk_parent_root)
#define GDK_DISPLAY() gdk_display
-#define GDK_DRAWABLE_XDISPLAY(win) (((GdkDrawablePrivate*) win)->xdisplay)
-#define GDK_DRAWABLE_XID(win) (((GdkDrawablePrivate*) win)->xwindow)
-#define GDK_WINDOW_XDISPLAY GDK_DRAWABLE_XDISPLAY
-#define GDK_WINDOW_XWINDOW GDK_DRAWABLE_XID
+#define GDK_DRAWABLE_XDISPLAY(win) (GDK_DRAWABLE_XDATA(win)->xdisplay)
+#define GDK_DRAWABLE_XID(win) (GDK_DRAWABLE_XDATA(win)->xid)
#define GDK_IMAGE_XDISPLAY(image) (((GdkImagePrivate*) image)->xdisplay)
#define GDK_IMAGE_XIMAGE(image) (((GdkImagePrivate*) image)->ximage)
-#define GDK_GC_XDISPLAY(gc) (((GdkGCPrivate*) gc)->xdisplay)
-#define GDK_GC_XGC(gc) (((GdkGCPrivate*) gc)->xgc)
-#define GDK_COLORMAP_XDISPLAY(cmap) (((GdkColormapPrivate*) cmap)->xdisplay)
-#define GDK_COLORMAP_XCOLORMAP(cmap) (((GdkColormapPrivate*) cmap)->xcolormap)
+#define GDK_GC_XDISPLAY(gc) (GDK_GC_XDATA(gc)->xdisplay)
+#define GDK_GC_XGC(gc) (GDK_GC_XDATA(gc)->xgc)
+#define GDK_COLORMAP_XDISPLAY(cmap) (((GdkColormapPrivateX *)cmap)->xdisplay)
+#define GDK_COLORMAP_XCOLORMAP(cmap) (((GdkColormapPrivateX *)cmap)->xcolormap)
#define GDK_VISUAL_XVISUAL(vis) (((GdkVisualPrivate*) vis)->xvisual)
#define GDK_FONT_XDISPLAY(font) (((GdkFontPrivate*) font)->xdisplay)
-#define GDK_FONT_XFONT(font) (((GdkFontPrivate*) font)->xfont)
+#define GDK_FONT_XFONT(font) (((GdkFontPrivateX *)font)->xfont)
+#define GDK_WINDOW_XWINDOW GDK_DRAWABLE_XID
+#define GDK_WINDOW_XDISPLAY GDK_DRAWABLE_XDISPLAY
GdkVisual* gdkx_visual_get (VisualID xvisualid);
/* XXX: Do not use this function until it is fixed. An X Colormap
@@ -58,7 +57,7 @@ Window gdk_get_client_window (Display *dpy,
Window win);
/* Functions to create pixmaps and windows from their X equivalents */
-GdkPixmap *gdk_pixmap_foreign_new (guint32 anid);
-GdkWindow *gdk_window_foreign_new (guint32 anid);
+GdkPixmap *gdk_pixmap_foreign_new (guint32 anid);
+GdkWindow *gdk_window_foreign_new (guint32 anid);
#endif /* __GDK_X_H__ */
diff --git a/gdk/x11/gdkxid.c b/gdk/x11/gdkxid.c
index 7067386732..2c5a9c7410 100644
--- a/gdk/x11/gdkxid.c
+++ b/gdk/x11/gdkxid.c
@@ -24,7 +24,7 @@
* GTK+ at ftp://ftp.gtk.org/pub/gtk/.
*/
-#include "gdkprivate.h"
+#include "gdkprivate-x11.h"
#include <stdio.h>
static guint gdk_xid_hash (XID *xid);