]> Pileus Git - ~andy/gtk/commitdiff
Just renamed the Win32 backend files to *-win32.
authorTor Lillqvist <tml@src.gnome.org>
Wed, 10 Nov 1999 00:04:17 +0000 (00:04 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Wed, 10 Nov 1999 00:04:17 +0000 (00:04 +0000)
47 files changed:
gdk/win32/gdk-win32.def [deleted file]
gdk/win32/gdk.c [deleted file]
gdk/win32/gdk.def [deleted file]
gdk/win32/gdkcc.c [deleted file]
gdk/win32/gdkcolor-win32.c [deleted file]
gdk/win32/gdkcolor.c [deleted file]
gdk/win32/gdkcursor-win32.c [deleted file]
gdk/win32/gdkcursor.c [deleted file]
gdk/win32/gdkdnd-win32.c [deleted file]
gdk/win32/gdkdnd.c [deleted file]
gdk/win32/gdkdraw.c [deleted file]
gdk/win32/gdkdrawable-win32.c [deleted file]
gdk/win32/gdkevents-win32.c [deleted file]
gdk/win32/gdkevents.c [deleted file]
gdk/win32/gdkfont-win32.c [deleted file]
gdk/win32/gdkfont.c [deleted file]
gdk/win32/gdkgc-win32.c [deleted file]
gdk/win32/gdkgc.c [deleted file]
gdk/win32/gdkglobals-win32.c [deleted file]
gdk/win32/gdkglobals.c [deleted file]
gdk/win32/gdkim-win32.c [deleted file]
gdk/win32/gdkim.c [deleted file]
gdk/win32/gdkimage-win32.c [deleted file]
gdk/win32/gdkimage.c [deleted file]
gdk/win32/gdkinput-win32.c [deleted file]
gdk/win32/gdkinput.c [deleted file]
gdk/win32/gdkmain-win32.c [deleted file]
gdk/win32/gdkpixmap-win32.c [deleted file]
gdk/win32/gdkpixmap.c [deleted file]
gdk/win32/gdkprivate-win32.h [deleted file]
gdk/win32/gdkprivate.h [deleted file]
gdk/win32/gdkproperty-win32.c [deleted file]
gdk/win32/gdkproperty.c [deleted file]
gdk/win32/gdkregion-win32.c [deleted file]
gdk/win32/gdkregion.c [deleted file]
gdk/win32/gdkselection-win32.c [deleted file]
gdk/win32/gdkselection.c [deleted file]
gdk/win32/gdkvisual-win32.c [deleted file]
gdk/win32/gdkvisual.c [deleted file]
gdk/win32/gdkwin32.h [deleted file]
gdk/win32/gdkwin32id.c [deleted file]
gdk/win32/gdkwindow-win32.c [deleted file]
gdk/win32/gdkwindow.c [deleted file]
gdk/win32/gdkx.h [deleted file]
gdk/win32/gdkxid.c [deleted file]
gdk/win32/makefile.cygwin
gdk/win32/surrogate-dimm.h

diff --git a/gdk/win32/gdk-win32.def b/gdk/win32/gdk-win32.def
deleted file mode 100644 (file)
index 79d7b8c..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-EXPORTS
-       gdk_atom_intern
-       gdk_atom_name
-       gdk_beep
-       gdk_bitmap_create_from_data
-       gdk_bitmap_ref
-       gdk_bitmap_unref
-       gdk_char_height
-       gdk_char_measure
-       gdk_char_width
-       gdk_char_width_wc
-       gdk_color_alloc
-       gdk_color_black
-       gdk_color_change
-       gdk_color_context_add_palette
-       gdk_color_context_free
-       gdk_color_context_free_dither
-       gdk_color_context_get_index_from_palette
-       gdk_color_context_get_pixel
-       gdk_color_context_get_pixel_from_palette
-       gdk_color_context_get_pixels
-       gdk_color_context_get_pixels_incremental
-       gdk_color_context_init_dither
-       gdk_color_context_new
-       gdk_color_context_new_mono
-       gdk_color_context_query_color
-       gdk_color_context_query_colors
-       gdk_color_copy
-       gdk_color_equal
-       gdk_color_free
-       gdk_color_hash
-       gdk_color_parse
-       gdk_color_white
-       gdk_colormap_alloc_color
-       gdk_colormap_alloc_colors
-       gdk_colormap_change
-       gdk_colormap_free_colors
-       gdk_colormap_get_system
-       gdk_colormap_get_system_size
-       gdk_colormap_get_visual
-       gdk_colormap_new
-       gdk_colormap_ref
-       gdk_colormap_unref
-       gdk_colors_alloc
-       gdk_colors_free
-       gdk_colors_store
-       gdk_cursor_destroy
-       gdk_cursor_new
-       gdk_cursor_new_from_pixmap
-       gdk_debug_flags
-       gdk_dnd_init
-       gdk_drag_abort
-       gdk_drag_begin
-       gdk_drag_context_new
-       gdk_drag_context_ref
-       gdk_drag_context_unref
-       gdk_drag_drop
-       gdk_drag_find_window
-       gdk_drag_get_protocol
-       gdk_drag_get_selection
-       gdk_drag_motion
-       gdk_drag_status
-       gdk_drop_finish
-       gdk_drop_reply
-       gdk_draw_arc
-       gdk_draw_gray_image
-       gdk_draw_image
-       gdk_draw_indexed_image
-       gdk_draw_line
-       gdk_draw_lines
-       gdk_draw_pixmap
-       gdk_draw_point
-       gdk_draw_points
-       gdk_draw_polygon
-       gdk_draw_rectangle
-       gdk_draw_rgb_32_image
-       gdk_draw_rgb_image
-       gdk_draw_rgb_image_dithalign
-       gdk_draw_segments
-       gdk_draw_string
-       gdk_draw_text
-       gdk_draw_text_wc
-       gdk_drawable_get_colormap
-       gdk_drawable_get_size
-       gdk_drawable_get_type
-       gdk_drawable_get_visual
-       gdk_drawable_set_colormap
-       gdk_drawable_set_data
-       gdk_error_code
-       gdk_error_trap_pop
-       gdk_error_trap_push
-       gdk_error_warnings
-       gdk_event_copy
-       gdk_event_free
-       gdk_event_get
-       gdk_event_get_graphics_expose
-       gdk_event_get_time
-       gdk_event_handler_set
-       gdk_event_peek
-       gdk_event_put
-       gdk_event_send_client_message
-       gdk_event_send_clientmessage_toall
-       gdk_events_pending
-       gdk_exit
-       gdk_flush
-       gdk_font_equal
-       gdk_font_id
-       gdk_font_list_free
-       gdk_font_list_new
-       gdk_font_load
-       gdk_font_ref
-       gdk_font_unref
-       gdk_font_xlfd_create
-       gdk_font_xlfd_free
-       gdk_fontset_load
-       gdk_free_compound_text
-       gdk_free_text_list
-       gdk_gc_copy
-       gdk_gc_destroy
-       gdk_gc_get_values
-       gdk_gc_new
-       gdk_gc_new_with_values
-       gdk_gc_ref
-       gdk_gc_set_background
-       gdk_gc_set_clip_mask
-       gdk_gc_set_clip_origin
-       gdk_gc_set_clip_rectangle
-       gdk_gc_set_clip_region
-       gdk_gc_set_dashes
-       gdk_gc_set_exposures
-       gdk_gc_set_fill
-       gdk_gc_set_font
-       gdk_gc_set_foreground
-       gdk_gc_set_function
-       gdk_gc_set_line_attributes
-       gdk_gc_set_stipple
-       gdk_gc_set_subwindow
-       gdk_gc_set_tile
-       gdk_gc_set_ts_origin
-       gdk_gc_unref
-       gdk_get_display
-       gdk_get_show_events
-       gdk_get_use_xshm
-       gdk_ic_destroy
-       gdk_ic_get_attr
-       gdk_ic_get_events
-       gdk_ic_get_style
-       gdk_ic_get_values
-       gdk_ic_new
-       gdk_ic_set_attr
-       gdk_ic_set_values
-       gdk_im_begin
-       gdk_im_decide_style
-       gdk_im_end
-       gdk_im_ready
-       gdk_im_set_best_style
-       gdk_image_bitmap_new
-       gdk_image_destroy
-       gdk_image_get
-       gdk_image_get_pixel
-       gdk_image_new
-       gdk_image_new_bitmap
-       gdk_image_put_pixel
-       gdk_init
-       gdk_init_check
-       gdk_input_add
-       gdk_input_add_full
-       gdk_input_exit
-       gdk_input_init
-       gdk_input_list_devices
-       gdk_input_motion_events
-       gdk_input_remove
-       gdk_input_set_axes
-       gdk_input_set_extension_events
-       gdk_input_set_key
-       gdk_input_set_mode
-       gdk_input_set_source
-       gdk_input_window_get_pointer
-       gdk_key_repeat_disable
-       gdk_key_repeat_restore
-       gdk_keyboard_grab
-       gdk_keyboard_ungrab
-       gdk_keyval_from_name
-       gdk_keyval_is_lower
-       gdk_keyval_is_upper
-       gdk_keyval_name
-       gdk_keyval_to_lower
-       gdk_keyval_to_upper
-       gdk_list_visuals
-       gdk_mbstowcs
-       gdk_null_window_warnings
-       gdk_pixmap_colormap_create_from_xpm
-       gdk_pixmap_colormap_create_from_xpm_d
-       gdk_pixmap_create_from_data
-       gdk_pixmap_create_from_xpm
-       gdk_pixmap_create_from_xpm_d
-       gdk_pixmap_create_on_shared_image
-       gdk_pixmap_foreign_new
-       gdk_pixmap_new
-       gdk_pixmap_ref
-       gdk_pixmap_unref
-       gdk_pointer_grab
-       gdk_pointer_is_grabbed
-       gdk_pointer_ungrab
-       gdk_progclass
-       gdk_property_change
-       gdk_property_delete
-       gdk_property_get
-       gdk_query_depths
-       gdk_query_visual_types
-       gdk_rectangle_intersect
-       gdk_rectangle_union
-       gdk_region_destroy
-       gdk_region_empty
-       gdk_region_equal
-       gdk_region_get_clipbox
-       gdk_region_new
-       gdk_region_offset
-       gdk_region_point_in
-       gdk_region_polygon
-       gdk_region_rect_in
-       gdk_region_shrink
-       gdk_region_union_with_rect
-       gdk_regions_intersect
-       gdk_regions_subtract
-       gdk_regions_union
-       gdk_regions_xor
-       gdk_rgb_cmap_free
-       gdk_rgb_cmap_new
-       gdk_rgb_ditherable
-       gdk_rgb_gc_set_background
-       gdk_rgb_gc_set_foreground
-       gdk_rgb_get_cmap
-       gdk_rgb_get_visual
-       gdk_rgb_init
-       gdk_rgb_set_install
-       gdk_rgb_set_min_colors
-       gdk_rgb_set_verbose
-       gdk_rgb_xpixel_from_rgb
-       gdk_root_parent
-       gdk_screen_height
-       gdk_screen_height_mm
-       gdk_screen_width
-       gdk_screen_width_mm
-       gdk_selection_convert
-       gdk_selection_owner_get
-       gdk_selection_owner_set
-       gdk_selection_property
-       gdk_selection_property_get
-       gdk_selection_send_notify
-       gdk_set_locale
-       gdk_set_show_events
-       gdk_set_use_xshm
-       gdk_string_extents
-       gdk_string_height
-       gdk_string_measure
-       gdk_string_to_compound_text
-       gdk_string_width
-       gdk_text_extents
-       gdk_text_extents_wc
-       gdk_text_height
-       gdk_text_measure
-       gdk_text_property_to_text_list
-       gdk_text_width
-       gdk_text_width_wc
-       gdk_threads_enter
-       gdk_threads_leave
-       gdk_threads_mutex
-       gdk_visual_get_best
-       gdk_visual_get_best_depth
-       gdk_visual_get_best_type
-       gdk_visual_get_best_with_both
-       gdk_visual_get_best_with_depth
-       gdk_visual_get_best_with_type
-       gdk_visual_get_system
-       gdk_visual_ref
-       gdk_visual_unref
-       gdk_wcstombs
-       gdk_window_add_filter
-       gdk_window_at_pointer
-       gdk_window_clear
-       gdk_window_clear_area
-       gdk_window_clear_area_e
-       gdk_window_destroy
-       gdk_window_foreign_new
-       gdk_window_get_deskrelative_origin
-       gdk_window_get_children
-       gdk_window_get_events
-       gdk_window_get_geometry
-       gdk_window_get_origin
-       gdk_window_get_parent
-       gdk_window_get_pointer
-       gdk_window_get_position
-       gdk_window_get_root_origin
-       gdk_window_get_toplevel
-       gdk_window_get_toplevels
-       gdk_window_get_user_data
-       gdk_window_hide
-       gdk_window_is_visible
-       gdk_window_is_viewable
-       gdk_window_lower
-       gdk_window_merge_child_shapes
-       gdk_window_move
-       gdk_window_move_resize
-       gdk_window_new
-       gdk_window_raise
-       gdk_window_ref
-       gdk_window_register_dnd
-       gdk_window_remove_filter
-       gdk_window_reparent
-       gdk_window_resize
-       gdk_window_set_back_pixmap
-       gdk_window_set_background
-       gdk_window_set_child_shapes
-       gdk_window_set_cursor
-       gdk_window_set_decorations
-       gdk_window_set_events
-       gdk_window_set_functions
-       gdk_window_set_geometry_hints
-       gdk_window_set_group
-       gdk_window_set_hints
-       gdk_window_set_icon
-       gdk_window_set_icon_name
-       gdk_window_set_override_redirect
-       gdk_window_set_role
-       gdk_window_set_static_gravities
-       gdk_window_set_title
-       gdk_window_set_transient_for
-       gdk_window_set_user_data
-       gdk_window_shape_combine_mask
-       gdk_window_show
-       gdk_window_unref
-       gdk_window_withdraw
-       gdk_xid_table_insert
-       gdk_xid_table_lookup
-       gdk_xid_table_remove
\ No newline at end of file
diff --git a/gdk/win32/gdk.c b/gdk/win32/gdk.c
deleted file mode 100644 (file)
index e8fa5af..0000000
+++ /dev/null
@@ -1,2115 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1998-1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <io.h>
-
-#include "gdk.h"
-#include "gdkprivate.h"
-#include "gdkinputprivate.h"
-#include "gdkkeysyms.h"
-
-#include <objbase.h>
-
-static void     gdkx_XConvertCase      (KeySym        symbol,
-                                        KeySym       *lower,
-                                        KeySym       *upper);
-static void        gdk_exit_func                (void);
-
-
-/* Private variable declarations
- */
-static int gdk_initialized = 0;        /* 1 if the library is initialized,
-                                * 0 otherwise.
-                                */
-#ifdef G_ENABLE_DEBUG
-static const GDebugKey gdk_debug_keys[] = {
-  {"events",       GDK_DEBUG_EVENTS},
-  {"misc",         GDK_DEBUG_MISC},
-  {"dnd",          GDK_DEBUG_DND},
-  {"color-context", GDK_DEBUG_COLOR_CONTEXT},
-  {"xim",          GDK_DEBUG_XIM},
-  {"selection",            GDK_DEBUG_SELECTION}
-};
-
-static const int gdk_ndebug_keys = sizeof(gdk_debug_keys)/sizeof(GDebugKey);
-
-#endif /* G_ENABLE_DEBUG */
-
-int __stdcall
-DllMain(HINSTANCE hinstDLL,
-       DWORD dwReason,
-       LPVOID reserved)
-{
-  gdk_DLLInstance = hinstDLL;
-
-  return TRUE;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_init
- *
- *   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).
- *
- * Side effects:
- *   The library is initialized.
- *
- *--------------------------------------------------------------
- */
-
-gboolean
-gdk_init_check (int    *argc,
-               char ***argv)
-{
-  gint i, j, k;
-  
-  if (gdk_initialized)
-    return TRUE;
-  
-  if (g_thread_supported ())
-    gdk_threads_mutex = g_mutex_new ();
-  
-#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 (getenv ("GDK_IGNORE_WINTAB") != NULL)
-    gdk_input_ignore_wintab = TRUE;
-
-  if (getenv ("GDK_EVENT_FUNC_FROM_WINDOW_PROC") != NULL)
-    gdk_event_func_from_window_proc = TRUE;
-
-  if (argc && argv)
-    {
-      if (*argc > 0)
-       {
-         gchar *d;
-         
-         d = strrchr((*argv)[0], G_DIR_SEPARATOR);
-         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 ("--sync", (*argv)[i]) == 0)
-             {
-               (*argv)[i] = NULL;
-               GdiSetBatchLimit (1);
-             }
-           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 ("--gdk-no-wintab", (*argv)[i]) == 0
-                    || strcmp ("--gdk-ignore-wintab", (*argv)[i]) == 0)
-             {
-               (*argv)[i] = NULL;
-               gdk_input_ignore_wintab = TRUE;
-             }
-           else if (strcmp ("--gdk-event-func-from-window-proc", (*argv)[i]) == 0)
-             {
-               (*argv)[i] = NULL;
-               gdk_event_func_from_window_proc = TRUE;
-             }
-         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_ProgInstance = GetModuleHandle (NULL);
-  gdk_DC = CreateDC ("DISPLAY", NULL, NULL, NULL);
-  gdk_root_window = GetDesktopWindow ();
-  windows_version = GetVersion ();
-
-  CoInitialize (NULL);
-
-  gdk_selection_request_msg = RegisterWindowMessage ("gdk-selection-request");
-  gdk_selection_notify_msg = RegisterWindowMessage ("gdk-selection-notify");
-  gdk_selection_clear_msg = RegisterWindowMessage ("gdk-selection-clear");
-
-  gdk_selection_property = gdk_atom_intern ("GDK_SELECTION", FALSE);
-  gdk_clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE);
-  gdk_win32_dropfiles_atom = gdk_atom_intern ("DROPFILES_DND", FALSE);
-  gdk_ole2_dnd_atom = gdk_atom_intern ("OLE2_DND", FALSE);
-
-  gdk_progclass = g_basename (g_get_prgname ());
-  gdk_progclass[0] = toupper (gdk_progclass[0]);
-
-  g_atexit (gdk_exit_func);
-  
-  gdk_events_init ();
-  gdk_visual_init ();
-  gdk_window_init ();
-  gdk_image_init ();
-  gdk_input_init ();
-  gdk_selection_init ();
-  gdk_dnd_init ();
-
-  gdk_initialized = 1;
-
-  return TRUE;
-}
-
-void
-gdk_init (int *argc, char ***argv)
-{
-  if (!gdk_init_check (argc, argv))
-    {
-      g_warning ("cannot initialize GDK");
-      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_func(),
-     no need to do this here (Alex J.) */
-  exit (errorcode);
-}
-
-void
-gdk_set_use_xshm (gint use_xshm)
-{
-  /* Always on */
-}
-
-gint
-gdk_get_use_xshm (void)
-{
-  return TRUE;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_width
- *
- *   Return the width of the screen.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_width (void)
-{
-  gint return_val;
-  
-  return_val = gdk_root_parent->drawable.width;
-
-  return return_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_height
- *
- *   Return the height of the screen.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_height (void)
-{
-  gint return_val;
-  
-  return_val = gdk_root_parent->drawable.height;
-
-  return return_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_width_mm
- *
- *   Return the width of the screen in millimetres.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_width_mm (void)
-{
-  HDC hdc;
-  gint return_val;
-
-  hdc = GetDC (NULL);
-  return_val = GetDeviceCaps (hdc, HORZSIZE);
-  ReleaseDC (NULL, hdc);
-
-  return return_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_height
- *
- *   Return the height of the screen in millimetres.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_height_mm (void)
-{
-  HDC hdc;
-  gint return_val;
-
-  hdc = GetDC (NULL);
-  return_val = GetDeviceCaps (hdc, VERTSIZE);
-  ReleaseDC (NULL, hdc);
-  
-  return return_val;
-}
-
-void
-gdk_key_repeat_disable (void)
-{
-  /* XXX */
-}
-
-void
-gdk_key_repeat_restore (void)
-{
-  /* XXX */
-}
-
-
-/*
- *--------------------------------------------------------------
- * gdk_flush
- *
- *   Flushes the Xlib output buffer and then waits
- *   until all requests have been received and processed
- *   by the X server. The only real use for this function
- *   is in dealing with XShm.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_flush (void)
-{
-  GdiFlush ();
-}
-
-void
-gdk_beep (void)
-{
-  Beep(1000, 50);
-}
-
-/*
- *--------------------------------------------------------------
- * 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)
-{
-  static gboolean in_gdk_exit_func = FALSE;
-  
-  GDK_NOTE (MISC, g_print ("gdk_exit_func\n"));
-  /* 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)
-    {
-      gdk_image_exit ();
-      gdk_input_exit ();
-      gdk_key_repeat_restore ();
-      gdk_dnd_exit ();
-
-      CoUninitialize ();
-
-      DeleteDC (gdk_DC);
-      gdk_DC = NULL;
-      gdk_initialized = 0;
-    }
-}
-
-gchar *
-gdk_get_display(void)
-{
-  return "local:";
-}
-
-/*************************************************************
- * 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)
-{
-  /* ??? */
-}
-
-/*************************************************************
- * 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)
-{
-  /* ??? */
-  return 0;
-}
-
-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 */
-    }
-}
-
-static struct gdk_key {
-  guint keyval;
-  const char *name;
-} gdk_keys_by_keyval[] = {
-  { 0x000020, "space" },
-  { 0x000021, "exclam" },
-  { 0x000022, "quotedbl" },
-  { 0x000023, "numbersign" },
-  { 0x000024, "dollar" },
-  { 0x000025, "percent" },
-  { 0x000026, "ampersand" },
-  { 0x000027, "apostrophe" },
-  { 0x000027, "quoteright" },
-  { 0x000028, "parenleft" },
-  { 0x000029, "parenright" },
-  { 0x00002a, "asterisk" },
-  { 0x00002b, "plus" },
-  { 0x00002c, "comma" },
-  { 0x00002d, "minus" },
-  { 0x00002e, "period" },
-  { 0x00002f, "slash" },
-  { 0x000030, "0" },
-  { 0x000031, "1" },
-  { 0x000032, "2" },
-  { 0x000033, "3" },
-  { 0x000034, "4" },
-  { 0x000035, "5" },
-  { 0x000036, "6" },
-  { 0x000037, "7" },
-  { 0x000038, "8" },
-  { 0x000039, "9" },
-  { 0x00003a, "colon" },
-  { 0x00003b, "semicolon" },
-  { 0x00003c, "less" },
-  { 0x00003d, "equal" },
-  { 0x00003e, "greater" },
-  { 0x00003f, "question" },
-  { 0x000040, "at" },
-  { 0x000041, "A" },
-  { 0x000042, "B" },
-  { 0x000043, "C" },
-  { 0x000044, "D" },
-  { 0x000045, "E" },
-  { 0x000046, "F" },
-  { 0x000047, "G" },
-  { 0x000048, "H" },
-  { 0x000049, "I" },
-  { 0x00004a, "J" },
-  { 0x00004b, "K" },
-  { 0x00004c, "L" },
-  { 0x00004d, "M" },
-  { 0x00004e, "N" },
-  { 0x00004f, "O" },
-  { 0x000050, "P" },
-  { 0x000051, "Q" },
-  { 0x000052, "R" },
-  { 0x000053, "S" },
-  { 0x000054, "T" },
-  { 0x000055, "U" },
-  { 0x000056, "V" },
-  { 0x000057, "W" },
-  { 0x000058, "X" },
-  { 0x000059, "Y" },
-  { 0x00005a, "Z" },
-  { 0x00005b, "bracketleft" },
-  { 0x00005c, "backslash" },
-  { 0x00005d, "bracketright" },
-  { 0x00005e, "asciicircum" },
-  { 0x00005f, "underscore" },
-  { 0x000060, "grave" },
-  { 0x000060, "quoteleft" },
-  { 0x000061, "a" },
-  { 0x000062, "b" },
-  { 0x000063, "c" },
-  { 0x000064, "d" },
-  { 0x000065, "e" },
-  { 0x000066, "f" },
-  { 0x000067, "g" },
-  { 0x000068, "h" },
-  { 0x000069, "i" },
-  { 0x00006a, "j" },
-  { 0x00006b, "k" },
-  { 0x00006c, "l" },
-  { 0x00006d, "m" },
-  { 0x00006e, "n" },
-  { 0x00006f, "o" },
-  { 0x000070, "p" },
-  { 0x000071, "q" },
-  { 0x000072, "r" },
-  { 0x000073, "s" },
-  { 0x000074, "t" },
-  { 0x000075, "u" },
-  { 0x000076, "v" },
-  { 0x000077, "w" },
-  { 0x000078, "x" },
-  { 0x000079, "y" },
-  { 0x00007a, "z" },
-  { 0x00007b, "braceleft" },
-  { 0x00007c, "bar" },
-  { 0x00007d, "braceright" },
-  { 0x00007e, "asciitilde" },
-  { 0x0000a0, "nobreakspace" },
-  { 0x0000a1, "exclamdown" },
-  { 0x0000a2, "cent" },
-  { 0x0000a3, "sterling" },
-  { 0x0000a4, "currency" },
-  { 0x0000a5, "yen" },
-  { 0x0000a6, "brokenbar" },
-  { 0x0000a7, "section" },
-  { 0x0000a8, "diaeresis" },
-  { 0x0000a9, "copyright" },
-  { 0x0000aa, "ordfeminine" },
-  { 0x0000ab, "guillemotleft" },
-  { 0x0000ac, "notsign" },
-  { 0x0000ad, "hyphen" },
-  { 0x0000ae, "registered" },
-  { 0x0000af, "macron" },
-  { 0x0000b0, "degree" },
-  { 0x0000b1, "plusminus" },
-  { 0x0000b2, "twosuperior" },
-  { 0x0000b3, "threesuperior" },
-  { 0x0000b4, "acute" },
-  { 0x0000b5, "mu" },
-  { 0x0000b6, "paragraph" },
-  { 0x0000b7, "periodcentered" },
-  { 0x0000b8, "cedilla" },
-  { 0x0000b9, "onesuperior" },
-  { 0x0000ba, "masculine" },
-  { 0x0000bb, "guillemotright" },
-  { 0x0000bc, "onequarter" },
-  { 0x0000bd, "onehalf" },
-  { 0x0000be, "threequarters" },
-  { 0x0000bf, "questiondown" },
-  { 0x0000c0, "Agrave" },
-  { 0x0000c1, "Aacute" },
-  { 0x0000c2, "Acircumflex" },
-  { 0x0000c3, "Atilde" },
-  { 0x0000c4, "Adiaeresis" },
-  { 0x0000c5, "Aring" },
-  { 0x0000c6, "AE" },
-  { 0x0000c7, "Ccedilla" },
-  { 0x0000c8, "Egrave" },
-  { 0x0000c9, "Eacute" },
-  { 0x0000ca, "Ecircumflex" },
-  { 0x0000cb, "Ediaeresis" },
-  { 0x0000cc, "Igrave" },
-  { 0x0000cd, "Iacute" },
-  { 0x0000ce, "Icircumflex" },
-  { 0x0000cf, "Idiaeresis" },
-  { 0x0000d0, "ETH" },
-  { 0x0000d0, "Eth" },
-  { 0x0000d1, "Ntilde" },
-  { 0x0000d2, "Ograve" },
-  { 0x0000d3, "Oacute" },
-  { 0x0000d4, "Ocircumflex" },
-  { 0x0000d5, "Otilde" },
-  { 0x0000d6, "Odiaeresis" },
-  { 0x0000d7, "multiply" },
-  { 0x0000d8, "Ooblique" },
-  { 0x0000d9, "Ugrave" },
-  { 0x0000da, "Uacute" },
-  { 0x0000db, "Ucircumflex" },
-  { 0x0000dc, "Udiaeresis" },
-  { 0x0000dd, "Yacute" },
-  { 0x0000de, "THORN" },
-  { 0x0000de, "Thorn" },
-  { 0x0000df, "ssharp" },
-  { 0x0000e0, "agrave" },
-  { 0x0000e1, "aacute" },
-  { 0x0000e2, "acircumflex" },
-  { 0x0000e3, "atilde" },
-  { 0x0000e4, "adiaeresis" },
-  { 0x0000e5, "aring" },
-  { 0x0000e6, "ae" },
-  { 0x0000e7, "ccedilla" },
-  { 0x0000e8, "egrave" },
-  { 0x0000e9, "eacute" },
-  { 0x0000ea, "ecircumflex" },
-  { 0x0000eb, "ediaeresis" },
-  { 0x0000ec, "igrave" },
-  { 0x0000ed, "iacute" },
-  { 0x0000ee, "icircumflex" },
-  { 0x0000ef, "idiaeresis" },
-  { 0x0000f0, "eth" },
-  { 0x0000f1, "ntilde" },
-  { 0x0000f2, "ograve" },
-  { 0x0000f3, "oacute" },
-  { 0x0000f4, "ocircumflex" },
-  { 0x0000f5, "otilde" },
-  { 0x0000f6, "odiaeresis" },
-  { 0x0000f7, "division" },
-  { 0x0000f8, "oslash" },
-  { 0x0000f9, "ugrave" },
-  { 0x0000fa, "uacute" },
-  { 0x0000fb, "ucircumflex" },
-  { 0x0000fc, "udiaeresis" },
-  { 0x0000fd, "yacute" },
-  { 0x0000fe, "thorn" },
-  { 0x0000ff, "ydiaeresis" },
-  { 0x0001a1, "Aogonek" },
-  { 0x0001a2, "breve" },
-  { 0x0001a3, "Lstroke" },
-  { 0x0001a5, "Lcaron" },
-  { 0x0001a6, "Sacute" },
-  { 0x0001a9, "Scaron" },
-  { 0x0001aa, "Scedilla" },
-  { 0x0001ab, "Tcaron" },
-  { 0x0001ac, "Zacute" },
-  { 0x0001ae, "Zcaron" },
-  { 0x0001af, "Zabovedot" },
-  { 0x0001b1, "aogonek" },
-  { 0x0001b2, "ogonek" },
-  { 0x0001b3, "lstroke" },
-  { 0x0001b5, "lcaron" },
-  { 0x0001b6, "sacute" },
-  { 0x0001b7, "caron" },
-  { 0x0001b9, "scaron" },
-  { 0x0001ba, "scedilla" },
-  { 0x0001bb, "tcaron" },
-  { 0x0001bc, "zacute" },
-  { 0x0001bd, "doubleacute" },
-  { 0x0001be, "zcaron" },
-  { 0x0001bf, "zabovedot" },
-  { 0x0001c0, "Racute" },
-  { 0x0001c3, "Abreve" },
-  { 0x0001c5, "Lacute" },
-  { 0x0001c6, "Cacute" },
-  { 0x0001c8, "Ccaron" },
-  { 0x0001ca, "Eogonek" },
-  { 0x0001cc, "Ecaron" },
-  { 0x0001cf, "Dcaron" },
-  { 0x0001d0, "Dstroke" },
-  { 0x0001d1, "Nacute" },
-  { 0x0001d2, "Ncaron" },
-  { 0x0001d5, "Odoubleacute" },
-  { 0x0001d8, "Rcaron" },
-  { 0x0001d9, "Uring" },
-  { 0x0001db, "Udoubleacute" },
-  { 0x0001de, "Tcedilla" },
-  { 0x0001e0, "racute" },
-  { 0x0001e3, "abreve" },
-  { 0x0001e5, "lacute" },
-  { 0x0001e6, "cacute" },
-  { 0x0001e8, "ccaron" },
-  { 0x0001ea, "eogonek" },
-  { 0x0001ec, "ecaron" },
-  { 0x0001ef, "dcaron" },
-  { 0x0001f0, "dstroke" },
-  { 0x0001f1, "nacute" },
-  { 0x0001f2, "ncaron" },
-  { 0x0001f5, "odoubleacute" },
-  { 0x0001f8, "rcaron" },
-  { 0x0001f9, "uring" },
-  { 0x0001fb, "udoubleacute" },
-  { 0x0001fe, "tcedilla" },
-  { 0x0001ff, "abovedot" },
-  { 0x0002a1, "Hstroke" },
-  { 0x0002a6, "Hcircumflex" },
-  { 0x0002a9, "Iabovedot" },
-  { 0x0002ab, "Gbreve" },
-  { 0x0002ac, "Jcircumflex" },
-  { 0x0002b1, "hstroke" },
-  { 0x0002b6, "hcircumflex" },
-  { 0x0002b9, "idotless" },
-  { 0x0002bb, "gbreve" },
-  { 0x0002bc, "jcircumflex" },
-  { 0x0002c5, "Cabovedot" },
-  { 0x0002c6, "Ccircumflex" },
-  { 0x0002d5, "Gabovedot" },
-  { 0x0002d8, "Gcircumflex" },
-  { 0x0002dd, "Ubreve" },
-  { 0x0002de, "Scircumflex" },
-  { 0x0002e5, "cabovedot" },
-  { 0x0002e6, "ccircumflex" },
-  { 0x0002f5, "gabovedot" },
-  { 0x0002f8, "gcircumflex" },
-  { 0x0002fd, "ubreve" },
-  { 0x0002fe, "scircumflex" },
-  { 0x0003a2, "kappa" },
-  { 0x0003a2, "kra" },
-  { 0x0003a3, "Rcedilla" },
-  { 0x0003a5, "Itilde" },
-  { 0x0003a6, "Lcedilla" },
-  { 0x0003aa, "Emacron" },
-  { 0x0003ab, "Gcedilla" },
-  { 0x0003ac, "Tslash" },
-  { 0x0003b3, "rcedilla" },
-  { 0x0003b5, "itilde" },
-  { 0x0003b6, "lcedilla" },
-  { 0x0003ba, "emacron" },
-  { 0x0003bb, "gcedilla" },
-  { 0x0003bc, "tslash" },
-  { 0x0003bd, "ENG" },
-  { 0x0003bf, "eng" },
-  { 0x0003c0, "Amacron" },
-  { 0x0003c7, "Iogonek" },
-  { 0x0003cc, "Eabovedot" },
-  { 0x0003cf, "Imacron" },
-  { 0x0003d1, "Ncedilla" },
-  { 0x0003d2, "Omacron" },
-  { 0x0003d3, "Kcedilla" },
-  { 0x0003d9, "Uogonek" },
-  { 0x0003dd, "Utilde" },
-  { 0x0003de, "Umacron" },
-  { 0x0003e0, "amacron" },
-  { 0x0003e7, "iogonek" },
-  { 0x0003ec, "eabovedot" },
-  { 0x0003ef, "imacron" },
-  { 0x0003f1, "ncedilla" },
-  { 0x0003f2, "omacron" },
-  { 0x0003f3, "kcedilla" },
-  { 0x0003f9, "uogonek" },
-  { 0x0003fd, "utilde" },
-  { 0x0003fe, "umacron" },
-  { 0x00047e, "overline" },
-  { 0x0004a1, "kana_fullstop" },
-  { 0x0004a2, "kana_openingbracket" },
-  { 0x0004a3, "kana_closingbracket" },
-  { 0x0004a4, "kana_comma" },
-  { 0x0004a5, "kana_conjunctive" },
-  { 0x0004a5, "kana_middledot" },
-  { 0x0004a6, "kana_WO" },
-  { 0x0004a7, "kana_a" },
-  { 0x0004a8, "kana_i" },
-  { 0x0004a9, "kana_u" },
-  { 0x0004aa, "kana_e" },
-  { 0x0004ab, "kana_o" },
-  { 0x0004ac, "kana_ya" },
-  { 0x0004ad, "kana_yu" },
-  { 0x0004ae, "kana_yo" },
-  { 0x0004af, "kana_tsu" },
-  { 0x0004af, "kana_tu" },
-  { 0x0004b0, "prolongedsound" },
-  { 0x0004b1, "kana_A" },
-  { 0x0004b2, "kana_I" },
-  { 0x0004b3, "kana_U" },
-  { 0x0004b4, "kana_E" },
-  { 0x0004b5, "kana_O" },
-  { 0x0004b6, "kana_KA" },
-  { 0x0004b7, "kana_KI" },
-  { 0x0004b8, "kana_KU" },
-  { 0x0004b9, "kana_KE" },
-  { 0x0004ba, "kana_KO" },
-  { 0x0004bb, "kana_SA" },
-  { 0x0004bc, "kana_SHI" },
-  { 0x0004bd, "kana_SU" },
-  { 0x0004be, "kana_SE" },
-  { 0x0004bf, "kana_SO" },
-  { 0x0004c0, "kana_TA" },
-  { 0x0004c1, "kana_CHI" },
-  { 0x0004c1, "kana_TI" },
-  { 0x0004c2, "kana_TSU" },
-  { 0x0004c2, "kana_TU" },
-  { 0x0004c3, "kana_TE" },
-  { 0x0004c4, "kana_TO" },
-  { 0x0004c5, "kana_NA" },
-  { 0x0004c6, "kana_NI" },
-  { 0x0004c7, "kana_NU" },
-  { 0x0004c8, "kana_NE" },
-  { 0x0004c9, "kana_NO" },
-  { 0x0004ca, "kana_HA" },
-  { 0x0004cb, "kana_HI" },
-  { 0x0004cc, "kana_FU" },
-  { 0x0004cc, "kana_HU" },
-  { 0x0004cd, "kana_HE" },
-  { 0x0004ce, "kana_HO" },
-  { 0x0004cf, "kana_MA" },
-  { 0x0004d0, "kana_MI" },
-  { 0x0004d1, "kana_MU" },
-  { 0x0004d2, "kana_ME" },
-  { 0x0004d3, "kana_MO" },
-  { 0x0004d4, "kana_YA" },
-  { 0x0004d5, "kana_YU" },
-  { 0x0004d6, "kana_YO" },
-  { 0x0004d7, "kana_RA" },
-  { 0x0004d8, "kana_RI" },
-  { 0x0004d9, "kana_RU" },
-  { 0x0004da, "kana_RE" },
-  { 0x0004db, "kana_RO" },
-  { 0x0004dc, "kana_WA" },
-  { 0x0004dd, "kana_N" },
-  { 0x0004de, "voicedsound" },
-  { 0x0004df, "semivoicedsound" },
-  { 0x0005ac, "Arabic_comma" },
-  { 0x0005bb, "Arabic_semicolon" },
-  { 0x0005bf, "Arabic_question_mark" },
-  { 0x0005c1, "Arabic_hamza" },
-  { 0x0005c2, "Arabic_maddaonalef" },
-  { 0x0005c3, "Arabic_hamzaonalef" },
-  { 0x0005c4, "Arabic_hamzaonwaw" },
-  { 0x0005c5, "Arabic_hamzaunderalef" },
-  { 0x0005c6, "Arabic_hamzaonyeh" },
-  { 0x0005c7, "Arabic_alef" },
-  { 0x0005c8, "Arabic_beh" },
-  { 0x0005c9, "Arabic_tehmarbuta" },
-  { 0x0005ca, "Arabic_teh" },
-  { 0x0005cb, "Arabic_theh" },
-  { 0x0005cc, "Arabic_jeem" },
-  { 0x0005cd, "Arabic_hah" },
-  { 0x0005ce, "Arabic_khah" },
-  { 0x0005cf, "Arabic_dal" },
-  { 0x0005d0, "Arabic_thal" },
-  { 0x0005d1, "Arabic_ra" },
-  { 0x0005d2, "Arabic_zain" },
-  { 0x0005d3, "Arabic_seen" },
-  { 0x0005d4, "Arabic_sheen" },
-  { 0x0005d5, "Arabic_sad" },
-  { 0x0005d6, "Arabic_dad" },
-  { 0x0005d7, "Arabic_tah" },
-  { 0x0005d8, "Arabic_zah" },
-  { 0x0005d9, "Arabic_ain" },
-  { 0x0005da, "Arabic_ghain" },
-  { 0x0005e0, "Arabic_tatweel" },
-  { 0x0005e1, "Arabic_feh" },
-  { 0x0005e2, "Arabic_qaf" },
-  { 0x0005e3, "Arabic_kaf" },
-  { 0x0005e4, "Arabic_lam" },
-  { 0x0005e5, "Arabic_meem" },
-  { 0x0005e6, "Arabic_noon" },
-  { 0x0005e7, "Arabic_ha" },
-  { 0x0005e7, "Arabic_heh" },
-  { 0x0005e8, "Arabic_waw" },
-  { 0x0005e9, "Arabic_alefmaksura" },
-  { 0x0005ea, "Arabic_yeh" },
-  { 0x0005eb, "Arabic_fathatan" },
-  { 0x0005ec, "Arabic_dammatan" },
-  { 0x0005ed, "Arabic_kasratan" },
-  { 0x0005ee, "Arabic_fatha" },
-  { 0x0005ef, "Arabic_damma" },
-  { 0x0005f0, "Arabic_kasra" },
-  { 0x0005f1, "Arabic_shadda" },
-  { 0x0005f2, "Arabic_sukun" },
-  { 0x0006a1, "Serbian_dje" },
-  { 0x0006a2, "Macedonia_gje" },
-  { 0x0006a3, "Cyrillic_io" },
-  { 0x0006a4, "Ukrainian_ie" },
-  { 0x0006a4, "Ukranian_je" },
-  { 0x0006a5, "Macedonia_dse" },
-  { 0x0006a6, "Ukrainian_i" },
-  { 0x0006a6, "Ukranian_i" },
-  { 0x0006a7, "Ukrainian_yi" },
-  { 0x0006a7, "Ukranian_yi" },
-  { 0x0006a8, "Cyrillic_je" },
-  { 0x0006a8, "Serbian_je" },
-  { 0x0006a9, "Cyrillic_lje" },
-  { 0x0006a9, "Serbian_lje" },
-  { 0x0006aa, "Cyrillic_nje" },
-  { 0x0006aa, "Serbian_nje" },
-  { 0x0006ab, "Serbian_tshe" },
-  { 0x0006ac, "Macedonia_kje" },
-  { 0x0006ae, "Byelorussian_shortu" },
-  { 0x0006af, "Cyrillic_dzhe" },
-  { 0x0006af, "Serbian_dze" },
-  { 0x0006b0, "numerosign" },
-  { 0x0006b1, "Serbian_DJE" },
-  { 0x0006b2, "Macedonia_GJE" },
-  { 0x0006b3, "Cyrillic_IO" },
-  { 0x0006b4, "Ukrainian_IE" },
-  { 0x0006b4, "Ukranian_JE" },
-  { 0x0006b5, "Macedonia_DSE" },
-  { 0x0006b6, "Ukrainian_I" },
-  { 0x0006b6, "Ukranian_I" },
-  { 0x0006b7, "Ukrainian_YI" },
-  { 0x0006b7, "Ukranian_YI" },
-  { 0x0006b8, "Cyrillic_JE" },
-  { 0x0006b8, "Serbian_JE" },
-  { 0x0006b9, "Cyrillic_LJE" },
-  { 0x0006b9, "Serbian_LJE" },
-  { 0x0006ba, "Cyrillic_NJE" },
-  { 0x0006ba, "Serbian_NJE" },
-  { 0x0006bb, "Serbian_TSHE" },
-  { 0x0006bc, "Macedonia_KJE" },
-  { 0x0006be, "Byelorussian_SHORTU" },
-  { 0x0006bf, "Cyrillic_DZHE" },
-  { 0x0006bf, "Serbian_DZE" },
-  { 0x0006c0, "Cyrillic_yu" },
-  { 0x0006c1, "Cyrillic_a" },
-  { 0x0006c2, "Cyrillic_be" },
-  { 0x0006c3, "Cyrillic_tse" },
-  { 0x0006c4, "Cyrillic_de" },
-  { 0x0006c5, "Cyrillic_ie" },
-  { 0x0006c6, "Cyrillic_ef" },
-  { 0x0006c7, "Cyrillic_ghe" },
-  { 0x0006c8, "Cyrillic_ha" },
-  { 0x0006c9, "Cyrillic_i" },
-  { 0x0006ca, "Cyrillic_shorti" },
-  { 0x0006cb, "Cyrillic_ka" },
-  { 0x0006cc, "Cyrillic_el" },
-  { 0x0006cd, "Cyrillic_em" },
-  { 0x0006ce, "Cyrillic_en" },
-  { 0x0006cf, "Cyrillic_o" },
-  { 0x0006d0, "Cyrillic_pe" },
-  { 0x0006d1, "Cyrillic_ya" },
-  { 0x0006d2, "Cyrillic_er" },
-  { 0x0006d3, "Cyrillic_es" },
-  { 0x0006d4, "Cyrillic_te" },
-  { 0x0006d5, "Cyrillic_u" },
-  { 0x0006d6, "Cyrillic_zhe" },
-  { 0x0006d7, "Cyrillic_ve" },
-  { 0x0006d8, "Cyrillic_softsign" },
-  { 0x0006d9, "Cyrillic_yeru" },
-  { 0x0006da, "Cyrillic_ze" },
-  { 0x0006db, "Cyrillic_sha" },
-  { 0x0006dc, "Cyrillic_e" },
-  { 0x0006dd, "Cyrillic_shcha" },
-  { 0x0006de, "Cyrillic_che" },
-  { 0x0006df, "Cyrillic_hardsign" },
-  { 0x0006e0, "Cyrillic_YU" },
-  { 0x0006e1, "Cyrillic_A" },
-  { 0x0006e2, "Cyrillic_BE" },
-  { 0x0006e3, "Cyrillic_TSE" },
-  { 0x0006e4, "Cyrillic_DE" },
-  { 0x0006e5, "Cyrillic_IE" },
-  { 0x0006e6, "Cyrillic_EF" },
-  { 0x0006e7, "Cyrillic_GHE" },
-  { 0x0006e8, "Cyrillic_HA" },
-  { 0x0006e9, "Cyrillic_I" },
-  { 0x0006ea, "Cyrillic_SHORTI" },
-  { 0x0006eb, "Cyrillic_KA" },
-  { 0x0006ec, "Cyrillic_EL" },
-  { 0x0006ed, "Cyrillic_EM" },
-  { 0x0006ee, "Cyrillic_EN" },
-  { 0x0006ef, "Cyrillic_O" },
-  { 0x0006f0, "Cyrillic_PE" },
-  { 0x0006f1, "Cyrillic_YA" },
-  { 0x0006f2, "Cyrillic_ER" },
-  { 0x0006f3, "Cyrillic_ES" },
-  { 0x0006f4, "Cyrillic_TE" },
-  { 0x0006f5, "Cyrillic_U" },
-  { 0x0006f6, "Cyrillic_ZHE" },
-  { 0x0006f7, "Cyrillic_VE" },
-  { 0x0006f8, "Cyrillic_SOFTSIGN" },
-  { 0x0006f9, "Cyrillic_YERU" },
-  { 0x0006fa, "Cyrillic_ZE" },
-  { 0x0006fb, "Cyrillic_SHA" },
-  { 0x0006fc, "Cyrillic_E" },
-  { 0x0006fd, "Cyrillic_SHCHA" },
-  { 0x0006fe, "Cyrillic_CHE" },
-  { 0x0006ff, "Cyrillic_HARDSIGN" },
-  { 0x0007a1, "Greek_ALPHAaccent" },
-  { 0x0007a2, "Greek_EPSILONaccent" },
-  { 0x0007a3, "Greek_ETAaccent" },
-  { 0x0007a4, "Greek_IOTAaccent" },
-  { 0x0007a5, "Greek_IOTAdiaeresis" },
-  { 0x0007a7, "Greek_OMICRONaccent" },
-  { 0x0007a8, "Greek_UPSILONaccent" },
-  { 0x0007a9, "Greek_UPSILONdieresis" },
-  { 0x0007ab, "Greek_OMEGAaccent" },
-  { 0x0007ae, "Greek_accentdieresis" },
-  { 0x0007af, "Greek_horizbar" },
-  { 0x0007b1, "Greek_alphaaccent" },
-  { 0x0007b2, "Greek_epsilonaccent" },
-  { 0x0007b3, "Greek_etaaccent" },
-  { 0x0007b4, "Greek_iotaaccent" },
-  { 0x0007b5, "Greek_iotadieresis" },
-  { 0x0007b6, "Greek_iotaaccentdieresis" },
-  { 0x0007b7, "Greek_omicronaccent" },
-  { 0x0007b8, "Greek_upsilonaccent" },
-  { 0x0007b9, "Greek_upsilondieresis" },
-  { 0x0007ba, "Greek_upsilonaccentdieresis" },
-  { 0x0007bb, "Greek_omegaaccent" },
-  { 0x0007c1, "Greek_ALPHA" },
-  { 0x0007c2, "Greek_BETA" },
-  { 0x0007c3, "Greek_GAMMA" },
-  { 0x0007c4, "Greek_DELTA" },
-  { 0x0007c5, "Greek_EPSILON" },
-  { 0x0007c6, "Greek_ZETA" },
-  { 0x0007c7, "Greek_ETA" },
-  { 0x0007c8, "Greek_THETA" },
-  { 0x0007c9, "Greek_IOTA" },
-  { 0x0007ca, "Greek_KAPPA" },
-  { 0x0007cb, "Greek_LAMBDA" },
-  { 0x0007cb, "Greek_LAMDA" },
-  { 0x0007cc, "Greek_MU" },
-  { 0x0007cd, "Greek_NU" },
-  { 0x0007ce, "Greek_XI" },
-  { 0x0007cf, "Greek_OMICRON" },
-  { 0x0007d0, "Greek_PI" },
-  { 0x0007d1, "Greek_RHO" },
-  { 0x0007d2, "Greek_SIGMA" },
-  { 0x0007d4, "Greek_TAU" },
-  { 0x0007d5, "Greek_UPSILON" },
-  { 0x0007d6, "Greek_PHI" },
-  { 0x0007d7, "Greek_CHI" },
-  { 0x0007d8, "Greek_PSI" },
-  { 0x0007d9, "Greek_OMEGA" },
-  { 0x0007e1, "Greek_alpha" },
-  { 0x0007e2, "Greek_beta" },
-  { 0x0007e3, "Greek_gamma" },
-  { 0x0007e4, "Greek_delta" },
-  { 0x0007e5, "Greek_epsilon" },
-  { 0x0007e6, "Greek_zeta" },
-  { 0x0007e7, "Greek_eta" },
-  { 0x0007e8, "Greek_theta" },
-  { 0x0007e9, "Greek_iota" },
-  { 0x0007ea, "Greek_kappa" },
-  { 0x0007eb, "Greek_lambda" },
-  { 0x0007eb, "Greek_lamda" },
-  { 0x0007ec, "Greek_mu" },
-  { 0x0007ed, "Greek_nu" },
-  { 0x0007ee, "Greek_xi" },
-  { 0x0007ef, "Greek_omicron" },
-  { 0x0007f0, "Greek_pi" },
-  { 0x0007f1, "Greek_rho" },
-  { 0x0007f2, "Greek_sigma" },
-  { 0x0007f3, "Greek_finalsmallsigma" },
-  { 0x0007f4, "Greek_tau" },
-  { 0x0007f5, "Greek_upsilon" },
-  { 0x0007f6, "Greek_phi" },
-  { 0x0007f7, "Greek_chi" },
-  { 0x0007f8, "Greek_psi" },
-  { 0x0007f9, "Greek_omega" },
-  { 0x0008a1, "leftradical" },
-  { 0x0008a2, "topleftradical" },
-  { 0x0008a3, "horizconnector" },
-  { 0x0008a4, "topintegral" },
-  { 0x0008a5, "botintegral" },
-  { 0x0008a6, "vertconnector" },
-  { 0x0008a7, "topleftsqbracket" },
-  { 0x0008a8, "botleftsqbracket" },
-  { 0x0008a9, "toprightsqbracket" },
-  { 0x0008aa, "botrightsqbracket" },
-  { 0x0008ab, "topleftparens" },
-  { 0x0008ac, "botleftparens" },
-  { 0x0008ad, "toprightparens" },
-  { 0x0008ae, "botrightparens" },
-  { 0x0008af, "leftmiddlecurlybrace" },
-  { 0x0008b0, "rightmiddlecurlybrace" },
-  { 0x0008b1, "topleftsummation" },
-  { 0x0008b2, "botleftsummation" },
-  { 0x0008b3, "topvertsummationconnector" },
-  { 0x0008b4, "botvertsummationconnector" },
-  { 0x0008b5, "toprightsummation" },
-  { 0x0008b6, "botrightsummation" },
-  { 0x0008b7, "rightmiddlesummation" },
-  { 0x0008bc, "lessthanequal" },
-  { 0x0008bd, "notequal" },
-  { 0x0008be, "greaterthanequal" },
-  { 0x0008bf, "integral" },
-  { 0x0008c0, "therefore" },
-  { 0x0008c1, "variation" },
-  { 0x0008c2, "infinity" },
-  { 0x0008c5, "nabla" },
-  { 0x0008c8, "approximate" },
-  { 0x0008c9, "similarequal" },
-  { 0x0008cd, "ifonlyif" },
-  { 0x0008ce, "implies" },
-  { 0x0008cf, "identical" },
-  { 0x0008d6, "radical" },
-  { 0x0008da, "includedin" },
-  { 0x0008db, "includes" },
-  { 0x0008dc, "intersection" },
-  { 0x0008dd, "union" },
-  { 0x0008de, "logicaland" },
-  { 0x0008df, "logicalor" },
-  { 0x0008ef, "partialderivative" },
-  { 0x0008f6, "function" },
-  { 0x0008fb, "leftarrow" },
-  { 0x0008fc, "uparrow" },
-  { 0x0008fd, "rightarrow" },
-  { 0x0008fe, "downarrow" },
-  { 0x0009df, "blank" },
-  { 0x0009e0, "soliddiamond" },
-  { 0x0009e1, "checkerboard" },
-  { 0x0009e2, "ht" },
-  { 0x0009e3, "ff" },
-  { 0x0009e4, "cr" },
-  { 0x0009e5, "lf" },
-  { 0x0009e8, "nl" },
-  { 0x0009e9, "vt" },
-  { 0x0009ea, "lowrightcorner" },
-  { 0x0009eb, "uprightcorner" },
-  { 0x0009ec, "upleftcorner" },
-  { 0x0009ed, "lowleftcorner" },
-  { 0x0009ee, "crossinglines" },
-  { 0x0009ef, "horizlinescan1" },
-  { 0x0009f0, "horizlinescan3" },
-  { 0x0009f1, "horizlinescan5" },
-  { 0x0009f2, "horizlinescan7" },
-  { 0x0009f3, "horizlinescan9" },
-  { 0x0009f4, "leftt" },
-  { 0x0009f5, "rightt" },
-  { 0x0009f6, "bott" },
-  { 0x0009f7, "topt" },
-  { 0x0009f8, "vertbar" },
-  { 0x000aa1, "emspace" },
-  { 0x000aa2, "enspace" },
-  { 0x000aa3, "em3space" },
-  { 0x000aa4, "em4space" },
-  { 0x000aa5, "digitspace" },
-  { 0x000aa6, "punctspace" },
-  { 0x000aa7, "thinspace" },
-  { 0x000aa8, "hairspace" },
-  { 0x000aa9, "emdash" },
-  { 0x000aaa, "endash" },
-  { 0x000aac, "signifblank" },
-  { 0x000aae, "ellipsis" },
-  { 0x000aaf, "doubbaselinedot" },
-  { 0x000ab0, "onethird" },
-  { 0x000ab1, "twothirds" },
-  { 0x000ab2, "onefifth" },
-  { 0x000ab3, "twofifths" },
-  { 0x000ab4, "threefifths" },
-  { 0x000ab5, "fourfifths" },
-  { 0x000ab6, "onesixth" },
-  { 0x000ab7, "fivesixths" },
-  { 0x000ab8, "careof" },
-  { 0x000abb, "figdash" },
-  { 0x000abc, "leftanglebracket" },
-  { 0x000abd, "decimalpoint" },
-  { 0x000abe, "rightanglebracket" },
-  { 0x000abf, "marker" },
-  { 0x000ac3, "oneeighth" },
-  { 0x000ac4, "threeeighths" },
-  { 0x000ac5, "fiveeighths" },
-  { 0x000ac6, "seveneighths" },
-  { 0x000ac9, "trademark" },
-  { 0x000aca, "signaturemark" },
-  { 0x000acb, "trademarkincircle" },
-  { 0x000acc, "leftopentriangle" },
-  { 0x000acd, "rightopentriangle" },
-  { 0x000ace, "emopencircle" },
-  { 0x000acf, "emopenrectangle" },
-  { 0x000ad0, "leftsinglequotemark" },
-  { 0x000ad1, "rightsinglequotemark" },
-  { 0x000ad2, "leftdoublequotemark" },
-  { 0x000ad3, "rightdoublequotemark" },
-  { 0x000ad4, "prescription" },
-  { 0x000ad6, "minutes" },
-  { 0x000ad7, "seconds" },
-  { 0x000ad9, "latincross" },
-  { 0x000ada, "hexagram" },
-  { 0x000adb, "filledrectbullet" },
-  { 0x000adc, "filledlefttribullet" },
-  { 0x000add, "filledrighttribullet" },
-  { 0x000ade, "emfilledcircle" },
-  { 0x000adf, "emfilledrect" },
-  { 0x000ae0, "enopencircbullet" },
-  { 0x000ae1, "enopensquarebullet" },
-  { 0x000ae2, "openrectbullet" },
-  { 0x000ae3, "opentribulletup" },
-  { 0x000ae4, "opentribulletdown" },
-  { 0x000ae5, "openstar" },
-  { 0x000ae6, "enfilledcircbullet" },
-  { 0x000ae7, "enfilledsqbullet" },
-  { 0x000ae8, "filledtribulletup" },
-  { 0x000ae9, "filledtribulletdown" },
-  { 0x000aea, "leftpointer" },
-  { 0x000aeb, "rightpointer" },
-  { 0x000aec, "club" },
-  { 0x000aed, "diamond" },
-  { 0x000aee, "heart" },
-  { 0x000af0, "maltesecross" },
-  { 0x000af1, "dagger" },
-  { 0x000af2, "doubledagger" },
-  { 0x000af3, "checkmark" },
-  { 0x000af4, "ballotcross" },
-  { 0x000af5, "musicalsharp" },
-  { 0x000af6, "musicalflat" },
-  { 0x000af7, "malesymbol" },
-  { 0x000af8, "femalesymbol" },
-  { 0x000af9, "telephone" },
-  { 0x000afa, "telephonerecorder" },
-  { 0x000afb, "phonographcopyright" },
-  { 0x000afc, "caret" },
-  { 0x000afd, "singlelowquotemark" },
-  { 0x000afe, "doublelowquotemark" },
-  { 0x000aff, "cursor" },
-  { 0x000ba3, "leftcaret" },
-  { 0x000ba6, "rightcaret" },
-  { 0x000ba8, "downcaret" },
-  { 0x000ba9, "upcaret" },
-  { 0x000bc0, "overbar" },
-  { 0x000bc2, "downtack" },
-  { 0x000bc3, "upshoe" },
-  { 0x000bc4, "downstile" },
-  { 0x000bc6, "underbar" },
-  { 0x000bca, "jot" },
-  { 0x000bcc, "quad" },
-  { 0x000bce, "uptack" },
-  { 0x000bcf, "circle" },
-  { 0x000bd3, "upstile" },
-  { 0x000bd6, "downshoe" },
-  { 0x000bd8, "rightshoe" },
-  { 0x000bda, "leftshoe" },
-  { 0x000bdc, "lefttack" },
-  { 0x000bfc, "righttack" },
-  { 0x000cdf, "hebrew_doublelowline" },
-  { 0x000ce0, "hebrew_aleph" },
-  { 0x000ce1, "hebrew_bet" },
-  { 0x000ce1, "hebrew_beth" },
-  { 0x000ce2, "hebrew_gimel" },
-  { 0x000ce2, "hebrew_gimmel" },
-  { 0x000ce3, "hebrew_dalet" },
-  { 0x000ce3, "hebrew_daleth" },
-  { 0x000ce4, "hebrew_he" },
-  { 0x000ce5, "hebrew_waw" },
-  { 0x000ce6, "hebrew_zain" },
-  { 0x000ce6, "hebrew_zayin" },
-  { 0x000ce7, "hebrew_chet" },
-  { 0x000ce7, "hebrew_het" },
-  { 0x000ce8, "hebrew_tet" },
-  { 0x000ce8, "hebrew_teth" },
-  { 0x000ce9, "hebrew_yod" },
-  { 0x000cea, "hebrew_finalkaph" },
-  { 0x000ceb, "hebrew_kaph" },
-  { 0x000cec, "hebrew_lamed" },
-  { 0x000ced, "hebrew_finalmem" },
-  { 0x000cee, "hebrew_mem" },
-  { 0x000cef, "hebrew_finalnun" },
-  { 0x000cf0, "hebrew_nun" },
-  { 0x000cf1, "hebrew_samech" },
-  { 0x000cf1, "hebrew_samekh" },
-  { 0x000cf2, "hebrew_ayin" },
-  { 0x000cf3, "hebrew_finalpe" },
-  { 0x000cf4, "hebrew_pe" },
-  { 0x000cf5, "hebrew_finalzade" },
-  { 0x000cf5, "hebrew_finalzadi" },
-  { 0x000cf6, "hebrew_zade" },
-  { 0x000cf6, "hebrew_zadi" },
-  { 0x000cf7, "hebrew_kuf" },
-  { 0x000cf7, "hebrew_qoph" },
-  { 0x000cf8, "hebrew_resh" },
-  { 0x000cf9, "hebrew_shin" },
-  { 0x000cfa, "hebrew_taf" },
-  { 0x000cfa, "hebrew_taw" },
-  { 0x000da1, "Thai_kokai" },
-  { 0x000da2, "Thai_khokhai" },
-  { 0x000da3, "Thai_khokhuat" },
-  { 0x000da4, "Thai_khokhwai" },
-  { 0x000da5, "Thai_khokhon" },
-  { 0x000da6, "Thai_khorakhang" },
-  { 0x000da7, "Thai_ngongu" },
-  { 0x000da8, "Thai_chochan" },
-  { 0x000da9, "Thai_choching" },
-  { 0x000daa, "Thai_chochang" },
-  { 0x000dab, "Thai_soso" },
-  { 0x000dac, "Thai_chochoe" },
-  { 0x000dad, "Thai_yoying" },
-  { 0x000dae, "Thai_dochada" },
-  { 0x000daf, "Thai_topatak" },
-  { 0x000db0, "Thai_thothan" },
-  { 0x000db1, "Thai_thonangmontho" },
-  { 0x000db2, "Thai_thophuthao" },
-  { 0x000db3, "Thai_nonen" },
-  { 0x000db4, "Thai_dodek" },
-  { 0x000db5, "Thai_totao" },
-  { 0x000db6, "Thai_thothung" },
-  { 0x000db7, "Thai_thothahan" },
-  { 0x000db8, "Thai_thothong" },
-  { 0x000db9, "Thai_nonu" },
-  { 0x000dba, "Thai_bobaimai" },
-  { 0x000dbb, "Thai_popla" },
-  { 0x000dbc, "Thai_phophung" },
-  { 0x000dbd, "Thai_fofa" },
-  { 0x000dbe, "Thai_phophan" },
-  { 0x000dbf, "Thai_fofan" },
-  { 0x000dc0, "Thai_phosamphao" },
-  { 0x000dc1, "Thai_moma" },
-  { 0x000dc2, "Thai_yoyak" },
-  { 0x000dc3, "Thai_rorua" },
-  { 0x000dc4, "Thai_ru" },
-  { 0x000dc5, "Thai_loling" },
-  { 0x000dc6, "Thai_lu" },
-  { 0x000dc7, "Thai_wowaen" },
-  { 0x000dc8, "Thai_sosala" },
-  { 0x000dc9, "Thai_sorusi" },
-  { 0x000dca, "Thai_sosua" },
-  { 0x000dcb, "Thai_hohip" },
-  { 0x000dcc, "Thai_lochula" },
-  { 0x000dcd, "Thai_oang" },
-  { 0x000dce, "Thai_honokhuk" },
-  { 0x000dcf, "Thai_paiyannoi" },
-  { 0x000dd0, "Thai_saraa" },
-  { 0x000dd1, "Thai_maihanakat" },
-  { 0x000dd2, "Thai_saraaa" },
-  { 0x000dd3, "Thai_saraam" },
-  { 0x000dd4, "Thai_sarai" },
-  { 0x000dd5, "Thai_saraii" },
-  { 0x000dd6, "Thai_saraue" },
-  { 0x000dd7, "Thai_sarauee" },
-  { 0x000dd8, "Thai_sarau" },
-  { 0x000dd9, "Thai_sarauu" },
-  { 0x000dda, "Thai_phinthu" },
-  { 0x000dde, "Thai_maihanakat_maitho" },
-  { 0x000ddf, "Thai_baht" },
-  { 0x000de0, "Thai_sarae" },
-  { 0x000de1, "Thai_saraae" },
-  { 0x000de2, "Thai_sarao" },
-  { 0x000de3, "Thai_saraaimaimuan" },
-  { 0x000de4, "Thai_saraaimaimalai" },
-  { 0x000de5, "Thai_lakkhangyao" },
-  { 0x000de6, "Thai_maiyamok" },
-  { 0x000de7, "Thai_maitaikhu" },
-  { 0x000de8, "Thai_maiek" },
-  { 0x000de9, "Thai_maitho" },
-  { 0x000dea, "Thai_maitri" },
-  { 0x000deb, "Thai_maichattawa" },
-  { 0x000dec, "Thai_thanthakhat" },
-  { 0x000ded, "Thai_nikhahit" },
-  { 0x000df0, "Thai_leksun" },
-  { 0x000df1, "Thai_leknung" },
-  { 0x000df2, "Thai_leksong" },
-  { 0x000df3, "Thai_leksam" },
-  { 0x000df4, "Thai_leksi" },
-  { 0x000df5, "Thai_lekha" },
-  { 0x000df6, "Thai_lekhok" },
-  { 0x000df7, "Thai_lekchet" },
-  { 0x000df8, "Thai_lekpaet" },
-  { 0x000df9, "Thai_lekkao" },
-  { 0x000ea1, "Hangul_Kiyeog" },
-  { 0x000ea2, "Hangul_SsangKiyeog" },
-  { 0x000ea3, "Hangul_KiyeogSios" },
-  { 0x000ea4, "Hangul_Nieun" },
-  { 0x000ea5, "Hangul_NieunJieuj" },
-  { 0x000ea6, "Hangul_NieunHieuh" },
-  { 0x000ea7, "Hangul_Dikeud" },
-  { 0x000ea8, "Hangul_SsangDikeud" },
-  { 0x000ea9, "Hangul_Rieul" },
-  { 0x000eaa, "Hangul_RieulKiyeog" },
-  { 0x000eab, "Hangul_RieulMieum" },
-  { 0x000eac, "Hangul_RieulPieub" },
-  { 0x000ead, "Hangul_RieulSios" },
-  { 0x000eae, "Hangul_RieulTieut" },
-  { 0x000eaf, "Hangul_RieulPhieuf" },
-  { 0x000eb0, "Hangul_RieulHieuh" },
-  { 0x000eb1, "Hangul_Mieum" },
-  { 0x000eb2, "Hangul_Pieub" },
-  { 0x000eb3, "Hangul_SsangPieub" },
-  { 0x000eb4, "Hangul_PieubSios" },
-  { 0x000eb5, "Hangul_Sios" },
-  { 0x000eb6, "Hangul_SsangSios" },
-  { 0x000eb7, "Hangul_Ieung" },
-  { 0x000eb8, "Hangul_Jieuj" },
-  { 0x000eb9, "Hangul_SsangJieuj" },
-  { 0x000eba, "Hangul_Cieuc" },
-  { 0x000ebb, "Hangul_Khieuq" },
-  { 0x000ebc, "Hangul_Tieut" },
-  { 0x000ebd, "Hangul_Phieuf" },
-  { 0x000ebe, "Hangul_Hieuh" },
-  { 0x000ebf, "Hangul_A" },
-  { 0x000ec0, "Hangul_AE" },
-  { 0x000ec1, "Hangul_YA" },
-  { 0x000ec2, "Hangul_YAE" },
-  { 0x000ec3, "Hangul_EO" },
-  { 0x000ec4, "Hangul_E" },
-  { 0x000ec5, "Hangul_YEO" },
-  { 0x000ec6, "Hangul_YE" },
-  { 0x000ec7, "Hangul_O" },
-  { 0x000ec8, "Hangul_WA" },
-  { 0x000ec9, "Hangul_WAE" },
-  { 0x000eca, "Hangul_OE" },
-  { 0x000ecb, "Hangul_YO" },
-  { 0x000ecc, "Hangul_U" },
-  { 0x000ecd, "Hangul_WEO" },
-  { 0x000ece, "Hangul_WE" },
-  { 0x000ecf, "Hangul_WI" },
-  { 0x000ed0, "Hangul_YU" },
-  { 0x000ed1, "Hangul_EU" },
-  { 0x000ed2, "Hangul_YI" },
-  { 0x000ed3, "Hangul_I" },
-  { 0x000ed4, "Hangul_J_Kiyeog" },
-  { 0x000ed5, "Hangul_J_SsangKiyeog" },
-  { 0x000ed6, "Hangul_J_KiyeogSios" },
-  { 0x000ed7, "Hangul_J_Nieun" },
-  { 0x000ed8, "Hangul_J_NieunJieuj" },
-  { 0x000ed9, "Hangul_J_NieunHieuh" },
-  { 0x000eda, "Hangul_J_Dikeud" },
-  { 0x000edb, "Hangul_J_Rieul" },
-  { 0x000edc, "Hangul_J_RieulKiyeog" },
-  { 0x000edd, "Hangul_J_RieulMieum" },
-  { 0x000ede, "Hangul_J_RieulPieub" },
-  { 0x000edf, "Hangul_J_RieulSios" },
-  { 0x000ee0, "Hangul_J_RieulTieut" },
-  { 0x000ee1, "Hangul_J_RieulPhieuf" },
-  { 0x000ee2, "Hangul_J_RieulHieuh" },
-  { 0x000ee3, "Hangul_J_Mieum" },
-  { 0x000ee4, "Hangul_J_Pieub" },
-  { 0x000ee5, "Hangul_J_PieubSios" },
-  { 0x000ee6, "Hangul_J_Sios" },
-  { 0x000ee7, "Hangul_J_SsangSios" },
-  { 0x000ee8, "Hangul_J_Ieung" },
-  { 0x000ee9, "Hangul_J_Jieuj" },
-  { 0x000eea, "Hangul_J_Cieuc" },
-  { 0x000eeb, "Hangul_J_Khieuq" },
-  { 0x000eec, "Hangul_J_Tieut" },
-  { 0x000eed, "Hangul_J_Phieuf" },
-  { 0x000eee, "Hangul_J_Hieuh" },
-  { 0x000eef, "Hangul_RieulYeorinHieuh" },
-  { 0x000ef0, "Hangul_SunkyeongeumMieum" },
-  { 0x000ef1, "Hangul_SunkyeongeumPieub" },
-  { 0x000ef2, "Hangul_PanSios" },
-  { 0x000ef3, "Hangul_KkogjiDalrinIeung" },
-  { 0x000ef4, "Hangul_SunkyeongeumPhieuf" },
-  { 0x000ef5, "Hangul_YeorinHieuh" },
-  { 0x000ef6, "Hangul_AraeA" },
-  { 0x000ef7, "Hangul_AraeAE" },
-  { 0x000ef8, "Hangul_J_PanSios" },
-  { 0x000ef9, "Hangul_J_KkogjiDalrinIeung" },
-  { 0x000efa, "Hangul_J_YeorinHieuh" },
-  { 0x000eff, "Korean_Won" },
-  { 0x0013bc, "OE" },
-  { 0x0013bd, "oe" },
-  { 0x0013be, "Ydiaeresis" },
-  { 0x0020a0, "EcuSign" },
-  { 0x0020a1, "ColonSign" },
-  { 0x0020a2, "CruzeiroSign" },
-  { 0x0020a3, "FFrancSign" },
-  { 0x0020a4, "LiraSign" },
-  { 0x0020a5, "MillSign" },
-  { 0x0020a6, "NairaSign" },
-  { 0x0020a7, "PesetaSign" },
-  { 0x0020a8, "RupeeSign" },
-  { 0x0020a9, "WonSign" },
-  { 0x0020aa, "NewSheqelSign" },
-  { 0x0020ab, "DongSign" },
-  { 0x0020ac, "EuroSign" },
-  { 0x00fd01, "3270_Duplicate" },
-  { 0x00fd02, "3270_FieldMark" },
-  { 0x00fd03, "3270_Right2" },
-  { 0x00fd04, "3270_Left2" },
-  { 0x00fd05, "3270_BackTab" },
-  { 0x00fd06, "3270_EraseEOF" },
-  { 0x00fd07, "3270_EraseInput" },
-  { 0x00fd08, "3270_Reset" },
-  { 0x00fd09, "3270_Quit" },
-  { 0x00fd0a, "3270_PA1" },
-  { 0x00fd0b, "3270_PA2" },
-  { 0x00fd0c, "3270_PA3" },
-  { 0x00fd0d, "3270_Test" },
-  { 0x00fd0e, "3270_Attn" },
-  { 0x00fd0f, "3270_CursorBlink" },
-  { 0x00fd10, "3270_AltCursor" },
-  { 0x00fd11, "3270_KeyClick" },
-  { 0x00fd12, "3270_Jump" },
-  { 0x00fd13, "3270_Ident" },
-  { 0x00fd14, "3270_Rule" },
-  { 0x00fd15, "3270_Copy" },
-  { 0x00fd16, "3270_Play" },
-  { 0x00fd17, "3270_Setup" },
-  { 0x00fd18, "3270_Record" },
-  { 0x00fd19, "3270_ChangeScreen" },
-  { 0x00fd1a, "3270_DeleteWord" },
-  { 0x00fd1b, "3270_ExSelect" },
-  { 0x00fd1c, "3270_CursorSelect" },
-  { 0x00fd1d, "3270_PrintScreen" },
-  { 0x00fd1e, "3270_Enter" },
-  { 0x00fe01, "ISO_Lock" },
-  { 0x00fe02, "ISO_Level2_Latch" },
-  { 0x00fe03, "ISO_Level3_Shift" },
-  { 0x00fe04, "ISO_Level3_Latch" },
-  { 0x00fe05, "ISO_Level3_Lock" },
-  { 0x00fe06, "ISO_Group_Latch" },
-  { 0x00fe07, "ISO_Group_Lock" },
-  { 0x00fe08, "ISO_Next_Group" },
-  { 0x00fe09, "ISO_Next_Group_Lock" },
-  { 0x00fe0a, "ISO_Prev_Group" },
-  { 0x00fe0b, "ISO_Prev_Group_Lock" },
-  { 0x00fe0c, "ISO_First_Group" },
-  { 0x00fe0d, "ISO_First_Group_Lock" },
-  { 0x00fe0e, "ISO_Last_Group" },
-  { 0x00fe0f, "ISO_Last_Group_Lock" },
-  { 0x00fe20, "ISO_Left_Tab" },
-  { 0x00fe21, "ISO_Move_Line_Up" },
-  { 0x00fe22, "ISO_Move_Line_Down" },
-  { 0x00fe23, "ISO_Partial_Line_Up" },
-  { 0x00fe24, "ISO_Partial_Line_Down" },
-  { 0x00fe25, "ISO_Partial_Space_Left" },
-  { 0x00fe26, "ISO_Partial_Space_Right" },
-  { 0x00fe27, "ISO_Set_Margin_Left" },
-  { 0x00fe28, "ISO_Set_Margin_Right" },
-  { 0x00fe29, "ISO_Release_Margin_Left" },
-  { 0x00fe2a, "ISO_Release_Margin_Right" },
-  { 0x00fe2b, "ISO_Release_Both_Margins" },
-  { 0x00fe2c, "ISO_Fast_Cursor_Left" },
-  { 0x00fe2d, "ISO_Fast_Cursor_Right" },
-  { 0x00fe2e, "ISO_Fast_Cursor_Up" },
-  { 0x00fe2f, "ISO_Fast_Cursor_Down" },
-  { 0x00fe30, "ISO_Continuous_Underline" },
-  { 0x00fe31, "ISO_Discontinuous_Underline" },
-  { 0x00fe32, "ISO_Emphasize" },
-  { 0x00fe33, "ISO_Center_Object" },
-  { 0x00fe34, "ISO_Enter" },
-  { 0x00fe50, "dead_grave" },
-  { 0x00fe51, "dead_acute" },
-  { 0x00fe52, "dead_circumflex" },
-  { 0x00fe53, "dead_tilde" },
-  { 0x00fe54, "dead_macron" },
-  { 0x00fe55, "dead_breve" },
-  { 0x00fe56, "dead_abovedot" },
-  { 0x00fe57, "dead_diaeresis" },
-  { 0x00fe58, "dead_abovering" },
-  { 0x00fe59, "dead_doubleacute" },
-  { 0x00fe5a, "dead_caron" },
-  { 0x00fe5b, "dead_cedilla" },
-  { 0x00fe5c, "dead_ogonek" },
-  { 0x00fe5d, "dead_iota" },
-  { 0x00fe5e, "dead_voiced_sound" },
-  { 0x00fe5f, "dead_semivoiced_sound" },
-  { 0x00fe60, "dead_belowdot" },
-  { 0x00fe70, "AccessX_Enable" },
-  { 0x00fe71, "AccessX_Feedback_Enable" },
-  { 0x00fe72, "RepeatKeys_Enable" },
-  { 0x00fe73, "SlowKeys_Enable" },
-  { 0x00fe74, "BounceKeys_Enable" },
-  { 0x00fe75, "StickyKeys_Enable" },
-  { 0x00fe76, "MouseKeys_Enable" },
-  { 0x00fe77, "MouseKeys_Accel_Enable" },
-  { 0x00fe78, "Overlay1_Enable" },
-  { 0x00fe79, "Overlay2_Enable" },
-  { 0x00fe7a, "AudibleBell_Enable" },
-  { 0x00fed0, "First_Virtual_Screen" },
-  { 0x00fed1, "Prev_Virtual_Screen" },
-  { 0x00fed2, "Next_Virtual_Screen" },
-  { 0x00fed4, "Last_Virtual_Screen" },
-  { 0x00fed5, "Terminate_Server" },
-  { 0x00fee0, "Pointer_Left" },
-  { 0x00fee1, "Pointer_Right" },
-  { 0x00fee2, "Pointer_Up" },
-  { 0x00fee3, "Pointer_Down" },
-  { 0x00fee4, "Pointer_UpLeft" },
-  { 0x00fee5, "Pointer_UpRight" },
-  { 0x00fee6, "Pointer_DownLeft" },
-  { 0x00fee7, "Pointer_DownRight" },
-  { 0x00fee8, "Pointer_Button_Dflt" },
-  { 0x00fee9, "Pointer_Button1" },
-  { 0x00feea, "Pointer_Button2" },
-  { 0x00feeb, "Pointer_Button3" },
-  { 0x00feec, "Pointer_Button4" },
-  { 0x00feed, "Pointer_Button5" },
-  { 0x00feee, "Pointer_DblClick_Dflt" },
-  { 0x00feef, "Pointer_DblClick1" },
-  { 0x00fef0, "Pointer_DblClick2" },
-  { 0x00fef1, "Pointer_DblClick3" },
-  { 0x00fef2, "Pointer_DblClick4" },
-  { 0x00fef3, "Pointer_DblClick5" },
-  { 0x00fef4, "Pointer_Drag_Dflt" },
-  { 0x00fef5, "Pointer_Drag1" },
-  { 0x00fef6, "Pointer_Drag2" },
-  { 0x00fef7, "Pointer_Drag3" },
-  { 0x00fef8, "Pointer_Drag4" },
-  { 0x00fef9, "Pointer_EnableKeys" },
-  { 0x00fefa, "Pointer_Accelerate" },
-  { 0x00fefb, "Pointer_DfltBtnNext" },
-  { 0x00fefc, "Pointer_DfltBtnPrev" },
-  { 0x00fefd, "Pointer_Drag5" },
-  { 0x00ff08, "BackSpace" },
-  { 0x00ff09, "Tab" },
-  { 0x00ff0a, "Linefeed" },
-  { 0x00ff0b, "Clear" },
-  { 0x00ff0d, "Return" },
-  { 0x00ff13, "Pause" },
-  { 0x00ff14, "Scroll_Lock" },
-  { 0x00ff15, "Sys_Req" },
-  { 0x00ff1b, "Escape" },
-  { 0x00ff20, "Multi_key" },
-  { 0x00ff21, "Kanji" },
-  { 0x00ff22, "Muhenkan" },
-  { 0x00ff23, "Henkan" },
-  { 0x00ff23, "Henkan_Mode" },
-  { 0x00ff24, "Romaji" },
-  { 0x00ff25, "Hiragana" },
-  { 0x00ff26, "Katakana" },
-  { 0x00ff27, "Hiragana_Katakana" },
-  { 0x00ff28, "Zenkaku" },
-  { 0x00ff29, "Hankaku" },
-  { 0x00ff2a, "Zenkaku_Hankaku" },
-  { 0x00ff2b, "Touroku" },
-  { 0x00ff2c, "Massyo" },
-  { 0x00ff2d, "Kana_Lock" },
-  { 0x00ff2e, "Kana_Shift" },
-  { 0x00ff2f, "Eisu_Shift" },
-  { 0x00ff30, "Eisu_toggle" },
-  { 0x00ff31, "Hangul" },
-  { 0x00ff32, "Hangul_Start" },
-  { 0x00ff33, "Hangul_End" },
-  { 0x00ff34, "Hangul_Hanja" },
-  { 0x00ff35, "Hangul_Jamo" },
-  { 0x00ff36, "Hangul_Romaja" },
-  { 0x00ff37, "Codeinput" },
-  { 0x00ff38, "Hangul_Jeonja" },
-  { 0x00ff39, "Hangul_Banja" },
-  { 0x00ff3a, "Hangul_PreHanja" },
-  { 0x00ff3b, "Hangul_PostHanja" },
-  { 0x00ff3c, "SingleCandidate" },
-  { 0x00ff3d, "MultipleCandidate" },
-  { 0x00ff3e, "PreviousCandidate" },
-  { 0x00ff3f, "Hangul_Special" },
-  { 0x00ff50, "Home" },
-  { 0x00ff51, "Left" },
-  { 0x00ff52, "Up" },
-  { 0x00ff53, "Right" },
-  { 0x00ff54, "Down" },
-  { 0x00ff55, "Page_Up" },
-  { 0x00ff55, "Prior" },
-  { 0x00ff56, "Next" },
-  { 0x00ff56, "Page_Down" },
-  { 0x00ff57, "End" },
-  { 0x00ff58, "Begin" },
-  { 0x00ff60, "Select" },
-  { 0x00ff61, "Print" },
-  { 0x00ff62, "Execute" },
-  { 0x00ff63, "Insert" },
-  { 0x00ff65, "Undo" },
-  { 0x00ff66, "Redo" },
-  { 0x00ff67, "Menu" },
-  { 0x00ff68, "Find" },
-  { 0x00ff69, "Cancel" },
-  { 0x00ff6a, "Help" },
-  { 0x00ff6b, "Break" },
-  { 0x00ff7e, "Arabic_switch" },
-  { 0x00ff7e, "Greek_switch" },
-  { 0x00ff7e, "Hangul_switch" },
-  { 0x00ff7e, "Hebrew_switch" },
-  { 0x00ff7e, "ISO_Group_Shift" },
-  { 0x00ff7e, "Mode_switch" },
-  { 0x00ff7e, "kana_switch" },
-  { 0x00ff7e, "script_switch" },
-  { 0x00ff7f, "Num_Lock" },
-  { 0x00ff80, "KP_Space" },
-  { 0x00ff89, "KP_Tab" },
-  { 0x00ff8d, "KP_Enter" },
-  { 0x00ff91, "KP_F1" },
-  { 0x00ff92, "KP_F2" },
-  { 0x00ff93, "KP_F3" },
-  { 0x00ff94, "KP_F4" },
-  { 0x00ff95, "KP_Home" },
-  { 0x00ff96, "KP_Left" },
-  { 0x00ff97, "KP_Up" },
-  { 0x00ff98, "KP_Right" },
-  { 0x00ff99, "KP_Down" },
-  { 0x00ff9a, "KP_Page_Up" },
-  { 0x00ff9a, "KP_Prior" },
-  { 0x00ff9b, "KP_Next" },
-  { 0x00ff9b, "KP_Page_Down" },
-  { 0x00ff9c, "KP_End" },
-  { 0x00ff9d, "KP_Begin" },
-  { 0x00ff9e, "KP_Insert" },
-  { 0x00ff9f, "KP_Delete" },
-  { 0x00ffaa, "KP_Multiply" },
-  { 0x00ffab, "KP_Add" },
-  { 0x00ffac, "KP_Separator" },
-  { 0x00ffad, "KP_Subtract" },
-  { 0x00ffae, "KP_Decimal" },
-  { 0x00ffaf, "KP_Divide" },
-  { 0x00ffb0, "KP_0" },
-  { 0x00ffb1, "KP_1" },
-  { 0x00ffb2, "KP_2" },
-  { 0x00ffb3, "KP_3" },
-  { 0x00ffb4, "KP_4" },
-  { 0x00ffb5, "KP_5" },
-  { 0x00ffb6, "KP_6" },
-  { 0x00ffb7, "KP_7" },
-  { 0x00ffb8, "KP_8" },
-  { 0x00ffb9, "KP_9" },
-  { 0x00ffbd, "KP_Equal" },
-  { 0x00ffbe, "F1" },
-  { 0x00ffbf, "F2" },
-  { 0x00ffc0, "F3" },
-  { 0x00ffc1, "F4" },
-  { 0x00ffc2, "F5" },
-  { 0x00ffc3, "F6" },
-  { 0x00ffc4, "F7" },
-  { 0x00ffc5, "F8" },
-  { 0x00ffc6, "F9" },
-  { 0x00ffc7, "F10" },
-  { 0x00ffc8, "F11" },
-  { 0x00ffc9, "F12" },
-  { 0x00ffca, "F13" },
-  { 0x00ffcb, "F14" },
-  { 0x00ffcc, "F15" },
-  { 0x00ffcd, "F16" },
-  { 0x00ffce, "F17" },
-  { 0x00ffcf, "F18" },
-  { 0x00ffd0, "F19" },
-  { 0x00ffd1, "F20" },
-  { 0x00ffd2, "F21" },
-  { 0x00ffd3, "F22" },
-  { 0x00ffd4, "F23" },
-  { 0x00ffd5, "F24" },
-  { 0x00ffd6, "F25" },
-  { 0x00ffd7, "F26" },
-  { 0x00ffd8, "F27" },
-  { 0x00ffd9, "F28" },
-  { 0x00ffda, "F29" },
-  { 0x00ffdb, "F30" },
-  { 0x00ffdc, "F31" },
-  { 0x00ffdd, "F32" },
-  { 0x00ffde, "F33" },
-  { 0x00ffdf, "F34" },
-  { 0x00ffe0, "F35" },
-  { 0x00ffe1, "Shift_L" },
-  { 0x00ffe2, "Shift_R" },
-  { 0x00ffe3, "Control_L" },
-  { 0x00ffe4, "Control_R" },
-  { 0x00ffe5, "Caps_Lock" },
-  { 0x00ffe6, "Shift_Lock" },
-  { 0x00ffe7, "Meta_L" },
-  { 0x00ffe8, "Meta_R" },
-  { 0x00ffe9, "Alt_L" },
-  { 0x00ffea, "Alt_R" },
-  { 0x00ffeb, "Super_L" },
-  { 0x00ffec, "Super_R" },
-  { 0x00ffed, "Hyper_L" },
-  { 0x00ffee, "Hyper_R" },
-  { 0x00ffff, "Delete" },
-  { 0xffffff, "VoidSymbol" },
-};
-
-#define GDK_NUM_KEYS (sizeof (gdk_keys_by_keyval) / sizeof (gdk_keys_by_keyval[0]))
-
-static struct gdk_key *gdk_keys_by_name = NULL;
-
-static int
-gdk_keys_keyval_compare (const void *pkey, const void *pbase)
-{
-  return (*(int *) pkey) - ((struct gdk_key *) pbase)->keyval;
-}
-
-gchar*
-gdk_keyval_name (guint       keyval)
-{
-  struct gdk_key *found =
-    bsearch (&keyval, gdk_keys_by_keyval,
-            GDK_NUM_KEYS, sizeof (struct gdk_key),
-            gdk_keys_keyval_compare);
-  if (found != NULL)
-    return (gchar *) found->name;
-  else
-    return NULL;
-}
-
-static int 
-gdk_key_compare_by_name (const void *a, const void *b)
-{
-  return strcmp (((const struct gdk_key *) a)->name, ((const struct gdk_key *) b)->name);
-}
-
-static int
-gdk_keys_name_compare (const void *pkey, const void *pbase)
-{
-  return strcmp ((const char *) pkey, ((const struct gdk_key *) pbase)->name);
-}
-
-guint
-gdk_keyval_from_name (const gchar *keyval_name)
-{
-  struct gdk_key *found;
-
-  g_return_val_if_fail (keyval_name != NULL, 0);
-  
-  if (gdk_keys_by_name == NULL)
-    {
-      gdk_keys_by_name = g_new (struct gdk_key, GDK_NUM_KEYS);
-
-      memcpy (gdk_keys_by_name, gdk_keys_by_keyval,
-             GDK_NUM_KEYS * sizeof (struct gdk_key));
-
-      qsort (gdk_keys_by_name, GDK_NUM_KEYS, sizeof (struct gdk_key),
-            gdk_key_compare_by_name);
-    }
-
-  found = bsearch (keyval_name, gdk_keys_by_name,
-                  GDK_NUM_KEYS, sizeof (struct gdk_key),
-                  gdk_keys_name_compare);
-  if (found != NULL)
-    return found->keyval;
-  else
-    return GDK_VoidSymbol;
-}
-
-guint
-gdk_keyval_to_upper (guint       keyval)
-{
-  if (keyval)
-    {
-      KeySym lower_val = 0;
-      KeySym upper_val = 0;
-      
-      gdkx_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;
-      
-      gdkx_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;
-      
-      gdkx_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;
-      
-      gdkx_XConvertCase (keyval, &lower_val, &upper_val);
-      return lower_val == keyval;
-    }
-  return TRUE;
-}
-
-
-void
-gdk_threads_enter ()
-{
-  GDK_THREADS_ENTER ();
-}
-
-void
-gdk_threads_leave ()
-{
-  GDK_THREADS_LEAVE ();
-}
diff --git a/gdk/win32/gdk.def b/gdk/win32/gdk.def
deleted file mode 100644 (file)
index 79d7b8c..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-EXPORTS
-       gdk_atom_intern
-       gdk_atom_name
-       gdk_beep
-       gdk_bitmap_create_from_data
-       gdk_bitmap_ref
-       gdk_bitmap_unref
-       gdk_char_height
-       gdk_char_measure
-       gdk_char_width
-       gdk_char_width_wc
-       gdk_color_alloc
-       gdk_color_black
-       gdk_color_change
-       gdk_color_context_add_palette
-       gdk_color_context_free
-       gdk_color_context_free_dither
-       gdk_color_context_get_index_from_palette
-       gdk_color_context_get_pixel
-       gdk_color_context_get_pixel_from_palette
-       gdk_color_context_get_pixels
-       gdk_color_context_get_pixels_incremental
-       gdk_color_context_init_dither
-       gdk_color_context_new
-       gdk_color_context_new_mono
-       gdk_color_context_query_color
-       gdk_color_context_query_colors
-       gdk_color_copy
-       gdk_color_equal
-       gdk_color_free
-       gdk_color_hash
-       gdk_color_parse
-       gdk_color_white
-       gdk_colormap_alloc_color
-       gdk_colormap_alloc_colors
-       gdk_colormap_change
-       gdk_colormap_free_colors
-       gdk_colormap_get_system
-       gdk_colormap_get_system_size
-       gdk_colormap_get_visual
-       gdk_colormap_new
-       gdk_colormap_ref
-       gdk_colormap_unref
-       gdk_colors_alloc
-       gdk_colors_free
-       gdk_colors_store
-       gdk_cursor_destroy
-       gdk_cursor_new
-       gdk_cursor_new_from_pixmap
-       gdk_debug_flags
-       gdk_dnd_init
-       gdk_drag_abort
-       gdk_drag_begin
-       gdk_drag_context_new
-       gdk_drag_context_ref
-       gdk_drag_context_unref
-       gdk_drag_drop
-       gdk_drag_find_window
-       gdk_drag_get_protocol
-       gdk_drag_get_selection
-       gdk_drag_motion
-       gdk_drag_status
-       gdk_drop_finish
-       gdk_drop_reply
-       gdk_draw_arc
-       gdk_draw_gray_image
-       gdk_draw_image
-       gdk_draw_indexed_image
-       gdk_draw_line
-       gdk_draw_lines
-       gdk_draw_pixmap
-       gdk_draw_point
-       gdk_draw_points
-       gdk_draw_polygon
-       gdk_draw_rectangle
-       gdk_draw_rgb_32_image
-       gdk_draw_rgb_image
-       gdk_draw_rgb_image_dithalign
-       gdk_draw_segments
-       gdk_draw_string
-       gdk_draw_text
-       gdk_draw_text_wc
-       gdk_drawable_get_colormap
-       gdk_drawable_get_size
-       gdk_drawable_get_type
-       gdk_drawable_get_visual
-       gdk_drawable_set_colormap
-       gdk_drawable_set_data
-       gdk_error_code
-       gdk_error_trap_pop
-       gdk_error_trap_push
-       gdk_error_warnings
-       gdk_event_copy
-       gdk_event_free
-       gdk_event_get
-       gdk_event_get_graphics_expose
-       gdk_event_get_time
-       gdk_event_handler_set
-       gdk_event_peek
-       gdk_event_put
-       gdk_event_send_client_message
-       gdk_event_send_clientmessage_toall
-       gdk_events_pending
-       gdk_exit
-       gdk_flush
-       gdk_font_equal
-       gdk_font_id
-       gdk_font_list_free
-       gdk_font_list_new
-       gdk_font_load
-       gdk_font_ref
-       gdk_font_unref
-       gdk_font_xlfd_create
-       gdk_font_xlfd_free
-       gdk_fontset_load
-       gdk_free_compound_text
-       gdk_free_text_list
-       gdk_gc_copy
-       gdk_gc_destroy
-       gdk_gc_get_values
-       gdk_gc_new
-       gdk_gc_new_with_values
-       gdk_gc_ref
-       gdk_gc_set_background
-       gdk_gc_set_clip_mask
-       gdk_gc_set_clip_origin
-       gdk_gc_set_clip_rectangle
-       gdk_gc_set_clip_region
-       gdk_gc_set_dashes
-       gdk_gc_set_exposures
-       gdk_gc_set_fill
-       gdk_gc_set_font
-       gdk_gc_set_foreground
-       gdk_gc_set_function
-       gdk_gc_set_line_attributes
-       gdk_gc_set_stipple
-       gdk_gc_set_subwindow
-       gdk_gc_set_tile
-       gdk_gc_set_ts_origin
-       gdk_gc_unref
-       gdk_get_display
-       gdk_get_show_events
-       gdk_get_use_xshm
-       gdk_ic_destroy
-       gdk_ic_get_attr
-       gdk_ic_get_events
-       gdk_ic_get_style
-       gdk_ic_get_values
-       gdk_ic_new
-       gdk_ic_set_attr
-       gdk_ic_set_values
-       gdk_im_begin
-       gdk_im_decide_style
-       gdk_im_end
-       gdk_im_ready
-       gdk_im_set_best_style
-       gdk_image_bitmap_new
-       gdk_image_destroy
-       gdk_image_get
-       gdk_image_get_pixel
-       gdk_image_new
-       gdk_image_new_bitmap
-       gdk_image_put_pixel
-       gdk_init
-       gdk_init_check
-       gdk_input_add
-       gdk_input_add_full
-       gdk_input_exit
-       gdk_input_init
-       gdk_input_list_devices
-       gdk_input_motion_events
-       gdk_input_remove
-       gdk_input_set_axes
-       gdk_input_set_extension_events
-       gdk_input_set_key
-       gdk_input_set_mode
-       gdk_input_set_source
-       gdk_input_window_get_pointer
-       gdk_key_repeat_disable
-       gdk_key_repeat_restore
-       gdk_keyboard_grab
-       gdk_keyboard_ungrab
-       gdk_keyval_from_name
-       gdk_keyval_is_lower
-       gdk_keyval_is_upper
-       gdk_keyval_name
-       gdk_keyval_to_lower
-       gdk_keyval_to_upper
-       gdk_list_visuals
-       gdk_mbstowcs
-       gdk_null_window_warnings
-       gdk_pixmap_colormap_create_from_xpm
-       gdk_pixmap_colormap_create_from_xpm_d
-       gdk_pixmap_create_from_data
-       gdk_pixmap_create_from_xpm
-       gdk_pixmap_create_from_xpm_d
-       gdk_pixmap_create_on_shared_image
-       gdk_pixmap_foreign_new
-       gdk_pixmap_new
-       gdk_pixmap_ref
-       gdk_pixmap_unref
-       gdk_pointer_grab
-       gdk_pointer_is_grabbed
-       gdk_pointer_ungrab
-       gdk_progclass
-       gdk_property_change
-       gdk_property_delete
-       gdk_property_get
-       gdk_query_depths
-       gdk_query_visual_types
-       gdk_rectangle_intersect
-       gdk_rectangle_union
-       gdk_region_destroy
-       gdk_region_empty
-       gdk_region_equal
-       gdk_region_get_clipbox
-       gdk_region_new
-       gdk_region_offset
-       gdk_region_point_in
-       gdk_region_polygon
-       gdk_region_rect_in
-       gdk_region_shrink
-       gdk_region_union_with_rect
-       gdk_regions_intersect
-       gdk_regions_subtract
-       gdk_regions_union
-       gdk_regions_xor
-       gdk_rgb_cmap_free
-       gdk_rgb_cmap_new
-       gdk_rgb_ditherable
-       gdk_rgb_gc_set_background
-       gdk_rgb_gc_set_foreground
-       gdk_rgb_get_cmap
-       gdk_rgb_get_visual
-       gdk_rgb_init
-       gdk_rgb_set_install
-       gdk_rgb_set_min_colors
-       gdk_rgb_set_verbose
-       gdk_rgb_xpixel_from_rgb
-       gdk_root_parent
-       gdk_screen_height
-       gdk_screen_height_mm
-       gdk_screen_width
-       gdk_screen_width_mm
-       gdk_selection_convert
-       gdk_selection_owner_get
-       gdk_selection_owner_set
-       gdk_selection_property
-       gdk_selection_property_get
-       gdk_selection_send_notify
-       gdk_set_locale
-       gdk_set_show_events
-       gdk_set_use_xshm
-       gdk_string_extents
-       gdk_string_height
-       gdk_string_measure
-       gdk_string_to_compound_text
-       gdk_string_width
-       gdk_text_extents
-       gdk_text_extents_wc
-       gdk_text_height
-       gdk_text_measure
-       gdk_text_property_to_text_list
-       gdk_text_width
-       gdk_text_width_wc
-       gdk_threads_enter
-       gdk_threads_leave
-       gdk_threads_mutex
-       gdk_visual_get_best
-       gdk_visual_get_best_depth
-       gdk_visual_get_best_type
-       gdk_visual_get_best_with_both
-       gdk_visual_get_best_with_depth
-       gdk_visual_get_best_with_type
-       gdk_visual_get_system
-       gdk_visual_ref
-       gdk_visual_unref
-       gdk_wcstombs
-       gdk_window_add_filter
-       gdk_window_at_pointer
-       gdk_window_clear
-       gdk_window_clear_area
-       gdk_window_clear_area_e
-       gdk_window_destroy
-       gdk_window_foreign_new
-       gdk_window_get_deskrelative_origin
-       gdk_window_get_children
-       gdk_window_get_events
-       gdk_window_get_geometry
-       gdk_window_get_origin
-       gdk_window_get_parent
-       gdk_window_get_pointer
-       gdk_window_get_position
-       gdk_window_get_root_origin
-       gdk_window_get_toplevel
-       gdk_window_get_toplevels
-       gdk_window_get_user_data
-       gdk_window_hide
-       gdk_window_is_visible
-       gdk_window_is_viewable
-       gdk_window_lower
-       gdk_window_merge_child_shapes
-       gdk_window_move
-       gdk_window_move_resize
-       gdk_window_new
-       gdk_window_raise
-       gdk_window_ref
-       gdk_window_register_dnd
-       gdk_window_remove_filter
-       gdk_window_reparent
-       gdk_window_resize
-       gdk_window_set_back_pixmap
-       gdk_window_set_background
-       gdk_window_set_child_shapes
-       gdk_window_set_cursor
-       gdk_window_set_decorations
-       gdk_window_set_events
-       gdk_window_set_functions
-       gdk_window_set_geometry_hints
-       gdk_window_set_group
-       gdk_window_set_hints
-       gdk_window_set_icon
-       gdk_window_set_icon_name
-       gdk_window_set_override_redirect
-       gdk_window_set_role
-       gdk_window_set_static_gravities
-       gdk_window_set_title
-       gdk_window_set_transient_for
-       gdk_window_set_user_data
-       gdk_window_shape_combine_mask
-       gdk_window_show
-       gdk_window_unref
-       gdk_window_withdraw
-       gdk_xid_table_insert
-       gdk_xid_table_lookup
-       gdk_xid_table_remove
\ No newline at end of file
diff --git a/gdk/win32/gdkcc.c b/gdk/win32/gdkcc.c
deleted file mode 100644 (file)
index b984465..0000000
+++ /dev/null
@@ -1,1597 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* Color Context module
- * Copyright 1994,1995 John L. Cwikla
- * Copyright (C) 1997 by Ripley Software Development
- * Copyright (C) 1997 by Federico Mena (port to Gtk/Gdk)
- */
-
-/* Copyright 1994,1995 John L. Cwikla
- *
- * Permission to use, copy, modify, distribute, and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appears in all copies and that
- * both that copyright notice and this permission notice appear in
- * supporting documentation, and that the name of John L. Cwikla or
- * Wolfram Research, Inc not be used in advertising or publicity
- * pertaining to distribution of the software without specific, written
- * prior permission.  John L. Cwikla and Wolfram Research, Inc make no
- * representations about the suitability of this software for any
- * purpose.  It is provided "as is" without express or implied warranty.
- *
- * John L. Cwikla and Wolfram Research, Inc disclaim all warranties with
- * regard to this software, including all implied warranties of
- * merchantability and fitness, in no event shall John L. Cwikla or
- * Wolfram Research, Inc be liable for any special, indirect or
- * consequential damages or any damages whatsoever resulting from loss of
- * use, data or profits, whether in an action of contract, negligence or
- * other tortious action, arising out of or in connection with the use or
- * performance of this software.
- *
- * Author:
- *  John L. Cwikla
- *  X Programmer
- *  Wolfram Research Inc.
- *
- *  cwikla@wri.com
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "gdkcc.h"
-#include "gdkcolor.h"
-#include "gdkx.h"
-
-#define MAX_IMAGE_COLORS 256
-
-typedef struct _GdkColorContextPrivate GdkColorContextPrivate;
-
-struct _GdkColorContextPrivate
-{
-  GdkColorContext color_context;
-  XStandardColormap std_cmap;
-};
-
-static guint
-hash_color (gconstpointer key)
-{
-  const GdkColor *color = key;
-  
-  return (color->red * 33023 + color->green * 30013 + color->blue * 27011);
-}
-
-static gint
-compare_colors (gconstpointer a,
-               gconstpointer b)
-{
-  const GdkColor *aa = a;
-  const GdkColor *bb = b;
-  
-  return ((aa->red == bb->red) && (aa->green == bb->green) && (aa->blue == bb->blue));
-}
-
-static void
-free_hash_entry (gpointer key,
-                gpointer value,
-                gpointer user_data)
-{
-  g_free (key); /* key and value are the same GdkColor */
-}
-
-static int
-pixel_sort (const void *a, const void *b)
-{
-  return ((GdkColor *) a)->pixel - ((GdkColor *) b)->pixel;
-}
-
-static void
-my_x_query_colors (GdkColormap *colormap,
-                  GdkColor    *colors,
-                  gint         ncolors)
-{
-  gint    i;
-  
-  for (i = 0; i < ncolors; i++)
-    {
-      PALETTEENTRY palentry;
-      
-      GetPaletteEntries (GDK_COLORMAP_XCOLORMAP (colormap)->palette, colors[i].pixel, 1, &palentry);
-      colors[i].red = (palentry.peRed * 65536) / 255;
-      colors[i].green = (palentry.peGreen * 65536) / 255;
-      colors[i].blue = (palentry.peBlue * 65536) / 255;
-    }
-}
-
-static void
-query_colors (GdkColorContext *cc)
-{
-  gint i;
-  GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
-  cc->cmap = g_new (GdkColor, cc->num_colors);
-  
-  for (i = 0; i < cc->num_colors; i++)
-    cc->cmap[i].pixel = cc->clut ? cc->clut[i] : ccp->std_cmap.base_pixel + i;
-  
-  my_x_query_colors (cc->colormap, cc->cmap, cc->num_colors);
-  
-  qsort (cc->cmap, cc->num_colors, sizeof (GdkColor), pixel_sort);
-}
-
-static void
-init_bw (GdkColorContext *cc)
-{
-  GdkColor color;
-  
-  g_warning ("init_bw: failed to allocate colors, falling back to black and white");
-  
-  cc->mode = GDK_CC_MODE_BW;
-  
-  color.red = color.green = color.blue = 0;
-  
-  if (!gdk_color_alloc (cc->colormap, &color))
-    cc->black_pixel = 0;
-  else
-    cc->black_pixel = color.pixel;
-  
-  color.red = color.green = color.blue = 0xffff;
-  
-  if (!gdk_color_alloc (cc->colormap, &color))
-    cc->white_pixel = cc->black_pixel ? 0 : 1;
-  else
-    cc->white_pixel = color.pixel;
-  
-  cc->num_colors = 2;
-}
-
-static void
-init_gray (GdkColorContext *cc)
-{
-  GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
-  GdkColor *clrs, *cstart;
-  gint i;
-  gdouble dinc;
-  
-  cc->num_colors = 256;                /* Bogus, but will never get here anyway? */
-  
-  cc->clut = g_new (gulong, cc->num_colors);
-  cstart = g_new (GdkColor, cc->num_colors);
-  
- retrygray:
-  
-  dinc = 65535.0 / (cc->num_colors - 1);
-  
-  clrs = cstart;
-  
-  for (i = 0; i < cc->num_colors; i++)
-    {
-      clrs->red = clrs->green = clrs->blue = dinc * i;
-      
-      if (!gdk_color_alloc (cc->colormap, clrs))
-       {
-         gdk_colors_free (cc->colormap, cc->clut, i, 0);
-         
-         cc->num_colors /= 2;
-         
-         if (cc->num_colors > 1)
-           goto retrygray;
-         else
-           {
-             g_free (cc->clut);
-             cc->clut = NULL;
-             init_bw (cc);
-             g_free (cstart);
-             return;
-           }
-       }
-      
-      cc->clut[i] = clrs++->pixel;
-    }
-  
-  g_free (cstart);
-  
-  /* XXX: is this the right thing to do? */
-  ccp->std_cmap.colormap = GDK_COLORMAP_XCOLORMAP (cc->colormap);
-  ccp->std_cmap.base_pixel = 0;
-  ccp->std_cmap.red_max = cc->num_colors - 1;
-  ccp->std_cmap.green_max = 0;
-  ccp->std_cmap.blue_max = 0;
-  ccp->std_cmap.red_mult = 1;
-  ccp->std_cmap.green_mult = 0;
-  ccp->std_cmap.blue_mult = 0;
-  
-  cc->white_pixel = 255;
-  cc->black_pixel = 0;
-
-  query_colors (cc);
-  
-  cc->mode = GDK_CC_MODE_MY_GRAY;
-}
-
-static void
-init_color (GdkColorContext *cc)
-{
-  GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
-  gint cubeval;
-  
-  cubeval = 1;
-  while ((cubeval * cubeval * cubeval) < GDK_VISUAL_XVISUAL (cc->visual)->map_entries)
-    cubeval++;
-  cubeval--;
-  
-  cc->num_colors = cubeval * cubeval * cubeval;
-  
-  ccp->std_cmap.red_max    = cubeval - 1;
-  ccp->std_cmap.green_max  = cubeval - 1;
-  ccp->std_cmap.blue_max   = cubeval - 1;
-  ccp->std_cmap.red_mult   = cubeval * cubeval;
-  ccp->std_cmap.green_mult = cubeval;
-  ccp->std_cmap.blue_mult  = 1;
-  ccp->std_cmap.base_pixel = 0;
-  
-  cc->white_pixel = 255;       /* ??? */
-  cc->black_pixel = 0;         /* ??? */
-  
-  /* a CLUT for storing allocated pixel indices */
-  
-  cc->max_colors = cc->num_colors;
-  cc->clut = g_new (gulong, cc->max_colors);
-  
-  for (cubeval = 0; cubeval < cc->max_colors; cubeval++)
-    cc->clut[cubeval] = cubeval;
-  
-  query_colors (cc);
-  
-  cc->mode = GDK_CC_MODE_STD_CMAP;
-}
-
-
-static void
-init_true_color (GdkColorContext *cc)
-{
-  GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
-  gulong rmask, gmask, bmask;
-  
-  cc->mode = GDK_CC_MODE_TRUE;
-  
-  /* Red */
-  
-  rmask = cc->masks.red = cc->visual->red_mask;
-  
-  cc->shifts.red = 0;
-  cc->bits.red = 0;
-  
-  while (!(rmask & 1))
-    {
-      rmask >>= 1;
-      cc->shifts.red++;
-    }
-  
-  while (rmask & 1)
-    {
-      rmask >>= 1;
-      cc->bits.red++;
-    }
-  
-  /* Green */
-  
-  gmask = cc->masks.green = cc->visual->green_mask;
-
-  cc->shifts.green = 0;
-  cc->bits.green = 0;
-  
-  while (!(gmask & 1))
-    {
-      gmask >>= 1;
-      cc->shifts.green++;
-    }
-  
-  while (gmask & 1)
-    {
-      gmask >>= 1;
-      cc->bits.green++;
-    }
-  
-  /* Blue */
-  
-  bmask = cc->masks.blue = cc->visual->blue_mask;
-  
-  cc->shifts.blue = 0;
-  cc->bits.blue = 0;
-  
-  while (!(bmask & 1))
-    {
-      bmask >>= 1;
-      cc->shifts.blue++;
-    }
-  
-  while (bmask & 1)
-    {
-      bmask >>= 1;
-      cc->bits.blue++;
-    }
-  
-  cc->num_colors = (cc->visual->red_mask | cc->visual->green_mask | cc->visual->blue_mask) + 1;
-  
-  cc->white_pixel = 0xffffff;
-  cc->black_pixel = 0;
-}
-
-static void
-init_palette (GdkColorContext *cc)
-{
-  /* restore correct mode for this cc */
-  switch (cc->visual->type)
-    {
-    case GDK_VISUAL_STATIC_GRAY:
-    case GDK_VISUAL_GRAYSCALE:
-      if (GDK_VISUAL_XVISUAL (cc->visual)->map_entries == 2)
-       cc->mode = GDK_CC_MODE_BW;
-      else
-       cc->mode = GDK_CC_MODE_MY_GRAY;
-      break;
-      
-    case GDK_VISUAL_TRUE_COLOR:
-      cc->mode = GDK_CC_MODE_TRUE;
-      break;
-      
-    case GDK_VISUAL_STATIC_COLOR:
-    case GDK_VISUAL_PSEUDO_COLOR:
-      cc->mode = GDK_CC_MODE_STD_CMAP;
-      break;
-      
-    default:
-      cc->mode = GDK_CC_MODE_UNDEFINED;
-      break;
-    }
-  
-  /* previous palette */
-  
-  if (cc->num_palette)
-    g_free (cc->palette);
-  
-  if (cc->fast_dither)
-    g_free (cc->fast_dither);
-  
-  /* clear hash table if present */
-  
-  if (cc->color_hash)
-    {
-      g_hash_table_foreach (cc->color_hash,
-                           free_hash_entry,
-                           NULL);
-      g_hash_table_destroy (cc->color_hash);
-      cc->color_hash = g_hash_table_new (hash_color, compare_colors);
-    }
-  
-  cc->palette = NULL;
-  cc->num_palette = 0;
-  cc->fast_dither = NULL;
-}
-
-GdkColorContext *
-gdk_color_context_new (GdkVisual   *visual,
-                      GdkColormap *colormap)
-{
-  GdkColorContextPrivate *ccp;
-  gint use_private_colormap = FALSE; /* XXX: maybe restore full functionality later? */
-  GdkColorContext *cc;
-  gint retry_count;
-  GdkColormap *default_colormap;
-  
-  g_assert (visual != NULL);
-  g_assert (colormap != NULL);
-  
-  ccp = g_new (GdkColorContextPrivate, 1);
-  cc = (GdkColorContext *) ccp;
-  cc->visual = visual;
-  cc->colormap = colormap;
-  cc->clut = NULL;
-  cc->cmap = NULL;
-  cc->mode = GDK_CC_MODE_UNDEFINED;
-  cc->need_to_free_colormap = FALSE;
-  
-  cc->color_hash = NULL;
-  cc->palette = NULL;
-  cc->num_palette = 0;
-  cc->fast_dither = NULL;
-  
-  default_colormap = gdk_colormap_get_system ();
-  
-  retry_count = 0;
-  
-  while (retry_count < 2)
-    {
-      /* Only create a private colormap if the visual found isn't equal
-       * to the default visual and we don't have a private colormap,
-       * -or- if we are instructed to create a private colormap (which
-       * never is the case for XmHTML).
-       */
-      
-      if (use_private_colormap
-         || ((cc->visual != gdk_visual_get_system ()) /* default visual? */
-             && (GDK_COLORMAP_XCOLORMAP (colormap) == GDK_COLORMAP_XCOLORMAP (default_colormap))))
-       {
-         g_warning ("gdk_color_context_new: non-default visual detected, "
-                    "using private colormap");
-         
-         cc->colormap = gdk_colormap_new (cc->visual, FALSE);
-         
-         cc->need_to_free_colormap = (GDK_COLORMAP_XCOLORMAP (colormap)
-                                      != GDK_COLORMAP_XCOLORMAP (default_colormap));
-       }
-      
-      switch (visual->type)
-       {
-       case GDK_VISUAL_STATIC_GRAY:
-       case GDK_VISUAL_GRAYSCALE:
-         GDK_NOTE (COLOR_CONTEXT,
-                   g_message ("gdk_color_context_new: visual class is %s\n",
-                              (visual->type == GDK_VISUAL_STATIC_GRAY) ?
-                              "GDK_VISUAL_STATIC_GRAY" :
-                              "GDK_VISUAL_GRAYSCALE"));
-         
-         if (GDK_VISUAL_XVISUAL (cc->visual)->map_entries == 2)
-           init_bw (cc);
-         else
-           init_gray (cc);
-         
-         break;
-         
-       case GDK_VISUAL_TRUE_COLOR: /* shifts */
-         GDK_NOTE (COLOR_CONTEXT,
-                   g_message ("gdk_color_context_new: visual class is GDK_VISUAL_TRUE_COLOR\n"));
-         
-         init_true_color (cc);
-         break;
-         
-       case GDK_VISUAL_STATIC_COLOR:
-       case GDK_VISUAL_PSEUDO_COLOR:
-         GDK_NOTE (COLOR_CONTEXT,
-                   g_message ("gdk_color_context_new: visual class is %s\n",
-                              (visual->type == GDK_VISUAL_STATIC_COLOR) ?
-                              "GDK_VISUAL_STATIC_COLOR" :
-                              "GDK_VISUAL_PSEUDO_COLOR"));
-         
-         init_color (cc);
-         break;
-         
-       default:
-         g_assert_not_reached ();
-       }
-      
-      if ((cc->mode == GDK_CC_MODE_BW) && (cc->visual->depth > 1))
-       {
-         use_private_colormap = TRUE;
-         retry_count++;
-       }
-      else
-       break;
-    }
-  
-  /* no. of colors allocated yet */
-  
-  cc->num_allocated = 0;
-  
-  GDK_NOTE (COLOR_CONTEXT,
-           g_message ("gdk_color_context_new: screen depth is %i, no. of colors is %i\n",
-                      cc->visual->depth, cc->num_colors));
-  
-  return (GdkColorContext *) cc;
-}
-
-GdkColorContext *
-gdk_color_context_new_mono (GdkVisual   *visual,
-                           GdkColormap *colormap)
-{
-  GdkColorContextPrivate *ccp;
-  GdkColorContext *cc;
-  
-  g_assert (visual != NULL);
-  g_assert (colormap != NULL);
-  
-  cc = g_new (GdkColorContext, 1);
-  ccp = (GdkColorContextPrivate *) cc;
-  cc->visual = visual;
-  cc->colormap = colormap;
-  cc->clut = NULL;
-  cc->cmap = NULL;
-  cc->mode = GDK_CC_MODE_UNDEFINED;
-  cc->need_to_free_colormap = FALSE;
-  
-  init_bw (cc);
-  
-  return (GdkColorContext *) cc;
-}
-
-/* This doesn't currently free black/white, hmm... */
-
-void
-gdk_color_context_free (GdkColorContext *cc)
-{
-  g_assert (cc != NULL);
-  
-  if ((cc->visual->type == GDK_VISUAL_STATIC_COLOR)
-      || (cc->visual->type == GDK_VISUAL_PSEUDO_COLOR))
-    {
-      gdk_colors_free (cc->colormap, cc->clut, cc->num_allocated, 0);
-      g_free (cc->clut);
-    }
-  else if (cc->clut != NULL)
-    {
-      gdk_colors_free (cc->colormap, cc->clut, cc->num_colors, 0);
-      g_free (cc->clut);
-    }
-  
-  if (cc->cmap != NULL)
-    g_free (cc->cmap);
-  
-  if (cc->need_to_free_colormap)
-    gdk_colormap_unref (cc->colormap);
-  
-  /* free any palette that has been associated with this GdkColorContext */
-
-  init_palette (cc);
-  
-  g_free (cc);
-}
-
-gulong
-gdk_color_context_get_pixel (GdkColorContext *cc,
-                            gushort          red,
-                            gushort          green,
-                            gushort          blue,
-                            gint            *failed)
-{
-  GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
-  g_assert (cc != NULL);
-  g_assert (failed != NULL);
-  
-  *failed = FALSE;
-  
-  switch (cc->mode)
-    {
-    case GDK_CC_MODE_BW:
-    {
-      gdouble value;
-      
-      value = (red / 65535.0 * 0.30
-              + green / 65535.0 * 0.59
-              + blue / 65535.0 * 0.11);
-      
-      if (value > 0.5)
-       return cc->white_pixel;
-      
-      return cc->black_pixel;
-    }
-    
-    case GDK_CC_MODE_MY_GRAY:
-    {
-      gulong ired, igreen, iblue;
-      
-      red   = red * 0.30 + green * 0.59 + blue * 0.11;
-      green = 0;
-      blue  = 0;
-      
-      if ((ired = red * (ccp->std_cmap.red_max + 1) / 0xffff) > ccp->std_cmap.red_max)
-       ired = ccp->std_cmap.red_max;
-      
-      ired *= ccp->std_cmap.red_mult;
-      
-      if ((igreen = green * (ccp->std_cmap.green_max + 1) / 0xffff) > ccp->std_cmap.green_max)
-       igreen = ccp->std_cmap.green_max;
-      
-      igreen *= ccp->std_cmap.green_mult;
-      
-      if ((iblue = blue * (ccp->std_cmap.blue_max + 1) / 0xffff) > ccp->std_cmap.blue_max)
-       iblue = ccp->std_cmap.blue_max;
-      
-      iblue *= ccp->std_cmap.blue_mult;
-      
-      if (cc->clut != NULL)
-       return cc->clut[ccp->std_cmap.base_pixel + ired + igreen + iblue];
-      
-      return ccp->std_cmap.base_pixel + ired + igreen + iblue;
-    }
-    
-    case GDK_CC_MODE_TRUE:
-    {
-      gulong ired, igreen, iblue;
-      
-      if (cc->clut == NULL)
-       {
-         red   >>= 16 - cc->bits.red;
-         green >>= 16 - cc->bits.green;
-         blue  >>= 16 - cc->bits.blue;
-         
-         ired   = (red << cc->shifts.red) & cc->masks.red;
-         igreen = (green << cc->shifts.green) & cc->masks.green;
-         iblue  = (blue << cc->shifts.blue) & cc->masks.blue;
-         
-         return ired | igreen | iblue;
-       }
-      
-      ired   = cc->clut[red * cc->max_entry / 65535] & cc->masks.red;
-      igreen = cc->clut[green * cc->max_entry / 65535] & cc->masks.green;
-      iblue  = cc->clut[blue * cc->max_entry / 65535] & cc->masks.blue;
-      
-      return ired | igreen | iblue;
-    }
-    
-    case GDK_CC_MODE_PALETTE:
-      return gdk_color_context_get_pixel_from_palette (cc, &red, &green, &blue, failed);
-      
-    case GDK_CC_MODE_STD_CMAP:
-    default:
-    {
-      GdkColor color;
-      GdkColor *result = NULL;
-      
-      color.red   = red;
-      color.green = green;
-      color.blue  = blue;
-
-      if (cc->color_hash)
-       result = g_hash_table_lookup (cc->color_hash, &color);
-      
-      if (!result)
-       {
-         color.red   = red;
-         color.green = green;
-         color.blue  = blue;
-         color.pixel = 0;
-         
-         if (!gdk_color_alloc (cc->colormap, &color))
-           *failed = TRUE;
-         else
-           {
-             GdkColor *cnew;
-             
-             /* XXX: the following comment comes directly from
-              * XCC.c.  I don't know if it is relevant for
-              * gdk_color_alloc() as it is for XAllocColor()
-              * - Federico
-              */
-             /*
-              * I can't figure this out entirely, but it *is* possible
-              * that XAllocColor succeeds, even if the number of
-              * allocations we've made exceeds the number of available
-              * colors in the current colormap. And therefore it
-              * might be necessary for us to resize the CLUT.
-              */
-             
-             if (cc->num_allocated == cc->max_colors)
-               {
-                 cc->max_colors *= 2;
-                 
-                 GDK_NOTE (COLOR_CONTEXT,
-                           g_message ("gdk_color_context_get_pixel: "
-                                      "resizing CLUT to %i entries\n",
-                                      cc->max_colors));
-                 
-                 cc->clut = g_realloc (cc->clut,
-                                       cc->max_colors * sizeof (gulong));
-               }
-             
-             /* Key and value are the same color structure */
-             
-             cnew = g_new (GdkColor, 1);
-             *cnew = color;
-             
-             if (!cc->color_hash)
-               cc->color_hash = g_hash_table_new (hash_color, compare_colors);
-             g_hash_table_insert (cc->color_hash, cnew, cnew);
-             
-             cc->clut[cc->num_allocated] = color.pixel;
-             cc->num_allocated++;
-             return color.pixel;
-           }
-       }
-      
-      return result->pixel;
-    }
-    }
-}
-
-void
-gdk_color_context_get_pixels (GdkColorContext *cc,
-                             gushort         *reds,
-                             gushort         *greens,
-                             gushort         *blues,
-                             gint             ncolors,
-                             gulong          *colors,
-                             gint            *nallocated)
-{
-  gint i, k, idx;
-  gint cmapsize, ncols = 0, nopen = 0, counter = 0;
-  gint bad_alloc = FALSE;
-  gint failed[MAX_IMAGE_COLORS], allocated[MAX_IMAGE_COLORS];
-  GdkColor defs[MAX_IMAGE_COLORS], cmap[MAX_IMAGE_COLORS];
-#ifdef G_ENABLE_DEBUG  
-  gint exact_col = 0, subst_col = 0, close_col = 0, black_col = 0;
-#endif
-  g_assert (cc != NULL);
-  g_assert (reds != NULL);
-  g_assert (greens != NULL);
-  g_assert (blues != NULL);
-  g_assert (colors != NULL);
-  g_assert (nallocated != NULL);
-  
-  memset (defs, 0, MAX_IMAGE_COLORS * sizeof (GdkColor));
-  memset (failed, 0, MAX_IMAGE_COLORS * sizeof (gint));
-  memset (allocated, 0, MAX_IMAGE_COLORS * sizeof (gint));
-  
-  /* Will only have a value if used by the progressive image loader */
-  
-  ncols = *nallocated;
-  
-  *nallocated = 0;
-  
-  /* First allocate all pixels */
-  
-  for (i = 0; i < ncolors; i++)
-    {
-      /* colors[i] is only zero if the pixel at that location hasn't
-       * been allocated yet.  This is a sanity check required for proper
-       * color allocation by the progressive image loader
-       */
-      
-      if (colors[i] == 0)
-       {
-         defs[i].red   = reds[i];
-         defs[i].green = greens[i];
-         defs[i].blue  = blues[i];
-         
-         colors[i] = gdk_color_context_get_pixel (cc, reds[i], greens[i], blues[i],
-                                                  &bad_alloc);
-         
-         /* successfully allocated, store it */
-         
-         if (!bad_alloc)
-           {
-             defs[i].pixel = colors[i];
-             allocated[ncols++] = colors[i];
-           }
-         else
-           failed[nopen++] = i;
-       }
-    }
-  
-  *nallocated = ncols;
-  
-  /* all colors available, all done */
-  
-  if ((ncols == ncolors) || (nopen == 0))
-    {
-      GDK_NOTE (COLOR_CONTEXT,
-               g_message ("gdk_color_context_get_pixels: got all %i colors; "
-                          "(%i colors allocated so far)\n", ncolors, cc->num_allocated));
-      
-      return;
-    }
-  
-  /* The fun part.  We now try to allocate the colors we couldn't allocate
-   * directly.  The first step will map a color onto its nearest color
-   * that has been allocated (either by us or someone else).  If any colors
-   * remain unallocated, we map these onto the colors that we have allocated
-   * ourselves.
-   */
-  
-  /* read up to MAX_IMAGE_COLORS colors of the current colormap */
-  
-  cmapsize = MIN (cc->num_colors, MAX_IMAGE_COLORS);
-  
-  /* see if the colormap has any colors to read */
-  
-  if (cmapsize < 0)
-    {
-      g_warning ("gdk_color_context_get_pixels: oops!  no colors available, "
-                "your images will look *really* ugly.");
-      
-      return;
-    }
-  
-#ifdef G_ENABLE_DEBUG
-  exact_col = ncols;
-#endif
-  
-  /* initialize pixels */
-  
-  for (i = 0; i < cmapsize; i++)
-    {
-      cmap[i].pixel = i;
-      cmap[i].red = cmap[i].green = cmap[i].blue = 0;
-    }
-  
-  /* read the colormap */
-  
-  my_x_query_colors (cc->colormap, cmap, cmapsize);
-  
-  /* get a close match for any unallocated colors */
-  
-  counter = nopen;
-  nopen = 0;
-  idx = 0;
-  
-  do
-    {
-      gint d, j, mdist, close, ri, gi, bi;
-      gint rd, gd, bd;
-      
-      i = failed[idx];
-      
-      mdist = 0x1000000;
-      close = -1;
-      
-      /* Store these vals.  Small performance increase as this skips three
-       * indexing operations in the loop code.
-       */
-      
-      ri = reds[i];
-      gi = greens[i];
-      bi = blues[i];
-      
-      /* Walk all colors in the colormap and see which one is the
-       * closest.  Uses plain least squares.
-       */
-      
-      for (j = 0; (j < cmapsize) && (mdist != 0); j++)
-       {
-         /* Don't replace these by shifts; the sign may get clobbered */
-         
-         rd = (ri - cmap[j].red) / 256;
-         gd = (gi - cmap[j].green) / 256;
-         bd = (bi - cmap[j].blue) / 256;
-         
-         d = rd * rd + gd * gd + bd * bd;
-         
-         if (d < mdist)
-           {
-             close = j;
-             mdist = d;
-           }
-       }
-      
-      if (close != -1)
-       {
-         rd = cmap[close].red;
-         gd = cmap[close].green;
-         bd = cmap[close].blue;
-         
-         /* allocate */
-         
-         colors[i] = gdk_color_context_get_pixel (cc, rd, gd, bd, &bad_alloc);
-         
-         /* store */
-         
-         if (!bad_alloc)
-           {
-             defs[i] = cmap[close];
-             defs[i].pixel = colors[i];
-             allocated[ncols++] = colors[i];
-#ifdef G_ENABLE_DEBUG
-             close_col++;
-#endif
-           } else
-             failed[nopen++] = i;
-       } else
-         failed[nopen++] = i;
-      /* deal with in next stage if allocation failed */
-    }
-  while (++idx < counter);
-  
-  *nallocated = ncols;
-  
-  /* This is the maximum no. of allocated colors.  See also the nopen == 0
-   * note above.
-   */
-  
-  if ((ncols == ncolors) || (nopen == 0))
-    {
-      GDK_NOTE (COLOR_CONTEXT,
-               g_message ("gdk_color_context_get_pixels: got %i colors, %i exact and "
-                          "%i close (%i colors allocated so far)\n",
-                          ncolors, exact_col, close_col, cc->num_allocated));
-      
-      return;
-    }
-  
-  /* Now map any remaining unallocated pixels into the colors we did get */
-  
-  idx = 0;
-  
-  do
-    {
-      gint d, mdist, close, ri, gi, bi;
-      gint j, rd, gd, bd;
-      
-      i = failed[idx];
-      
-      mdist = 0x1000000;
-      close = -1;
-      
-      /* store */
-      
-      ri = reds[i];
-      gi = greens[i];
-      bi = blues[i];
-      
-      /* search allocated colors */
-      
-      for (j = 0; (j < ncols) && (mdist != 0); j++)
-       {
-         k = allocated[j];
-         
-         /* Don't replace these by shifts; the sign may get clobbered */
-         
-         rd = (ri - defs[k].red) / 256;
-         gd = (gi - defs[k].green) / 256;
-         bd = (bi - defs[k].blue) / 256;
-         
-         d = rd * rd + gd * gd + bd * bd;
-         
-         if (d < mdist)
-           {
-             close = k;
-             mdist = d;
-           }
-       }
-      
-      if (close < 0)
-       {
-         /* too bad, map to black */
-         
-         defs[i].pixel = cc->black_pixel;
-         defs[i].red = defs[i].green = defs[i].blue = 0;
-#ifdef G_ENABLE_DEBUG
-         black_col++;
-#endif
-       }
-      else
-       {
-         defs[i] = defs[close];
-#ifdef G_ENABLE_DEBUG
-         subst_col++;
-#endif
-       }
-      
-      colors[i] = defs[i].pixel;
-    }
-  while (++idx < nopen);
-  
-  GDK_NOTE (COLOR_CONTEXT,
-           g_message ("gdk_color_context_get_pixels: got %i colors, %i exact, %i close, "
-                      "%i substituted, %i to black (%i colors allocated so far)\n",
-                      ncolors, exact_col, close_col, subst_col, black_col, cc->num_allocated));
-}
-
-void
-gdk_color_context_get_pixels_incremental (GdkColorContext *cc,
-                                         gushort         *reds,
-                                         gushort         *greens,
-                                         gushort         *blues,
-                                         gint             ncolors,
-                                         gint            *used,
-                                         gulong          *colors,
-                                         gint            *nallocated)
-{
-  gint i, k, idx;
-  gint cmapsize, ncols = 0, nopen = 0, counter = 0;
-  gint bad_alloc = FALSE;
-  gint failed[MAX_IMAGE_COLORS], allocated[MAX_IMAGE_COLORS];
-  GdkColor defs[MAX_IMAGE_COLORS], cmap[MAX_IMAGE_COLORS];
-#ifdef G_ENABLE_DEBUG  
-  gint exact_col = 0, subst_col = 0, close_col = 0, black_col = 0;
-#endif  
-  
-  g_assert (cc != NULL);
-  g_assert (reds != NULL);
-  g_assert (greens != NULL);
-  g_assert (blues != NULL);
-  g_assert (used != NULL);
-  g_assert (colors != NULL);
-  g_assert (nallocated != NULL);
-  
-  memset (defs, 0, MAX_IMAGE_COLORS * sizeof (GdkColor));
-  memset (failed, 0, MAX_IMAGE_COLORS * sizeof (gint));
-  memset (allocated, 0, MAX_IMAGE_COLORS * sizeof (gint));
-  
-  /* Will only have a value if used by the progressive image loader */
-  
-  ncols = *nallocated;
-  
-  *nallocated = 0;
-  
-  /* First allocate all pixels */
-  
-  for (i = 0; i < ncolors; i++)
-    {
-      /* used[i] is only -1 if the pixel at that location hasn't
-       * been allocated yet.  This is a sanity check required for proper
-       * color allocation by the progressive image loader.
-       * When colors[i] == 0 it indicates the slot is available for
-       * allocation.
-       */
-      
-      if (used[i] != FALSE)
-       {
-         if (colors[i] == 0)
-           {
-             defs[i].red   = reds[i];
-             defs[i].green = greens[i];
-             defs[i].blue  = blues[i];
-             
-             colors[i] = gdk_color_context_get_pixel (cc, reds[i], greens[i], blues[i], &bad_alloc);
-             
-             /* successfully allocated, store it */
-             
-             if (!bad_alloc)
-               {
-                 defs[i].pixel = colors[i];
-                 allocated[ncols++] = colors[i];
-               }
-             else
-               failed[nopen++] = i;
-           }
-#ifdef DEBUG
-         else
-           GDK_NOTE (COLOR_CONTEXT,
-                     g_message ("gdk_color_context_get_pixels_incremental: "
-                                "pixel at slot %i already allocated, skipping\n", i));
-#endif
-       }
-    }
-  
-  *nallocated = ncols;
-  
-  if ((ncols == ncolors) || (nopen == 0))
-    {
-      GDK_NOTE (COLOR_CONTEXT,
-               g_message ("gdk_color_context_get_pixels_incremental: got all %i colors "
-                          "(%i colors allocated so far)\n",
-                          ncolors, cc->num_allocated));
-      
-      return;
-    }
-  
-  cmapsize = MIN (cc->num_colors, MAX_IMAGE_COLORS);
-  
-  if (cmapsize < 0)
-    {
-      g_warning ("gdk_color_context_get_pixels_incremental: oops!  "
-                "No colors available images will look *really* ugly.");
-      return;
-    }
-  
-#ifdef G_ENABLE_DEBUG
-  exact_col = ncols;
-#endif
-  
-  /* initialize pixels */
-  
-  for (i = 0; i < cmapsize; i++)
-    {
-      cmap[i].pixel = i;
-      cmap[i].red = cmap[i].green = cmap[i].blue = 0;
-    }
-  
-  /* read */
-  
-  my_x_query_colors (cc->colormap, cmap, cmapsize);
-  
-  /* now match any unallocated colors */
-  
-  counter = nopen;
-  nopen = 0;
-  idx = 0;
-  
-  do
-    {
-      gint d, j, mdist, close, ri, gi, bi;
-      gint rd, gd, bd;
-      
-      i = failed[idx];
-      
-      mdist = 0x1000000;
-      close = -1;
-      
-      /* store */
-      
-      ri = reds[i];
-      gi = greens[i];
-      bi = blues[i];
-      
-      for (j = 0; (j < cmapsize) && (mdist != 0); j++)
-       {
-         /* Don't replace these by shifts; the sign may get clobbered */
-         
-         rd = (ri - cmap[j].red) / 256;
-         gd = (gi - cmap[j].green) / 256;
-         bd = (bi - cmap[j].blue) / 256;
-         
-         d = rd * rd + gd * gd + bd * bd;
-         
-         if (d < mdist)
-           {
-             close = j;
-             mdist = d;
-           }
-       }
-      
-      if (close != -1)
-       {
-         rd = cmap[close].red;
-         gd = cmap[close].green;
-         bd = cmap[close].blue;
-         
-         /* allocate */
-         
-         colors[i] = gdk_color_context_get_pixel (cc, rd, gd, bd, &bad_alloc);
-         
-         /* store */
-         
-         if (!bad_alloc)
-           {
-             defs[i] = cmap[close];
-             defs[i].pixel = colors[i];
-             allocated[ncols++] = colors[i];
-#ifdef G_ENABLE_DEBUG
-             close_col++;
-#endif
-           }
-         else
-           failed[nopen++] = i;
-       }
-      else
-       failed[nopen++] = i;
-      /* deal with in next stage if allocation failed */
-    }
-  while (++idx < counter);
-  
-  *nallocated = ncols;
-  
-  if ((ncols == ncolors) || (nopen == 0))
-    {
-      GDK_NOTE (COLOR_CONTEXT,
-               g_message ("gdk_color_context_get_pixels_incremental: "
-                          "got %i colors, %i exact and %i close "
-                          "(%i colors allocated so far)\n",
-                          ncolors, exact_col, close_col, cc->num_allocated));
-      
-      return;
-    }
-  
-  /* map remaining unallocated pixels into colors we did get */
-  
-  idx = 0;
-  
-  do
-    {
-      gint d, mdist, close, ri, gi, bi;
-      gint j, rd, gd, bd;
-      
-      i = failed[idx];
-      
-      mdist = 0x1000000;
-      close = -1;
-      
-      ri = reds[i];
-      gi = greens[i];
-      bi = blues[i];
-      
-      /* search allocated colors */
-      
-      for (j = 0; (j < ncols) && (mdist != 0); j++)
-       {
-         k = allocated[j];
-         
-         /* downscale */
-         /* Don't replace these by shifts; the sign may get clobbered */
-         
-         rd = (ri - defs[k].red) / 256;
-         gd = (gi - defs[k].green) / 256;
-         bd = (bi - defs[k].blue) / 256;
-         
-         d = rd * rd + gd * gd + bd * bd;
-         
-         if (d < mdist)
-           {
-             close = k;
-             mdist = d;
-           }
-       }
-      
-      if (close < 0)
-       {
-         /* too bad, map to black */
-         
-         defs[i].pixel = cc->black_pixel;
-         defs[i].red = defs[i].green = defs[i].blue = 0;
-#ifdef G_ENABLE_DEBUG
-         black_col++;
-#endif
-       }
-      else
-       {
-         defs[i] = defs[close];
-#ifdef G_ENABLE_DEBUG
-         subst_col++;
-#endif
-       }
-      
-      colors[i] = defs[i].pixel;
-    }
-  while (++idx < nopen);
-  
-  GDK_NOTE (COLOR_CONTEXT,
-           g_message ("gdk_color_context_get_pixels_incremental: "
-                      "got %i colors, %i exact, %i close, %i substituted, %i to black "
-                      "(%i colors allocated so far)\n",
-                      ncolors, exact_col, close_col, subst_col, black_col, cc->num_allocated));
-}
-
-gint
-gdk_color_context_query_color (GdkColorContext *cc,
-                              GdkColor        *color)
-{
-  return gdk_color_context_query_colors (cc, color, 1);
-}
-
-gint
-gdk_color_context_query_colors (GdkColorContext *cc,
-                               GdkColor        *colors,
-                               gint             num_colors)
-{
-  gint i;
-  GdkColor *tc;
-  
-  g_assert (cc != NULL);
-  g_assert (colors != NULL);
-  
-  switch (cc->mode)
-    {
-    case GDK_CC_MODE_BW:
-      for (i = 0, tc = colors; i < num_colors; i++, tc++)
-       {
-         if (tc->pixel == cc->white_pixel)
-           tc->red = tc->green = tc->blue = 65535;
-         else
-           tc->red = tc->green = tc->blue = 0;
-       }
-      break;
-      
-    case GDK_CC_MODE_TRUE:
-      if (cc->clut == NULL)
-       for (i = 0, tc = colors; i < num_colors; i++, tc++)
-         {
-           tc->red   = ((tc->pixel & cc->masks.red) >> cc->shifts.red) << (16 - cc->bits.red);
-           tc->green = ((tc->pixel & cc->masks.green) >> cc->shifts.green) << (16 - cc->bits.green);
-           tc->blue  = ((tc->pixel & cc->masks.blue) >> cc->shifts.blue) << (16 - cc->bits.blue);
-         }
-      else
-       {
-         my_x_query_colors (cc->colormap, colors, num_colors);
-         return 1;
-       }
-      break;
-      
-    case GDK_CC_MODE_STD_CMAP:
-    default:
-      if (cc->cmap == NULL)
-       {
-         my_x_query_colors (cc->colormap, colors, num_colors);
-         return 1;
-       }
-      else
-       {
-         gint first, last, half;
-         gulong half_pixel;
-         
-         for (i = 0, tc = colors; i < num_colors; i++)
-           {
-             first = 0;
-             last = cc->num_colors - 1;
-             
-             while (first <= last)
-               {
-                 half = (first + last) / 2;
-                 half_pixel = cc->cmap[half].pixel;
-                 
-                 if (tc->pixel == half_pixel)
-                   {
-                     tc->red   = cc->cmap[half].red;
-                     tc->green = cc->cmap[half].green;
-                     tc->blue  = cc->cmap[half].blue;
-                     first = last + 1; /* false break */
-                   }
-                 else
-                   {
-                     if (tc->pixel > half_pixel)
-                       first = half + 1;
-                     else
-                       last = half - 1;
-                   }
-               }
-           }
-         return 1;
-       }
-      break;
-    }
-  return 1;
-}
-
-gint
-gdk_color_context_add_palette (GdkColorContext *cc,
-                              GdkColor        *palette,
-                              gint             num_palette)
-{
-  gint i, j, erg;
-  gushort r, g, b;
-  gulong pixel[1];
-  
-  g_assert (cc != NULL);
-  
-  /* initialize this palette (will also erase previous palette as well) */
-  
-  init_palette (cc);
-  
-  /* restore previous mode if we aren't adding a new palette */
-  
-  if (num_palette == 0)
-    return 0;
-  
-  /* copy incoming palette */
-  
-  cc->palette = g_new0(GdkColor, num_palette);
-  
-  j = 0;
-  
-  for (i = 0; i < num_palette; i++)
-    {
-      erg = 0;
-      pixel[0] = 0;
-      
-      /* try to allocate this color */
-      
-      r = palette[i].red;
-      g = palette[i].green;
-      b = palette[i].blue;
-      
-      gdk_color_context_get_pixels (cc, &r, &g, &b, 1, pixel, &erg);
-      
-      /* only store if we succeed */
-      
-      if (erg)
-       {
-         /* store in palette */
-         
-         cc->palette[j].red   = r;
-         cc->palette[j].green = g;
-         cc->palette[j].blue  = b;
-         cc->palette[j].pixel = pixel[0];
-         
-         /* move to next slot */
-         
-         j++;
-       }
-    }
-  
-  /* resize to fit */
-  
-  if (j != num_palette)
-    cc->palette = g_realloc (cc->palette, j * sizeof (GdkColor));
-  
-  /* clear the hash table, we don't use it when dithering */
-  
-  if (cc->color_hash)
-    {
-      g_hash_table_foreach (cc->color_hash,
-                           free_hash_entry,
-                           NULL);
-      g_hash_table_destroy (cc->color_hash);
-      cc->color_hash = NULL;
-    }
-  
-  /* store real palette size */
-  
-  cc->num_palette = j;
-  
-  /* switch to palette mode */
-  
-  cc->mode = GDK_CC_MODE_PALETTE;
-  
-  /* sort palette */
-  
-  qsort (cc->palette, cc->num_palette, sizeof (GdkColor), pixel_sort);
-  
-  cc->fast_dither = NULL;
-  
-  return j;
-}
-
-void
-gdk_color_context_init_dither (GdkColorContext *cc)
-{
-  gint rr, gg, bb, err, erg, erb;
-  gint success = FALSE;
-  
-  g_assert (cc != NULL);
-  
-  /* now we can initialize the fast dither matrix */
-  
-  if (cc->fast_dither == NULL)
-    cc->fast_dither = g_new (GdkColorContextDither, 1);
-  
-  /* Fill it.  We ignore unsuccessful allocations, they are just mapped
-   * to black instead */
-  
-  for (rr = 0; rr < 32; rr++)
-    for (gg = 0; gg < 32; gg++)
-      for (bb = 0; bb < 32; bb++)
-       {
-         err = (rr << 3) | (rr >> 2);
-         erg = (gg << 3) | (gg >> 2);
-         erb = (bb << 3) | (bb >> 2);
-         
-         cc->fast_dither->fast_rgb[rr][gg][bb] =
-           gdk_color_context_get_index_from_palette (cc, &err, &erg, &erb, &success);
-         cc->fast_dither->fast_err[rr][gg][bb] = err;
-         cc->fast_dither->fast_erg[rr][gg][bb] = erg;
-         cc->fast_dither->fast_erb[rr][gg][bb] = erb;
-       }
-}
-
-void
-gdk_color_context_free_dither (GdkColorContext *cc)
-{
-  g_assert (cc != NULL);
-  
-  if (cc->fast_dither)
-    g_free (cc->fast_dither);
-  
-  cc->fast_dither = NULL;
-}
-
-gulong
-gdk_color_context_get_pixel_from_palette (GdkColorContext *cc,
-                                         gushort         *red,
-                                         gushort         *green,
-                                         gushort         *blue,
-                                         gint            *failed)
-{
-  gulong pixel = 0;
-  gint dif, dr, dg, db, j = -1;
-  gint mindif = 0x7fffffff;
-  gint err = 0, erg = 0, erb = 0;
-  gint i;
-  
-  g_assert (cc != NULL);
-  g_assert (red != NULL);
-  g_assert (green != NULL);
-  g_assert (blue != NULL);
-  g_assert (failed != NULL);
-  
-  *failed = FALSE;
-  
-  for (i = 0; i < cc->num_palette; i++)
-    {
-      dr = *red - cc->palette[i].red;
-      dg = *green - cc->palette[i].green;
-      db = *blue - cc->palette[i].blue;
-      
-      dif = dr * dr + dg * dg + db * db;
-      
-      if (dif < mindif)
-       {
-         mindif = dif;
-         j = i;
-         pixel = cc->palette[i].pixel;
-         err = dr;
-         erg = dg;
-         erb = db;
-         
-         if (mindif == 0)
-           break;
-       }
-    }
-  
-  /* we failed to map onto a color */
-  
-  if (j == -1)
-    *failed = TRUE;
-  else
-    {
-      *red   = ABS (err);
-      *green = ABS (erg);
-      *blue  = ABS (erb);
-    }
-  
-  return pixel;
-}
-
-guchar
-gdk_color_context_get_index_from_palette (GdkColorContext *cc,
-                                         gint            *red,
-                                         gint            *green,
-                                         gint            *blue,
-                                         gint            *failed)
-{
-  gint dif, dr, dg, db, j = -1;
-  gint mindif = 0x7fffffff;
-  gint err = 0, erg = 0, erb = 0;
-  gint i;
-  
-  g_assert (cc != NULL);
-  g_assert (red != NULL);
-  g_assert (green != NULL);
-  g_assert (blue != NULL);
-  g_assert (failed != NULL);
-  
-  *failed = FALSE;
-  
-  for (i = 0; i < cc->num_palette; i++)
-    {
-      dr = *red - cc->palette[i].red;
-      dg = *green - cc->palette[i].green;
-      db = *blue - cc->palette[i].blue;
-      
-      dif = dr * dr + dg * dg + db * db;
-      
-      if (dif < mindif)
-       {
-         mindif = dif;
-         j = i;
-         err = dr;
-         erg = dg;
-         erb = db;
-         
-         if (mindif == 0)
-           break;
-       }
-    }
-  
-  /* we failed to map onto a color */
-  
-  if (j == -1)
-    {
-      *failed = TRUE;
-      j = 0;
-    }
-  else
-    {
-      /* return error fractions */
-      
-      *red   = err;
-      *green = erg;
-      *blue  = erb;
-    }
-  
-  return j;
-}
diff --git a/gdk/win32/gdkcolor-win32.c b/gdk/win32/gdkcolor-win32.c
deleted file mode 100644 (file)
index 443e1fb..0000000
+++ /dev/null
@@ -1,2445 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "gdkcolor.h"
-#include "gdkprivate.h"
-
-static gint  gdk_colormap_match_color (GdkColormap *cmap,
-                                      GdkColor    *color,
-                                      const gchar *available);
-static void  gdk_colormap_add         (GdkColormap *cmap);
-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;
-
-static Status
-alloc_color_cells(Colormap      colormap,
-                 gboolean      contig,
-                 unsigned long plane_masks_return[],
-                 unsigned int  nplanes,
-                 unsigned long pixels_return[],
-                 unsigned int  npixels)
-{
-  unsigned int i, nfree, iret;
-
-  nfree = 0;
-  for (i = 0; i < colormap->size && nfree < npixels; i++)
-    if (!colormap->in_use[i])
-      nfree++;
-
-  if (colormap->size + npixels - nfree > colormap->sizepalette)
-    {
-      g_warning ("alloc_color_cells: too large palette: %d",
-                colormap->size + npixels);
-      return FALSE;
-    }
-
-  iret = 0;
-  for (i = 0; i < colormap->size && iret < npixels; i++)
-    if (!colormap->in_use[i])
-      {
-       colormap->in_use[i] = TRUE;
-       pixels_return[iret] = i;
-       iret++;
-      }
-
-  if (nfree < npixels)
-    {
-      int nmore = npixels - nfree;
-
-      /* I don't understand why, if the code below in #if 0 is
-        enabled, gdkrgb fails miserably. The palette doesn't get
-        realized correctly. There doesn't seem to be any harm done by
-        keeping this code out, either.  */
-#ifdef SOME_STRANGE_BUG
-      if (!ResizePalette (colormap->palette, colormap->size + nmore))
-       {
-         g_warning ("alloc_color_cells: ResizePalette to %d failed",
-                    colormap->size + nmore);
-         return FALSE;
-       }
-      g_print("alloc_color_cells: %#x to %d\n",
-             colormap->palette, colormap->size + nmore);
-#endif
-      for (i = colormap->size; i < colormap->size + nmore; i++)
-       {
-         pixels_return[iret] = i;
-         iret++;
-         colormap->in_use[i] = TRUE;
-       }
-#ifdef SOME_STRANGE_BUG
-      colormap->size += nmore;
-#endif
-    }
-  return TRUE;
-}
-
-/* The following functions are from Tk8.0, but heavily modified.
-   Here are tk's licensing terms. I hope these terms don't conflict
-   with the GNU Library General Public License? They shouldn't, as
-   they are looser that the GLPL, yes? */
-
-/*
-This software is copyrighted by the Regents of the University of
-California, Sun Microsystems, Inc., and other parties.  The following
-terms apply to all files associated with the software unless explicitly
-disclaimed in individual files.
-
-The authors hereby grant permission to use, copy, modify, distribute,
-and license this software and its documentation for any purpose, provided
-that existing copyright notices are retained in all copies and that this
-notice is included verbatim in any distributions. No written agreement,
-license, or royalty fee is required for any of the authorized uses.
-Modifications to this software may be copyrighted by their authors
-and need not follow the licensing terms described here, provided that
-the new terms are clearly indicated on the first page of each file where
-they apply.
-
-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
-FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
-ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
-DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
-IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
-NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
-MODIFICATIONS.
-
-GOVERNMENT USE: If you are acquiring this software on behalf of the
-U.S. government, the Government shall have only "Restricted Rights"
-in the software and related documentation as defined in the Federal 
-Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you
-are acquiring the software on behalf of the Department of Defense, the
-software shall be classified as "Commercial Computer Software" and the
-Government shall have only "Restricted Rights" as defined in Clause
-252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the
-authors grant the U.S. Government and others acting in its behalf
-permission to use and distribute the software in accordance with the
-terms specified in this license.
-*/
-/*
- *----------------------------------------------------------------------
- *
- * XAllocColor --
- *
- *     Find the closest available color to the specified XColor.
- *
- * Results:
- *     Updates the color argument and returns 1 on success.  Otherwise
- *     returns 0.
- *
- * Side effects:
- *     Allocates a new color in the palette.
- *
- *----------------------------------------------------------------------
- */
-
-static int
-alloc_color(Colormap  colormap,
-           XColor   *color,
-           gulong   *pixelp)
-{
-  PALETTEENTRY entry, closeEntry;
-  HDC hdc;
-  unsigned int i;
-    
-  entry = *color;
-  entry.peFlags = 0;
-
-  if (colormap->rc_palette)
-    {
-      COLORREF newPixel, closePixel;
-      UINT index;
-
-      /*
-       * Find the nearest existing palette entry.
-       */
-       
-      newPixel = RGB (entry.peRed, entry.peGreen, entry.peBlue);
-      index = GetNearestPaletteIndex (colormap->palette, newPixel);
-      GetPaletteEntries (colormap->palette, index, 1, &closeEntry);
-      closePixel = RGB (closeEntry.peRed, closeEntry.peGreen,
-                       closeEntry.peBlue);
-
-      if (newPixel != closePixel)
-       {
-         /* Not a perfect match. */
-         if (!colormap->in_use[index])
-           {
-             /* It was a free'd entry anyway, so we can use it, and
-                set it to the correct color. */
-             if (SetPaletteEntries (colormap->palette, index, 1, &entry) == 0)
-               g_warning ("alloc_color: SetPaletteEntries #1 failed");
-           }
-         else
-           {
-             /* The close entry found is in use, so search for a
-                unused slot. */
-                
-             for (i = 0; i < colormap->size; i++)
-               if (!colormap->in_use[i])
-                 {
-                   /* A free slot, use it. */
-                   if (SetPaletteEntries (colormap->palette,
-                                          index, 1, &entry) == 0)
-                     g_warning ("alloc_color: SetPaletteEntries #2 failed");
-                   index = i;
-                   break;
-                 }
-             if (i == colormap->size)
-               {
-                 /* No free slots found. If the palette isn't maximal
-                    yet, grow it. */
-                 if (colormap->size == colormap->sizepalette)
-                   {
-                     /* The palette is maximal, and no free slots available,
-                        so use the close entry, then, dammit. */
-                     *color = closeEntry;
-                   }
-                 else
-                   {
-                     /* There is room to grow the palette. */
-                     index = colormap->size;
-                     colormap->size++;
-                     if (!ResizePalette (colormap->palette, colormap->size))
-                       g_warning ("alloc_color: ResizePalette to %d failed",
-                                  colormap->size);
-                     if (SetPaletteEntries (colormap->palette, index, 1, &entry) == 0)
-                       g_warning ("alloc_color: SetPaletteEntries #3 failed");
-                   }
-               }
-           }
-         colormap->stale = TRUE;
-       }
-      else
-       {
-         /* We got a match, so use it. */
-       }
-
-      *pixelp = index;
-      colormap->in_use[index] = TRUE;
-#if 0
-      g_print("alloc_color from %#x: index %d for %02x %02x %02x\n",
-             colormap->palette, index,
-             entry.peRed, entry.peGreen, entry.peBlue);
-#endif
-    }
-  else
-    {
-      /*
-       * Determine what color will actually be used on non-colormap systems.
-       */
-      *pixelp = GetNearestColor (gdk_DC, RGB(entry.peRed, entry.peGreen, entry.peBlue));
-      
-      color->peRed = GetRValue (*pixelp);
-      color->peGreen = GetGValue (*pixelp);
-      color->peBlue = GetBValue (*pixelp);
-    }
-  
-  return 1;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * XFreeColors --
- *
- *     Deallocate a block of colors.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     Removes entries for the current palette and compacts the
- *     remaining set.
- *
- *----------------------------------------------------------------------
- */
-
-static void
-XFreeColors(Colormap colormap,
-           gulong  *pixels,
-           gint     npixels,
-           gulong   planes)
-{
-  gint i;
-  PALETTEENTRY entries[256];
-
-  /*
-   * We don't have to do anything for non-palette devices.
-   */
-  
-  if (colormap->rc_palette)
-    {
-      int npal;
-      int lowestpixel = 256;
-      int highestpixel = -1;
-
-      npal = GetPaletteEntries (colormap->palette, 0, 256, entries);
-      for (i = 0; i < npixels; i++)
-       {
-         int pixel = pixels[i];
-
-         if (pixel < lowestpixel)
-           lowestpixel = pixel;
-         if (pixel > highestpixel)
-           highestpixel = pixel;
-
-         colormap->in_use[pixel] = FALSE;
-
-         entries[pixel] = entries[0];
-       }
-#if 0
-      if (SetPaletteEntries (colormap->palette, lowestpixel,
-                            highestpixel - lowestpixel + 1,
-                            entries + lowestpixel) == 0)
-       g_warning ("XFreeColors: SetPaletteEntries failed");
-#endif
-      colormap->stale = TRUE;
-#if 0
-      g_print("XFreeColors %#x lowestpixel = %d, highestpixel = %d\n",
-             colormap->palette, lowestpixel, highestpixel);
-#endif
-    }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * XCreateColormap --
- *
- *     Allocate a new colormap.
- *
- * Results:
- *     Returns a newly allocated colormap.
- *
- * Side effects:
- *     Allocates an empty palette and color list.
- *
- *----------------------------------------------------------------------
- */
-
-static Colormap
-create_colormap (HWND     w,
-                Visual  *visual,
-                int      alloc)
-{
-  char logPalBuf[sizeof(LOGPALETTE) + 256 * sizeof(PALETTEENTRY)];
-  LOGPALETTE *logPalettePtr;
-  PALETTEENTRY *entryPtr;
-  Colormap colormap;
-  guint i;
-  HPALETTE sysPal;
-  HDC hdc;
-
-  /* Should the alloc parameter do something? */
-
-
-  /* Allocate a starting palette with all of the reserved colors. */
-  
-  logPalettePtr = (LOGPALETTE *) logPalBuf;
-  logPalettePtr->palVersion = 0x300;
-  sysPal = (HPALETTE) GetStockObject (DEFAULT_PALETTE);
-  logPalettePtr->palNumEntries =
-    GetPaletteEntries (sysPal, 0, 256, logPalettePtr->palPalEntry);
-  
-  colormap = (Colormap) g_new (ColormapStruct, 1);
-  colormap->size = logPalettePtr->palNumEntries;
-  colormap->stale = TRUE;
-  colormap->palette = CreatePalette (logPalettePtr);
-  hdc = GetDC (NULL);
-  colormap->rc_palette = ((GetDeviceCaps (hdc, RASTERCAPS) & RC_PALETTE) != 0);
-  if (colormap->rc_palette)
-    {
-      colormap->sizepalette = GetDeviceCaps (hdc, SIZEPALETTE);
-      colormap->in_use = g_new (gboolean, colormap->sizepalette);
-      /* Mark static colors in use. */
-      for (i = 0; i < logPalettePtr->palNumEntries; i++)
-       colormap->in_use[i] = TRUE;
-      /* Mark rest not in use */
-      for (i = logPalettePtr->palNumEntries; i < colormap->sizepalette; i++)
-       colormap->in_use[i] = FALSE;
-    }
-  ReleaseDC (NULL, hdc);
-
-  return colormap;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * XFreeColormap --
- *
- *     Frees the resources associated with the given colormap.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     Deletes the palette associated with the colormap.  Note that
- *     the palette must not be selected into a device context when
- *     this occurs.
- *
- *----------------------------------------------------------------------
- */
-
-static void
-XFreeColormap(Colormap  colormap)
-{
-  if (!DeleteObject (colormap->palette))
-    {
-      g_error ("Unable to free colormap, palette is still selected.");
-    }
-  g_free (colormap);
-}
-
-typedef struct {
-    char *name;
-    unsigned char red;
-    unsigned char green;
-    unsigned char blue;
-} XColorEntry;
-
-static XColorEntry xColors[] = {
-    { "alice blue", 240, 248, 255 },
-    { "AliceBlue", 240, 248, 255 },
-    { "antique white", 250, 235, 215 },
-    { "AntiqueWhite", 250, 235, 215 },
-    { "AntiqueWhite1", 255, 239, 219 },
-    { "AntiqueWhite2", 238, 223, 204 },
-    { "AntiqueWhite3", 205, 192, 176 },
-    { "AntiqueWhite4", 139, 131, 120 },
-    { "aquamarine", 127, 255, 212 },
-    { "aquamarine1", 127, 255, 212 },
-    { "aquamarine2", 118, 238, 198 },
-    { "aquamarine3", 102, 205, 170 },
-    { "aquamarine4", 69, 139, 116 },
-    { "azure", 240, 255, 255 },
-    { "azure1", 240, 255, 255 },
-    { "azure2", 224, 238, 238 },
-    { "azure3", 193, 205, 205 },
-    { "azure4", 131, 139, 139 },
-    { "beige", 245, 245, 220 },
-    { "bisque", 255, 228, 196 },
-    { "bisque1", 255, 228, 196 },
-    { "bisque2", 238, 213, 183 },
-    { "bisque3", 205, 183, 158 },
-    { "bisque4", 139, 125, 107 },
-    { "black", 0, 0, 0 },
-    { "blanched almond", 255, 235, 205 },
-    { "BlanchedAlmond", 255, 235, 205 },
-    { "blue", 0, 0, 255 },
-    { "blue violet", 138, 43, 226 },
-    { "blue1", 0, 0, 255 },
-    { "blue2", 0, 0, 238 },
-    { "blue3", 0, 0, 205 },
-    { "blue4", 0, 0, 139 },
-    { "BlueViolet", 138, 43, 226 },
-    { "brown", 165, 42, 42 },
-    { "brown1", 255, 64, 64 },
-    { "brown2", 238, 59, 59 },
-    { "brown3", 205, 51, 51 },
-    { "brown4", 139, 35, 35 },
-    { "burlywood", 222, 184, 135 },
-    { "burlywood1", 255, 211, 155 },
-    { "burlywood2", 238, 197, 145 },
-    { "burlywood3", 205, 170, 125 },
-    { "burlywood4", 139, 115, 85 },
-    { "cadet blue", 95, 158, 160 },
-    { "CadetBlue", 95, 158, 160 },
-    { "CadetBlue1", 152, 245, 255 },
-    { "CadetBlue2", 142, 229, 238 },
-    { "CadetBlue3", 122, 197, 205 },
-    { "CadetBlue4", 83, 134, 139 },
-    { "chartreuse", 127, 255, 0 },
-    { "chartreuse1", 127, 255, 0 },
-    { "chartreuse2", 118, 238, 0 },
-    { "chartreuse3", 102, 205, 0 },
-    { "chartreuse4", 69, 139, 0 },
-    { "chocolate", 210, 105, 30 },
-    { "chocolate1", 255, 127, 36 },
-    { "chocolate2", 238, 118, 33 },
-    { "chocolate3", 205, 102, 29 },
-    { "chocolate4", 139, 69, 19 },
-    { "coral", 255, 127, 80 },
-    { "coral1", 255, 114, 86 },
-    { "coral2", 238, 106, 80 },
-    { "coral3", 205, 91, 69 },
-    { "coral4", 139, 62, 47 },
-    { "cornflower blue", 100, 149, 237 },
-    { "CornflowerBlue", 100, 149, 237 },
-    { "cornsilk", 255, 248, 220 },
-    { "cornsilk1", 255, 248, 220 },
-    { "cornsilk2", 238, 232, 205 },
-    { "cornsilk3", 205, 200, 177 },
-    { "cornsilk4", 139, 136, 120 },
-    { "cyan", 0, 255, 255 },
-    { "cyan1", 0, 255, 255 },
-    { "cyan2", 0, 238, 238 },
-    { "cyan3", 0, 205, 205 },
-    { "cyan4", 0, 139, 139 },
-    { "dark blue", 0, 0, 139 },
-    { "dark cyan", 0, 139, 139 },
-    { "dark goldenrod", 184, 134, 11 },
-    { "dark gray", 169, 169, 169 },
-    { "dark green", 0, 100, 0 },
-    { "dark grey", 169, 169, 169 },
-    { "dark khaki", 189, 183, 107 },
-    { "dark magenta", 139, 0, 139 },
-    { "dark olive green", 85, 107, 47 },
-    { "dark orange", 255, 140, 0 },
-    { "dark orchid", 153, 50, 204 },
-    { "dark red", 139, 0, 0 },
-    { "dark salmon", 233, 150, 122 },
-    { "dark sea green", 143, 188, 143 },
-    { "dark slate blue", 72, 61, 139 },
-    { "dark slate gray", 47, 79, 79 },
-    { "dark slate grey", 47, 79, 79 },
-    { "dark turquoise", 0, 206, 209 },
-    { "dark violet", 148, 0, 211 },
-    { "DarkBlue", 0, 0, 139 },
-    { "DarkCyan", 0, 139, 139 },
-    { "DarkGoldenrod", 184, 134, 11 },
-    { "DarkGoldenrod1", 255, 185, 15 },
-    { "DarkGoldenrod2", 238, 173, 14 },
-    { "DarkGoldenrod3", 205, 149, 12 },
-    { "DarkGoldenrod4", 139, 101, 8 },
-    { "DarkGray", 169, 169, 169 },
-    { "DarkGreen", 0, 100, 0 },
-    { "DarkGrey", 169, 169, 169 },
-    { "DarkKhaki", 189, 183, 107 },
-    { "DarkMagenta", 139, 0, 139 },
-    { "DarkOliveGreen", 85, 107, 47 },
-    { "DarkOliveGreen1", 202, 255, 112 },
-    { "DarkOliveGreen2", 188, 238, 104 },
-    { "DarkOliveGreen3", 162, 205, 90 },
-    { "DarkOliveGreen4", 110, 139, 61 },
-    { "DarkOrange", 255, 140, 0 },
-    { "DarkOrange1", 255, 127, 0 },
-    { "DarkOrange2", 238, 118, 0 },
-    { "DarkOrange3", 205, 102, 0 },
-    { "DarkOrange4", 139, 69, 0 },
-    { "DarkOrchid", 153, 50, 204 },
-    { "DarkOrchid1", 191, 62, 255 },
-    { "DarkOrchid2", 178, 58, 238 },
-    { "DarkOrchid3", 154, 50, 205 },
-    { "DarkOrchid4", 104, 34, 139 },
-    { "DarkRed", 139, 0, 0 },
-    { "DarkSalmon", 233, 150, 122 },
-    { "DarkSeaGreen", 143, 188, 143 },
-    { "DarkSeaGreen1", 193, 255, 193 },
-    { "DarkSeaGreen2", 180, 238, 180 },
-    { "DarkSeaGreen3", 155, 205, 155 },
-    { "DarkSeaGreen4", 105, 139, 105 },
-    { "DarkSlateBlue", 72, 61, 139 },
-    { "DarkSlateGray", 47, 79, 79 },
-    { "DarkSlateGray1", 151, 255, 255 },
-    { "DarkSlateGray2", 141, 238, 238 },
-    { "DarkSlateGray3", 121, 205, 205 },
-    { "DarkSlateGray4", 82, 139, 139 },
-    { "DarkSlateGrey", 47, 79, 79 },
-    { "DarkTurquoise", 0, 206, 209 },
-    { "DarkViolet", 148, 0, 211 },
-    { "deep pink", 255, 20, 147 },
-    { "deep sky blue", 0, 191, 255 },
-    { "DeepPink", 255, 20, 147 },
-    { "DeepPink1", 255, 20, 147 },
-    { "DeepPink2", 238, 18, 137 },
-    { "DeepPink3", 205, 16, 118 },
-    { "DeepPink4", 139, 10, 80 },
-    { "DeepSkyBlue", 0, 191, 255 },
-    { "DeepSkyBlue1", 0, 191, 255 },
-    { "DeepSkyBlue2", 0, 178, 238 },
-    { "DeepSkyBlue3", 0, 154, 205 },
-    { "DeepSkyBlue4", 0, 104, 139 },
-    { "dim gray", 105, 105, 105 },
-    { "dim grey", 105, 105, 105 },
-    { "DimGray", 105, 105, 105 },
-    { "DimGrey", 105, 105, 105 },
-    { "dodger blue", 30, 144, 255 },
-    { "DodgerBlue", 30, 144, 255 },
-    { "DodgerBlue1", 30, 144, 255 },
-    { "DodgerBlue2", 28, 134, 238 },
-    { "DodgerBlue3", 24, 116, 205 },
-    { "DodgerBlue4", 16, 78, 139 },
-    { "firebrick", 178, 34, 34 },
-    { "firebrick1", 255, 48, 48 },
-    { "firebrick2", 238, 44, 44 },
-    { "firebrick3", 205, 38, 38 },
-    { "firebrick4", 139, 26, 26 },
-    { "floral white", 255, 250, 240 },
-    { "FloralWhite", 255, 250, 240 },
-    { "forest green", 34, 139, 34 },
-    { "ForestGreen", 34, 139, 34 },
-    { "gainsboro", 220, 220, 220 },
-    { "ghost white", 248, 248, 255 },
-    { "GhostWhite", 248, 248, 255 },
-    { "gold", 255, 215, 0 },
-    { "gold1", 255, 215, 0 },
-    { "gold2", 238, 201, 0 },
-    { "gold3", 205, 173, 0 },
-    { "gold4", 139, 117, 0 },
-    { "goldenrod", 218, 165, 32 },
-    { "goldenrod1", 255, 193, 37 },
-    { "goldenrod2", 238, 180, 34 },
-    { "goldenrod3", 205, 155, 29 },
-    { "goldenrod4", 139, 105, 20 },
-    { "gray", 190, 190, 190 },
-    { "gray0", 0, 0, 0 },
-    { "gray1", 3, 3, 3 },
-    { "gray10", 26, 26, 26 },
-    { "gray100", 255, 255, 255 },
-    { "gray11", 28, 28, 28 },
-    { "gray12", 31, 31, 31 },
-    { "gray13", 33, 33, 33 },
-    { "gray14", 36, 36, 36 },
-    { "gray15", 38, 38, 38 },
-    { "gray16", 41, 41, 41 },
-    { "gray17", 43, 43, 43 },
-    { "gray18", 46, 46, 46 },
-    { "gray19", 48, 48, 48 },
-    { "gray2", 5, 5, 5 },
-    { "gray20", 51, 51, 51 },
-    { "gray21", 54, 54, 54 },
-    { "gray22", 56, 56, 56 },
-    { "gray23", 59, 59, 59 },
-    { "gray24", 61, 61, 61 },
-    { "gray25", 64, 64, 64 },
-    { "gray26", 66, 66, 66 },
-    { "gray27", 69, 69, 69 },
-    { "gray28", 71, 71, 71 },
-    { "gray29", 74, 74, 74 },
-    { "gray3", 8, 8, 8 },
-    { "gray30", 77, 77, 77 },
-    { "gray31", 79, 79, 79 },
-    { "gray32", 82, 82, 82 },
-    { "gray33", 84, 84, 84 },
-    { "gray34", 87, 87, 87 },
-    { "gray35", 89, 89, 89 },
-    { "gray36", 92, 92, 92 },
-    { "gray37", 94, 94, 94 },
-    { "gray38", 97, 97, 97 },
-    { "gray39", 99, 99, 99 },
-    { "gray4", 10, 10, 10 },
-    { "gray40", 102, 102, 102 },
-    { "gray41", 105, 105, 105 },
-    { "gray42", 107, 107, 107 },
-    { "gray43", 110, 110, 110 },
-    { "gray44", 112, 112, 112 },
-    { "gray45", 115, 115, 115 },
-    { "gray46", 117, 117, 117 },
-    { "gray47", 120, 120, 120 },
-    { "gray48", 122, 122, 122 },
-    { "gray49", 125, 125, 125 },
-    { "gray5", 13, 13, 13 },
-    { "gray50", 127, 127, 127 },
-    { "gray51", 130, 130, 130 },
-    { "gray52", 133, 133, 133 },
-    { "gray53", 135, 135, 135 },
-    { "gray54", 138, 138, 138 },
-    { "gray55", 140, 140, 140 },
-    { "gray56", 143, 143, 143 },
-    { "gray57", 145, 145, 145 },
-    { "gray58", 148, 148, 148 },
-    { "gray59", 150, 150, 150 },
-    { "gray6", 15, 15, 15 },
-    { "gray60", 153, 153, 153 },
-    { "gray61", 156, 156, 156 },
-    { "gray62", 158, 158, 158 },
-    { "gray63", 161, 161, 161 },
-    { "gray64", 163, 163, 163 },
-    { "gray65", 166, 166, 166 },
-    { "gray66", 168, 168, 168 },
-    { "gray67", 171, 171, 171 },
-    { "gray68", 173, 173, 173 },
-    { "gray69", 176, 176, 176 },
-    { "gray7", 18, 18, 18 },
-    { "gray70", 179, 179, 179 },
-    { "gray71", 181, 181, 181 },
-    { "gray72", 184, 184, 184 },
-    { "gray73", 186, 186, 186 },
-    { "gray74", 189, 189, 189 },
-    { "gray75", 191, 191, 191 },
-    { "gray76", 194, 194, 194 },
-    { "gray77", 196, 196, 196 },
-    { "gray78", 199, 199, 199 },
-    { "gray79", 201, 201, 201 },
-    { "gray8", 20, 20, 20 },
-    { "gray80", 204, 204, 204 },
-    { "gray81", 207, 207, 207 },
-    { "gray82", 209, 209, 209 },
-    { "gray83", 212, 212, 212 },
-    { "gray84", 214, 214, 214 },
-    { "gray85", 217, 217, 217 },
-    { "gray86", 219, 219, 219 },
-    { "gray87", 222, 222, 222 },
-    { "gray88", 224, 224, 224 },
-    { "gray89", 227, 227, 227 },
-    { "gray9", 23, 23, 23 },
-    { "gray90", 229, 229, 229 },
-    { "gray91", 232, 232, 232 },
-    { "gray92", 235, 235, 235 },
-    { "gray93", 237, 237, 237 },
-    { "gray94", 240, 240, 240 },
-    { "gray95", 242, 242, 242 },
-    { "gray96", 245, 245, 245 },
-    { "gray97", 247, 247, 247 },
-    { "gray98", 250, 250, 250 },
-    { "gray99", 252, 252, 252 },
-    { "green", 0, 255, 0 },
-    { "green yellow", 173, 255, 47 },
-    { "green1", 0, 255, 0 },
-    { "green2", 0, 238, 0 },
-    { "green3", 0, 205, 0 },
-    { "green4", 0, 139, 0 },
-    { "GreenYellow", 173, 255, 47 },
-    { "grey", 190, 190, 190 },
-    { "grey0", 0, 0, 0 },
-    { "grey1", 3, 3, 3 },
-    { "grey10", 26, 26, 26 },
-    { "grey100", 255, 255, 255 },
-    { "grey11", 28, 28, 28 },
-    { "grey12", 31, 31, 31 },
-    { "grey13", 33, 33, 33 },
-    { "grey14", 36, 36, 36 },
-    { "grey15", 38, 38, 38 },
-    { "grey16", 41, 41, 41 },
-    { "grey17", 43, 43, 43 },
-    { "grey18", 46, 46, 46 },
-    { "grey19", 48, 48, 48 },
-    { "grey2", 5, 5, 5 },
-    { "grey20", 51, 51, 51 },
-    { "grey21", 54, 54, 54 },
-    { "grey22", 56, 56, 56 },
-    { "grey23", 59, 59, 59 },
-    { "grey24", 61, 61, 61 },
-    { "grey25", 64, 64, 64 },
-    { "grey26", 66, 66, 66 },
-    { "grey27", 69, 69, 69 },
-    { "grey28", 71, 71, 71 },
-    { "grey29", 74, 74, 74 },
-    { "grey3", 8, 8, 8 },
-    { "grey30", 77, 77, 77 },
-    { "grey31", 79, 79, 79 },
-    { "grey32", 82, 82, 82 },
-    { "grey33", 84, 84, 84 },
-    { "grey34", 87, 87, 87 },
-    { "grey35", 89, 89, 89 },
-    { "grey36", 92, 92, 92 },
-    { "grey37", 94, 94, 94 },
-    { "grey38", 97, 97, 97 },
-    { "grey39", 99, 99, 99 },
-    { "grey4", 10, 10, 10 },
-    { "grey40", 102, 102, 102 },
-    { "grey41", 105, 105, 105 },
-    { "grey42", 107, 107, 107 },
-    { "grey43", 110, 110, 110 },
-    { "grey44", 112, 112, 112 },
-    { "grey45", 115, 115, 115 },
-    { "grey46", 117, 117, 117 },
-    { "grey47", 120, 120, 120 },
-    { "grey48", 122, 122, 122 },
-    { "grey49", 125, 125, 125 },
-    { "grey5", 13, 13, 13 },
-    { "grey50", 127, 127, 127 },
-    { "grey51", 130, 130, 130 },
-    { "grey52", 133, 133, 133 },
-    { "grey53", 135, 135, 135 },
-    { "grey54", 138, 138, 138 },
-    { "grey55", 140, 140, 140 },
-    { "grey56", 143, 143, 143 },
-    { "grey57", 145, 145, 145 },
-    { "grey58", 148, 148, 148 },
-    { "grey59", 150, 150, 150 },
-    { "grey6", 15, 15, 15 },
-    { "grey60", 153, 153, 153 },
-    { "grey61", 156, 156, 156 },
-    { "grey62", 158, 158, 158 },
-    { "grey63", 161, 161, 161 },
-    { "grey64", 163, 163, 163 },
-    { "grey65", 166, 166, 166 },
-    { "grey66", 168, 168, 168 },
-    { "grey67", 171, 171, 171 },
-    { "grey68", 173, 173, 173 },
-    { "grey69", 176, 176, 176 },
-    { "grey7", 18, 18, 18 },
-    { "grey70", 179, 179, 179 },
-    { "grey71", 181, 181, 181 },
-    { "grey72", 184, 184, 184 },
-    { "grey73", 186, 186, 186 },
-    { "grey74", 189, 189, 189 },
-    { "grey75", 191, 191, 191 },
-    { "grey76", 194, 194, 194 },
-    { "grey77", 196, 196, 196 },
-    { "grey78", 199, 199, 199 },
-    { "grey79", 201, 201, 201 },
-    { "grey8", 20, 20, 20 },
-    { "grey80", 204, 204, 204 },
-    { "grey81", 207, 207, 207 },
-    { "grey82", 209, 209, 209 },
-    { "grey83", 212, 212, 212 },
-    { "grey84", 214, 214, 214 },
-    { "grey85", 217, 217, 217 },
-    { "grey86", 219, 219, 219 },
-    { "grey87", 222, 222, 222 },
-    { "grey88", 224, 224, 224 },
-    { "grey89", 227, 227, 227 },
-    { "grey9", 23, 23, 23 },
-    { "grey90", 229, 229, 229 },
-    { "grey91", 232, 232, 232 },
-    { "grey92", 235, 235, 235 },
-    { "grey93", 237, 237, 237 },
-    { "grey94", 240, 240, 240 },
-    { "grey95", 242, 242, 242 },
-    { "grey96", 245, 245, 245 },
-    { "grey97", 247, 247, 247 },
-    { "grey98", 250, 250, 250 },
-    { "grey99", 252, 252, 252 },
-    { "honeydew", 240, 255, 240 },
-    { "honeydew1", 240, 255, 240 },
-    { "honeydew2", 224, 238, 224 },
-    { "honeydew3", 193, 205, 193 },
-    { "honeydew4", 131, 139, 131 },
-    { "hot pink", 255, 105, 180 },
-    { "HotPink", 255, 105, 180 },
-    { "HotPink1", 255, 110, 180 },
-    { "HotPink2", 238, 106, 167 },
-    { "HotPink3", 205, 96, 144 },
-    { "HotPink4", 139, 58, 98 },
-    { "indian red", 205, 92, 92 },
-    { "IndianRed", 205, 92, 92 },
-    { "IndianRed1", 255, 106, 106 },
-    { "IndianRed2", 238, 99, 99 },
-    { "IndianRed3", 205, 85, 85 },
-    { "IndianRed4", 139, 58, 58 },
-    { "ivory", 255, 255, 240 },
-    { "ivory1", 255, 255, 240 },
-    { "ivory2", 238, 238, 224 },
-    { "ivory3", 205, 205, 193 },
-    { "ivory4", 139, 139, 131 },
-    { "khaki", 240, 230, 140 },
-    { "khaki1", 255, 246, 143 },
-    { "khaki2", 238, 230, 133 },
-    { "khaki3", 205, 198, 115 },
-    { "khaki4", 139, 134, 78 },
-    { "lavender", 230, 230, 250 },
-    { "lavender blush", 255, 240, 245 },
-    { "LavenderBlush", 255, 240, 245 },
-    { "LavenderBlush1", 255, 240, 245 },
-    { "LavenderBlush2", 238, 224, 229 },
-    { "LavenderBlush3", 205, 193, 197 },
-    { "LavenderBlush4", 139, 131, 134 },
-    { "lawn green", 124, 252, 0 },
-    { "LawnGreen", 124, 252, 0 },
-    { "lemon chiffon", 255, 250, 205 },
-    { "LemonChiffon", 255, 250, 205 },
-    { "LemonChiffon1", 255, 250, 205 },
-    { "LemonChiffon2", 238, 233, 191 },
-    { "LemonChiffon3", 205, 201, 165 },
-    { "LemonChiffon4", 139, 137, 112 },
-    { "light blue", 173, 216, 230 },
-    { "light coral", 240, 128, 128 },
-    { "light cyan", 224, 255, 255 },
-    { "light goldenrod", 238, 221, 130 },
-    { "light goldenrod yellow", 250, 250, 210 },
-    { "light gray", 211, 211, 211 },
-    { "light green", 144, 238, 144 },
-    { "light grey", 211, 211, 211 },
-    { "light pink", 255, 182, 193 },
-    { "light salmon", 255, 160, 122 },
-    { "light sea green", 32, 178, 170 },
-    { "light sky blue", 135, 206, 250 },
-    { "light slate blue", 132, 112, 255 },
-    { "light slate gray", 119, 136, 153 },
-    { "light slate grey", 119, 136, 153 },
-    { "light steel blue", 176, 196, 222 },
-    { "light yellow", 255, 255, 224 },
-    { "LightBlue", 173, 216, 230 },
-    { "LightBlue1", 191, 239, 255 },
-    { "LightBlue2", 178, 223, 238 },
-    { "LightBlue3", 154, 192, 205 },
-    { "LightBlue4", 104, 131, 139 },
-    { "LightCoral", 240, 128, 128 },
-    { "LightCyan", 224, 255, 255 },
-    { "LightCyan1", 224, 255, 255 },
-    { "LightCyan2", 209, 238, 238 },
-    { "LightCyan3", 180, 205, 205 },
-    { "LightCyan4", 122, 139, 139 },
-    { "LightGoldenrod", 238, 221, 130 },
-    { "LightGoldenrod1", 255, 236, 139 },
-    { "LightGoldenrod2", 238, 220, 130 },
-    { "LightGoldenrod3", 205, 190, 112 },
-    { "LightGoldenrod4", 139, 129, 76 },
-    { "LightGoldenrodYellow", 250, 250, 210 },
-    { "LightGray", 211, 211, 211 },
-    { "LightGreen", 144, 238, 144 },
-    { "LightGrey", 211, 211, 211 },
-    { "LightPink", 255, 182, 193 },
-    { "LightPink1", 255, 174, 185 },
-    { "LightPink2", 238, 162, 173 },
-    { "LightPink3", 205, 140, 149 },
-    { "LightPink4", 139, 95, 101 },
-    { "LightSalmon", 255, 160, 122 },
-    { "LightSalmon1", 255, 160, 122 },
-    { "LightSalmon2", 238, 149, 114 },
-    { "LightSalmon3", 205, 129, 98 },
-    { "LightSalmon4", 139, 87, 66 },
-    { "LightSeaGreen", 32, 178, 170 },
-    { "LightSkyBlue", 135, 206, 250 },
-    { "LightSkyBlue1", 176, 226, 255 },
-    { "LightSkyBlue2", 164, 211, 238 },
-    { "LightSkyBlue3", 141, 182, 205 },
-    { "LightSkyBlue4", 96, 123, 139 },
-    { "LightSlateBlue", 132, 112, 255 },
-    { "LightSlateGray", 119, 136, 153 },
-    { "LightSlateGrey", 119, 136, 153 },
-    { "LightSteelBlue", 176, 196, 222 },
-    { "LightSteelBlue1", 202, 225, 255 },
-    { "LightSteelBlue2", 188, 210, 238 },
-    { "LightSteelBlue3", 162, 181, 205 },
-    { "LightSteelBlue4", 110, 123, 139 },
-    { "LightYellow", 255, 255, 224 },
-    { "LightYellow1", 255, 255, 224 },
-    { "LightYellow2", 238, 238, 209 },
-    { "LightYellow3", 205, 205, 180 },
-    { "LightYellow4", 139, 139, 122 },
-    { "lime green", 50, 205, 50 },
-    { "LimeGreen", 50, 205, 50 },
-    { "linen", 250, 240, 230 },
-    { "magenta", 255, 0, 255 },
-    { "magenta1", 255, 0, 255 },
-    { "magenta2", 238, 0, 238 },
-    { "magenta3", 205, 0, 205 },
-    { "magenta4", 139, 0, 139 },
-    { "maroon", 176, 48, 96 },
-    { "maroon1", 255, 52, 179 },
-    { "maroon2", 238, 48, 167 },
-    { "maroon3", 205, 41, 144 },
-    { "maroon4", 139, 28, 98 },
-    { "medium aquamarine", 102, 205, 170 },
-    { "medium blue", 0, 0, 205 },
-    { "medium orchid", 186, 85, 211 },
-    { "medium purple", 147, 112, 219 },
-    { "medium sea green", 60, 179, 113 },
-    { "medium slate blue", 123, 104, 238 },
-    { "medium spring green", 0, 250, 154 },
-    { "medium turquoise", 72, 209, 204 },
-    { "medium violet red", 199, 21, 133 },
-    { "MediumAquamarine", 102, 205, 170 },
-    { "MediumBlue", 0, 0, 205 },
-    { "MediumOrchid", 186, 85, 211 },
-    { "MediumOrchid1", 224, 102, 255 },
-    { "MediumOrchid2", 209, 95, 238 },
-    { "MediumOrchid3", 180, 82, 205 },
-    { "MediumOrchid4", 122, 55, 139 },
-    { "MediumPurple", 147, 112, 219 },
-    { "MediumPurple1", 171, 130, 255 },
-    { "MediumPurple2", 159, 121, 238 },
-    { "MediumPurple3", 137, 104, 205 },
-    { "MediumPurple4", 93, 71, 139 },
-    { "MediumSeaGreen", 60, 179, 113 },
-    { "MediumSlateBlue", 123, 104, 238 },
-    { "MediumSpringGreen", 0, 250, 154 },
-    { "MediumTurquoise", 72, 209, 204 },
-    { "MediumVioletRed", 199, 21, 133 },
-    { "midnight blue", 25, 25, 112 },
-    { "MidnightBlue", 25, 25, 112 },
-    { "mint cream", 245, 255, 250 },
-    { "MintCream", 245, 255, 250 },
-    { "misty rose", 255, 228, 225 },
-    { "MistyRose", 255, 228, 225 },
-    { "MistyRose1", 255, 228, 225 },
-    { "MistyRose2", 238, 213, 210 },
-    { "MistyRose3", 205, 183, 181 },
-    { "MistyRose4", 139, 125, 123 },
-    { "moccasin", 255, 228, 181 },
-    { "navajo white", 255, 222, 173 },
-    { "NavajoWhite", 255, 222, 173 },
-    { "NavajoWhite1", 255, 222, 173 },
-    { "NavajoWhite2", 238, 207, 161 },
-    { "NavajoWhite3", 205, 179, 139 },
-    { "NavajoWhite4", 139, 121, 94 },
-    { "navy", 0, 0, 128 },
-    { "navy blue", 0, 0, 128 },
-    { "NavyBlue", 0, 0, 128 },
-    { "old lace", 253, 245, 230 },
-    { "OldLace", 253, 245, 230 },
-    { "olive drab", 107, 142, 35 },
-    { "OliveDrab", 107, 142, 35 },
-    { "OliveDrab1", 192, 255, 62 },
-    { "OliveDrab2", 179, 238, 58 },
-    { "OliveDrab3", 154, 205, 50 },
-    { "OliveDrab4", 105, 139, 34 },
-    { "orange", 255, 165, 0 },
-    { "orange red", 255, 69, 0 },
-    { "orange1", 255, 165, 0 },
-    { "orange2", 238, 154, 0 },
-    { "orange3", 205, 133, 0 },
-    { "orange4", 139, 90, 0 },
-    { "OrangeRed", 255, 69, 0 },
-    { "OrangeRed1", 255, 69, 0 },
-    { "OrangeRed2", 238, 64, 0 },
-    { "OrangeRed3", 205, 55, 0 },
-    { "OrangeRed4", 139, 37, 0 },
-    { "orchid", 218, 112, 214 },
-    { "orchid1", 255, 131, 250 },
-    { "orchid2", 238, 122, 233 },
-    { "orchid3", 205, 105, 201 },
-    { "orchid4", 139, 71, 137 },
-    { "pale goldenrod", 238, 232, 170 },
-    { "pale green", 152, 251, 152 },
-    { "pale turquoise", 175, 238, 238 },
-    { "pale violet red", 219, 112, 147 },
-    { "PaleGoldenrod", 238, 232, 170 },
-    { "PaleGreen", 152, 251, 152 },
-    { "PaleGreen1", 154, 255, 154 },
-    { "PaleGreen2", 144, 238, 144 },
-    { "PaleGreen3", 124, 205, 124 },
-    { "PaleGreen4", 84, 139, 84 },
-    { "PaleTurquoise", 175, 238, 238 },
-    { "PaleTurquoise1", 187, 255, 255 },
-    { "PaleTurquoise2", 174, 238, 238 },
-    { "PaleTurquoise3", 150, 205, 205 },
-    { "PaleTurquoise4", 102, 139, 139 },
-    { "PaleVioletRed", 219, 112, 147 },
-    { "PaleVioletRed1", 255, 130, 171 },
-    { "PaleVioletRed2", 238, 121, 159 },
-    { "PaleVioletRed3", 205, 104, 137 },
-    { "PaleVioletRed4", 139, 71, 93 },
-    { "papaya whip", 255, 239, 213 },
-    { "PapayaWhip", 255, 239, 213 },
-    { "peach puff", 255, 218, 185 },
-    { "PeachPuff", 255, 218, 185 },
-    { "PeachPuff1", 255, 218, 185 },
-    { "PeachPuff2", 238, 203, 173 },
-    { "PeachPuff3", 205, 175, 149 },
-    { "PeachPuff4", 139, 119, 101 },
-    { "peru", 205, 133, 63 },
-    { "pink", 255, 192, 203 },
-    { "pink1", 255, 181, 197 },
-    { "pink2", 238, 169, 184 },
-    { "pink3", 205, 145, 158 },
-    { "pink4", 139, 99, 108 },
-    { "plum", 221, 160, 221 },
-    { "plum1", 255, 187, 255 },
-    { "plum2", 238, 174, 238 },
-    { "plum3", 205, 150, 205 },
-    { "plum4", 139, 102, 139 },
-    { "powder blue", 176, 224, 230 },
-    { "PowderBlue", 176, 224, 230 },
-    { "purple", 160, 32, 240 },
-    { "purple1", 155, 48, 255 },
-    { "purple2", 145, 44, 238 },
-    { "purple3", 125, 38, 205 },
-    { "purple4", 85, 26, 139 },
-    { "red", 255, 0, 0 },
-    { "red1", 255, 0, 0 },
-    { "red2", 238, 0, 0 },
-    { "red3", 205, 0, 0 },
-    { "red4", 139, 0, 0 },
-    { "rosy brown", 188, 143, 143 },
-    { "RosyBrown", 188, 143, 143 },
-    { "RosyBrown1", 255, 193, 193 },
-    { "RosyBrown2", 238, 180, 180 },
-    { "RosyBrown3", 205, 155, 155 },
-    { "RosyBrown4", 139, 105, 105 },
-    { "royal blue", 65, 105, 225 },
-    { "RoyalBlue", 65, 105, 225 },
-    { "RoyalBlue1", 72, 118, 255 },
-    { "RoyalBlue2", 67, 110, 238 },
-    { "RoyalBlue3", 58, 95, 205 },
-    { "RoyalBlue4", 39, 64, 139 },
-    { "saddle brown", 139, 69, 19 },
-    { "SaddleBrown", 139, 69, 19 },
-    { "salmon", 250, 128, 114 },
-    { "salmon1", 255, 140, 105 },
-    { "salmon2", 238, 130, 98 },
-    { "salmon3", 205, 112, 84 },
-    { "salmon4", 139, 76, 57 },
-    { "sandy brown", 244, 164, 96 },
-    { "SandyBrown", 244, 164, 96 },
-    { "sea green", 46, 139, 87 },
-    { "SeaGreen", 46, 139, 87 },
-    { "SeaGreen1", 84, 255, 159 },
-    { "SeaGreen2", 78, 238, 148 },
-    { "SeaGreen3", 67, 205, 128 },
-    { "SeaGreen4", 46, 139, 87 },
-    { "seashell", 255, 245, 238 },
-    { "seashell1", 255, 245, 238 },
-    { "seashell2", 238, 229, 222 },
-    { "seashell3", 205, 197, 191 },
-    { "seashell4", 139, 134, 130 },
-    { "sienna", 160, 82, 45 },
-    { "sienna1", 255, 130, 71 },
-    { "sienna2", 238, 121, 66 },
-    { "sienna3", 205, 104, 57 },
-    { "sienna4", 139, 71, 38 },
-    { "sky blue", 135, 206, 235 },
-    { "SkyBlue", 135, 206, 235 },
-    { "SkyBlue1", 135, 206, 255 },
-    { "SkyBlue2", 126, 192, 238 },
-    { "SkyBlue3", 108, 166, 205 },
-    { "SkyBlue4", 74, 112, 139 },
-    { "slate blue", 106, 90, 205 },
-    { "slate gray", 112, 128, 144 },
-    { "slate grey", 112, 128, 144 },
-    { "SlateBlue", 106, 90, 205 },
-    { "SlateBlue1", 131, 111, 255 },
-    { "SlateBlue2", 122, 103, 238 },
-    { "SlateBlue3", 105, 89, 205 },
-    { "SlateBlue4", 71, 60, 139 },
-    { "SlateGray", 112, 128, 144 },
-    { "SlateGray1", 198, 226, 255 },
-    { "SlateGray2", 185, 211, 238 },
-    { "SlateGray3", 159, 182, 205 },
-    { "SlateGray4", 108, 123, 139 },
-    { "SlateGrey", 112, 128, 144 },
-    { "snow", 255, 250, 250 },
-    { "snow1", 255, 250, 250 },
-    { "snow2", 238, 233, 233 },
-    { "snow3", 205, 201, 201 },
-    { "snow4", 139, 137, 137 },
-    { "spring green", 0, 255, 127 },
-    { "SpringGreen", 0, 255, 127 },
-    { "SpringGreen1", 0, 255, 127 },
-    { "SpringGreen2", 0, 238, 118 },
-    { "SpringGreen3", 0, 205, 102 },
-    { "SpringGreen4", 0, 139, 69 },
-    { "steel blue", 70, 130, 180 },
-    { "SteelBlue", 70, 130, 180 },
-    { "SteelBlue1", 99, 184, 255 },
-    { "SteelBlue2", 92, 172, 238 },
-    { "SteelBlue3", 79, 148, 205 },
-    { "SteelBlue4", 54, 100, 139 },
-    { "tan", 210, 180, 140 },
-    { "tan1", 255, 165, 79 },
-    { "tan2", 238, 154, 73 },
-    { "tan3", 205, 133, 63 },
-    { "tan4", 139, 90, 43 },
-    { "thistle", 216, 191, 216 },
-    { "thistle1", 255, 225, 255 },
-    { "thistle2", 238, 210, 238 },
-    { "thistle3", 205, 181, 205 },
-    { "thistle4", 139, 123, 139 },
-    { "tomato", 255, 99, 71 },
-    { "tomato1", 255, 99, 71 },
-    { "tomato2", 238, 92, 66 },
-    { "tomato3", 205, 79, 57 },
-    { "tomato4", 139, 54, 38 },
-    { "turquoise", 64, 224, 208 },
-    { "turquoise1", 0, 245, 255 },
-    { "turquoise2", 0, 229, 238 },
-    { "turquoise3", 0, 197, 205 },
-    { "turquoise4", 0, 134, 139 },
-    { "violet", 238, 130, 238 },
-    { "violet red", 208, 32, 144 },
-    { "VioletRed", 208, 32, 144 },
-    { "VioletRed1", 255, 62, 150 },
-    { "VioletRed2", 238, 58, 140 },
-    { "VioletRed3", 205, 50, 120 },
-    { "VioletRed4", 139, 34, 82 },
-    { "wheat", 245, 222, 179 },
-    { "wheat1", 255, 231, 186 },
-    { "wheat2", 238, 216, 174 },
-    { "wheat3", 205, 186, 150 },
-    { "wheat4", 139, 126, 102 },
-    { "white", 255, 255, 255 },
-    { "white smoke", 245, 245, 245 },
-    { "WhiteSmoke", 245, 245, 245 },
-    { "yellow", 255, 255, 0 },
-    { "yellow green", 154, 205, 50 },
-    { "yellow1", 255, 255, 0 },
-    { "yellow2", 238, 238, 0 },
-    { "yellow3", 205, 205, 0 },
-    { "yellow4", 139, 139, 0 },
-    { "YellowGreen", 154, 205, 50 }
-};
-#define numXColors (sizeof (xColors) / sizeof (*xColors))
-/*
- *----------------------------------------------------------------------
- *
- * FindColor --
- *
- *     This routine finds the color entry that corresponds to the
- *     specified color.
- *
- * Results:
- *     Returns non-zero on success.  The RGB values of the XColor
- *     will be initialized to the proper values on success.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------
- */
-
-static int
-compare_xcolor_entries (const void *a, const void *b)
-{
-  return strcasecmp ((const char *) a, ((const XColorEntry *) b)->name);
-}
-
-static int
-FindColor(const char *name,
-         GdkColor   *colorPtr)
-{
-  XColorEntry *found;
-
-  found = bsearch (name, xColors, numXColors, sizeof (XColorEntry),
-                  compare_xcolor_entries);
-  if (found == NULL)
-    return 0;
-  
-  colorPtr->red = (found->red * 65535) / 255;
-  colorPtr->green = (found->green * 65535) / 255;
-  colorPtr->blue = (found->blue * 65535) / 255;
-  return 1;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * parse_color --
- *
- *     Partial implementation of X color name parsing interface.
- *
- * Results:
- *     Returns non-zero on success.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------
- */
-
-gboolean
-parse_color(Colormap    map,
-           const char *spec,
-           GdkColor   *colorPtr)
-{
-    if (spec[0] == '#') {
-       char fmt[16];
-       int i, red, green, blue;
-
-       if ((i = strlen(spec+1))%3) {
-           return 0;
-       }
-       i /= 3;
-
-       sprintf(fmt, "%%%dx%%%dx%%%dx", i, i, i);
-       if (sscanf(spec+1, fmt, &red, &green, &blue) != 3) {
-           return 0;
-       }
-       if (i == 4)
-         {
-           colorPtr->red = red;
-           colorPtr->green = green;
-           colorPtr->blue = blue;
-         }
-       else if (i == 1)
-         {
-           colorPtr->red = (red * 65535) / 15;
-           colorPtr->green = (green * 65535) / 15;
-           colorPtr->blue = (blue * 65535) / 15;
-         }
-       else if (i == 2)
-         {
-           colorPtr->red = (red * 65535) / 255;
-           colorPtr->green = (green * 65535) / 255;
-           colorPtr->blue = (blue * 65535) / 255;
-         }
-       else /* if (i == 3) */
-         {
-           colorPtr->red = (red * 65535) / 4095;
-           colorPtr->green = (green * 65535) / 4095;
-           colorPtr->blue = (blue * 65535) / 4095;
-         }
-    } else {
-       if (!FindColor(spec, colorPtr)) {
-           return 0;
-       }
-    }
-    return 1;
-}
-
-/* End of code from Tk8.0 */
-
-static Colormap
-DefaultColormap ()
-{
-  static Colormap colormap;
-  gint i;
-
-  if (colormap)
-    return colormap;
-
-  colormap = create_colormap ( NULL, NULL, AllocNone);
-  return colormap;
-}
-
-\f
-GdkColormap*
-gdk_colormap_new (GdkVisual *visual,
-                 gint       private_cmap)
-{
-  GdkColormap *colormap;
-  GdkColormapPrivate *private;
-  Visual *xvisual;
-  int size;
-  unsigned int i;
-
-  g_return_val_if_fail (visual != NULL, NULL);
-
-  private = g_new (GdkColormapPrivate, 1);
-  colormap = (GdkColormap*) private;
-
-  private->visual = visual;
-  private->ref_count = 1;
-
-  private->hash = NULL;
-  private->last_sync_time = 0;
-  private->info = NULL;
-  
-  xvisual = ((GdkVisualPrivate*) visual)->xvisual;
-
-  colormap->size = visual->colormap_size;
-  colormap->colors = g_new (GdkColor, colormap->size);
-
-  switch (visual->type)
-    {
-    case GDK_VISUAL_GRAYSCALE:
-    case GDK_VISUAL_PSEUDO_COLOR:
-      private->info = g_new0 (GdkColorInfo, colormap->size);
-      
-      private->hash = g_hash_table_new ((GHashFunc) gdk_color_hash,
-                                       (GCompareFunc) gdk_color_equal);
-      
-      private->private_val = private_cmap;
-      private->xcolormap = create_colormap (gdk_root_window, xvisual,
-                                           (private_cmap) ? (AllocAll) : (AllocNone));
-
-      if (private_cmap)
-       {
-         PALETTEENTRY pal[256];
-         guint npal;
-
-         npal = GetPaletteEntries (private->xcolormap->palette, 0, colormap->size, pal);
-         for (i = 0; i < colormap->size; i++)
-           {
-             colormap->colors[i].pixel = i;
-             if (i >= npal)
-               {
-                 colormap->colors[i].red =
-                   colormap->colors[i].green =
-                   colormap->colors[i].blue = 0;
-               }
-             else
-               {
-                 colormap->colors[i].red = (pal[i].peRed * 65535) / 255;
-                 colormap->colors[i].green = (pal[i].peGreen * 65525) / 255;
-                 colormap->colors[i].blue = (pal[i].peBlue * 65535) / 255;
-               }
-           }
-         gdk_colormap_change (colormap, colormap->size);
-       }
-      break;
-
-    case GDK_VISUAL_STATIC_GRAY:
-    case GDK_VISUAL_STATIC_COLOR:
-    case GDK_VISUAL_TRUE_COLOR:
-      private->private_val = FALSE;
-      private->xcolormap = create_colormap (gdk_root_window,
-                                           xvisual, AllocNone);
-      break;
-    }
-
-  gdk_colormap_add (colormap);
-
-  return colormap;
-}
-
-static 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);
-
-  gdk_colormap_remove (colormap);
-  XFreeColormap (private->xcolormap);
-
-  if (private->hash)
-    g_hash_table_destroy (private->hash);
-  
-  g_free (private->info);
-  g_free (colormap->colors);
-  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);
-}
-
-#define MIN_SYNC_TIME 2
-
-GdkVisual *
-gdk_colormap_get_visual (GdkColormap *colormap)
-{
-  GdkColormapPrivate *private;
-
-  g_return_val_if_fail (colormap != NULL, NULL);
-  
-  private = (GdkColormapPrivate *)colormap;
-
-  return private->visual;
-}
-     
-void
-gdk_colormap_sync (GdkColormap *colormap,
-                  gboolean     force)
-{
-  time_t current_time;
-  GdkColormapPrivate *private = (GdkColormapPrivate *)colormap;
-  XColor *xpalette;
-  gint nlookup;
-  gint i;
-  
-  g_return_if_fail (colormap != NULL);
-
-  current_time = time (NULL);
-  if (!force && ((current_time - private->last_sync_time) < MIN_SYNC_TIME))
-    return;
-
-  private->last_sync_time = current_time;
-
-  nlookup = 0;
-  xpalette = g_new (XColor, colormap->size);
-  
-  nlookup = GetPaletteEntries (private->xcolormap->palette,
-                              0, colormap->size, xpalette);
-  
-  for (i = 0; i < nlookup; i++)
-    {
-      colormap->colors[i].pixel = i;
-      colormap->colors[i].red = (xpalette[i].peRed * 65535) / 255;
-      colormap->colors[i].green = (xpalette[i].peGreen * 65535) / 255;
-      colormap->colors[i].blue = (xpalette[i].peBlue * 65535) / 255;
-    }
-
-  for (  ; i < colormap->size; i++)
-    {
-      colormap->colors[i].pixel = i;
-      colormap->colors[i].red = 0;
-      colormap->colors[i].green = 0;
-      colormap->colors[i].blue = 0;
-    }
-
-  g_free (xpalette);
-}
-                  
-
-GdkColormap*
-gdk_colormap_get_system (void)
-{
-  static GdkColormap *colormap = NULL;
-  GdkColormapPrivate *private;
-  gint i;
-
-  if (!colormap)
-    {
-      private = g_new (GdkColormapPrivate, 1);
-      colormap = (GdkColormap*) private;
-
-      private->xcolormap = DefaultColormap ();
-      private->visual = gdk_visual_get_system ();
-      private->private_val = FALSE;
-      private->ref_count = 1;
-
-      private->hash = NULL;
-      private->last_sync_time = 0;
-      private->info = NULL;
-
-      colormap->colors = NULL;
-      colormap->size = private->visual->colormap_size;
-
-      if ((private->visual->type == GDK_VISUAL_GRAYSCALE) ||
-         (private->visual->type == GDK_VISUAL_PSEUDO_COLOR))
-       {
-         private->info = g_new0 (GdkColorInfo, colormap->size);
-         colormap->colors = g_new (GdkColor, colormap->size);
-         
-         private->hash = g_hash_table_new ((GHashFunc) gdk_color_hash,
-                                           (GCompareFunc) gdk_color_equal);
-
-         gdk_colormap_sync (colormap, TRUE);
-       }
-      gdk_colormap_add (colormap);
-    }
-
-  return colormap;
-}
-
-gint
-gdk_colormap_get_system_size (void)
-{
-  gint bitspixel;
-  
-  bitspixel = GetDeviceCaps (gdk_DC, BITSPIXEL);
-
-  if (bitspixel == 1)
-    return 2;
-  else if (bitspixel == 4)
-    return 16;
-  else if (bitspixel == 8)
-    return 256;
-  else if (bitspixel == 12)
-    return 32;
-  else if (bitspixel == 16)
-    return 64;
-  else /* if (bitspixel >= 24) */
-    return 256;
-}
-
-void
-gdk_colormap_change (GdkColormap *colormap,
-                    gint         ncolors)
-{
-  GdkColormapPrivate *private;
-  GdkVisual *visual;
-  XColor *palette;
-  gint shift;
-  int max_colors;
-  int size;
-  int i;
-
-  g_return_if_fail (colormap != NULL);
-
-  palette = g_new (XColor, ncolors);
-
-  private = (GdkColormapPrivate*) colormap;
-  switch (private->visual->type)
-    {
-    case GDK_VISUAL_GRAYSCALE:
-    case GDK_VISUAL_PSEUDO_COLOR:
-      for (i = 0; i < ncolors; i++)
-       {
-         palette[i].peRed = (colormap->colors[i].red >> 8);
-         palette[i].peGreen = (colormap->colors[i].green >> 8);
-         palette[i].peBlue = (colormap->colors[i].blue >> 8);
-         palette[i].peFlags = 0;
-       }
-
-      if (SetPaletteEntries (private->xcolormap->palette,
-                            0, ncolors, palette) == 0)
-       g_warning ("gdk_colormap_change: SetPaletteEntries failed");
-      private->xcolormap->stale = TRUE;
-      break;
-
-    default:
-      break;
-    }
-
-  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,
-                 gulong        *planes,
-                 gint           nplanes,
-                 gulong        *pixels,
-                 gint           npixels)
-{
-  GdkColormapPrivate *private;
-  gint return_val;
-  gint i;
-
-  g_return_val_if_fail (colormap != NULL, 0);
-
-  private = (GdkColormapPrivate*) colormap;
-
-  return_val = alloc_color_cells (private->xcolormap, contiguous,
-                                 planes, nplanes, pixels, npixels);
-
-  if (return_val)
-    {
-      for (i=0; i<npixels; i++)
-       {
-         private->info[pixels[i]].ref_count++;
-         private->info[pixels[i]].flags |= GDK_COLOR_WRITEABLE;
-       }
-    }
-
-  return return_val;
-}
-
-/* This is almost identical to gdk_colormap_free_colors.
- * Keep them in sync!
- */
-void
-gdk_colors_free (GdkColormap *colormap,
-                gulong      *in_pixels,
-                gint         in_npixels,
-                gulong       planes)
-{
-  GdkColormapPrivate *private;
-  gulong *pixels;
-  gint npixels = 0;
-  gint i;
-
-  g_return_if_fail (colormap != NULL);
-  g_return_if_fail (in_pixels != NULL);
-
-  private = (GdkColormapPrivate*) colormap;
-
-  if ((private->visual->type != GDK_VISUAL_PSEUDO_COLOR) &&
-      (private->visual->type != GDK_VISUAL_GRAYSCALE))
-    return;
-  
-  pixels = g_new (gulong, in_npixels);
-
-  for (i=0; i<in_npixels; i++)
-    {
-      gulong pixel = in_pixels[i];
-      
-      if (private->info[pixel].ref_count)
-       {
-         private->info[pixel].ref_count--;
-
-         if (private->info[pixel].ref_count == 0)
-           {
-             pixels[npixels++] = pixel;
-             if (!(private->info[pixel].flags & GDK_COLOR_WRITEABLE))
-               g_hash_table_remove (private->hash, &colormap->colors[in_pixels[i]]);
-             private->info[pixel].flags = 0;
-           }
-       }
-    }
-
-
-  if (npixels)
-    XFreeColors (private->xcolormap, pixels, npixels, planes);
-
-  g_free (pixels);
-}
-
-/*
- *--------------------------------------------------------------
- * 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);
-}
-
-gint
-gdk_color_white (GdkColormap *colormap,
-                GdkColor    *color)
-{
-  gint return_val;
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-
-  if (color)
-    {
-      color->red = 65535;
-      color->green = 65535;
-      color->blue = 65535;
-
-      return_val = gdk_color_alloc (colormap, color);
-    }
-  else
-    return_val = FALSE;
-
-  return return_val;
-}
-
-gint
-gdk_color_black (GdkColormap *colormap,
-                GdkColor    *color)
-{
-  gint return_val;
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-
-  if (color)
-    {
-      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)
-{
-  Colormap xcolormap;
-  XColor xcolor;
-  gboolean return_val;
-
-  g_return_val_if_fail (spec != NULL, FALSE);
-  g_return_val_if_fail (color != NULL, FALSE);
-
-  xcolormap = DefaultColormap ();
-
-  if (parse_color (xcolormap, spec, color))
-    return_val = TRUE;
-  else
-    return_val = FALSE;
-
-  return return_val;
-}
-
-/********************
- * Color allocation *
- ********************/
-
-/* Try to allocate a single color using alloc_color. If it succeeds,
- * cache the result in our colormap, and store in ret.
- */
-static gboolean 
-gdk_colormap_alloc1 (GdkColormap *colormap,
-                    GdkColor    *color,
-                    GdkColor    *ret)
-{
-  GdkColormapPrivate *private;
-  XColor xcolor;
-
-  private = (GdkColormapPrivate*) colormap;
-
-  xcolor.peRed = color->red >> 8;
-  xcolor.peGreen = color->green >> 8;
-  xcolor.peBlue = color->blue >> 8;
-
-  if (alloc_color (private->xcolormap, &xcolor, &ret->pixel))
-    {
-      ret->red = (xcolor.peRed * 65535) / 255;
-      ret->green = (xcolor.peGreen * 65535) / 255;;
-      ret->blue = (xcolor.peBlue * 65535) / 255;
-      
-      if ((guint) ret->pixel < colormap->size)
-       {
-         if (private->info[ret->pixel].ref_count) /* got a duplicate */
-           {
-             /* XXX */
-           }
-         else
-           {
-             colormap->colors[ret->pixel] = *color;
-             private->info[ret->pixel].ref_count = 1;
-
-             g_hash_table_insert (private->hash,
-                                  &colormap->colors[ret->pixel],
-                                  &colormap->colors[ret->pixel]);
-           }
-       }
-      return TRUE;
-    }
-  else
-    {
-      return FALSE;
-    }
-}
-
-static gint
-gdk_colormap_alloc_colors_writeable (GdkColormap *colormap,
-                                    GdkColor    *colors,
-                                    gint         ncolors,
-                                    gboolean     writeable,
-                                    gboolean     best_match,
-                                    gboolean    *success)
-{
-  GdkColormapPrivate *private;
-  gulong *pixels;
-  Status status;
-  gint i, index;
-
-  private = (GdkColormapPrivate*) colormap;
-
-  if (private->private_val)
-    {
-      index = 0;
-      for (i=0; i<ncolors; i++)
-       {
-         while ((index < colormap->size) && (private->info[index].ref_count != 0))
-           index++;
-         
-         if (index < colormap->size)
-           {
-             colors[i].pixel = index;
-             success[i] = TRUE;
-             private->info[index].ref_count++;
-             private->info[i].flags |= GDK_COLOR_WRITEABLE;
-           }
-         else
-           break;
-       }
-      return i;
-    }
-  else
-    {
-      pixels = g_new (gulong, ncolors);
-
-      /* Allocation of a writeable color cells */
-      status =  alloc_color_cells (private->xcolormap, FALSE, NULL,
-                                  0, pixels, ncolors);
-      if (status)
-       {
-         for (i=0; i<ncolors; i++)
-           {
-             colors[i].pixel = pixels[i];
-             private->info[pixels[i]].ref_count++;
-             private->info[pixels[i]].flags |= GDK_COLOR_WRITEABLE;
-           }
-       }
-      
-      g_free (pixels);
-
-      return status ? ncolors : 0; 
-    }
-}
-
-static gint
-gdk_colormap_alloc_colors_private (GdkColormap *colormap,
-                                  GdkColor    *colors,
-                                  gint         ncolors,
-                                  gboolean     writeable,
-                                  gboolean     best_match,
-                                  gboolean    *success)
-{
-  GdkColormapPrivate *private;
-  gint i, index;
-  XColor *store = g_new (XColor, ncolors);
-  gint nstore = 0;
-  gint nremaining = 0;
-  
-  private = (GdkColormapPrivate*) colormap;
-  index = -1;
-
-  /* First, store the colors we have room for */
-
-  index = 0;
-  for (i=0; i<ncolors; i++)
-    {
-      if (!success[i])
-       {
-         while ((index < colormap->size) && (private->info[index].ref_count != 0))
-           index++;
-
-         if (index < colormap->size)
-           {
-             store[nstore].peRed = colors[i].red >> 8;
-             store[nstore].peBlue = colors[i].blue >> 8;
-             store[nstore].peGreen = colors[i].green >> 8;
-             nstore++;
-
-             success[i] = TRUE;
-
-             colors[i].pixel = index;
-             private->info[index].ref_count++;
-           }
-         else
-           nremaining++;
-       }
-    }
-  
-  if (SetPaletteEntries (private->xcolormap->palette,
-                        0, nstore, store) == 0)
-    g_warning ("gdk_colormap_alloc_colors_private: SetPaletteEntries failed");
-  private->xcolormap->stale = TRUE;
-
-  g_free (store);
-
-  if (nremaining > 0 && best_match)
-    {
-      /* Get best matches for remaining colors */
-
-      gchar *available = g_new (gchar, colormap->size);
-      for (i = 0; i < colormap->size; i++)
-       available[i] = TRUE;
-
-      for (i=0; i<ncolors; i++)
-       {
-         if (!success[i])
-           {
-             index = gdk_colormap_match_color (colormap, 
-                                               &colors[i], 
-                                               available);
-             if (index != -1)
-               {
-                 colors[i] = colormap->colors[index];
-                 private->info[index].ref_count++;
-                 success[i] = TRUE;
-                 nremaining--;
-               }
-           }
-       }
-      g_free (available);
-    }
-
-  return (ncolors - nremaining);
-}
-
-static gint
-gdk_colormap_alloc_colors_shared (GdkColormap *colormap,
-                                 GdkColor    *colors,
-                                 gint         ncolors,
-                                 gboolean     writeable,
-                                 gboolean     best_match,
-                                 gboolean    *success)
-{
-  GdkColormapPrivate *private;
-  gint i, index;
-  gint nremaining = 0;
-  gint nfailed = 0;
-
-  private = (GdkColormapPrivate*) colormap;
-  index = -1;
-
-  for (i=0; i<ncolors; i++)
-    {
-      if (!success[i])
-       {
-         if (gdk_colormap_alloc1 (colormap, &colors[i], &colors[i]))
-           success[i] = TRUE;
-         else
-           nremaining++;
-       }
-    }
-
-
-  if (nremaining > 0 && best_match)
-    {
-      gchar *available = g_new (gchar, colormap->size);
-      for (i = 0; i < colormap->size; i++)
-       available[i] = ((private->info[i].ref_count == 0) ||
-                       !(private->info[i].flags && GDK_COLOR_WRITEABLE));
-      gdk_colormap_sync (colormap, FALSE);
-      
-      while (nremaining > 0)
-       {
-         for (i=0; i<ncolors; i++)
-           {
-             if (!success[i])
-               {
-                 index = gdk_colormap_match_color (colormap, &colors[i], available);
-                 if (index != -1)
-                   {
-                     if (private->info[index].ref_count)
-                       {
-                         private->info[index].ref_count++;
-                         colors[i] = colormap->colors[index];
-                         success[i] = TRUE;
-                         nremaining--;
-                       }
-                     else
-                       {
-                         if (gdk_colormap_alloc1 (colormap, 
-                                                  &colormap->colors[index],
-                                                  &colors[i]))
-                           {
-                             success[i] = TRUE;
-                             nremaining--;
-                             break;
-                           }
-                         else
-                           {
-                             available[index] = FALSE;
-                           }
-                       }
-                   }
-                 else
-                   {
-                     nfailed++;
-                     nremaining--;
-                     success[i] = 2; /* flag as permanent failure */
-                   }
-               }
-           }
-       }
-      g_free (available);
-    }
-
-  /* Change back the values we flagged as permanent failures */
-  if (nfailed > 0)
-    {
-      for (i=0; i<ncolors; i++)
-       if (success[i] == 2)
-         success[i] = FALSE;
-      nremaining = nfailed;
-    }
-  
-  return (ncolors - nremaining);
-}
-
-static gint
-gdk_colormap_alloc_colors_pseudocolor (GdkColormap *colormap,
-                                      GdkColor    *colors,
-                                      gint         ncolors,
-                                      gboolean     writeable,
-                                      gboolean     best_match,
-                                      gboolean    *success)
-{
-  GdkColormapPrivate *private;
-  GdkColor *lookup_color;
-  gint i;
-  gint nremaining = 0;
-
-  private = (GdkColormapPrivate*) colormap;
-
-  /* Check for an exact match among previously allocated colors */
-
-  for (i=0; i<ncolors; i++)
-    {
-      if (!success[i])
-       {
-         lookup_color = g_hash_table_lookup (private->hash, &colors[i]);
-         if (lookup_color)
-           {
-             private->info[lookup_color->pixel].ref_count++;
-             colors[i].pixel = lookup_color->pixel;
-             success[i] = TRUE;
-           }
-         else
-           nremaining++;
-       }
-    }
-
-  /* If that failed, we try to allocate a new color, or approxmiate
-   * with what we can get if best_match is TRUE.
-   */
-  if (nremaining > 0)
-    {
-      if (private->private_val)
-       return gdk_colormap_alloc_colors_private (colormap, colors, ncolors, writeable, best_match, success);
-      else
-       return gdk_colormap_alloc_colors_shared (colormap, colors, ncolors, writeable, best_match, success);
-    }
-  else
-    return 0;
-}
-
-gint
-gdk_colormap_alloc_colors (GdkColormap *colormap,
-                          GdkColor    *colors,
-                          gint         ncolors,
-                          gboolean     writeable,
-                          gboolean     best_match,
-                          gboolean    *success)
-{
-  GdkColormapPrivate *private;
-  GdkVisual *visual;
-  gint i;
-  gint nremaining = 0;
-  XColor xcolor;
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-  g_return_val_if_fail (colors != NULL, FALSE);
-
-  private = (GdkColormapPrivate*) colormap;
-
-  for (i=0; i<ncolors; i++)
-    {
-      success[i] = FALSE;
-    }
-
-  switch (private->visual->type)
-    {
-    case GDK_VISUAL_PSEUDO_COLOR:
-    case GDK_VISUAL_GRAYSCALE:
-      if (writeable)
-       return gdk_colormap_alloc_colors_writeable (colormap, colors, ncolors,
-                                                   writeable, best_match, success);
-      else
-       return gdk_colormap_alloc_colors_pseudocolor (colormap, colors, ncolors,
-                                                   writeable, best_match, success);
-      break;
-
-    case GDK_VISUAL_TRUE_COLOR:
-      visual = private->visual;
-
-      for (i=0; i<ncolors; i++)
-       {
-         colors[i].pixel = (((colors[i].red >> (16 - visual->red_prec)) << visual->red_shift) +
-                            ((colors[i].green >> (16 - visual->green_prec)) << visual->green_shift) +
-                            ((colors[i].blue >> (16 - visual->blue_prec)) << visual->blue_shift));
-         success[i] = TRUE;
-       }
-      break;
-
-    case GDK_VISUAL_STATIC_GRAY:
-    case GDK_VISUAL_STATIC_COLOR:
-      for (i=0; i<ncolors; i++)
-       {
-         xcolor.peRed = colors[i].red >> 8;
-         xcolor.peGreen = colors[i].green >> 8;
-         xcolor.peBlue = colors[i].blue >> 8;
-         if (alloc_color (private->xcolormap, &xcolor, &colors[i].pixel))
-           success[i] = TRUE;
-         else
-           nremaining++;
-       }
-      break;
-    }
-  return nremaining;
-}
-
-gboolean
-gdk_colormap_alloc_color (GdkColormap *colormap,
-                         GdkColor    *color,
-                         gboolean     writeable,
-                         gboolean     best_match)
-{
-  gboolean success;
-
-  GDK_NOTE (MISC, g_print ("gdk_colormap_alloc_color: (%.04x,%.04x,%.04x)",
-                          color->red, color->green, color->blue));
-
-  gdk_colormap_alloc_colors (colormap, color, 1, writeable, best_match,
-                            &success);
-  GDK_NOTE (MISC, g_print (" -> %.08x\n", color->pixel));
-
-  return success;
-}
-
-/* This is almost identical to gdk_colors_free.
- * Keep them in sync!
- */
-void
-gdk_colormap_free_colors (GdkColormap *colormap,
-                         GdkColor    *colors,
-                         gint         ncolors)
-{
-  GdkColormapPrivate *private;
-  gulong *pixels;
-  gint npixels = 0;
-  gint i;
-
-  g_return_if_fail (colormap != NULL);
-  g_return_if_fail (colors != NULL);
-
-  private = (GdkColormapPrivate*) colormap;
-
-  if ((private->visual->type != GDK_VISUAL_PSEUDO_COLOR) &&
-      (private->visual->type != GDK_VISUAL_GRAYSCALE))
-    return;
-
-  pixels = g_new (gulong, ncolors);
-
-  for (i=0; i<ncolors; i++)
-    {
-      gulong pixel = colors[i].pixel;
-      
-      if (private->info[pixel].ref_count)
-       {
-         private->info[pixel].ref_count--;
-
-         if (private->info[pixel].ref_count == 0)
-           {
-             pixels[npixels++] = pixel;
-             if (!(private->info[pixel].flags & GDK_COLOR_WRITEABLE))
-               g_hash_table_remove (private->hash, &colors[i]);
-             private->info[pixel].flags = 0;
-           }
-       }
-    }
-  if (npixels)
-    XFreeColors (private->xcolormap, pixels, npixels, 0);
-  g_free (pixels);
-}
-
-gboolean
-gdk_color_alloc (GdkColormap *colormap,
-                GdkColor    *color)
-{
-  gboolean success;
-
-  GDK_NOTE (MISC, g_print ("gdk_color_alloc: (%.04x,%.04x,%.04x)",
-                          color->red, color->green, color->blue));
-
-  gdk_colormap_alloc_colors (colormap, color, 1, FALSE, TRUE, &success);
-
-  GDK_NOTE (MISC, g_print (" -> %.08x\n", color->pixel));
-
-  return success;
-}
-
-gboolean
-gdk_color_change (GdkColormap *colormap,
-                 GdkColor    *color)
-{
-  GdkColormapPrivate *private;
-  XColor xcolor;
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-  g_return_val_if_fail (color != NULL, FALSE);
-
-  private = (GdkColormapPrivate*) colormap;
-
-  xcolor.peRed = color->red >> 8;
-  xcolor.peGreen = color->green >> 8;
-  xcolor.peBlue = color->blue >> 8;
-
-  if (SetPaletteEntries (private->xcolormap->palette,
-                        color->pixel, 1, &xcolor) == 0)
-    g_warning ("gdk_color_change: SetPaletteEntries failed");
-  private->xcolormap->stale = TRUE;
-
-  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));
-}
-
-static gint
-gdk_colormap_match_color (GdkColormap *cmap,
-                         GdkColor    *color,
-                         const gchar *available)
-{
-  GdkColor *colors;
-  guint sum, max;
-  gint rdiff, gdiff, bdiff;
-  gint i, index;
-
-  g_return_val_if_fail (cmap != NULL, 0);
-  g_return_val_if_fail (color != NULL, 0);
-
-  colors = cmap->colors;
-  max = 3 * (65536);
-  index = -1;
-
-  for (i = 0; i < cmap->size; i++)
-    {
-      if ((!available) || (available && available[i]))
-       {
-         rdiff = (color->red - colors[i].red);
-         gdiff = (color->green - colors[i].green);
-         bdiff = (color->blue - colors[i].blue);
-
-         sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
-
-         if (sum < max)
-           {
-             index = i;
-             max = sum;
-           }
-       }
-    }
-
-  return index;
-}
-
-GdkColormap*
-gdk_colormap_lookup (Colormap xcolormap)
-{
-  GdkColormap *cmap;
-
-  if (!colormap_hash)
-    return NULL;
-
-  cmap = g_hash_table_lookup (colormap_hash, &xcolormap);
-  return cmap;
-}
-
-static void
-gdk_colormap_add (GdkColormap *cmap)
-{
-  GdkColormapPrivate *private;
-
-  if (!colormap_hash)
-    colormap_hash = g_hash_table_new ((GHashFunc) gdk_colormap_hash,
-                                     (GCompareFunc) gdk_colormap_cmp);
-
-  private = (GdkColormapPrivate*) cmap;
-
-  g_hash_table_insert (colormap_hash, &private->xcolormap, cmap);
-}
-
-static void
-gdk_colormap_remove (GdkColormap *cmap)
-{
-  GdkColormapPrivate *private;
-
-  if (!colormap_hash)
-    colormap_hash = g_hash_table_new ((GHashFunc) gdk_colormap_hash,
-                                     (GCompareFunc) gdk_colormap_cmp);
-
-  private = (GdkColormapPrivate*) cmap;
-
-  g_hash_table_remove (colormap_hash, &private->xcolormap);
-}
-
-static guint
-gdk_colormap_hash (Colormap *cmap)
-{
-  return (guint) *cmap;
-}
-
-static gint
-gdk_colormap_cmp (Colormap *a,
-                 Colormap *b)
-{
-  return (*a == *b);
-}
-
-char *
-gdk_color_to_string (GdkColor *color)
-{
-  static char buf[100];
-
-  sprintf (buf, "(%.04x,%.04x,%.04x): %.06x",
-          color->red, color->green, color->blue, color->pixel);
-
-  return buf;
-}
diff --git a/gdk/win32/gdkcolor.c b/gdk/win32/gdkcolor.c
deleted file mode 100644 (file)
index 443e1fb..0000000
+++ /dev/null
@@ -1,2445 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "gdkcolor.h"
-#include "gdkprivate.h"
-
-static gint  gdk_colormap_match_color (GdkColormap *cmap,
-                                      GdkColor    *color,
-                                      const gchar *available);
-static void  gdk_colormap_add         (GdkColormap *cmap);
-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;
-
-static Status
-alloc_color_cells(Colormap      colormap,
-                 gboolean      contig,
-                 unsigned long plane_masks_return[],
-                 unsigned int  nplanes,
-                 unsigned long pixels_return[],
-                 unsigned int  npixels)
-{
-  unsigned int i, nfree, iret;
-
-  nfree = 0;
-  for (i = 0; i < colormap->size && nfree < npixels; i++)
-    if (!colormap->in_use[i])
-      nfree++;
-
-  if (colormap->size + npixels - nfree > colormap->sizepalette)
-    {
-      g_warning ("alloc_color_cells: too large palette: %d",
-                colormap->size + npixels);
-      return FALSE;
-    }
-
-  iret = 0;
-  for (i = 0; i < colormap->size && iret < npixels; i++)
-    if (!colormap->in_use[i])
-      {
-       colormap->in_use[i] = TRUE;
-       pixels_return[iret] = i;
-       iret++;
-      }
-
-  if (nfree < npixels)
-    {
-      int nmore = npixels - nfree;
-
-      /* I don't understand why, if the code below in #if 0 is
-        enabled, gdkrgb fails miserably. The palette doesn't get
-        realized correctly. There doesn't seem to be any harm done by
-        keeping this code out, either.  */
-#ifdef SOME_STRANGE_BUG
-      if (!ResizePalette (colormap->palette, colormap->size + nmore))
-       {
-         g_warning ("alloc_color_cells: ResizePalette to %d failed",
-                    colormap->size + nmore);
-         return FALSE;
-       }
-      g_print("alloc_color_cells: %#x to %d\n",
-             colormap->palette, colormap->size + nmore);
-#endif
-      for (i = colormap->size; i < colormap->size + nmore; i++)
-       {
-         pixels_return[iret] = i;
-         iret++;
-         colormap->in_use[i] = TRUE;
-       }
-#ifdef SOME_STRANGE_BUG
-      colormap->size += nmore;
-#endif
-    }
-  return TRUE;
-}
-
-/* The following functions are from Tk8.0, but heavily modified.
-   Here are tk's licensing terms. I hope these terms don't conflict
-   with the GNU Library General Public License? They shouldn't, as
-   they are looser that the GLPL, yes? */
-
-/*
-This software is copyrighted by the Regents of the University of
-California, Sun Microsystems, Inc., and other parties.  The following
-terms apply to all files associated with the software unless explicitly
-disclaimed in individual files.
-
-The authors hereby grant permission to use, copy, modify, distribute,
-and license this software and its documentation for any purpose, provided
-that existing copyright notices are retained in all copies and that this
-notice is included verbatim in any distributions. No written agreement,
-license, or royalty fee is required for any of the authorized uses.
-Modifications to this software may be copyrighted by their authors
-and need not follow the licensing terms described here, provided that
-the new terms are clearly indicated on the first page of each file where
-they apply.
-
-IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
-FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
-ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
-DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
-INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
-IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
-NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
-MODIFICATIONS.
-
-GOVERNMENT USE: If you are acquiring this software on behalf of the
-U.S. government, the Government shall have only "Restricted Rights"
-in the software and related documentation as defined in the Federal 
-Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you
-are acquiring the software on behalf of the Department of Defense, the
-software shall be classified as "Commercial Computer Software" and the
-Government shall have only "Restricted Rights" as defined in Clause
-252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the
-authors grant the U.S. Government and others acting in its behalf
-permission to use and distribute the software in accordance with the
-terms specified in this license.
-*/
-/*
- *----------------------------------------------------------------------
- *
- * XAllocColor --
- *
- *     Find the closest available color to the specified XColor.
- *
- * Results:
- *     Updates the color argument and returns 1 on success.  Otherwise
- *     returns 0.
- *
- * Side effects:
- *     Allocates a new color in the palette.
- *
- *----------------------------------------------------------------------
- */
-
-static int
-alloc_color(Colormap  colormap,
-           XColor   *color,
-           gulong   *pixelp)
-{
-  PALETTEENTRY entry, closeEntry;
-  HDC hdc;
-  unsigned int i;
-    
-  entry = *color;
-  entry.peFlags = 0;
-
-  if (colormap->rc_palette)
-    {
-      COLORREF newPixel, closePixel;
-      UINT index;
-
-      /*
-       * Find the nearest existing palette entry.
-       */
-       
-      newPixel = RGB (entry.peRed, entry.peGreen, entry.peBlue);
-      index = GetNearestPaletteIndex (colormap->palette, newPixel);
-      GetPaletteEntries (colormap->palette, index, 1, &closeEntry);
-      closePixel = RGB (closeEntry.peRed, closeEntry.peGreen,
-                       closeEntry.peBlue);
-
-      if (newPixel != closePixel)
-       {
-         /* Not a perfect match. */
-         if (!colormap->in_use[index])
-           {
-             /* It was a free'd entry anyway, so we can use it, and
-                set it to the correct color. */
-             if (SetPaletteEntries (colormap->palette, index, 1, &entry) == 0)
-               g_warning ("alloc_color: SetPaletteEntries #1 failed");
-           }
-         else
-           {
-             /* The close entry found is in use, so search for a
-                unused slot. */
-                
-             for (i = 0; i < colormap->size; i++)
-               if (!colormap->in_use[i])
-                 {
-                   /* A free slot, use it. */
-                   if (SetPaletteEntries (colormap->palette,
-                                          index, 1, &entry) == 0)
-                     g_warning ("alloc_color: SetPaletteEntries #2 failed");
-                   index = i;
-                   break;
-                 }
-             if (i == colormap->size)
-               {
-                 /* No free slots found. If the palette isn't maximal
-                    yet, grow it. */
-                 if (colormap->size == colormap->sizepalette)
-                   {
-                     /* The palette is maximal, and no free slots available,
-                        so use the close entry, then, dammit. */
-                     *color = closeEntry;
-                   }
-                 else
-                   {
-                     /* There is room to grow the palette. */
-                     index = colormap->size;
-                     colormap->size++;
-                     if (!ResizePalette (colormap->palette, colormap->size))
-                       g_warning ("alloc_color: ResizePalette to %d failed",
-                                  colormap->size);
-                     if (SetPaletteEntries (colormap->palette, index, 1, &entry) == 0)
-                       g_warning ("alloc_color: SetPaletteEntries #3 failed");
-                   }
-               }
-           }
-         colormap->stale = TRUE;
-       }
-      else
-       {
-         /* We got a match, so use it. */
-       }
-
-      *pixelp = index;
-      colormap->in_use[index] = TRUE;
-#if 0
-      g_print("alloc_color from %#x: index %d for %02x %02x %02x\n",
-             colormap->palette, index,
-             entry.peRed, entry.peGreen, entry.peBlue);
-#endif
-    }
-  else
-    {
-      /*
-       * Determine what color will actually be used on non-colormap systems.
-       */
-      *pixelp = GetNearestColor (gdk_DC, RGB(entry.peRed, entry.peGreen, entry.peBlue));
-      
-      color->peRed = GetRValue (*pixelp);
-      color->peGreen = GetGValue (*pixelp);
-      color->peBlue = GetBValue (*pixelp);
-    }
-  
-  return 1;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * XFreeColors --
- *
- *     Deallocate a block of colors.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     Removes entries for the current palette and compacts the
- *     remaining set.
- *
- *----------------------------------------------------------------------
- */
-
-static void
-XFreeColors(Colormap colormap,
-           gulong  *pixels,
-           gint     npixels,
-           gulong   planes)
-{
-  gint i;
-  PALETTEENTRY entries[256];
-
-  /*
-   * We don't have to do anything for non-palette devices.
-   */
-  
-  if (colormap->rc_palette)
-    {
-      int npal;
-      int lowestpixel = 256;
-      int highestpixel = -1;
-
-      npal = GetPaletteEntries (colormap->palette, 0, 256, entries);
-      for (i = 0; i < npixels; i++)
-       {
-         int pixel = pixels[i];
-
-         if (pixel < lowestpixel)
-           lowestpixel = pixel;
-         if (pixel > highestpixel)
-           highestpixel = pixel;
-
-         colormap->in_use[pixel] = FALSE;
-
-         entries[pixel] = entries[0];
-       }
-#if 0
-      if (SetPaletteEntries (colormap->palette, lowestpixel,
-                            highestpixel - lowestpixel + 1,
-                            entries + lowestpixel) == 0)
-       g_warning ("XFreeColors: SetPaletteEntries failed");
-#endif
-      colormap->stale = TRUE;
-#if 0
-      g_print("XFreeColors %#x lowestpixel = %d, highestpixel = %d\n",
-             colormap->palette, lowestpixel, highestpixel);
-#endif
-    }
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * XCreateColormap --
- *
- *     Allocate a new colormap.
- *
- * Results:
- *     Returns a newly allocated colormap.
- *
- * Side effects:
- *     Allocates an empty palette and color list.
- *
- *----------------------------------------------------------------------
- */
-
-static Colormap
-create_colormap (HWND     w,
-                Visual  *visual,
-                int      alloc)
-{
-  char logPalBuf[sizeof(LOGPALETTE) + 256 * sizeof(PALETTEENTRY)];
-  LOGPALETTE *logPalettePtr;
-  PALETTEENTRY *entryPtr;
-  Colormap colormap;
-  guint i;
-  HPALETTE sysPal;
-  HDC hdc;
-
-  /* Should the alloc parameter do something? */
-
-
-  /* Allocate a starting palette with all of the reserved colors. */
-  
-  logPalettePtr = (LOGPALETTE *) logPalBuf;
-  logPalettePtr->palVersion = 0x300;
-  sysPal = (HPALETTE) GetStockObject (DEFAULT_PALETTE);
-  logPalettePtr->palNumEntries =
-    GetPaletteEntries (sysPal, 0, 256, logPalettePtr->palPalEntry);
-  
-  colormap = (Colormap) g_new (ColormapStruct, 1);
-  colormap->size = logPalettePtr->palNumEntries;
-  colormap->stale = TRUE;
-  colormap->palette = CreatePalette (logPalettePtr);
-  hdc = GetDC (NULL);
-  colormap->rc_palette = ((GetDeviceCaps (hdc, RASTERCAPS) & RC_PALETTE) != 0);
-  if (colormap->rc_palette)
-    {
-      colormap->sizepalette = GetDeviceCaps (hdc, SIZEPALETTE);
-      colormap->in_use = g_new (gboolean, colormap->sizepalette);
-      /* Mark static colors in use. */
-      for (i = 0; i < logPalettePtr->palNumEntries; i++)
-       colormap->in_use[i] = TRUE;
-      /* Mark rest not in use */
-      for (i = logPalettePtr->palNumEntries; i < colormap->sizepalette; i++)
-       colormap->in_use[i] = FALSE;
-    }
-  ReleaseDC (NULL, hdc);
-
-  return colormap;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * XFreeColormap --
- *
- *     Frees the resources associated with the given colormap.
- *
- * Results:
- *     None.
- *
- * Side effects:
- *     Deletes the palette associated with the colormap.  Note that
- *     the palette must not be selected into a device context when
- *     this occurs.
- *
- *----------------------------------------------------------------------
- */
-
-static void
-XFreeColormap(Colormap  colormap)
-{
-  if (!DeleteObject (colormap->palette))
-    {
-      g_error ("Unable to free colormap, palette is still selected.");
-    }
-  g_free (colormap);
-}
-
-typedef struct {
-    char *name;
-    unsigned char red;
-    unsigned char green;
-    unsigned char blue;
-} XColorEntry;
-
-static XColorEntry xColors[] = {
-    { "alice blue", 240, 248, 255 },
-    { "AliceBlue", 240, 248, 255 },
-    { "antique white", 250, 235, 215 },
-    { "AntiqueWhite", 250, 235, 215 },
-    { "AntiqueWhite1", 255, 239, 219 },
-    { "AntiqueWhite2", 238, 223, 204 },
-    { "AntiqueWhite3", 205, 192, 176 },
-    { "AntiqueWhite4", 139, 131, 120 },
-    { "aquamarine", 127, 255, 212 },
-    { "aquamarine1", 127, 255, 212 },
-    { "aquamarine2", 118, 238, 198 },
-    { "aquamarine3", 102, 205, 170 },
-    { "aquamarine4", 69, 139, 116 },
-    { "azure", 240, 255, 255 },
-    { "azure1", 240, 255, 255 },
-    { "azure2", 224, 238, 238 },
-    { "azure3", 193, 205, 205 },
-    { "azure4", 131, 139, 139 },
-    { "beige", 245, 245, 220 },
-    { "bisque", 255, 228, 196 },
-    { "bisque1", 255, 228, 196 },
-    { "bisque2", 238, 213, 183 },
-    { "bisque3", 205, 183, 158 },
-    { "bisque4", 139, 125, 107 },
-    { "black", 0, 0, 0 },
-    { "blanched almond", 255, 235, 205 },
-    { "BlanchedAlmond", 255, 235, 205 },
-    { "blue", 0, 0, 255 },
-    { "blue violet", 138, 43, 226 },
-    { "blue1", 0, 0, 255 },
-    { "blue2", 0, 0, 238 },
-    { "blue3", 0, 0, 205 },
-    { "blue4", 0, 0, 139 },
-    { "BlueViolet", 138, 43, 226 },
-    { "brown", 165, 42, 42 },
-    { "brown1", 255, 64, 64 },
-    { "brown2", 238, 59, 59 },
-    { "brown3", 205, 51, 51 },
-    { "brown4", 139, 35, 35 },
-    { "burlywood", 222, 184, 135 },
-    { "burlywood1", 255, 211, 155 },
-    { "burlywood2", 238, 197, 145 },
-    { "burlywood3", 205, 170, 125 },
-    { "burlywood4", 139, 115, 85 },
-    { "cadet blue", 95, 158, 160 },
-    { "CadetBlue", 95, 158, 160 },
-    { "CadetBlue1", 152, 245, 255 },
-    { "CadetBlue2", 142, 229, 238 },
-    { "CadetBlue3", 122, 197, 205 },
-    { "CadetBlue4", 83, 134, 139 },
-    { "chartreuse", 127, 255, 0 },
-    { "chartreuse1", 127, 255, 0 },
-    { "chartreuse2", 118, 238, 0 },
-    { "chartreuse3", 102, 205, 0 },
-    { "chartreuse4", 69, 139, 0 },
-    { "chocolate", 210, 105, 30 },
-    { "chocolate1", 255, 127, 36 },
-    { "chocolate2", 238, 118, 33 },
-    { "chocolate3", 205, 102, 29 },
-    { "chocolate4", 139, 69, 19 },
-    { "coral", 255, 127, 80 },
-    { "coral1", 255, 114, 86 },
-    { "coral2", 238, 106, 80 },
-    { "coral3", 205, 91, 69 },
-    { "coral4", 139, 62, 47 },
-    { "cornflower blue", 100, 149, 237 },
-    { "CornflowerBlue", 100, 149, 237 },
-    { "cornsilk", 255, 248, 220 },
-    { "cornsilk1", 255, 248, 220 },
-    { "cornsilk2", 238, 232, 205 },
-    { "cornsilk3", 205, 200, 177 },
-    { "cornsilk4", 139, 136, 120 },
-    { "cyan", 0, 255, 255 },
-    { "cyan1", 0, 255, 255 },
-    { "cyan2", 0, 238, 238 },
-    { "cyan3", 0, 205, 205 },
-    { "cyan4", 0, 139, 139 },
-    { "dark blue", 0, 0, 139 },
-    { "dark cyan", 0, 139, 139 },
-    { "dark goldenrod", 184, 134, 11 },
-    { "dark gray", 169, 169, 169 },
-    { "dark green", 0, 100, 0 },
-    { "dark grey", 169, 169, 169 },
-    { "dark khaki", 189, 183, 107 },
-    { "dark magenta", 139, 0, 139 },
-    { "dark olive green", 85, 107, 47 },
-    { "dark orange", 255, 140, 0 },
-    { "dark orchid", 153, 50, 204 },
-    { "dark red", 139, 0, 0 },
-    { "dark salmon", 233, 150, 122 },
-    { "dark sea green", 143, 188, 143 },
-    { "dark slate blue", 72, 61, 139 },
-    { "dark slate gray", 47, 79, 79 },
-    { "dark slate grey", 47, 79, 79 },
-    { "dark turquoise", 0, 206, 209 },
-    { "dark violet", 148, 0, 211 },
-    { "DarkBlue", 0, 0, 139 },
-    { "DarkCyan", 0, 139, 139 },
-    { "DarkGoldenrod", 184, 134, 11 },
-    { "DarkGoldenrod1", 255, 185, 15 },
-    { "DarkGoldenrod2", 238, 173, 14 },
-    { "DarkGoldenrod3", 205, 149, 12 },
-    { "DarkGoldenrod4", 139, 101, 8 },
-    { "DarkGray", 169, 169, 169 },
-    { "DarkGreen", 0, 100, 0 },
-    { "DarkGrey", 169, 169, 169 },
-    { "DarkKhaki", 189, 183, 107 },
-    { "DarkMagenta", 139, 0, 139 },
-    { "DarkOliveGreen", 85, 107, 47 },
-    { "DarkOliveGreen1", 202, 255, 112 },
-    { "DarkOliveGreen2", 188, 238, 104 },
-    { "DarkOliveGreen3", 162, 205, 90 },
-    { "DarkOliveGreen4", 110, 139, 61 },
-    { "DarkOrange", 255, 140, 0 },
-    { "DarkOrange1", 255, 127, 0 },
-    { "DarkOrange2", 238, 118, 0 },
-    { "DarkOrange3", 205, 102, 0 },
-    { "DarkOrange4", 139, 69, 0 },
-    { "DarkOrchid", 153, 50, 204 },
-    { "DarkOrchid1", 191, 62, 255 },
-    { "DarkOrchid2", 178, 58, 238 },
-    { "DarkOrchid3", 154, 50, 205 },
-    { "DarkOrchid4", 104, 34, 139 },
-    { "DarkRed", 139, 0, 0 },
-    { "DarkSalmon", 233, 150, 122 },
-    { "DarkSeaGreen", 143, 188, 143 },
-    { "DarkSeaGreen1", 193, 255, 193 },
-    { "DarkSeaGreen2", 180, 238, 180 },
-    { "DarkSeaGreen3", 155, 205, 155 },
-    { "DarkSeaGreen4", 105, 139, 105 },
-    { "DarkSlateBlue", 72, 61, 139 },
-    { "DarkSlateGray", 47, 79, 79 },
-    { "DarkSlateGray1", 151, 255, 255 },
-    { "DarkSlateGray2", 141, 238, 238 },
-    { "DarkSlateGray3", 121, 205, 205 },
-    { "DarkSlateGray4", 82, 139, 139 },
-    { "DarkSlateGrey", 47, 79, 79 },
-    { "DarkTurquoise", 0, 206, 209 },
-    { "DarkViolet", 148, 0, 211 },
-    { "deep pink", 255, 20, 147 },
-    { "deep sky blue", 0, 191, 255 },
-    { "DeepPink", 255, 20, 147 },
-    { "DeepPink1", 255, 20, 147 },
-    { "DeepPink2", 238, 18, 137 },
-    { "DeepPink3", 205, 16, 118 },
-    { "DeepPink4", 139, 10, 80 },
-    { "DeepSkyBlue", 0, 191, 255 },
-    { "DeepSkyBlue1", 0, 191, 255 },
-    { "DeepSkyBlue2", 0, 178, 238 },
-    { "DeepSkyBlue3", 0, 154, 205 },
-    { "DeepSkyBlue4", 0, 104, 139 },
-    { "dim gray", 105, 105, 105 },
-    { "dim grey", 105, 105, 105 },
-    { "DimGray", 105, 105, 105 },
-    { "DimGrey", 105, 105, 105 },
-    { "dodger blue", 30, 144, 255 },
-    { "DodgerBlue", 30, 144, 255 },
-    { "DodgerBlue1", 30, 144, 255 },
-    { "DodgerBlue2", 28, 134, 238 },
-    { "DodgerBlue3", 24, 116, 205 },
-    { "DodgerBlue4", 16, 78, 139 },
-    { "firebrick", 178, 34, 34 },
-    { "firebrick1", 255, 48, 48 },
-    { "firebrick2", 238, 44, 44 },
-    { "firebrick3", 205, 38, 38 },
-    { "firebrick4", 139, 26, 26 },
-    { "floral white", 255, 250, 240 },
-    { "FloralWhite", 255, 250, 240 },
-    { "forest green", 34, 139, 34 },
-    { "ForestGreen", 34, 139, 34 },
-    { "gainsboro", 220, 220, 220 },
-    { "ghost white", 248, 248, 255 },
-    { "GhostWhite", 248, 248, 255 },
-    { "gold", 255, 215, 0 },
-    { "gold1", 255, 215, 0 },
-    { "gold2", 238, 201, 0 },
-    { "gold3", 205, 173, 0 },
-    { "gold4", 139, 117, 0 },
-    { "goldenrod", 218, 165, 32 },
-    { "goldenrod1", 255, 193, 37 },
-    { "goldenrod2", 238, 180, 34 },
-    { "goldenrod3", 205, 155, 29 },
-    { "goldenrod4", 139, 105, 20 },
-    { "gray", 190, 190, 190 },
-    { "gray0", 0, 0, 0 },
-    { "gray1", 3, 3, 3 },
-    { "gray10", 26, 26, 26 },
-    { "gray100", 255, 255, 255 },
-    { "gray11", 28, 28, 28 },
-    { "gray12", 31, 31, 31 },
-    { "gray13", 33, 33, 33 },
-    { "gray14", 36, 36, 36 },
-    { "gray15", 38, 38, 38 },
-    { "gray16", 41, 41, 41 },
-    { "gray17", 43, 43, 43 },
-    { "gray18", 46, 46, 46 },
-    { "gray19", 48, 48, 48 },
-    { "gray2", 5, 5, 5 },
-    { "gray20", 51, 51, 51 },
-    { "gray21", 54, 54, 54 },
-    { "gray22", 56, 56, 56 },
-    { "gray23", 59, 59, 59 },
-    { "gray24", 61, 61, 61 },
-    { "gray25", 64, 64, 64 },
-    { "gray26", 66, 66, 66 },
-    { "gray27", 69, 69, 69 },
-    { "gray28", 71, 71, 71 },
-    { "gray29", 74, 74, 74 },
-    { "gray3", 8, 8, 8 },
-    { "gray30", 77, 77, 77 },
-    { "gray31", 79, 79, 79 },
-    { "gray32", 82, 82, 82 },
-    { "gray33", 84, 84, 84 },
-    { "gray34", 87, 87, 87 },
-    { "gray35", 89, 89, 89 },
-    { "gray36", 92, 92, 92 },
-    { "gray37", 94, 94, 94 },
-    { "gray38", 97, 97, 97 },
-    { "gray39", 99, 99, 99 },
-    { "gray4", 10, 10, 10 },
-    { "gray40", 102, 102, 102 },
-    { "gray41", 105, 105, 105 },
-    { "gray42", 107, 107, 107 },
-    { "gray43", 110, 110, 110 },
-    { "gray44", 112, 112, 112 },
-    { "gray45", 115, 115, 115 },
-    { "gray46", 117, 117, 117 },
-    { "gray47", 120, 120, 120 },
-    { "gray48", 122, 122, 122 },
-    { "gray49", 125, 125, 125 },
-    { "gray5", 13, 13, 13 },
-    { "gray50", 127, 127, 127 },
-    { "gray51", 130, 130, 130 },
-    { "gray52", 133, 133, 133 },
-    { "gray53", 135, 135, 135 },
-    { "gray54", 138, 138, 138 },
-    { "gray55", 140, 140, 140 },
-    { "gray56", 143, 143, 143 },
-    { "gray57", 145, 145, 145 },
-    { "gray58", 148, 148, 148 },
-    { "gray59", 150, 150, 150 },
-    { "gray6", 15, 15, 15 },
-    { "gray60", 153, 153, 153 },
-    { "gray61", 156, 156, 156 },
-    { "gray62", 158, 158, 158 },
-    { "gray63", 161, 161, 161 },
-    { "gray64", 163, 163, 163 },
-    { "gray65", 166, 166, 166 },
-    { "gray66", 168, 168, 168 },
-    { "gray67", 171, 171, 171 },
-    { "gray68", 173, 173, 173 },
-    { "gray69", 176, 176, 176 },
-    { "gray7", 18, 18, 18 },
-    { "gray70", 179, 179, 179 },
-    { "gray71", 181, 181, 181 },
-    { "gray72", 184, 184, 184 },
-    { "gray73", 186, 186, 186 },
-    { "gray74", 189, 189, 189 },
-    { "gray75", 191, 191, 191 },
-    { "gray76", 194, 194, 194 },
-    { "gray77", 196, 196, 196 },
-    { "gray78", 199, 199, 199 },
-    { "gray79", 201, 201, 201 },
-    { "gray8", 20, 20, 20 },
-    { "gray80", 204, 204, 204 },
-    { "gray81", 207, 207, 207 },
-    { "gray82", 209, 209, 209 },
-    { "gray83", 212, 212, 212 },
-    { "gray84", 214, 214, 214 },
-    { "gray85", 217, 217, 217 },
-    { "gray86", 219, 219, 219 },
-    { "gray87", 222, 222, 222 },
-    { "gray88", 224, 224, 224 },
-    { "gray89", 227, 227, 227 },
-    { "gray9", 23, 23, 23 },
-    { "gray90", 229, 229, 229 },
-    { "gray91", 232, 232, 232 },
-    { "gray92", 235, 235, 235 },
-    { "gray93", 237, 237, 237 },
-    { "gray94", 240, 240, 240 },
-    { "gray95", 242, 242, 242 },
-    { "gray96", 245, 245, 245 },
-    { "gray97", 247, 247, 247 },
-    { "gray98", 250, 250, 250 },
-    { "gray99", 252, 252, 252 },
-    { "green", 0, 255, 0 },
-    { "green yellow", 173, 255, 47 },
-    { "green1", 0, 255, 0 },
-    { "green2", 0, 238, 0 },
-    { "green3", 0, 205, 0 },
-    { "green4", 0, 139, 0 },
-    { "GreenYellow", 173, 255, 47 },
-    { "grey", 190, 190, 190 },
-    { "grey0", 0, 0, 0 },
-    { "grey1", 3, 3, 3 },
-    { "grey10", 26, 26, 26 },
-    { "grey100", 255, 255, 255 },
-    { "grey11", 28, 28, 28 },
-    { "grey12", 31, 31, 31 },
-    { "grey13", 33, 33, 33 },
-    { "grey14", 36, 36, 36 },
-    { "grey15", 38, 38, 38 },
-    { "grey16", 41, 41, 41 },
-    { "grey17", 43, 43, 43 },
-    { "grey18", 46, 46, 46 },
-    { "grey19", 48, 48, 48 },
-    { "grey2", 5, 5, 5 },
-    { "grey20", 51, 51, 51 },
-    { "grey21", 54, 54, 54 },
-    { "grey22", 56, 56, 56 },
-    { "grey23", 59, 59, 59 },
-    { "grey24", 61, 61, 61 },
-    { "grey25", 64, 64, 64 },
-    { "grey26", 66, 66, 66 },
-    { "grey27", 69, 69, 69 },
-    { "grey28", 71, 71, 71 },
-    { "grey29", 74, 74, 74 },
-    { "grey3", 8, 8, 8 },
-    { "grey30", 77, 77, 77 },
-    { "grey31", 79, 79, 79 },
-    { "grey32", 82, 82, 82 },
-    { "grey33", 84, 84, 84 },
-    { "grey34", 87, 87, 87 },
-    { "grey35", 89, 89, 89 },
-    { "grey36", 92, 92, 92 },
-    { "grey37", 94, 94, 94 },
-    { "grey38", 97, 97, 97 },
-    { "grey39", 99, 99, 99 },
-    { "grey4", 10, 10, 10 },
-    { "grey40", 102, 102, 102 },
-    { "grey41", 105, 105, 105 },
-    { "grey42", 107, 107, 107 },
-    { "grey43", 110, 110, 110 },
-    { "grey44", 112, 112, 112 },
-    { "grey45", 115, 115, 115 },
-    { "grey46", 117, 117, 117 },
-    { "grey47", 120, 120, 120 },
-    { "grey48", 122, 122, 122 },
-    { "grey49", 125, 125, 125 },
-    { "grey5", 13, 13, 13 },
-    { "grey50", 127, 127, 127 },
-    { "grey51", 130, 130, 130 },
-    { "grey52", 133, 133, 133 },
-    { "grey53", 135, 135, 135 },
-    { "grey54", 138, 138, 138 },
-    { "grey55", 140, 140, 140 },
-    { "grey56", 143, 143, 143 },
-    { "grey57", 145, 145, 145 },
-    { "grey58", 148, 148, 148 },
-    { "grey59", 150, 150, 150 },
-    { "grey6", 15, 15, 15 },
-    { "grey60", 153, 153, 153 },
-    { "grey61", 156, 156, 156 },
-    { "grey62", 158, 158, 158 },
-    { "grey63", 161, 161, 161 },
-    { "grey64", 163, 163, 163 },
-    { "grey65", 166, 166, 166 },
-    { "grey66", 168, 168, 168 },
-    { "grey67", 171, 171, 171 },
-    { "grey68", 173, 173, 173 },
-    { "grey69", 176, 176, 176 },
-    { "grey7", 18, 18, 18 },
-    { "grey70", 179, 179, 179 },
-    { "grey71", 181, 181, 181 },
-    { "grey72", 184, 184, 184 },
-    { "grey73", 186, 186, 186 },
-    { "grey74", 189, 189, 189 },
-    { "grey75", 191, 191, 191 },
-    { "grey76", 194, 194, 194 },
-    { "grey77", 196, 196, 196 },
-    { "grey78", 199, 199, 199 },
-    { "grey79", 201, 201, 201 },
-    { "grey8", 20, 20, 20 },
-    { "grey80", 204, 204, 204 },
-    { "grey81", 207, 207, 207 },
-    { "grey82", 209, 209, 209 },
-    { "grey83", 212, 212, 212 },
-    { "grey84", 214, 214, 214 },
-    { "grey85", 217, 217, 217 },
-    { "grey86", 219, 219, 219 },
-    { "grey87", 222, 222, 222 },
-    { "grey88", 224, 224, 224 },
-    { "grey89", 227, 227, 227 },
-    { "grey9", 23, 23, 23 },
-    { "grey90", 229, 229, 229 },
-    { "grey91", 232, 232, 232 },
-    { "grey92", 235, 235, 235 },
-    { "grey93", 237, 237, 237 },
-    { "grey94", 240, 240, 240 },
-    { "grey95", 242, 242, 242 },
-    { "grey96", 245, 245, 245 },
-    { "grey97", 247, 247, 247 },
-    { "grey98", 250, 250, 250 },
-    { "grey99", 252, 252, 252 },
-    { "honeydew", 240, 255, 240 },
-    { "honeydew1", 240, 255, 240 },
-    { "honeydew2", 224, 238, 224 },
-    { "honeydew3", 193, 205, 193 },
-    { "honeydew4", 131, 139, 131 },
-    { "hot pink", 255, 105, 180 },
-    { "HotPink", 255, 105, 180 },
-    { "HotPink1", 255, 110, 180 },
-    { "HotPink2", 238, 106, 167 },
-    { "HotPink3", 205, 96, 144 },
-    { "HotPink4", 139, 58, 98 },
-    { "indian red", 205, 92, 92 },
-    { "IndianRed", 205, 92, 92 },
-    { "IndianRed1", 255, 106, 106 },
-    { "IndianRed2", 238, 99, 99 },
-    { "IndianRed3", 205, 85, 85 },
-    { "IndianRed4", 139, 58, 58 },
-    { "ivory", 255, 255, 240 },
-    { "ivory1", 255, 255, 240 },
-    { "ivory2", 238, 238, 224 },
-    { "ivory3", 205, 205, 193 },
-    { "ivory4", 139, 139, 131 },
-    { "khaki", 240, 230, 140 },
-    { "khaki1", 255, 246, 143 },
-    { "khaki2", 238, 230, 133 },
-    { "khaki3", 205, 198, 115 },
-    { "khaki4", 139, 134, 78 },
-    { "lavender", 230, 230, 250 },
-    { "lavender blush", 255, 240, 245 },
-    { "LavenderBlush", 255, 240, 245 },
-    { "LavenderBlush1", 255, 240, 245 },
-    { "LavenderBlush2", 238, 224, 229 },
-    { "LavenderBlush3", 205, 193, 197 },
-    { "LavenderBlush4", 139, 131, 134 },
-    { "lawn green", 124, 252, 0 },
-    { "LawnGreen", 124, 252, 0 },
-    { "lemon chiffon", 255, 250, 205 },
-    { "LemonChiffon", 255, 250, 205 },
-    { "LemonChiffon1", 255, 250, 205 },
-    { "LemonChiffon2", 238, 233, 191 },
-    { "LemonChiffon3", 205, 201, 165 },
-    { "LemonChiffon4", 139, 137, 112 },
-    { "light blue", 173, 216, 230 },
-    { "light coral", 240, 128, 128 },
-    { "light cyan", 224, 255, 255 },
-    { "light goldenrod", 238, 221, 130 },
-    { "light goldenrod yellow", 250, 250, 210 },
-    { "light gray", 211, 211, 211 },
-    { "light green", 144, 238, 144 },
-    { "light grey", 211, 211, 211 },
-    { "light pink", 255, 182, 193 },
-    { "light salmon", 255, 160, 122 },
-    { "light sea green", 32, 178, 170 },
-    { "light sky blue", 135, 206, 250 },
-    { "light slate blue", 132, 112, 255 },
-    { "light slate gray", 119, 136, 153 },
-    { "light slate grey", 119, 136, 153 },
-    { "light steel blue", 176, 196, 222 },
-    { "light yellow", 255, 255, 224 },
-    { "LightBlue", 173, 216, 230 },
-    { "LightBlue1", 191, 239, 255 },
-    { "LightBlue2", 178, 223, 238 },
-    { "LightBlue3", 154, 192, 205 },
-    { "LightBlue4", 104, 131, 139 },
-    { "LightCoral", 240, 128, 128 },
-    { "LightCyan", 224, 255, 255 },
-    { "LightCyan1", 224, 255, 255 },
-    { "LightCyan2", 209, 238, 238 },
-    { "LightCyan3", 180, 205, 205 },
-    { "LightCyan4", 122, 139, 139 },
-    { "LightGoldenrod", 238, 221, 130 },
-    { "LightGoldenrod1", 255, 236, 139 },
-    { "LightGoldenrod2", 238, 220, 130 },
-    { "LightGoldenrod3", 205, 190, 112 },
-    { "LightGoldenrod4", 139, 129, 76 },
-    { "LightGoldenrodYellow", 250, 250, 210 },
-    { "LightGray", 211, 211, 211 },
-    { "LightGreen", 144, 238, 144 },
-    { "LightGrey", 211, 211, 211 },
-    { "LightPink", 255, 182, 193 },
-    { "LightPink1", 255, 174, 185 },
-    { "LightPink2", 238, 162, 173 },
-    { "LightPink3", 205, 140, 149 },
-    { "LightPink4", 139, 95, 101 },
-    { "LightSalmon", 255, 160, 122 },
-    { "LightSalmon1", 255, 160, 122 },
-    { "LightSalmon2", 238, 149, 114 },
-    { "LightSalmon3", 205, 129, 98 },
-    { "LightSalmon4", 139, 87, 66 },
-    { "LightSeaGreen", 32, 178, 170 },
-    { "LightSkyBlue", 135, 206, 250 },
-    { "LightSkyBlue1", 176, 226, 255 },
-    { "LightSkyBlue2", 164, 211, 238 },
-    { "LightSkyBlue3", 141, 182, 205 },
-    { "LightSkyBlue4", 96, 123, 139 },
-    { "LightSlateBlue", 132, 112, 255 },
-    { "LightSlateGray", 119, 136, 153 },
-    { "LightSlateGrey", 119, 136, 153 },
-    { "LightSteelBlue", 176, 196, 222 },
-    { "LightSteelBlue1", 202, 225, 255 },
-    { "LightSteelBlue2", 188, 210, 238 },
-    { "LightSteelBlue3", 162, 181, 205 },
-    { "LightSteelBlue4", 110, 123, 139 },
-    { "LightYellow", 255, 255, 224 },
-    { "LightYellow1", 255, 255, 224 },
-    { "LightYellow2", 238, 238, 209 },
-    { "LightYellow3", 205, 205, 180 },
-    { "LightYellow4", 139, 139, 122 },
-    { "lime green", 50, 205, 50 },
-    { "LimeGreen", 50, 205, 50 },
-    { "linen", 250, 240, 230 },
-    { "magenta", 255, 0, 255 },
-    { "magenta1", 255, 0, 255 },
-    { "magenta2", 238, 0, 238 },
-    { "magenta3", 205, 0, 205 },
-    { "magenta4", 139, 0, 139 },
-    { "maroon", 176, 48, 96 },
-    { "maroon1", 255, 52, 179 },
-    { "maroon2", 238, 48, 167 },
-    { "maroon3", 205, 41, 144 },
-    { "maroon4", 139, 28, 98 },
-    { "medium aquamarine", 102, 205, 170 },
-    { "medium blue", 0, 0, 205 },
-    { "medium orchid", 186, 85, 211 },
-    { "medium purple", 147, 112, 219 },
-    { "medium sea green", 60, 179, 113 },
-    { "medium slate blue", 123, 104, 238 },
-    { "medium spring green", 0, 250, 154 },
-    { "medium turquoise", 72, 209, 204 },
-    { "medium violet red", 199, 21, 133 },
-    { "MediumAquamarine", 102, 205, 170 },
-    { "MediumBlue", 0, 0, 205 },
-    { "MediumOrchid", 186, 85, 211 },
-    { "MediumOrchid1", 224, 102, 255 },
-    { "MediumOrchid2", 209, 95, 238 },
-    { "MediumOrchid3", 180, 82, 205 },
-    { "MediumOrchid4", 122, 55, 139 },
-    { "MediumPurple", 147, 112, 219 },
-    { "MediumPurple1", 171, 130, 255 },
-    { "MediumPurple2", 159, 121, 238 },
-    { "MediumPurple3", 137, 104, 205 },
-    { "MediumPurple4", 93, 71, 139 },
-    { "MediumSeaGreen", 60, 179, 113 },
-    { "MediumSlateBlue", 123, 104, 238 },
-    { "MediumSpringGreen", 0, 250, 154 },
-    { "MediumTurquoise", 72, 209, 204 },
-    { "MediumVioletRed", 199, 21, 133 },
-    { "midnight blue", 25, 25, 112 },
-    { "MidnightBlue", 25, 25, 112 },
-    { "mint cream", 245, 255, 250 },
-    { "MintCream", 245, 255, 250 },
-    { "misty rose", 255, 228, 225 },
-    { "MistyRose", 255, 228, 225 },
-    { "MistyRose1", 255, 228, 225 },
-    { "MistyRose2", 238, 213, 210 },
-    { "MistyRose3", 205, 183, 181 },
-    { "MistyRose4", 139, 125, 123 },
-    { "moccasin", 255, 228, 181 },
-    { "navajo white", 255, 222, 173 },
-    { "NavajoWhite", 255, 222, 173 },
-    { "NavajoWhite1", 255, 222, 173 },
-    { "NavajoWhite2", 238, 207, 161 },
-    { "NavajoWhite3", 205, 179, 139 },
-    { "NavajoWhite4", 139, 121, 94 },
-    { "navy", 0, 0, 128 },
-    { "navy blue", 0, 0, 128 },
-    { "NavyBlue", 0, 0, 128 },
-    { "old lace", 253, 245, 230 },
-    { "OldLace", 253, 245, 230 },
-    { "olive drab", 107, 142, 35 },
-    { "OliveDrab", 107, 142, 35 },
-    { "OliveDrab1", 192, 255, 62 },
-    { "OliveDrab2", 179, 238, 58 },
-    { "OliveDrab3", 154, 205, 50 },
-    { "OliveDrab4", 105, 139, 34 },
-    { "orange", 255, 165, 0 },
-    { "orange red", 255, 69, 0 },
-    { "orange1", 255, 165, 0 },
-    { "orange2", 238, 154, 0 },
-    { "orange3", 205, 133, 0 },
-    { "orange4", 139, 90, 0 },
-    { "OrangeRed", 255, 69, 0 },
-    { "OrangeRed1", 255, 69, 0 },
-    { "OrangeRed2", 238, 64, 0 },
-    { "OrangeRed3", 205, 55, 0 },
-    { "OrangeRed4", 139, 37, 0 },
-    { "orchid", 218, 112, 214 },
-    { "orchid1", 255, 131, 250 },
-    { "orchid2", 238, 122, 233 },
-    { "orchid3", 205, 105, 201 },
-    { "orchid4", 139, 71, 137 },
-    { "pale goldenrod", 238, 232, 170 },
-    { "pale green", 152, 251, 152 },
-    { "pale turquoise", 175, 238, 238 },
-    { "pale violet red", 219, 112, 147 },
-    { "PaleGoldenrod", 238, 232, 170 },
-    { "PaleGreen", 152, 251, 152 },
-    { "PaleGreen1", 154, 255, 154 },
-    { "PaleGreen2", 144, 238, 144 },
-    { "PaleGreen3", 124, 205, 124 },
-    { "PaleGreen4", 84, 139, 84 },
-    { "PaleTurquoise", 175, 238, 238 },
-    { "PaleTurquoise1", 187, 255, 255 },
-    { "PaleTurquoise2", 174, 238, 238 },
-    { "PaleTurquoise3", 150, 205, 205 },
-    { "PaleTurquoise4", 102, 139, 139 },
-    { "PaleVioletRed", 219, 112, 147 },
-    { "PaleVioletRed1", 255, 130, 171 },
-    { "PaleVioletRed2", 238, 121, 159 },
-    { "PaleVioletRed3", 205, 104, 137 },
-    { "PaleVioletRed4", 139, 71, 93 },
-    { "papaya whip", 255, 239, 213 },
-    { "PapayaWhip", 255, 239, 213 },
-    { "peach puff", 255, 218, 185 },
-    { "PeachPuff", 255, 218, 185 },
-    { "PeachPuff1", 255, 218, 185 },
-    { "PeachPuff2", 238, 203, 173 },
-    { "PeachPuff3", 205, 175, 149 },
-    { "PeachPuff4", 139, 119, 101 },
-    { "peru", 205, 133, 63 },
-    { "pink", 255, 192, 203 },
-    { "pink1", 255, 181, 197 },
-    { "pink2", 238, 169, 184 },
-    { "pink3", 205, 145, 158 },
-    { "pink4", 139, 99, 108 },
-    { "plum", 221, 160, 221 },
-    { "plum1", 255, 187, 255 },
-    { "plum2", 238, 174, 238 },
-    { "plum3", 205, 150, 205 },
-    { "plum4", 139, 102, 139 },
-    { "powder blue", 176, 224, 230 },
-    { "PowderBlue", 176, 224, 230 },
-    { "purple", 160, 32, 240 },
-    { "purple1", 155, 48, 255 },
-    { "purple2", 145, 44, 238 },
-    { "purple3", 125, 38, 205 },
-    { "purple4", 85, 26, 139 },
-    { "red", 255, 0, 0 },
-    { "red1", 255, 0, 0 },
-    { "red2", 238, 0, 0 },
-    { "red3", 205, 0, 0 },
-    { "red4", 139, 0, 0 },
-    { "rosy brown", 188, 143, 143 },
-    { "RosyBrown", 188, 143, 143 },
-    { "RosyBrown1", 255, 193, 193 },
-    { "RosyBrown2", 238, 180, 180 },
-    { "RosyBrown3", 205, 155, 155 },
-    { "RosyBrown4", 139, 105, 105 },
-    { "royal blue", 65, 105, 225 },
-    { "RoyalBlue", 65, 105, 225 },
-    { "RoyalBlue1", 72, 118, 255 },
-    { "RoyalBlue2", 67, 110, 238 },
-    { "RoyalBlue3", 58, 95, 205 },
-    { "RoyalBlue4", 39, 64, 139 },
-    { "saddle brown", 139, 69, 19 },
-    { "SaddleBrown", 139, 69, 19 },
-    { "salmon", 250, 128, 114 },
-    { "salmon1", 255, 140, 105 },
-    { "salmon2", 238, 130, 98 },
-    { "salmon3", 205, 112, 84 },
-    { "salmon4", 139, 76, 57 },
-    { "sandy brown", 244, 164, 96 },
-    { "SandyBrown", 244, 164, 96 },
-    { "sea green", 46, 139, 87 },
-    { "SeaGreen", 46, 139, 87 },
-    { "SeaGreen1", 84, 255, 159 },
-    { "SeaGreen2", 78, 238, 148 },
-    { "SeaGreen3", 67, 205, 128 },
-    { "SeaGreen4", 46, 139, 87 },
-    { "seashell", 255, 245, 238 },
-    { "seashell1", 255, 245, 238 },
-    { "seashell2", 238, 229, 222 },
-    { "seashell3", 205, 197, 191 },
-    { "seashell4", 139, 134, 130 },
-    { "sienna", 160, 82, 45 },
-    { "sienna1", 255, 130, 71 },
-    { "sienna2", 238, 121, 66 },
-    { "sienna3", 205, 104, 57 },
-    { "sienna4", 139, 71, 38 },
-    { "sky blue", 135, 206, 235 },
-    { "SkyBlue", 135, 206, 235 },
-    { "SkyBlue1", 135, 206, 255 },
-    { "SkyBlue2", 126, 192, 238 },
-    { "SkyBlue3", 108, 166, 205 },
-    { "SkyBlue4", 74, 112, 139 },
-    { "slate blue", 106, 90, 205 },
-    { "slate gray", 112, 128, 144 },
-    { "slate grey", 112, 128, 144 },
-    { "SlateBlue", 106, 90, 205 },
-    { "SlateBlue1", 131, 111, 255 },
-    { "SlateBlue2", 122, 103, 238 },
-    { "SlateBlue3", 105, 89, 205 },
-    { "SlateBlue4", 71, 60, 139 },
-    { "SlateGray", 112, 128, 144 },
-    { "SlateGray1", 198, 226, 255 },
-    { "SlateGray2", 185, 211, 238 },
-    { "SlateGray3", 159, 182, 205 },
-    { "SlateGray4", 108, 123, 139 },
-    { "SlateGrey", 112, 128, 144 },
-    { "snow", 255, 250, 250 },
-    { "snow1", 255, 250, 250 },
-    { "snow2", 238, 233, 233 },
-    { "snow3", 205, 201, 201 },
-    { "snow4", 139, 137, 137 },
-    { "spring green", 0, 255, 127 },
-    { "SpringGreen", 0, 255, 127 },
-    { "SpringGreen1", 0, 255, 127 },
-    { "SpringGreen2", 0, 238, 118 },
-    { "SpringGreen3", 0, 205, 102 },
-    { "SpringGreen4", 0, 139, 69 },
-    { "steel blue", 70, 130, 180 },
-    { "SteelBlue", 70, 130, 180 },
-    { "SteelBlue1", 99, 184, 255 },
-    { "SteelBlue2", 92, 172, 238 },
-    { "SteelBlue3", 79, 148, 205 },
-    { "SteelBlue4", 54, 100, 139 },
-    { "tan", 210, 180, 140 },
-    { "tan1", 255, 165, 79 },
-    { "tan2", 238, 154, 73 },
-    { "tan3", 205, 133, 63 },
-    { "tan4", 139, 90, 43 },
-    { "thistle", 216, 191, 216 },
-    { "thistle1", 255, 225, 255 },
-    { "thistle2", 238, 210, 238 },
-    { "thistle3", 205, 181, 205 },
-    { "thistle4", 139, 123, 139 },
-    { "tomato", 255, 99, 71 },
-    { "tomato1", 255, 99, 71 },
-    { "tomato2", 238, 92, 66 },
-    { "tomato3", 205, 79, 57 },
-    { "tomato4", 139, 54, 38 },
-    { "turquoise", 64, 224, 208 },
-    { "turquoise1", 0, 245, 255 },
-    { "turquoise2", 0, 229, 238 },
-    { "turquoise3", 0, 197, 205 },
-    { "turquoise4", 0, 134, 139 },
-    { "violet", 238, 130, 238 },
-    { "violet red", 208, 32, 144 },
-    { "VioletRed", 208, 32, 144 },
-    { "VioletRed1", 255, 62, 150 },
-    { "VioletRed2", 238, 58, 140 },
-    { "VioletRed3", 205, 50, 120 },
-    { "VioletRed4", 139, 34, 82 },
-    { "wheat", 245, 222, 179 },
-    { "wheat1", 255, 231, 186 },
-    { "wheat2", 238, 216, 174 },
-    { "wheat3", 205, 186, 150 },
-    { "wheat4", 139, 126, 102 },
-    { "white", 255, 255, 255 },
-    { "white smoke", 245, 245, 245 },
-    { "WhiteSmoke", 245, 245, 245 },
-    { "yellow", 255, 255, 0 },
-    { "yellow green", 154, 205, 50 },
-    { "yellow1", 255, 255, 0 },
-    { "yellow2", 238, 238, 0 },
-    { "yellow3", 205, 205, 0 },
-    { "yellow4", 139, 139, 0 },
-    { "YellowGreen", 154, 205, 50 }
-};
-#define numXColors (sizeof (xColors) / sizeof (*xColors))
-/*
- *----------------------------------------------------------------------
- *
- * FindColor --
- *
- *     This routine finds the color entry that corresponds to the
- *     specified color.
- *
- * Results:
- *     Returns non-zero on success.  The RGB values of the XColor
- *     will be initialized to the proper values on success.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------
- */
-
-static int
-compare_xcolor_entries (const void *a, const void *b)
-{
-  return strcasecmp ((const char *) a, ((const XColorEntry *) b)->name);
-}
-
-static int
-FindColor(const char *name,
-         GdkColor   *colorPtr)
-{
-  XColorEntry *found;
-
-  found = bsearch (name, xColors, numXColors, sizeof (XColorEntry),
-                  compare_xcolor_entries);
-  if (found == NULL)
-    return 0;
-  
-  colorPtr->red = (found->red * 65535) / 255;
-  colorPtr->green = (found->green * 65535) / 255;
-  colorPtr->blue = (found->blue * 65535) / 255;
-  return 1;
-}
-
-/*
- *----------------------------------------------------------------------
- *
- * parse_color --
- *
- *     Partial implementation of X color name parsing interface.
- *
- * Results:
- *     Returns non-zero on success.
- *
- * Side effects:
- *     None.
- *
- *----------------------------------------------------------------------
- */
-
-gboolean
-parse_color(Colormap    map,
-           const char *spec,
-           GdkColor   *colorPtr)
-{
-    if (spec[0] == '#') {
-       char fmt[16];
-       int i, red, green, blue;
-
-       if ((i = strlen(spec+1))%3) {
-           return 0;
-       }
-       i /= 3;
-
-       sprintf(fmt, "%%%dx%%%dx%%%dx", i, i, i);
-       if (sscanf(spec+1, fmt, &red, &green, &blue) != 3) {
-           return 0;
-       }
-       if (i == 4)
-         {
-           colorPtr->red = red;
-           colorPtr->green = green;
-           colorPtr->blue = blue;
-         }
-       else if (i == 1)
-         {
-           colorPtr->red = (red * 65535) / 15;
-           colorPtr->green = (green * 65535) / 15;
-           colorPtr->blue = (blue * 65535) / 15;
-         }
-       else if (i == 2)
-         {
-           colorPtr->red = (red * 65535) / 255;
-           colorPtr->green = (green * 65535) / 255;
-           colorPtr->blue = (blue * 65535) / 255;
-         }
-       else /* if (i == 3) */
-         {
-           colorPtr->red = (red * 65535) / 4095;
-           colorPtr->green = (green * 65535) / 4095;
-           colorPtr->blue = (blue * 65535) / 4095;
-         }
-    } else {
-       if (!FindColor(spec, colorPtr)) {
-           return 0;
-       }
-    }
-    return 1;
-}
-
-/* End of code from Tk8.0 */
-
-static Colormap
-DefaultColormap ()
-{
-  static Colormap colormap;
-  gint i;
-
-  if (colormap)
-    return colormap;
-
-  colormap = create_colormap ( NULL, NULL, AllocNone);
-  return colormap;
-}
-
-\f
-GdkColormap*
-gdk_colormap_new (GdkVisual *visual,
-                 gint       private_cmap)
-{
-  GdkColormap *colormap;
-  GdkColormapPrivate *private;
-  Visual *xvisual;
-  int size;
-  unsigned int i;
-
-  g_return_val_if_fail (visual != NULL, NULL);
-
-  private = g_new (GdkColormapPrivate, 1);
-  colormap = (GdkColormap*) private;
-
-  private->visual = visual;
-  private->ref_count = 1;
-
-  private->hash = NULL;
-  private->last_sync_time = 0;
-  private->info = NULL;
-  
-  xvisual = ((GdkVisualPrivate*) visual)->xvisual;
-
-  colormap->size = visual->colormap_size;
-  colormap->colors = g_new (GdkColor, colormap->size);
-
-  switch (visual->type)
-    {
-    case GDK_VISUAL_GRAYSCALE:
-    case GDK_VISUAL_PSEUDO_COLOR:
-      private->info = g_new0 (GdkColorInfo, colormap->size);
-      
-      private->hash = g_hash_table_new ((GHashFunc) gdk_color_hash,
-                                       (GCompareFunc) gdk_color_equal);
-      
-      private->private_val = private_cmap;
-      private->xcolormap = create_colormap (gdk_root_window, xvisual,
-                                           (private_cmap) ? (AllocAll) : (AllocNone));
-
-      if (private_cmap)
-       {
-         PALETTEENTRY pal[256];
-         guint npal;
-
-         npal = GetPaletteEntries (private->xcolormap->palette, 0, colormap->size, pal);
-         for (i = 0; i < colormap->size; i++)
-           {
-             colormap->colors[i].pixel = i;
-             if (i >= npal)
-               {
-                 colormap->colors[i].red =
-                   colormap->colors[i].green =
-                   colormap->colors[i].blue = 0;
-               }
-             else
-               {
-                 colormap->colors[i].red = (pal[i].peRed * 65535) / 255;
-                 colormap->colors[i].green = (pal[i].peGreen * 65525) / 255;
-                 colormap->colors[i].blue = (pal[i].peBlue * 65535) / 255;
-               }
-           }
-         gdk_colormap_change (colormap, colormap->size);
-       }
-      break;
-
-    case GDK_VISUAL_STATIC_GRAY:
-    case GDK_VISUAL_STATIC_COLOR:
-    case GDK_VISUAL_TRUE_COLOR:
-      private->private_val = FALSE;
-      private->xcolormap = create_colormap (gdk_root_window,
-                                           xvisual, AllocNone);
-      break;
-    }
-
-  gdk_colormap_add (colormap);
-
-  return colormap;
-}
-
-static 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);
-
-  gdk_colormap_remove (colormap);
-  XFreeColormap (private->xcolormap);
-
-  if (private->hash)
-    g_hash_table_destroy (private->hash);
-  
-  g_free (private->info);
-  g_free (colormap->colors);
-  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);
-}
-
-#define MIN_SYNC_TIME 2
-
-GdkVisual *
-gdk_colormap_get_visual (GdkColormap *colormap)
-{
-  GdkColormapPrivate *private;
-
-  g_return_val_if_fail (colormap != NULL, NULL);
-  
-  private = (GdkColormapPrivate *)colormap;
-
-  return private->visual;
-}
-     
-void
-gdk_colormap_sync (GdkColormap *colormap,
-                  gboolean     force)
-{
-  time_t current_time;
-  GdkColormapPrivate *private = (GdkColormapPrivate *)colormap;
-  XColor *xpalette;
-  gint nlookup;
-  gint i;
-  
-  g_return_if_fail (colormap != NULL);
-
-  current_time = time (NULL);
-  if (!force && ((current_time - private->last_sync_time) < MIN_SYNC_TIME))
-    return;
-
-  private->last_sync_time = current_time;
-
-  nlookup = 0;
-  xpalette = g_new (XColor, colormap->size);
-  
-  nlookup = GetPaletteEntries (private->xcolormap->palette,
-                              0, colormap->size, xpalette);
-  
-  for (i = 0; i < nlookup; i++)
-    {
-      colormap->colors[i].pixel = i;
-      colormap->colors[i].red = (xpalette[i].peRed * 65535) / 255;
-      colormap->colors[i].green = (xpalette[i].peGreen * 65535) / 255;
-      colormap->colors[i].blue = (xpalette[i].peBlue * 65535) / 255;
-    }
-
-  for (  ; i < colormap->size; i++)
-    {
-      colormap->colors[i].pixel = i;
-      colormap->colors[i].red = 0;
-      colormap->colors[i].green = 0;
-      colormap->colors[i].blue = 0;
-    }
-
-  g_free (xpalette);
-}
-                  
-
-GdkColormap*
-gdk_colormap_get_system (void)
-{
-  static GdkColormap *colormap = NULL;
-  GdkColormapPrivate *private;
-  gint i;
-
-  if (!colormap)
-    {
-      private = g_new (GdkColormapPrivate, 1);
-      colormap = (GdkColormap*) private;
-
-      private->xcolormap = DefaultColormap ();
-      private->visual = gdk_visual_get_system ();
-      private->private_val = FALSE;
-      private->ref_count = 1;
-
-      private->hash = NULL;
-      private->last_sync_time = 0;
-      private->info = NULL;
-
-      colormap->colors = NULL;
-      colormap->size = private->visual->colormap_size;
-
-      if ((private->visual->type == GDK_VISUAL_GRAYSCALE) ||
-         (private->visual->type == GDK_VISUAL_PSEUDO_COLOR))
-       {
-         private->info = g_new0 (GdkColorInfo, colormap->size);
-         colormap->colors = g_new (GdkColor, colormap->size);
-         
-         private->hash = g_hash_table_new ((GHashFunc) gdk_color_hash,
-                                           (GCompareFunc) gdk_color_equal);
-
-         gdk_colormap_sync (colormap, TRUE);
-       }
-      gdk_colormap_add (colormap);
-    }
-
-  return colormap;
-}
-
-gint
-gdk_colormap_get_system_size (void)
-{
-  gint bitspixel;
-  
-  bitspixel = GetDeviceCaps (gdk_DC, BITSPIXEL);
-
-  if (bitspixel == 1)
-    return 2;
-  else if (bitspixel == 4)
-    return 16;
-  else if (bitspixel == 8)
-    return 256;
-  else if (bitspixel == 12)
-    return 32;
-  else if (bitspixel == 16)
-    return 64;
-  else /* if (bitspixel >= 24) */
-    return 256;
-}
-
-void
-gdk_colormap_change (GdkColormap *colormap,
-                    gint         ncolors)
-{
-  GdkColormapPrivate *private;
-  GdkVisual *visual;
-  XColor *palette;
-  gint shift;
-  int max_colors;
-  int size;
-  int i;
-
-  g_return_if_fail (colormap != NULL);
-
-  palette = g_new (XColor, ncolors);
-
-  private = (GdkColormapPrivate*) colormap;
-  switch (private->visual->type)
-    {
-    case GDK_VISUAL_GRAYSCALE:
-    case GDK_VISUAL_PSEUDO_COLOR:
-      for (i = 0; i < ncolors; i++)
-       {
-         palette[i].peRed = (colormap->colors[i].red >> 8);
-         palette[i].peGreen = (colormap->colors[i].green >> 8);
-         palette[i].peBlue = (colormap->colors[i].blue >> 8);
-         palette[i].peFlags = 0;
-       }
-
-      if (SetPaletteEntries (private->xcolormap->palette,
-                            0, ncolors, palette) == 0)
-       g_warning ("gdk_colormap_change: SetPaletteEntries failed");
-      private->xcolormap->stale = TRUE;
-      break;
-
-    default:
-      break;
-    }
-
-  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,
-                 gulong        *planes,
-                 gint           nplanes,
-                 gulong        *pixels,
-                 gint           npixels)
-{
-  GdkColormapPrivate *private;
-  gint return_val;
-  gint i;
-
-  g_return_val_if_fail (colormap != NULL, 0);
-
-  private = (GdkColormapPrivate*) colormap;
-
-  return_val = alloc_color_cells (private->xcolormap, contiguous,
-                                 planes, nplanes, pixels, npixels);
-
-  if (return_val)
-    {
-      for (i=0; i<npixels; i++)
-       {
-         private->info[pixels[i]].ref_count++;
-         private->info[pixels[i]].flags |= GDK_COLOR_WRITEABLE;
-       }
-    }
-
-  return return_val;
-}
-
-/* This is almost identical to gdk_colormap_free_colors.
- * Keep them in sync!
- */
-void
-gdk_colors_free (GdkColormap *colormap,
-                gulong      *in_pixels,
-                gint         in_npixels,
-                gulong       planes)
-{
-  GdkColormapPrivate *private;
-  gulong *pixels;
-  gint npixels = 0;
-  gint i;
-
-  g_return_if_fail (colormap != NULL);
-  g_return_if_fail (in_pixels != NULL);
-
-  private = (GdkColormapPrivate*) colormap;
-
-  if ((private->visual->type != GDK_VISUAL_PSEUDO_COLOR) &&
-      (private->visual->type != GDK_VISUAL_GRAYSCALE))
-    return;
-  
-  pixels = g_new (gulong, in_npixels);
-
-  for (i=0; i<in_npixels; i++)
-    {
-      gulong pixel = in_pixels[i];
-      
-      if (private->info[pixel].ref_count)
-       {
-         private->info[pixel].ref_count--;
-
-         if (private->info[pixel].ref_count == 0)
-           {
-             pixels[npixels++] = pixel;
-             if (!(private->info[pixel].flags & GDK_COLOR_WRITEABLE))
-               g_hash_table_remove (private->hash, &colormap->colors[in_pixels[i]]);
-             private->info[pixel].flags = 0;
-           }
-       }
-    }
-
-
-  if (npixels)
-    XFreeColors (private->xcolormap, pixels, npixels, planes);
-
-  g_free (pixels);
-}
-
-/*
- *--------------------------------------------------------------
- * 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);
-}
-
-gint
-gdk_color_white (GdkColormap *colormap,
-                GdkColor    *color)
-{
-  gint return_val;
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-
-  if (color)
-    {
-      color->red = 65535;
-      color->green = 65535;
-      color->blue = 65535;
-
-      return_val = gdk_color_alloc (colormap, color);
-    }
-  else
-    return_val = FALSE;
-
-  return return_val;
-}
-
-gint
-gdk_color_black (GdkColormap *colormap,
-                GdkColor    *color)
-{
-  gint return_val;
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-
-  if (color)
-    {
-      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)
-{
-  Colormap xcolormap;
-  XColor xcolor;
-  gboolean return_val;
-
-  g_return_val_if_fail (spec != NULL, FALSE);
-  g_return_val_if_fail (color != NULL, FALSE);
-
-  xcolormap = DefaultColormap ();
-
-  if (parse_color (xcolormap, spec, color))
-    return_val = TRUE;
-  else
-    return_val = FALSE;
-
-  return return_val;
-}
-
-/********************
- * Color allocation *
- ********************/
-
-/* Try to allocate a single color using alloc_color. If it succeeds,
- * cache the result in our colormap, and store in ret.
- */
-static gboolean 
-gdk_colormap_alloc1 (GdkColormap *colormap,
-                    GdkColor    *color,
-                    GdkColor    *ret)
-{
-  GdkColormapPrivate *private;
-  XColor xcolor;
-
-  private = (GdkColormapPrivate*) colormap;
-
-  xcolor.peRed = color->red >> 8;
-  xcolor.peGreen = color->green >> 8;
-  xcolor.peBlue = color->blue >> 8;
-
-  if (alloc_color (private->xcolormap, &xcolor, &ret->pixel))
-    {
-      ret->red = (xcolor.peRed * 65535) / 255;
-      ret->green = (xcolor.peGreen * 65535) / 255;;
-      ret->blue = (xcolor.peBlue * 65535) / 255;
-      
-      if ((guint) ret->pixel < colormap->size)
-       {
-         if (private->info[ret->pixel].ref_count) /* got a duplicate */
-           {
-             /* XXX */
-           }
-         else
-           {
-             colormap->colors[ret->pixel] = *color;
-             private->info[ret->pixel].ref_count = 1;
-
-             g_hash_table_insert (private->hash,
-                                  &colormap->colors[ret->pixel],
-                                  &colormap->colors[ret->pixel]);
-           }
-       }
-      return TRUE;
-    }
-  else
-    {
-      return FALSE;
-    }
-}
-
-static gint
-gdk_colormap_alloc_colors_writeable (GdkColormap *colormap,
-                                    GdkColor    *colors,
-                                    gint         ncolors,
-                                    gboolean     writeable,
-                                    gboolean     best_match,
-                                    gboolean    *success)
-{
-  GdkColormapPrivate *private;
-  gulong *pixels;
-  Status status;
-  gint i, index;
-
-  private = (GdkColormapPrivate*) colormap;
-
-  if (private->private_val)
-    {
-      index = 0;
-      for (i=0; i<ncolors; i++)
-       {
-         while ((index < colormap->size) && (private->info[index].ref_count != 0))
-           index++;
-         
-         if (index < colormap->size)
-           {
-             colors[i].pixel = index;
-             success[i] = TRUE;
-             private->info[index].ref_count++;
-             private->info[i].flags |= GDK_COLOR_WRITEABLE;
-           }
-         else
-           break;
-       }
-      return i;
-    }
-  else
-    {
-      pixels = g_new (gulong, ncolors);
-
-      /* Allocation of a writeable color cells */
-      status =  alloc_color_cells (private->xcolormap, FALSE, NULL,
-                                  0, pixels, ncolors);
-      if (status)
-       {
-         for (i=0; i<ncolors; i++)
-           {
-             colors[i].pixel = pixels[i];
-             private->info[pixels[i]].ref_count++;
-             private->info[pixels[i]].flags |= GDK_COLOR_WRITEABLE;
-           }
-       }
-      
-      g_free (pixels);
-
-      return status ? ncolors : 0; 
-    }
-}
-
-static gint
-gdk_colormap_alloc_colors_private (GdkColormap *colormap,
-                                  GdkColor    *colors,
-                                  gint         ncolors,
-                                  gboolean     writeable,
-                                  gboolean     best_match,
-                                  gboolean    *success)
-{
-  GdkColormapPrivate *private;
-  gint i, index;
-  XColor *store = g_new (XColor, ncolors);
-  gint nstore = 0;
-  gint nremaining = 0;
-  
-  private = (GdkColormapPrivate*) colormap;
-  index = -1;
-
-  /* First, store the colors we have room for */
-
-  index = 0;
-  for (i=0; i<ncolors; i++)
-    {
-      if (!success[i])
-       {
-         while ((index < colormap->size) && (private->info[index].ref_count != 0))
-           index++;
-
-         if (index < colormap->size)
-           {
-             store[nstore].peRed = colors[i].red >> 8;
-             store[nstore].peBlue = colors[i].blue >> 8;
-             store[nstore].peGreen = colors[i].green >> 8;
-             nstore++;
-
-             success[i] = TRUE;
-
-             colors[i].pixel = index;
-             private->info[index].ref_count++;
-           }
-         else
-           nremaining++;
-       }
-    }
-  
-  if (SetPaletteEntries (private->xcolormap->palette,
-                        0, nstore, store) == 0)
-    g_warning ("gdk_colormap_alloc_colors_private: SetPaletteEntries failed");
-  private->xcolormap->stale = TRUE;
-
-  g_free (store);
-
-  if (nremaining > 0 && best_match)
-    {
-      /* Get best matches for remaining colors */
-
-      gchar *available = g_new (gchar, colormap->size);
-      for (i = 0; i < colormap->size; i++)
-       available[i] = TRUE;
-
-      for (i=0; i<ncolors; i++)
-       {
-         if (!success[i])
-           {
-             index = gdk_colormap_match_color (colormap, 
-                                               &colors[i], 
-                                               available);
-             if (index != -1)
-               {
-                 colors[i] = colormap->colors[index];
-                 private->info[index].ref_count++;
-                 success[i] = TRUE;
-                 nremaining--;
-               }
-           }
-       }
-      g_free (available);
-    }
-
-  return (ncolors - nremaining);
-}
-
-static gint
-gdk_colormap_alloc_colors_shared (GdkColormap *colormap,
-                                 GdkColor    *colors,
-                                 gint         ncolors,
-                                 gboolean     writeable,
-                                 gboolean     best_match,
-                                 gboolean    *success)
-{
-  GdkColormapPrivate *private;
-  gint i, index;
-  gint nremaining = 0;
-  gint nfailed = 0;
-
-  private = (GdkColormapPrivate*) colormap;
-  index = -1;
-
-  for (i=0; i<ncolors; i++)
-    {
-      if (!success[i])
-       {
-         if (gdk_colormap_alloc1 (colormap, &colors[i], &colors[i]))
-           success[i] = TRUE;
-         else
-           nremaining++;
-       }
-    }
-
-
-  if (nremaining > 0 && best_match)
-    {
-      gchar *available = g_new (gchar, colormap->size);
-      for (i = 0; i < colormap->size; i++)
-       available[i] = ((private->info[i].ref_count == 0) ||
-                       !(private->info[i].flags && GDK_COLOR_WRITEABLE));
-      gdk_colormap_sync (colormap, FALSE);
-      
-      while (nremaining > 0)
-       {
-         for (i=0; i<ncolors; i++)
-           {
-             if (!success[i])
-               {
-                 index = gdk_colormap_match_color (colormap, &colors[i], available);
-                 if (index != -1)
-                   {
-                     if (private->info[index].ref_count)
-                       {
-                         private->info[index].ref_count++;
-                         colors[i] = colormap->colors[index];
-                         success[i] = TRUE;
-                         nremaining--;
-                       }
-                     else
-                       {
-                         if (gdk_colormap_alloc1 (colormap, 
-                                                  &colormap->colors[index],
-                                                  &colors[i]))
-                           {
-                             success[i] = TRUE;
-                             nremaining--;
-                             break;
-                           }
-                         else
-                           {
-                             available[index] = FALSE;
-                           }
-                       }
-                   }
-                 else
-                   {
-                     nfailed++;
-                     nremaining--;
-                     success[i] = 2; /* flag as permanent failure */
-                   }
-               }
-           }
-       }
-      g_free (available);
-    }
-
-  /* Change back the values we flagged as permanent failures */
-  if (nfailed > 0)
-    {
-      for (i=0; i<ncolors; i++)
-       if (success[i] == 2)
-         success[i] = FALSE;
-      nremaining = nfailed;
-    }
-  
-  return (ncolors - nremaining);
-}
-
-static gint
-gdk_colormap_alloc_colors_pseudocolor (GdkColormap *colormap,
-                                      GdkColor    *colors,
-                                      gint         ncolors,
-                                      gboolean     writeable,
-                                      gboolean     best_match,
-                                      gboolean    *success)
-{
-  GdkColormapPrivate *private;
-  GdkColor *lookup_color;
-  gint i;
-  gint nremaining = 0;
-
-  private = (GdkColormapPrivate*) colormap;
-
-  /* Check for an exact match among previously allocated colors */
-
-  for (i=0; i<ncolors; i++)
-    {
-      if (!success[i])
-       {
-         lookup_color = g_hash_table_lookup (private->hash, &colors[i]);
-         if (lookup_color)
-           {
-             private->info[lookup_color->pixel].ref_count++;
-             colors[i].pixel = lookup_color->pixel;
-             success[i] = TRUE;
-           }
-         else
-           nremaining++;
-       }
-    }
-
-  /* If that failed, we try to allocate a new color, or approxmiate
-   * with what we can get if best_match is TRUE.
-   */
-  if (nremaining > 0)
-    {
-      if (private->private_val)
-       return gdk_colormap_alloc_colors_private (colormap, colors, ncolors, writeable, best_match, success);
-      else
-       return gdk_colormap_alloc_colors_shared (colormap, colors, ncolors, writeable, best_match, success);
-    }
-  else
-    return 0;
-}
-
-gint
-gdk_colormap_alloc_colors (GdkColormap *colormap,
-                          GdkColor    *colors,
-                          gint         ncolors,
-                          gboolean     writeable,
-                          gboolean     best_match,
-                          gboolean    *success)
-{
-  GdkColormapPrivate *private;
-  GdkVisual *visual;
-  gint i;
-  gint nremaining = 0;
-  XColor xcolor;
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-  g_return_val_if_fail (colors != NULL, FALSE);
-
-  private = (GdkColormapPrivate*) colormap;
-
-  for (i=0; i<ncolors; i++)
-    {
-      success[i] = FALSE;
-    }
-
-  switch (private->visual->type)
-    {
-    case GDK_VISUAL_PSEUDO_COLOR:
-    case GDK_VISUAL_GRAYSCALE:
-      if (writeable)
-       return gdk_colormap_alloc_colors_writeable (colormap, colors, ncolors,
-                                                   writeable, best_match, success);
-      else
-       return gdk_colormap_alloc_colors_pseudocolor (colormap, colors, ncolors,
-                                                   writeable, best_match, success);
-      break;
-
-    case GDK_VISUAL_TRUE_COLOR:
-      visual = private->visual;
-
-      for (i=0; i<ncolors; i++)
-       {
-         colors[i].pixel = (((colors[i].red >> (16 - visual->red_prec)) << visual->red_shift) +
-                            ((colors[i].green >> (16 - visual->green_prec)) << visual->green_shift) +
-                            ((colors[i].blue >> (16 - visual->blue_prec)) << visual->blue_shift));
-         success[i] = TRUE;
-       }
-      break;
-
-    case GDK_VISUAL_STATIC_GRAY:
-    case GDK_VISUAL_STATIC_COLOR:
-      for (i=0; i<ncolors; i++)
-       {
-         xcolor.peRed = colors[i].red >> 8;
-         xcolor.peGreen = colors[i].green >> 8;
-         xcolor.peBlue = colors[i].blue >> 8;
-         if (alloc_color (private->xcolormap, &xcolor, &colors[i].pixel))
-           success[i] = TRUE;
-         else
-           nremaining++;
-       }
-      break;
-    }
-  return nremaining;
-}
-
-gboolean
-gdk_colormap_alloc_color (GdkColormap *colormap,
-                         GdkColor    *color,
-                         gboolean     writeable,
-                         gboolean     best_match)
-{
-  gboolean success;
-
-  GDK_NOTE (MISC, g_print ("gdk_colormap_alloc_color: (%.04x,%.04x,%.04x)",
-                          color->red, color->green, color->blue));
-
-  gdk_colormap_alloc_colors (colormap, color, 1, writeable, best_match,
-                            &success);
-  GDK_NOTE (MISC, g_print (" -> %.08x\n", color->pixel));
-
-  return success;
-}
-
-/* This is almost identical to gdk_colors_free.
- * Keep them in sync!
- */
-void
-gdk_colormap_free_colors (GdkColormap *colormap,
-                         GdkColor    *colors,
-                         gint         ncolors)
-{
-  GdkColormapPrivate *private;
-  gulong *pixels;
-  gint npixels = 0;
-  gint i;
-
-  g_return_if_fail (colormap != NULL);
-  g_return_if_fail (colors != NULL);
-
-  private = (GdkColormapPrivate*) colormap;
-
-  if ((private->visual->type != GDK_VISUAL_PSEUDO_COLOR) &&
-      (private->visual->type != GDK_VISUAL_GRAYSCALE))
-    return;
-
-  pixels = g_new (gulong, ncolors);
-
-  for (i=0; i<ncolors; i++)
-    {
-      gulong pixel = colors[i].pixel;
-      
-      if (private->info[pixel].ref_count)
-       {
-         private->info[pixel].ref_count--;
-
-         if (private->info[pixel].ref_count == 0)
-           {
-             pixels[npixels++] = pixel;
-             if (!(private->info[pixel].flags & GDK_COLOR_WRITEABLE))
-               g_hash_table_remove (private->hash, &colors[i]);
-             private->info[pixel].flags = 0;
-           }
-       }
-    }
-  if (npixels)
-    XFreeColors (private->xcolormap, pixels, npixels, 0);
-  g_free (pixels);
-}
-
-gboolean
-gdk_color_alloc (GdkColormap *colormap,
-                GdkColor    *color)
-{
-  gboolean success;
-
-  GDK_NOTE (MISC, g_print ("gdk_color_alloc: (%.04x,%.04x,%.04x)",
-                          color->red, color->green, color->blue));
-
-  gdk_colormap_alloc_colors (colormap, color, 1, FALSE, TRUE, &success);
-
-  GDK_NOTE (MISC, g_print (" -> %.08x\n", color->pixel));
-
-  return success;
-}
-
-gboolean
-gdk_color_change (GdkColormap *colormap,
-                 GdkColor    *color)
-{
-  GdkColormapPrivate *private;
-  XColor xcolor;
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-  g_return_val_if_fail (color != NULL, FALSE);
-
-  private = (GdkColormapPrivate*) colormap;
-
-  xcolor.peRed = color->red >> 8;
-  xcolor.peGreen = color->green >> 8;
-  xcolor.peBlue = color->blue >> 8;
-
-  if (SetPaletteEntries (private->xcolormap->palette,
-                        color->pixel, 1, &xcolor) == 0)
-    g_warning ("gdk_color_change: SetPaletteEntries failed");
-  private->xcolormap->stale = TRUE;
-
-  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));
-}
-
-static gint
-gdk_colormap_match_color (GdkColormap *cmap,
-                         GdkColor    *color,
-                         const gchar *available)
-{
-  GdkColor *colors;
-  guint sum, max;
-  gint rdiff, gdiff, bdiff;
-  gint i, index;
-
-  g_return_val_if_fail (cmap != NULL, 0);
-  g_return_val_if_fail (color != NULL, 0);
-
-  colors = cmap->colors;
-  max = 3 * (65536);
-  index = -1;
-
-  for (i = 0; i < cmap->size; i++)
-    {
-      if ((!available) || (available && available[i]))
-       {
-         rdiff = (color->red - colors[i].red);
-         gdiff = (color->green - colors[i].green);
-         bdiff = (color->blue - colors[i].blue);
-
-         sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
-
-         if (sum < max)
-           {
-             index = i;
-             max = sum;
-           }
-       }
-    }
-
-  return index;
-}
-
-GdkColormap*
-gdk_colormap_lookup (Colormap xcolormap)
-{
-  GdkColormap *cmap;
-
-  if (!colormap_hash)
-    return NULL;
-
-  cmap = g_hash_table_lookup (colormap_hash, &xcolormap);
-  return cmap;
-}
-
-static void
-gdk_colormap_add (GdkColormap *cmap)
-{
-  GdkColormapPrivate *private;
-
-  if (!colormap_hash)
-    colormap_hash = g_hash_table_new ((GHashFunc) gdk_colormap_hash,
-                                     (GCompareFunc) gdk_colormap_cmp);
-
-  private = (GdkColormapPrivate*) cmap;
-
-  g_hash_table_insert (colormap_hash, &private->xcolormap, cmap);
-}
-
-static void
-gdk_colormap_remove (GdkColormap *cmap)
-{
-  GdkColormapPrivate *private;
-
-  if (!colormap_hash)
-    colormap_hash = g_hash_table_new ((GHashFunc) gdk_colormap_hash,
-                                     (GCompareFunc) gdk_colormap_cmp);
-
-  private = (GdkColormapPrivate*) cmap;
-
-  g_hash_table_remove (colormap_hash, &private->xcolormap);
-}
-
-static guint
-gdk_colormap_hash (Colormap *cmap)
-{
-  return (guint) *cmap;
-}
-
-static gint
-gdk_colormap_cmp (Colormap *a,
-                 Colormap *b)
-{
-  return (*a == *b);
-}
-
-char *
-gdk_color_to_string (GdkColor *color)
-{
-  static char buf[100];
-
-  sprintf (buf, "(%.04x,%.04x,%.04x): %.06x",
-          color->red, color->green, color->blue, color->pixel);
-
-  return buf;
-}
diff --git a/gdk/win32/gdkcursor-win32.c b/gdk/win32/gdkcursor-win32.c
deleted file mode 100644 (file)
index 78623a2..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "config.h"
-
-#include "gdkcursor.h"
-#include "gdkprivate.h"
-
-static const struct { const char *name; int type; } cursors[] = {
-  { "x_cursor", 0 },
-  { "arrow", 2 },
-  { "based_arrow_down", 4 },
-  { "based_arrow_up", 6 },
-  { "boat", 8 },
-  { "bogosity", 10 },
-  { "bottom_left_corner", 12 },
-  { "bottom_right_corner", 14 },
-  { "bottom_side", 16 },
-  { "bottom_tee", 18 },
-  { "box_spiral", 20 },
-  { "center_ptr", 22 },
-  { "circle", 24 },
-  { "clock", 26 },
-  { "coffee_mug", 28 },
-  { "cross", 30 },
-  { "cross_reverse", 32 },
-  { "crosshair", 34 },
-  { "diamond_cross", 36 },
-  { "dot", 38 },
-  { "dotbox", 40 },
-  { "double_arrow", 42 },
-  { "draft_large", 44 },
-  { "draft_small", 46 },
-  { "draped_box", 48 },
-  { "exchange", 50 },
-  { "fleur", 52 },
-  { "gobbler", 54 },
-  { "gumby", 56 },
-  { "hand1", 58 },
-  { "hand2", 60 },
-  { "heart", 62 },
-  { "icon", 64 },
-  { "iron_cross", 66 },
-  { "left_ptr", 68 },
-  { "left_side", 70 },
-  { "left_tee", 72 },
-  { "leftbutton", 74 },
-  { "ll_angle", 76 },
-  { "lr_angle", 78 },
-  { "man", 80 },
-  { "middlebutton", 82 },
-  { "mouse", 84 },
-  { "pencil", 86 },
-  { "pirate", 88 },
-  { "plus", 90 },
-  { "question_arrow", 92 },
-  { "right_ptr", 94 },
-  { "right_side", 96 },
-  { "right_tee", 98 },
-  { "rightbutton", 100 },
-  { "rtl_logo", 102 },
-  { "sailboat", 104 },
-  { "sb_down_arrow", 106 },
-  { "sb_h_double_arrow", 108 },
-  { "sb_left_arrow", 110 },
-  { "sb_right_arrow", 112 },
-  { "sb_up_arrow", 114 },
-  { "sb_v_double_arrow", 116 },
-  { "shuttle", 118 },
-  { "sizing", 120 },
-  { "spider", 122 },
-  { "spraycan", 124 },
-  { "star", 126 },
-  { "target", 128 },
-  { "tcross", 130 },
-  { "top_left_arrow", 132 },
-  { "top_left_corner", 134 },
-  { "top_right_corner", 136 },
-  { "top_side", 138 },
-  { "top_tee", 140 },
-  { "trek", 142 },
-  { "ul_angle", 144 },
-  { "umbrella", 146 },
-  { "ur_angle", 148 },
-  { "watch", 150 },
-  { "xterm", 152 },
-  { NULL, 0 }
-};  
-
-GdkCursor*
-gdk_cursor_new (GdkCursorType cursor_type)
-{
-  GdkCursorPrivate *private;
-  GdkCursor *cursor;
-  HCURSOR xcursor;
-
-  int i;
-
-  for (i = 0; cursors[i].name != NULL && cursors[i].type != cursor_type; i++)
-    ;
-  if (cursors[i].name != NULL)
-    {
-      xcursor = LoadCursor (gdk_DLLInstance, cursors[i].name);
-      if (xcursor == NULL)
-       g_warning ("gdk_cursor_new: LoadCursor failed");
-      GDK_NOTE (MISC, g_print ("gdk_cursor_new: %#x %d\n",
-                              xcursor, cursor_type));
-    }
-  else
-    {
-      g_warning ("gdk_cursor_new: no cursor %d found",
-                cursor_type);
-      xcursor = NULL;
-    }
-
-  private = g_new (GdkCursorPrivate, 1);
-  private->xcursor = xcursor;
-  cursor = (GdkCursor*) private;
-  cursor->type = cursor_type;
-
-  return cursor;
-}
-
-GdkCursor*
-gdk_cursor_new_from_pixmap (GdkPixmap *source,
-                           GdkPixmap *mask,
-                           GdkColor  *fg,
-                           GdkColor  *bg,
-                           gint       x,
-                           gint       y)
-{
-  GdkCursorPrivate *private;
-  GdkCursor *cursor;
-  GdkDrawablePrivate *source_private, *mask_private;
-  GdkImage *source_image, *mask_image;
-  HCURSOR xcursor;
-  guchar *p, *q, *XORmask, *ANDmask;
-  gint width, height, cursor_width, cursor_height;
-  guchar residue;
-  gint ix, iy;
-  
-  g_return_val_if_fail (source != NULL, NULL);
-  g_return_val_if_fail (mask != NULL, NULL);
-
-  source_private = (GdkDrawablePrivate *) source;
-  mask_private   = (GdkDrawablePrivate *) mask;
-
-  g_return_val_if_fail (source_private->width == mask_private->width
-                       && source_private->height == mask_private->height,
-                       NULL);
-  width = source_private->width;
-  height = source_private->height;
-  cursor_width = GetSystemMetrics (SM_CXCURSOR);
-  cursor_height = GetSystemMetrics (SM_CYCURSOR);
-
-  g_return_val_if_fail (width <= cursor_width
-                       && height <= cursor_height, NULL);
-
-  residue = (1 << ((8-(width%8))%8)) - 1;
-
-  source_image = gdk_image_get (source, 0, 0, width, height);
-  mask_image = gdk_image_get (mask, 0, 0, width, height);
-
-  if (source_image->depth != 1 || mask_image->depth != 1)
-    {
-    gdk_image_destroy (source_image);
-    gdk_image_destroy (mask_image);
-    g_return_val_if_fail (source_image->depth == 1 && mask_image->depth == 1,
-                         NULL);
-    }
-
-  /* Such complex bit manipulation for this simple task, sigh.
-   * The X cursor and Windows cursor concepts are quite different.
-   * We assume here that we are always called with fg == black and
-   * bg == white.
-   */
-
-  /* First set masked-out source bits, as all source bits matter on Windoze.
-   * As we invert them below, they will be clear in the final XORmask.
-   */
-  for (iy = 0; iy < height; iy++)
-    {
-      p = (guchar *) source_image->mem + iy*source_image->bpl;
-      q = (guchar *) mask_image->mem + iy*mask_image->bpl;
-      
-      for (ix = 0; ix < ((width-1)/8+1); ix++)
-       *p++ |= ~(*q++);
-    }
-
-  /* XOR mask is initialized to zero */
-  XORmask = g_malloc0 (cursor_width/8 * cursor_height);
-
-  for (iy = 0; iy < height; iy++)
-    {
-      p = (guchar *) source_image->mem + iy*source_image->bpl;
-      q = XORmask + iy*cursor_width/8;
-
-      for (ix = 0; ix < ((width-1)/8+1); ix++)
-       *q++ = ~(*p++);
-      q[-1] &= ~residue;       /* Clear left-over bits */
-    }
-      
-  /* AND mask is initialized to ones */
-  ANDmask = g_malloc (cursor_width/8 * cursor_height);
-  memset (ANDmask, 0xFF, cursor_width/8 * cursor_height);
-
-  for (iy = 0; iy < height; iy++)
-    {
-      p = (guchar *) mask_image->mem + iy*mask_image->bpl;
-      q = ANDmask + iy*cursor_width/8;
-
-      for (ix = 0; ix < ((width-1)/8+1); ix++)
-       *q++ = ~(*p++);
-      q[-1] |= residue;        /* Set left-over bits */
-    }
-      
-  xcursor = CreateCursor (gdk_ProgInstance, x, y, cursor_width, cursor_height,
-                         ANDmask, XORmask);
-
-  GDK_NOTE (MISC, g_print ("gdk_cursor_new_from_pixmap: "
-                          "%#x (%dx%d) %#x (%dx%d) = %#x (%dx%d)\n",
-                          source_private->xwindow,
-                          source_private->width, source_private->height,
-                          mask_private->xwindow,
-                          mask_private->width, mask_private->height,
-                          xcursor, cursor_width, cursor_height));
-
-  g_free (XORmask);
-  g_free (ANDmask);
-
-  gdk_image_destroy (source_image);
-  gdk_image_destroy (mask_image);
-
-  private = g_new (GdkCursorPrivate, 1);
-  private->xcursor = xcursor;
-  cursor = (GdkCursor*) private;
-  cursor->type = GDK_CURSOR_IS_PIXMAP;
-
-  return cursor;
-}
-
-void
-gdk_cursor_destroy (GdkCursor *cursor)
-{
-  GdkCursorPrivate *private;
-
-  g_return_if_fail (cursor != NULL);
-  private = (GdkCursorPrivate *) cursor;
-
-  GDK_NOTE (MISC, g_print ("gdk_cursor_destroy: %#x\n",
-                          (cursor->type == GDK_CURSOR_IS_PIXMAP) ? private->xcursor : 0));
-
-  if (cursor->type == GDK_CURSOR_IS_PIXMAP)
-    if (!DestroyIcon (private->xcursor))
-      g_warning ("gdk_cursor_destroy: DestroyIcon failed");
-
-  g_free (private);
-}
diff --git a/gdk/win32/gdkcursor.c b/gdk/win32/gdkcursor.c
deleted file mode 100644 (file)
index 78623a2..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "config.h"
-
-#include "gdkcursor.h"
-#include "gdkprivate.h"
-
-static const struct { const char *name; int type; } cursors[] = {
-  { "x_cursor", 0 },
-  { "arrow", 2 },
-  { "based_arrow_down", 4 },
-  { "based_arrow_up", 6 },
-  { "boat", 8 },
-  { "bogosity", 10 },
-  { "bottom_left_corner", 12 },
-  { "bottom_right_corner", 14 },
-  { "bottom_side", 16 },
-  { "bottom_tee", 18 },
-  { "box_spiral", 20 },
-  { "center_ptr", 22 },
-  { "circle", 24 },
-  { "clock", 26 },
-  { "coffee_mug", 28 },
-  { "cross", 30 },
-  { "cross_reverse", 32 },
-  { "crosshair", 34 },
-  { "diamond_cross", 36 },
-  { "dot", 38 },
-  { "dotbox", 40 },
-  { "double_arrow", 42 },
-  { "draft_large", 44 },
-  { "draft_small", 46 },
-  { "draped_box", 48 },
-  { "exchange", 50 },
-  { "fleur", 52 },
-  { "gobbler", 54 },
-  { "gumby", 56 },
-  { "hand1", 58 },
-  { "hand2", 60 },
-  { "heart", 62 },
-  { "icon", 64 },
-  { "iron_cross", 66 },
-  { "left_ptr", 68 },
-  { "left_side", 70 },
-  { "left_tee", 72 },
-  { "leftbutton", 74 },
-  { "ll_angle", 76 },
-  { "lr_angle", 78 },
-  { "man", 80 },
-  { "middlebutton", 82 },
-  { "mouse", 84 },
-  { "pencil", 86 },
-  { "pirate", 88 },
-  { "plus", 90 },
-  { "question_arrow", 92 },
-  { "right_ptr", 94 },
-  { "right_side", 96 },
-  { "right_tee", 98 },
-  { "rightbutton", 100 },
-  { "rtl_logo", 102 },
-  { "sailboat", 104 },
-  { "sb_down_arrow", 106 },
-  { "sb_h_double_arrow", 108 },
-  { "sb_left_arrow", 110 },
-  { "sb_right_arrow", 112 },
-  { "sb_up_arrow", 114 },
-  { "sb_v_double_arrow", 116 },
-  { "shuttle", 118 },
-  { "sizing", 120 },
-  { "spider", 122 },
-  { "spraycan", 124 },
-  { "star", 126 },
-  { "target", 128 },
-  { "tcross", 130 },
-  { "top_left_arrow", 132 },
-  { "top_left_corner", 134 },
-  { "top_right_corner", 136 },
-  { "top_side", 138 },
-  { "top_tee", 140 },
-  { "trek", 142 },
-  { "ul_angle", 144 },
-  { "umbrella", 146 },
-  { "ur_angle", 148 },
-  { "watch", 150 },
-  { "xterm", 152 },
-  { NULL, 0 }
-};  
-
-GdkCursor*
-gdk_cursor_new (GdkCursorType cursor_type)
-{
-  GdkCursorPrivate *private;
-  GdkCursor *cursor;
-  HCURSOR xcursor;
-
-  int i;
-
-  for (i = 0; cursors[i].name != NULL && cursors[i].type != cursor_type; i++)
-    ;
-  if (cursors[i].name != NULL)
-    {
-      xcursor = LoadCursor (gdk_DLLInstance, cursors[i].name);
-      if (xcursor == NULL)
-       g_warning ("gdk_cursor_new: LoadCursor failed");
-      GDK_NOTE (MISC, g_print ("gdk_cursor_new: %#x %d\n",
-                              xcursor, cursor_type));
-    }
-  else
-    {
-      g_warning ("gdk_cursor_new: no cursor %d found",
-                cursor_type);
-      xcursor = NULL;
-    }
-
-  private = g_new (GdkCursorPrivate, 1);
-  private->xcursor = xcursor;
-  cursor = (GdkCursor*) private;
-  cursor->type = cursor_type;
-
-  return cursor;
-}
-
-GdkCursor*
-gdk_cursor_new_from_pixmap (GdkPixmap *source,
-                           GdkPixmap *mask,
-                           GdkColor  *fg,
-                           GdkColor  *bg,
-                           gint       x,
-                           gint       y)
-{
-  GdkCursorPrivate *private;
-  GdkCursor *cursor;
-  GdkDrawablePrivate *source_private, *mask_private;
-  GdkImage *source_image, *mask_image;
-  HCURSOR xcursor;
-  guchar *p, *q, *XORmask, *ANDmask;
-  gint width, height, cursor_width, cursor_height;
-  guchar residue;
-  gint ix, iy;
-  
-  g_return_val_if_fail (source != NULL, NULL);
-  g_return_val_if_fail (mask != NULL, NULL);
-
-  source_private = (GdkDrawablePrivate *) source;
-  mask_private   = (GdkDrawablePrivate *) mask;
-
-  g_return_val_if_fail (source_private->width == mask_private->width
-                       && source_private->height == mask_private->height,
-                       NULL);
-  width = source_private->width;
-  height = source_private->height;
-  cursor_width = GetSystemMetrics (SM_CXCURSOR);
-  cursor_height = GetSystemMetrics (SM_CYCURSOR);
-
-  g_return_val_if_fail (width <= cursor_width
-                       && height <= cursor_height, NULL);
-
-  residue = (1 << ((8-(width%8))%8)) - 1;
-
-  source_image = gdk_image_get (source, 0, 0, width, height);
-  mask_image = gdk_image_get (mask, 0, 0, width, height);
-
-  if (source_image->depth != 1 || mask_image->depth != 1)
-    {
-    gdk_image_destroy (source_image);
-    gdk_image_destroy (mask_image);
-    g_return_val_if_fail (source_image->depth == 1 && mask_image->depth == 1,
-                         NULL);
-    }
-
-  /* Such complex bit manipulation for this simple task, sigh.
-   * The X cursor and Windows cursor concepts are quite different.
-   * We assume here that we are always called with fg == black and
-   * bg == white.
-   */
-
-  /* First set masked-out source bits, as all source bits matter on Windoze.
-   * As we invert them below, they will be clear in the final XORmask.
-   */
-  for (iy = 0; iy < height; iy++)
-    {
-      p = (guchar *) source_image->mem + iy*source_image->bpl;
-      q = (guchar *) mask_image->mem + iy*mask_image->bpl;
-      
-      for (ix = 0; ix < ((width-1)/8+1); ix++)
-       *p++ |= ~(*q++);
-    }
-
-  /* XOR mask is initialized to zero */
-  XORmask = g_malloc0 (cursor_width/8 * cursor_height);
-
-  for (iy = 0; iy < height; iy++)
-    {
-      p = (guchar *) source_image->mem + iy*source_image->bpl;
-      q = XORmask + iy*cursor_width/8;
-
-      for (ix = 0; ix < ((width-1)/8+1); ix++)
-       *q++ = ~(*p++);
-      q[-1] &= ~residue;       /* Clear left-over bits */
-    }
-      
-  /* AND mask is initialized to ones */
-  ANDmask = g_malloc (cursor_width/8 * cursor_height);
-  memset (ANDmask, 0xFF, cursor_width/8 * cursor_height);
-
-  for (iy = 0; iy < height; iy++)
-    {
-      p = (guchar *) mask_image->mem + iy*mask_image->bpl;
-      q = ANDmask + iy*cursor_width/8;
-
-      for (ix = 0; ix < ((width-1)/8+1); ix++)
-       *q++ = ~(*p++);
-      q[-1] |= residue;        /* Set left-over bits */
-    }
-      
-  xcursor = CreateCursor (gdk_ProgInstance, x, y, cursor_width, cursor_height,
-                         ANDmask, XORmask);
-
-  GDK_NOTE (MISC, g_print ("gdk_cursor_new_from_pixmap: "
-                          "%#x (%dx%d) %#x (%dx%d) = %#x (%dx%d)\n",
-                          source_private->xwindow,
-                          source_private->width, source_private->height,
-                          mask_private->xwindow,
-                          mask_private->width, mask_private->height,
-                          xcursor, cursor_width, cursor_height));
-
-  g_free (XORmask);
-  g_free (ANDmask);
-
-  gdk_image_destroy (source_image);
-  gdk_image_destroy (mask_image);
-
-  private = g_new (GdkCursorPrivate, 1);
-  private->xcursor = xcursor;
-  cursor = (GdkCursor*) private;
-  cursor->type = GDK_CURSOR_IS_PIXMAP;
-
-  return cursor;
-}
-
-void
-gdk_cursor_destroy (GdkCursor *cursor)
-{
-  GdkCursorPrivate *private;
-
-  g_return_if_fail (cursor != NULL);
-  private = (GdkCursorPrivate *) cursor;
-
-  GDK_NOTE (MISC, g_print ("gdk_cursor_destroy: %#x\n",
-                          (cursor->type == GDK_CURSOR_IS_PIXMAP) ? private->xcursor : 0));
-
-  if (cursor->type == GDK_CURSOR_IS_PIXMAP)
-    if (!DestroyIcon (private->xcursor))
-      g_warning ("gdk_cursor_destroy: DestroyIcon failed");
-
-  g_free (private);
-}
diff --git a/gdk/win32/gdkdnd-win32.c b/gdk/win32/gdkdnd-win32.c
deleted file mode 100644 (file)
index da6da4b..0000000
+++ /dev/null
@@ -1,973 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1999 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1998-1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <string.h>
-
-/* #define OLE2_DND */
-
-#define INITGUID
-
-#include "gdkdnd.h"
-#include "gdkproperty.h"
-#include "gdkprivate.h"
-#include "gdkx.h"
-
-#ifdef OLE2_DND
-#include <ole2.h>
-#else
-#include <objbase.h>
-#endif
-
-#ifdef _MSC_VER                        /* These aren't in mingw32 */
-#include <shlobj.h>
-#include <shlguid.h>
-#endif
-
-#ifndef _MSC_VER
-static IID IID_IUnknown = {
-  0x00000000, 0x0000, 0x0000, { 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46 } };
-static IID IID_IDropSource = {
-  0x00000121, 0x0000, 0x0000, { 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46 } };
-static IID IID_IDropTarget = {
-  0x00000122, 0x0000, 0x0000, { 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46 } };
-#endif
-
-#include <gdk/gdk.h>
-
-typedef struct _GdkDragContextPrivate GdkDragContextPrivate;
-
-typedef enum {
-  GDK_DRAG_STATUS_DRAG,
-  GDK_DRAG_STATUS_MOTION_WAIT,
-  GDK_DRAG_STATUS_ACTION_WAIT,
-  GDK_DRAG_STATUS_DROP
-} GtkDragStatus;
-
-typedef enum {
-  GDK_DRAG_SOURCE,
-  GDK_DRAG_TARGET
-} GdkDragKind;
-
-#ifdef OLE2_DND
-
-#define PRINT_GUID(guid) \
-  g_print ("guid = %.08x-%.04x-%.04x-%.02x%.02x-%.02x%.02x%.02x%.02x%.02x%.02x", \
-          ((gulong *)  guid)[0], \
-          ((gushort *) guid)[2], \
-          ((gushort *) guid)[3], \
-          ((guchar *)  guid)[8], \
-          ((guchar *)  guid)[9], \
-          ((guchar *)  guid)[10], \
-          ((guchar *)  guid)[11], \
-          ((guchar *)  guid)[12], \
-          ((guchar *)  guid)[13], \
-          ((guchar *)  guid)[14], \
-          ((guchar *)  guid)[15]);
-
-
-#endif /* OLE2_DND */
-
-/* Structure that holds information about a drag in progress.
- * this is used on both source and destination sides.
- */
-struct _GdkDragContextPrivate {
-  GdkDragContext context;
-
-  guint   ref_count;
-
-  guint16 last_x;              /* Coordinates from last event */
-  guint16 last_y;
-  HWND  dest_xid;
-  guint drag_status;           /* Current status of drag */
-};
-
-GdkDragContext *current_dest_drag = NULL;
-
-/* Drag Contexts */
-
-static GList *contexts;
-
-GdkDragContext *
-gdk_drag_context_new        (void)
-{
-  GdkDragContextPrivate *result;
-
-  result = g_new0 (GdkDragContextPrivate, 1);
-
-  result->ref_count = 1;
-
-  contexts = g_list_prepend (contexts, result);
-
-  return (GdkDragContext *)result;
-}
-
-void
-gdk_drag_context_ref (GdkDragContext *context)
-{
-  g_return_if_fail (context != NULL);
-
-  ((GdkDragContextPrivate *)context)->ref_count++;
-}
-
-void
-gdk_drag_context_unref (GdkDragContext *context)
-{
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *)context;
-  
-  g_return_if_fail (context != NULL);
-
-  private->ref_count--;
-
-  GDK_NOTE (DND, g_print ("gdk_drag_context_unref: %d%s\n",
-                         private->ref_count,
-                         (private->ref_count == 0 ? " freeing" : "")));
-
-  if (private->ref_count == 0)
-    {
-      g_dataset_destroy (private);
-      
-      g_list_free (context->targets);
-
-      if (context->source_window)
-       gdk_window_unref (context->source_window);
-
-      if (context->dest_window)
-       gdk_window_unref (context->dest_window);
-
-      contexts = g_list_remove (contexts, private);
-      g_free (private);
-    }
-}
-
-#if 0
-
-static GdkDragContext *
-gdk_drag_context_find (gboolean is_source,
-                      HWND     source_xid,
-                      HWND     dest_xid)
-{
-  GList *tmp_list = contexts;
-  GdkDragContext *context;
-
-  while (tmp_list)
-    {
-      context = (GdkDragContext *)tmp_list->data;
-
-      if ((!context->is_source == !is_source) &&
-         ((source_xid == None) || (context->source_window &&
-           (GDK_WINDOW_XWINDOW (context->source_window) == source_xid))) &&
-         ((dest_xid == None) || (context->dest_window &&
-           (GDK_WINDOW_XWINDOW (context->dest_window) == dest_xid))))
-       return context;
-      
-      tmp_list = tmp_list->next;
-    }
-
-  return NULL;
-}
-
-#endif
-
-typedef struct {
-#ifdef OLE2_DND
-  IDropTarget idt;
-#endif
-  GdkDragContext *context;
-} target_drag_context;
-
-typedef struct {
-#ifdef OLE2_DND
-  IDropSource ids;
-#endif
-  GdkDragContext *context;
-} source_drag_context;
-
-#ifdef OLE2_DND
-
-static ULONG STDMETHODCALLTYPE
-m_add_ref_target (IDropTarget __RPC_FAR *This)
-{
-  target_drag_context *ctx = (target_drag_context *) This;
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
-
-  GDK_NOTE (DND, g_print ("m_add_ref_target\n"));
-  gdk_drag_context_ref (ctx->context);
-  
-  return private->ref_count;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_query_interface_target (IDropTarget __RPC_FAR *This,
-                         REFIID riid,
-                         void __RPC_FAR *__RPC_FAR *ppvObject)
-{
-  GDK_NOTE (DND, g_print ("m_query_interface_target\n"));
-
-  *ppvObject = NULL;
-
-  PRINT_GUID (riid);
-
-  if (IsEqualGUID (riid, &IID_IUnknown))
-    {
-      g_print ("...IUnknown\n");
-      m_add_ref_target (This);
-      *ppvObject = This;
-      return S_OK;
-    }
-  else if (IsEqualGUID (riid, &IID_IDropTarget))
-    {
-      g_print ("...IDropTarget\n");
-      m_add_ref_target (This);
-      *ppvObject = This;
-      return S_OK;
-    }
-  else
-    {
-      g_print ("...Huh?\n");
-      return E_NOINTERFACE;
-    }
-}
-
-static ULONG STDMETHODCALLTYPE
-m_release_target (IDropTarget __RPC_FAR *This)
-{
-  target_drag_context *ctx = (target_drag_context *) This;
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
-
-  GDK_NOTE (DND, g_print ("m_release_target\n"));
-  gdk_drag_context_unref (ctx->context);
-
-  if (private->ref_count == 1)
-    {
-      gdk_drag_context_unref (ctx->context);
-      return 0;
-    }
-  else
-    return private->ref_count - 1;
-}
-
-static HRESULT STDMETHODCALLTYPE 
-m_drag_enter (IDropTarget __RPC_FAR *This,
-             IDataObject __RPC_FAR *pDataObj,
-             DWORD grfKeyState,
-             POINTL pt,
-             DWORD __RPC_FAR *pdwEffect)
-{
-  GDK_NOTE (DND, g_print ("m_drag_enter\n"));
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_drag_over (IDropTarget __RPC_FAR *This,
-            DWORD grfKeyState,
-            POINTL pt,
-            DWORD __RPC_FAR *pdwEffect)
-{
-  GDK_NOTE (DND, g_print ("m_drag_over\n"));
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_drag_leave (IDropTarget __RPC_FAR *This)
-{
-  GDK_NOTE (DND, g_print ("m_drag_leave\n"));
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_drop (IDropTarget __RPC_FAR *This,
-       IDataObject __RPC_FAR *pDataObj,
-       DWORD grfKeyState,
-       POINTL pt,
-       DWORD __RPC_FAR *pdwEffect)
-{
-  GDK_NOTE (DND, g_print ("m_drop\n"));
-  return E_UNEXPECTED;
-}
-
-static ULONG STDMETHODCALLTYPE
-m_add_ref_source (IDropSource __RPC_FAR *This)
-{
-  source_drag_context *ctx = (source_drag_context *) This;
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
-
-  GDK_NOTE (DND, g_print ("m_add_ref_source\n"));
-  gdk_drag_context_ref (ctx->context);
-  
-  return private->ref_count;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_query_interface_source (IDropSource __RPC_FAR *This,
-                         REFIID riid,
-                         void __RPC_FAR *__RPC_FAR *ppvObject)
-{
-  GDK_NOTE (DND, g_print ("m_query_interface_source\n"));
-
-  *ppvObject = NULL;
-
-  PRINT_GUID (riid);
-  if (IsEqualGUID (riid, &IID_IUnknown))
-    {
-      g_print ("...IUnknown\n");
-      m_add_ref_source (This);
-      *ppvObject = This;
-      return S_OK;
-    }
-  else if (IsEqualGUID (riid, &IID_IDropSource))
-    {
-      g_print ("...IDropSource\n");
-      m_add_ref_source (This);
-      *ppvObject = This;
-      return S_OK;
-    }
-  else
-    {
-      g_print ("...Huh?\n");
-      return E_NOINTERFACE;
-    }
-}
-
-static ULONG STDMETHODCALLTYPE
-m_release_source (IDropSource __RPC_FAR *This)
-{
-  source_drag_context *ctx = (source_drag_context *) This;
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
-
-  GDK_NOTE (DND, g_print ("m_release_source\n"));
-  gdk_drag_context_unref (ctx->context);
-
-  if (private->ref_count == 1)
-    {
-      gdk_drag_context_unref (ctx->context);
-      return 0;
-    }
-  else
-    return private->ref_count - 1;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_query_continue_drag (IDropSource __RPC_FAR *This,
-                      BOOL fEscapePressed,
-                      DWORD grfKeyState)
-{
-  GDK_NOTE (DND, g_print ("m_query_continue_drag\n"));
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_give_feedback (IDropSource __RPC_FAR *This,
-                DWORD dwEffect)
-{
-  GDK_NOTE (DND, g_print ("m_give_feedback\n"));
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_query_interface_object (IDataObject __RPC_FAR *This,
-                         REFIID riid,
-                         void __RPC_FAR *__RPC_FAR *ppvObject)
-{
-  return E_UNEXPECTED;
-}
-
-static ULONG STDMETHODCALLTYPE
-m_add_ref_object (IDataObject __RPC_FAR *This)
-{
-  return E_UNEXPECTED;
-}
-
-static ULONG STDMETHODCALLTYPE
-m_release_object (IDataObject __RPC_FAR *This)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_get_data (IDataObject __RPC_FAR *This,
-           FORMATETC *pFormatEtc,
-           STGMEDIUM *pMedium)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_get_data_here (IDataObject __RPC_FAR *This,
-                FORMATETC *pFormatEtc,
-                STGMEDIUM *pMedium)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_query_get_data (IDataObject __RPC_FAR *This,
-                 FORMATETC *pFormatEtc)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_get_canonical_format_etc (IDataObject __RPC_FAR *This,
-                           FORMATETC *pFormatEtcIn,
-                           FORMATETC *pFormatEtcOut)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_set_data (IDataObject __RPC_FAR *This,
-           FORMATETC *pFormatEtc,
-           STGMEDIUM *pMedium,
-           BOOL fRelease)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_enum_format_etc (IDataObject __RPC_FAR *This,
-                  DWORD dwDirection,
-                  IEnumFORMATETC **ppEnumFormatEtc)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
- m_d_advise (IDataObject __RPC_FAR *This,
-            FORMATETC *pFormatetc,
-            DWORD advf,
-            IAdviseSink *pAdvSink,
-            DWORD *pdwConnection)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
- m_d_unadvise (IDataObject __RPC_FAR *This,
-              DWORD dwConnection)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_enum_d_advise (IDataObject __RPC_FAR *This,
-                IEnumSTATDATA **ppenumAdvise)
-{
-  return E_UNEXPECTED;
-}
-               
-static IDropTargetVtbl idt_vtbl = {
-  m_query_interface_target,
-  m_add_ref_target,
-  m_release_target,
-  m_drag_enter,
-  m_drag_over,
-  m_drag_leave,
-  m_drop
-};
-
-static IDropSourceVtbl ids_vtbl = {
-  m_query_interface_source,
-  m_add_ref_source,
-  m_release_source,
-  m_query_continue_drag,
-  m_give_feedback
-};
-
-static IDataObjectVtbl ido_vtbl = {
-  m_query_interface_object,
-  m_add_ref_object,
-  m_release_object,
-  m_get_data,
-  m_get_data_here,
-  m_query_get_data,
-  m_get_canonical_format_etc,
-  m_set_data,
-  m_enum_format_etc,
-  m_d_advise,
-  m_d_unadvise,
-  m_enum_d_advise
-};
-
-#endif /* OLE2_DND */
-
-static target_drag_context *
-target_context_new (void)
-{
-  target_drag_context *result;
-
-  result = g_new0 (target_drag_context, 1);
-
-#ifdef OLE2_DND
-  result->idt.lpVtbl = &idt_vtbl;
-#endif
-
-  result->context = gdk_drag_context_new ();
-
-  return result;
-}
-
-static source_drag_context *
-source_context_new (void)
-{
-  source_drag_context *result;
-
-  result = g_new0 (source_drag_context, 1);
-
-#ifdef OLE2_DND
-  result->ids.lpVtbl = &ids_vtbl;
-#endif
-
-  result->context = gdk_drag_context_new ();
-
-  return result;
-}
-
-#ifdef _MSC_VER
-
-/* From MS Knowledge Base article Q130698 */
-
-/* resolve_link() fills the filename and path buffer
- * with relevant information
- * hWnd         - calling app's window handle.
- *
- * lpszLinkName - name of the link file passed into the function.
- *
- * lpszPath     - the buffer that will receive the file pathname.
- */
-
-static HRESULT 
-resolve_link(HWND hWnd,
-            LPCTSTR lpszLinkName,
-            LPSTR lpszPath,
-            LPSTR lpszDescription)
-{
-  HRESULT hres;
-  IShellLink *psl;
-  WIN32_FIND_DATA wfd;
-
-  /* Assume Failure to start with: */
-  *lpszPath = 0;
-  if (lpszDescription)
-    *lpszDescription = 0;
-
-  /* Call CoCreateInstance to obtain the IShellLink interface
-   * pointer. This call fails if CoInitialize is not called, so it is
-   * assumed that CoInitialize has been called.
-   */
-
-  hres = CoCreateInstance (&CLSID_ShellLink,
-                          NULL,
-                          CLSCTX_INPROC_SERVER,
-                          &IID_IShellLink,
-                          (LPVOID *)&psl);
-  if (SUCCEEDED (hres))
-   {
-     IPersistFile *ppf;
-     
-     /* The IShellLink interface supports the IPersistFile
-      * interface. Get an interface pointer to it.
-      */
-     hres = psl->lpVtbl->QueryInterface (psl,
-                                        &IID_IPersistFile,
-                                        (LPVOID *) &ppf);
-     if (SUCCEEDED (hres))
-       {
-         WORD wsz[MAX_PATH];
-
-        /* Convert the given link name string to wide character string. */
-         MultiByteToWideChar (CP_ACP, 0,
-                             lpszLinkName,
-                             -1, wsz, MAX_PATH);
-        /* Load the file. */
-         hres = ppf->lpVtbl->Load (ppf, wsz, STGM_READ);
-         if (SUCCEEDED (hres))
-          {
-            /* Resolve the link by calling the Resolve()
-             * interface function.
-             */
-            hres = psl->lpVtbl->Resolve(psl,  hWnd,
-                                        SLR_ANY_MATCH |
-                                        SLR_NO_UI);
-            if (SUCCEEDED (hres))
-              {
-                hres = psl->lpVtbl->GetPath (psl, lpszPath,
-                                             MAX_PATH,
-                                             (WIN32_FIND_DATA*)&wfd,
-                                             0);
-
-                if (SUCCEEDED (hres) && lpszDescription != NULL)
-                  {
-                    hres = psl->lpVtbl->GetDescription (psl,
-                                                        lpszDescription,
-                                                        MAX_PATH );
-
-                    if (!SUCCEEDED (hres))
-                      return FALSE;
-                  }
-              }
-          }
-         ppf->lpVtbl->Release (ppf);
-       }
-     psl->lpVtbl->Release (psl);
-   }
-  return SUCCEEDED (hres);
-}
-
-#else
-
-#define resolve_link(hWnd, lpszLinkName, lpszPath, lpszDescription) FALSE
-
-#endif
-
-static GdkFilterReturn
-gdk_dropfiles_filter (GdkXEvent *xev,
-                     GdkEvent  *event,
-                     gpointer   data)
-{
-  GdkDragContext *context;
-  GdkDragContextPrivate *private;
-  static GdkAtom text_uri_list_atom = GDK_NONE;
-  GString *result;
-  MSG *msg = (MSG *) xev;
-  HANDLE hdrop;
-  POINT pt;
-  gint nfiles, i, k;
-  guchar fileName[MAX_PATH], linkedFile[MAX_PATH];
-  
-  if (text_uri_list_atom == GDK_NONE)
-    text_uri_list_atom = gdk_atom_intern ("text/uri-list", FALSE);
-
-  if (msg->message == WM_DROPFILES)
-    {
-      GDK_NOTE (DND, g_print ("WM_DROPFILES: %#x\n", msg->hwnd));
-
-      context = gdk_drag_context_new ();
-      private = (GdkDragContextPrivate *) context;
-      context->protocol = GDK_DRAG_PROTO_WIN32_DROPFILES;
-      context->is_source = FALSE;
-      context->source_window = (GdkWindow *) gdk_root_parent;
-      context->dest_window = event->any.window;
-      gdk_window_ref (context->dest_window);
-      /* WM_DROPFILES drops are always file names */
-      context->targets =
-       g_list_append (NULL, GUINT_TO_POINTER (text_uri_list_atom));
-      current_dest_drag = context;
-
-      event->dnd.type = GDK_DROP_START;
-      event->dnd.context = current_dest_drag;
-      gdk_drag_context_ref (current_dest_drag);
-      
-      hdrop = (HANDLE) msg->wParam;
-      DragQueryPoint (hdrop, &pt);
-      ClientToScreen (msg->hwnd, &pt);
-
-      event->dnd.x_root = pt.x;
-      event->dnd.y_root = pt.y;
-      event->dnd.time = msg->time;
-
-      nfiles = DragQueryFile (hdrop, 0xFFFFFFFF, NULL, 0);
-
-      result = g_string_new (NULL);
-      for (i = 0; i < nfiles; i++)
-       {
-         g_string_append (result, "file:");
-         DragQueryFile (hdrop, i, fileName, MAX_PATH);
-
-         /* Resolve shortcuts */
-         if (resolve_link (msg->hwnd, fileName, linkedFile, NULL))
-           {
-             g_string_append (result, linkedFile);
-             GDK_NOTE (DND, g_print ("...%s link to %s\n",
-                                     fileName, linkedFile));
-           }
-         else
-           {
-             g_string_append (result, fileName);
-             GDK_NOTE (DND, g_print ("...%s\n", fileName));
-           }
-         g_string_append (result, "\015\012");
-       }
-      gdk_sel_prop_store ((GdkWindow *) gdk_root_parent,
-                         text_uri_list_atom, 8, result->str, result->len + 1);
-
-      DragFinish (hdrop);
-      
-      return GDK_FILTER_TRANSLATE;
-    }
-  else
-    return GDK_FILTER_CONTINUE;
-}
-
-/*************************************************************
- ************************** Public API ***********************
- *************************************************************/
-
-void
-gdk_dnd_init (void)
-{
-  HRESULT hres;
-#ifdef OLE2_DND
-  hres = OleInitialize (NULL);
-
-  if (! SUCCEEDED (hres))
-    g_error ("OleInitialize failed");
-#endif
-}      
-
-void
-gdk_dnd_exit (void)
-{
-#ifdef OLE2_DND
-  OleUninitialize ();
-#endif
-}
-
-/* Source side */
-
-static void
-gdk_drag_do_leave (GdkDragContext *context, guint32 time)
-{
-  if (context->dest_window)
-    {
-      GDK_NOTE (DND, g_print ("gdk_drag_do_leave\n"));
-      gdk_window_unref (context->dest_window);
-      context->dest_window = NULL;
-    }
-}
-
-GdkDragContext * 
-gdk_drag_begin (GdkWindow     *window,
-               GList         *targets)
-{
-  GList *tmp_list;
-  source_drag_context *ctx;
-  
-  g_return_val_if_fail (window != NULL, NULL);
-
-  GDK_NOTE (DND, g_print ("gdk_drag_begin\n"));
-
-  ctx = source_context_new ();
-  ctx->context->is_source = TRUE;
-  ctx->context->source_window = window;
-  gdk_window_ref (window);
-
-  tmp_list = g_list_last (targets);
-  ctx->context->targets = NULL;
-  while (tmp_list)
-    {
-      ctx->context->targets = g_list_prepend (ctx->context->targets,
-                                             tmp_list->data);
-      tmp_list = tmp_list->prev;
-    }
-
-  ctx->context->actions = 0;
-
-#if 0
-  DoDragDrop (...);
-#endif
-  return ctx->context;
-}
-
-guint32
-gdk_drag_get_protocol (guint32          xid,
-                      GdkDragProtocol *protocol)
-{
-  /* This isn't used */
-  return 0;
-}
-
-void
-gdk_drag_find_window (GdkDragContext  *context,
-                     GdkWindow       *drag_window,
-                     gint             x_root,
-                     gint             y_root,
-                     GdkWindow      **dest_window,
-                     GdkDragProtocol *protocol)
-{
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *)context;
-  GdkDrawablePrivate *drag_window_private = (GdkDrawablePrivate*) drag_window;
-  HWND recipient;
-  POINT pt;
-
-  GDK_NOTE (DND, g_print ("gdk_drag_find_window: %#x +%d+%d\n",
-                         (drag_window ? drag_window_private->xwindow : 0),
-                         x_root, y_root));
-
-  pt.x = x_root;
-  pt.y = y_root;
-  recipient = WindowFromPoint (pt);
-  if (recipient == NULL)
-    *dest_window = NULL;
-  else
-    {
-      *dest_window = gdk_window_lookup (recipient);
-      if (*dest_window)
-       gdk_window_ref (*dest_window);
-      *protocol = GDK_DRAG_PROTO_WIN32_DROPFILES;
-    }
-}
-
-gboolean
-gdk_drag_motion (GdkDragContext *context,
-                GdkWindow      *dest_window,
-                GdkDragProtocol protocol,
-                gint            x_root, 
-                gint            y_root,
-                GdkDragAction   suggested_action,
-                GdkDragAction   possible_actions,
-                guint32         time)
-{
-  return FALSE;
-}
-
-void
-gdk_drag_drop (GdkDragContext *context,
-              guint32         time)
-{
-  g_return_if_fail (context != NULL);
-
-  g_warning ("gdk_drag_drop: not implemented\n");
-}
-
-void
-gdk_drag_abort (GdkDragContext *context,
-               guint32         time)
-{
-  g_return_if_fail (context != NULL);
-
-  gdk_drag_do_leave (context, time);
-}
-
-/* Destination side */
-
-void
-gdk_drag_status (GdkDragContext   *context,
-                GdkDragAction     action,
-                guint32           time)
-{
-  GDK_NOTE (DND, g_print ("gdk_drag_status\n"));
-}
-
-void 
-gdk_drop_reply (GdkDragContext   *context,
-               gboolean          ok,
-               guint32           time)
-{
-}
-
-void
-gdk_drop_finish (GdkDragContext   *context,
-                gboolean          success,
-                guint32           time)
-{
-}
-
-static GdkFilterReturn
-gdk_destroy_filter (GdkXEvent *xev,
-                   GdkEvent  *event,
-                   gpointer   data)
-{
-#ifdef OLE2_DND
-  MSG *msg = (MSG *) xev;
-
-  if (msg->message == WM_DESTROY)
-    {
-      IDropTarget *idtp = (IDropTarget *) data;
-
-      GDK_NOTE (DND, g_print ("gdk_destroy_filter: WM_DESTROY: %#x\n", msg->hwnd));
-      RevokeDragDrop (msg->hwnd);
-      CoLockObjectExternal (idtp, FALSE, TRUE);
-    }
-#endif
-  return GDK_FILTER_CONTINUE;
-}
-
-void
-gdk_window_register_dnd (GdkWindow      *window)
-{
-  GdkDrawablePrivate *private = (GdkDrawablePrivate *) window;
-#ifdef OLE2_DND
-  target_drag_context *context;
-  HRESULT hres;
-#endif
-
-  g_return_if_fail (window != NULL);
-
-  GDK_NOTE (DND, g_print ("gdk_window_register_dnd: %#x\n", private->xwindow));
-
-  /* We always claim to accept dropped files, but in fact we might not,
-   * of course. This function is called in such a way that it cannot know
-   * whether the window (widget) in question actually accepts files
-   * (in gtk, data of type text/uri-list) or not.
-   */
-  gdk_window_add_filter (window, gdk_dropfiles_filter, NULL);
-  DragAcceptFiles (private->xwindow, TRUE);
-
-#ifdef OLE2_DND
-  /* Register for OLE2 d&d */
-  context = target_context_new ();
-  hres = CoLockObjectExternal ((IUnknown *) &context->idt, TRUE, FALSE);
-  if (!SUCCEEDED (hres))
-    g_warning ("gdk_window_register_dnd: CoLockObjectExternal failed");
-  else
-    {
-      hres = RegisterDragDrop (private->xwindow, &context->idt);
-      if (hres == DRAGDROP_E_ALREADYREGISTERED)
-       {
-         g_print ("DRAGDROP_E_ALREADYREGISTERED\n");
-         CoLockObjectExternal ((IUnknown *) &context->idt, FALSE, FALSE);
-       }
-      else if (!SUCCEEDED (hres))
-       g_warning ("gdk_window_register_dnd: RegisterDragDrop failed");
-      else
-       {
-         gdk_window_add_filter (window, gdk_destroy_filter, &context->idt);
-       }
-    }
-#endif
-}
-
-/*************************************************************
- * gdk_drag_get_selection:
- *     Returns the selection atom for the current source window
- *   arguments:
- *
- *   results:
- *************************************************************/
-
-GdkAtom
-gdk_drag_get_selection (GdkDragContext *context)
-{
-  if (context->protocol == GDK_DRAG_PROTO_WIN32_DROPFILES)
-    return gdk_win32_dropfiles_atom;
-  else if (context->protocol == GDK_DRAG_PROTO_OLE2)
-    return gdk_ole2_dnd_atom;
-  else
-    return GDK_NONE;
-}
diff --git a/gdk/win32/gdkdnd.c b/gdk/win32/gdkdnd.c
deleted file mode 100644 (file)
index da6da4b..0000000
+++ /dev/null
@@ -1,973 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1999 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1998-1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <string.h>
-
-/* #define OLE2_DND */
-
-#define INITGUID
-
-#include "gdkdnd.h"
-#include "gdkproperty.h"
-#include "gdkprivate.h"
-#include "gdkx.h"
-
-#ifdef OLE2_DND
-#include <ole2.h>
-#else
-#include <objbase.h>
-#endif
-
-#ifdef _MSC_VER                        /* These aren't in mingw32 */
-#include <shlobj.h>
-#include <shlguid.h>
-#endif
-
-#ifndef _MSC_VER
-static IID IID_IUnknown = {
-  0x00000000, 0x0000, 0x0000, { 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46 } };
-static IID IID_IDropSource = {
-  0x00000121, 0x0000, 0x0000, { 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46 } };
-static IID IID_IDropTarget = {
-  0x00000122, 0x0000, 0x0000, { 0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46 } };
-#endif
-
-#include <gdk/gdk.h>
-
-typedef struct _GdkDragContextPrivate GdkDragContextPrivate;
-
-typedef enum {
-  GDK_DRAG_STATUS_DRAG,
-  GDK_DRAG_STATUS_MOTION_WAIT,
-  GDK_DRAG_STATUS_ACTION_WAIT,
-  GDK_DRAG_STATUS_DROP
-} GtkDragStatus;
-
-typedef enum {
-  GDK_DRAG_SOURCE,
-  GDK_DRAG_TARGET
-} GdkDragKind;
-
-#ifdef OLE2_DND
-
-#define PRINT_GUID(guid) \
-  g_print ("guid = %.08x-%.04x-%.04x-%.02x%.02x-%.02x%.02x%.02x%.02x%.02x%.02x", \
-          ((gulong *)  guid)[0], \
-          ((gushort *) guid)[2], \
-          ((gushort *) guid)[3], \
-          ((guchar *)  guid)[8], \
-          ((guchar *)  guid)[9], \
-          ((guchar *)  guid)[10], \
-          ((guchar *)  guid)[11], \
-          ((guchar *)  guid)[12], \
-          ((guchar *)  guid)[13], \
-          ((guchar *)  guid)[14], \
-          ((guchar *)  guid)[15]);
-
-
-#endif /* OLE2_DND */
-
-/* Structure that holds information about a drag in progress.
- * this is used on both source and destination sides.
- */
-struct _GdkDragContextPrivate {
-  GdkDragContext context;
-
-  guint   ref_count;
-
-  guint16 last_x;              /* Coordinates from last event */
-  guint16 last_y;
-  HWND  dest_xid;
-  guint drag_status;           /* Current status of drag */
-};
-
-GdkDragContext *current_dest_drag = NULL;
-
-/* Drag Contexts */
-
-static GList *contexts;
-
-GdkDragContext *
-gdk_drag_context_new        (void)
-{
-  GdkDragContextPrivate *result;
-
-  result = g_new0 (GdkDragContextPrivate, 1);
-
-  result->ref_count = 1;
-
-  contexts = g_list_prepend (contexts, result);
-
-  return (GdkDragContext *)result;
-}
-
-void
-gdk_drag_context_ref (GdkDragContext *context)
-{
-  g_return_if_fail (context != NULL);
-
-  ((GdkDragContextPrivate *)context)->ref_count++;
-}
-
-void
-gdk_drag_context_unref (GdkDragContext *context)
-{
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *)context;
-  
-  g_return_if_fail (context != NULL);
-
-  private->ref_count--;
-
-  GDK_NOTE (DND, g_print ("gdk_drag_context_unref: %d%s\n",
-                         private->ref_count,
-                         (private->ref_count == 0 ? " freeing" : "")));
-
-  if (private->ref_count == 0)
-    {
-      g_dataset_destroy (private);
-      
-      g_list_free (context->targets);
-
-      if (context->source_window)
-       gdk_window_unref (context->source_window);
-
-      if (context->dest_window)
-       gdk_window_unref (context->dest_window);
-
-      contexts = g_list_remove (contexts, private);
-      g_free (private);
-    }
-}
-
-#if 0
-
-static GdkDragContext *
-gdk_drag_context_find (gboolean is_source,
-                      HWND     source_xid,
-                      HWND     dest_xid)
-{
-  GList *tmp_list = contexts;
-  GdkDragContext *context;
-
-  while (tmp_list)
-    {
-      context = (GdkDragContext *)tmp_list->data;
-
-      if ((!context->is_source == !is_source) &&
-         ((source_xid == None) || (context->source_window &&
-           (GDK_WINDOW_XWINDOW (context->source_window) == source_xid))) &&
-         ((dest_xid == None) || (context->dest_window &&
-           (GDK_WINDOW_XWINDOW (context->dest_window) == dest_xid))))
-       return context;
-      
-      tmp_list = tmp_list->next;
-    }
-
-  return NULL;
-}
-
-#endif
-
-typedef struct {
-#ifdef OLE2_DND
-  IDropTarget idt;
-#endif
-  GdkDragContext *context;
-} target_drag_context;
-
-typedef struct {
-#ifdef OLE2_DND
-  IDropSource ids;
-#endif
-  GdkDragContext *context;
-} source_drag_context;
-
-#ifdef OLE2_DND
-
-static ULONG STDMETHODCALLTYPE
-m_add_ref_target (IDropTarget __RPC_FAR *This)
-{
-  target_drag_context *ctx = (target_drag_context *) This;
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
-
-  GDK_NOTE (DND, g_print ("m_add_ref_target\n"));
-  gdk_drag_context_ref (ctx->context);
-  
-  return private->ref_count;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_query_interface_target (IDropTarget __RPC_FAR *This,
-                         REFIID riid,
-                         void __RPC_FAR *__RPC_FAR *ppvObject)
-{
-  GDK_NOTE (DND, g_print ("m_query_interface_target\n"));
-
-  *ppvObject = NULL;
-
-  PRINT_GUID (riid);
-
-  if (IsEqualGUID (riid, &IID_IUnknown))
-    {
-      g_print ("...IUnknown\n");
-      m_add_ref_target (This);
-      *ppvObject = This;
-      return S_OK;
-    }
-  else if (IsEqualGUID (riid, &IID_IDropTarget))
-    {
-      g_print ("...IDropTarget\n");
-      m_add_ref_target (This);
-      *ppvObject = This;
-      return S_OK;
-    }
-  else
-    {
-      g_print ("...Huh?\n");
-      return E_NOINTERFACE;
-    }
-}
-
-static ULONG STDMETHODCALLTYPE
-m_release_target (IDropTarget __RPC_FAR *This)
-{
-  target_drag_context *ctx = (target_drag_context *) This;
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
-
-  GDK_NOTE (DND, g_print ("m_release_target\n"));
-  gdk_drag_context_unref (ctx->context);
-
-  if (private->ref_count == 1)
-    {
-      gdk_drag_context_unref (ctx->context);
-      return 0;
-    }
-  else
-    return private->ref_count - 1;
-}
-
-static HRESULT STDMETHODCALLTYPE 
-m_drag_enter (IDropTarget __RPC_FAR *This,
-             IDataObject __RPC_FAR *pDataObj,
-             DWORD grfKeyState,
-             POINTL pt,
-             DWORD __RPC_FAR *pdwEffect)
-{
-  GDK_NOTE (DND, g_print ("m_drag_enter\n"));
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_drag_over (IDropTarget __RPC_FAR *This,
-            DWORD grfKeyState,
-            POINTL pt,
-            DWORD __RPC_FAR *pdwEffect)
-{
-  GDK_NOTE (DND, g_print ("m_drag_over\n"));
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_drag_leave (IDropTarget __RPC_FAR *This)
-{
-  GDK_NOTE (DND, g_print ("m_drag_leave\n"));
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_drop (IDropTarget __RPC_FAR *This,
-       IDataObject __RPC_FAR *pDataObj,
-       DWORD grfKeyState,
-       POINTL pt,
-       DWORD __RPC_FAR *pdwEffect)
-{
-  GDK_NOTE (DND, g_print ("m_drop\n"));
-  return E_UNEXPECTED;
-}
-
-static ULONG STDMETHODCALLTYPE
-m_add_ref_source (IDropSource __RPC_FAR *This)
-{
-  source_drag_context *ctx = (source_drag_context *) This;
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
-
-  GDK_NOTE (DND, g_print ("m_add_ref_source\n"));
-  gdk_drag_context_ref (ctx->context);
-  
-  return private->ref_count;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_query_interface_source (IDropSource __RPC_FAR *This,
-                         REFIID riid,
-                         void __RPC_FAR *__RPC_FAR *ppvObject)
-{
-  GDK_NOTE (DND, g_print ("m_query_interface_source\n"));
-
-  *ppvObject = NULL;
-
-  PRINT_GUID (riid);
-  if (IsEqualGUID (riid, &IID_IUnknown))
-    {
-      g_print ("...IUnknown\n");
-      m_add_ref_source (This);
-      *ppvObject = This;
-      return S_OK;
-    }
-  else if (IsEqualGUID (riid, &IID_IDropSource))
-    {
-      g_print ("...IDropSource\n");
-      m_add_ref_source (This);
-      *ppvObject = This;
-      return S_OK;
-    }
-  else
-    {
-      g_print ("...Huh?\n");
-      return E_NOINTERFACE;
-    }
-}
-
-static ULONG STDMETHODCALLTYPE
-m_release_source (IDropSource __RPC_FAR *This)
-{
-  source_drag_context *ctx = (source_drag_context *) This;
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *) ctx->context;
-
-  GDK_NOTE (DND, g_print ("m_release_source\n"));
-  gdk_drag_context_unref (ctx->context);
-
-  if (private->ref_count == 1)
-    {
-      gdk_drag_context_unref (ctx->context);
-      return 0;
-    }
-  else
-    return private->ref_count - 1;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_query_continue_drag (IDropSource __RPC_FAR *This,
-                      BOOL fEscapePressed,
-                      DWORD grfKeyState)
-{
-  GDK_NOTE (DND, g_print ("m_query_continue_drag\n"));
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_give_feedback (IDropSource __RPC_FAR *This,
-                DWORD dwEffect)
-{
-  GDK_NOTE (DND, g_print ("m_give_feedback\n"));
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_query_interface_object (IDataObject __RPC_FAR *This,
-                         REFIID riid,
-                         void __RPC_FAR *__RPC_FAR *ppvObject)
-{
-  return E_UNEXPECTED;
-}
-
-static ULONG STDMETHODCALLTYPE
-m_add_ref_object (IDataObject __RPC_FAR *This)
-{
-  return E_UNEXPECTED;
-}
-
-static ULONG STDMETHODCALLTYPE
-m_release_object (IDataObject __RPC_FAR *This)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_get_data (IDataObject __RPC_FAR *This,
-           FORMATETC *pFormatEtc,
-           STGMEDIUM *pMedium)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_get_data_here (IDataObject __RPC_FAR *This,
-                FORMATETC *pFormatEtc,
-                STGMEDIUM *pMedium)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_query_get_data (IDataObject __RPC_FAR *This,
-                 FORMATETC *pFormatEtc)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_get_canonical_format_etc (IDataObject __RPC_FAR *This,
-                           FORMATETC *pFormatEtcIn,
-                           FORMATETC *pFormatEtcOut)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_set_data (IDataObject __RPC_FAR *This,
-           FORMATETC *pFormatEtc,
-           STGMEDIUM *pMedium,
-           BOOL fRelease)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_enum_format_etc (IDataObject __RPC_FAR *This,
-                  DWORD dwDirection,
-                  IEnumFORMATETC **ppEnumFormatEtc)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
- m_d_advise (IDataObject __RPC_FAR *This,
-            FORMATETC *pFormatetc,
-            DWORD advf,
-            IAdviseSink *pAdvSink,
-            DWORD *pdwConnection)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
- m_d_unadvise (IDataObject __RPC_FAR *This,
-              DWORD dwConnection)
-{
-  return E_UNEXPECTED;
-}
-
-static HRESULT STDMETHODCALLTYPE
-m_enum_d_advise (IDataObject __RPC_FAR *This,
-                IEnumSTATDATA **ppenumAdvise)
-{
-  return E_UNEXPECTED;
-}
-               
-static IDropTargetVtbl idt_vtbl = {
-  m_query_interface_target,
-  m_add_ref_target,
-  m_release_target,
-  m_drag_enter,
-  m_drag_over,
-  m_drag_leave,
-  m_drop
-};
-
-static IDropSourceVtbl ids_vtbl = {
-  m_query_interface_source,
-  m_add_ref_source,
-  m_release_source,
-  m_query_continue_drag,
-  m_give_feedback
-};
-
-static IDataObjectVtbl ido_vtbl = {
-  m_query_interface_object,
-  m_add_ref_object,
-  m_release_object,
-  m_get_data,
-  m_get_data_here,
-  m_query_get_data,
-  m_get_canonical_format_etc,
-  m_set_data,
-  m_enum_format_etc,
-  m_d_advise,
-  m_d_unadvise,
-  m_enum_d_advise
-};
-
-#endif /* OLE2_DND */
-
-static target_drag_context *
-target_context_new (void)
-{
-  target_drag_context *result;
-
-  result = g_new0 (target_drag_context, 1);
-
-#ifdef OLE2_DND
-  result->idt.lpVtbl = &idt_vtbl;
-#endif
-
-  result->context = gdk_drag_context_new ();
-
-  return result;
-}
-
-static source_drag_context *
-source_context_new (void)
-{
-  source_drag_context *result;
-
-  result = g_new0 (source_drag_context, 1);
-
-#ifdef OLE2_DND
-  result->ids.lpVtbl = &ids_vtbl;
-#endif
-
-  result->context = gdk_drag_context_new ();
-
-  return result;
-}
-
-#ifdef _MSC_VER
-
-/* From MS Knowledge Base article Q130698 */
-
-/* resolve_link() fills the filename and path buffer
- * with relevant information
- * hWnd         - calling app's window handle.
- *
- * lpszLinkName - name of the link file passed into the function.
- *
- * lpszPath     - the buffer that will receive the file pathname.
- */
-
-static HRESULT 
-resolve_link(HWND hWnd,
-            LPCTSTR lpszLinkName,
-            LPSTR lpszPath,
-            LPSTR lpszDescription)
-{
-  HRESULT hres;
-  IShellLink *psl;
-  WIN32_FIND_DATA wfd;
-
-  /* Assume Failure to start with: */
-  *lpszPath = 0;
-  if (lpszDescription)
-    *lpszDescription = 0;
-
-  /* Call CoCreateInstance to obtain the IShellLink interface
-   * pointer. This call fails if CoInitialize is not called, so it is
-   * assumed that CoInitialize has been called.
-   */
-
-  hres = CoCreateInstance (&CLSID_ShellLink,
-                          NULL,
-                          CLSCTX_INPROC_SERVER,
-                          &IID_IShellLink,
-                          (LPVOID *)&psl);
-  if (SUCCEEDED (hres))
-   {
-     IPersistFile *ppf;
-     
-     /* The IShellLink interface supports the IPersistFile
-      * interface. Get an interface pointer to it.
-      */
-     hres = psl->lpVtbl->QueryInterface (psl,
-                                        &IID_IPersistFile,
-                                        (LPVOID *) &ppf);
-     if (SUCCEEDED (hres))
-       {
-         WORD wsz[MAX_PATH];
-
-        /* Convert the given link name string to wide character string. */
-         MultiByteToWideChar (CP_ACP, 0,
-                             lpszLinkName,
-                             -1, wsz, MAX_PATH);
-        /* Load the file. */
-         hres = ppf->lpVtbl->Load (ppf, wsz, STGM_READ);
-         if (SUCCEEDED (hres))
-          {
-            /* Resolve the link by calling the Resolve()
-             * interface function.
-             */
-            hres = psl->lpVtbl->Resolve(psl,  hWnd,
-                                        SLR_ANY_MATCH |
-                                        SLR_NO_UI);
-            if (SUCCEEDED (hres))
-              {
-                hres = psl->lpVtbl->GetPath (psl, lpszPath,
-                                             MAX_PATH,
-                                             (WIN32_FIND_DATA*)&wfd,
-                                             0);
-
-                if (SUCCEEDED (hres) && lpszDescription != NULL)
-                  {
-                    hres = psl->lpVtbl->GetDescription (psl,
-                                                        lpszDescription,
-                                                        MAX_PATH );
-
-                    if (!SUCCEEDED (hres))
-                      return FALSE;
-                  }
-              }
-          }
-         ppf->lpVtbl->Release (ppf);
-       }
-     psl->lpVtbl->Release (psl);
-   }
-  return SUCCEEDED (hres);
-}
-
-#else
-
-#define resolve_link(hWnd, lpszLinkName, lpszPath, lpszDescription) FALSE
-
-#endif
-
-static GdkFilterReturn
-gdk_dropfiles_filter (GdkXEvent *xev,
-                     GdkEvent  *event,
-                     gpointer   data)
-{
-  GdkDragContext *context;
-  GdkDragContextPrivate *private;
-  static GdkAtom text_uri_list_atom = GDK_NONE;
-  GString *result;
-  MSG *msg = (MSG *) xev;
-  HANDLE hdrop;
-  POINT pt;
-  gint nfiles, i, k;
-  guchar fileName[MAX_PATH], linkedFile[MAX_PATH];
-  
-  if (text_uri_list_atom == GDK_NONE)
-    text_uri_list_atom = gdk_atom_intern ("text/uri-list", FALSE);
-
-  if (msg->message == WM_DROPFILES)
-    {
-      GDK_NOTE (DND, g_print ("WM_DROPFILES: %#x\n", msg->hwnd));
-
-      context = gdk_drag_context_new ();
-      private = (GdkDragContextPrivate *) context;
-      context->protocol = GDK_DRAG_PROTO_WIN32_DROPFILES;
-      context->is_source = FALSE;
-      context->source_window = (GdkWindow *) gdk_root_parent;
-      context->dest_window = event->any.window;
-      gdk_window_ref (context->dest_window);
-      /* WM_DROPFILES drops are always file names */
-      context->targets =
-       g_list_append (NULL, GUINT_TO_POINTER (text_uri_list_atom));
-      current_dest_drag = context;
-
-      event->dnd.type = GDK_DROP_START;
-      event->dnd.context = current_dest_drag;
-      gdk_drag_context_ref (current_dest_drag);
-      
-      hdrop = (HANDLE) msg->wParam;
-      DragQueryPoint (hdrop, &pt);
-      ClientToScreen (msg->hwnd, &pt);
-
-      event->dnd.x_root = pt.x;
-      event->dnd.y_root = pt.y;
-      event->dnd.time = msg->time;
-
-      nfiles = DragQueryFile (hdrop, 0xFFFFFFFF, NULL, 0);
-
-      result = g_string_new (NULL);
-      for (i = 0; i < nfiles; i++)
-       {
-         g_string_append (result, "file:");
-         DragQueryFile (hdrop, i, fileName, MAX_PATH);
-
-         /* Resolve shortcuts */
-         if (resolve_link (msg->hwnd, fileName, linkedFile, NULL))
-           {
-             g_string_append (result, linkedFile);
-             GDK_NOTE (DND, g_print ("...%s link to %s\n",
-                                     fileName, linkedFile));
-           }
-         else
-           {
-             g_string_append (result, fileName);
-             GDK_NOTE (DND, g_print ("...%s\n", fileName));
-           }
-         g_string_append (result, "\015\012");
-       }
-      gdk_sel_prop_store ((GdkWindow *) gdk_root_parent,
-                         text_uri_list_atom, 8, result->str, result->len + 1);
-
-      DragFinish (hdrop);
-      
-      return GDK_FILTER_TRANSLATE;
-    }
-  else
-    return GDK_FILTER_CONTINUE;
-}
-
-/*************************************************************
- ************************** Public API ***********************
- *************************************************************/
-
-void
-gdk_dnd_init (void)
-{
-  HRESULT hres;
-#ifdef OLE2_DND
-  hres = OleInitialize (NULL);
-
-  if (! SUCCEEDED (hres))
-    g_error ("OleInitialize failed");
-#endif
-}      
-
-void
-gdk_dnd_exit (void)
-{
-#ifdef OLE2_DND
-  OleUninitialize ();
-#endif
-}
-
-/* Source side */
-
-static void
-gdk_drag_do_leave (GdkDragContext *context, guint32 time)
-{
-  if (context->dest_window)
-    {
-      GDK_NOTE (DND, g_print ("gdk_drag_do_leave\n"));
-      gdk_window_unref (context->dest_window);
-      context->dest_window = NULL;
-    }
-}
-
-GdkDragContext * 
-gdk_drag_begin (GdkWindow     *window,
-               GList         *targets)
-{
-  GList *tmp_list;
-  source_drag_context *ctx;
-  
-  g_return_val_if_fail (window != NULL, NULL);
-
-  GDK_NOTE (DND, g_print ("gdk_drag_begin\n"));
-
-  ctx = source_context_new ();
-  ctx->context->is_source = TRUE;
-  ctx->context->source_window = window;
-  gdk_window_ref (window);
-
-  tmp_list = g_list_last (targets);
-  ctx->context->targets = NULL;
-  while (tmp_list)
-    {
-      ctx->context->targets = g_list_prepend (ctx->context->targets,
-                                             tmp_list->data);
-      tmp_list = tmp_list->prev;
-    }
-
-  ctx->context->actions = 0;
-
-#if 0
-  DoDragDrop (...);
-#endif
-  return ctx->context;
-}
-
-guint32
-gdk_drag_get_protocol (guint32          xid,
-                      GdkDragProtocol *protocol)
-{
-  /* This isn't used */
-  return 0;
-}
-
-void
-gdk_drag_find_window (GdkDragContext  *context,
-                     GdkWindow       *drag_window,
-                     gint             x_root,
-                     gint             y_root,
-                     GdkWindow      **dest_window,
-                     GdkDragProtocol *protocol)
-{
-  GdkDragContextPrivate *private = (GdkDragContextPrivate *)context;
-  GdkDrawablePrivate *drag_window_private = (GdkDrawablePrivate*) drag_window;
-  HWND recipient;
-  POINT pt;
-
-  GDK_NOTE (DND, g_print ("gdk_drag_find_window: %#x +%d+%d\n",
-                         (drag_window ? drag_window_private->xwindow : 0),
-                         x_root, y_root));
-
-  pt.x = x_root;
-  pt.y = y_root;
-  recipient = WindowFromPoint (pt);
-  if (recipient == NULL)
-    *dest_window = NULL;
-  else
-    {
-      *dest_window = gdk_window_lookup (recipient);
-      if (*dest_window)
-       gdk_window_ref (*dest_window);
-      *protocol = GDK_DRAG_PROTO_WIN32_DROPFILES;
-    }
-}
-
-gboolean
-gdk_drag_motion (GdkDragContext *context,
-                GdkWindow      *dest_window,
-                GdkDragProtocol protocol,
-                gint            x_root, 
-                gint            y_root,
-                GdkDragAction   suggested_action,
-                GdkDragAction   possible_actions,
-                guint32         time)
-{
-  return FALSE;
-}
-
-void
-gdk_drag_drop (GdkDragContext *context,
-              guint32         time)
-{
-  g_return_if_fail (context != NULL);
-
-  g_warning ("gdk_drag_drop: not implemented\n");
-}
-
-void
-gdk_drag_abort (GdkDragContext *context,
-               guint32         time)
-{
-  g_return_if_fail (context != NULL);
-
-  gdk_drag_do_leave (context, time);
-}
-
-/* Destination side */
-
-void
-gdk_drag_status (GdkDragContext   *context,
-                GdkDragAction     action,
-                guint32           time)
-{
-  GDK_NOTE (DND, g_print ("gdk_drag_status\n"));
-}
-
-void 
-gdk_drop_reply (GdkDragContext   *context,
-               gboolean          ok,
-               guint32           time)
-{
-}
-
-void
-gdk_drop_finish (GdkDragContext   *context,
-                gboolean          success,
-                guint32           time)
-{
-}
-
-static GdkFilterReturn
-gdk_destroy_filter (GdkXEvent *xev,
-                   GdkEvent  *event,
-                   gpointer   data)
-{
-#ifdef OLE2_DND
-  MSG *msg = (MSG *) xev;
-
-  if (msg->message == WM_DESTROY)
-    {
-      IDropTarget *idtp = (IDropTarget *) data;
-
-      GDK_NOTE (DND, g_print ("gdk_destroy_filter: WM_DESTROY: %#x\n", msg->hwnd));
-      RevokeDragDrop (msg->hwnd);
-      CoLockObjectExternal (idtp, FALSE, TRUE);
-    }
-#endif
-  return GDK_FILTER_CONTINUE;
-}
-
-void
-gdk_window_register_dnd (GdkWindow      *window)
-{
-  GdkDrawablePrivate *private = (GdkDrawablePrivate *) window;
-#ifdef OLE2_DND
-  target_drag_context *context;
-  HRESULT hres;
-#endif
-
-  g_return_if_fail (window != NULL);
-
-  GDK_NOTE (DND, g_print ("gdk_window_register_dnd: %#x\n", private->xwindow));
-
-  /* We always claim to accept dropped files, but in fact we might not,
-   * of course. This function is called in such a way that it cannot know
-   * whether the window (widget) in question actually accepts files
-   * (in gtk, data of type text/uri-list) or not.
-   */
-  gdk_window_add_filter (window, gdk_dropfiles_filter, NULL);
-  DragAcceptFiles (private->xwindow, TRUE);
-
-#ifdef OLE2_DND
-  /* Register for OLE2 d&d */
-  context = target_context_new ();
-  hres = CoLockObjectExternal ((IUnknown *) &context->idt, TRUE, FALSE);
-  if (!SUCCEEDED (hres))
-    g_warning ("gdk_window_register_dnd: CoLockObjectExternal failed");
-  else
-    {
-      hres = RegisterDragDrop (private->xwindow, &context->idt);
-      if (hres == DRAGDROP_E_ALREADYREGISTERED)
-       {
-         g_print ("DRAGDROP_E_ALREADYREGISTERED\n");
-         CoLockObjectExternal ((IUnknown *) &context->idt, FALSE, FALSE);
-       }
-      else if (!SUCCEEDED (hres))
-       g_warning ("gdk_window_register_dnd: RegisterDragDrop failed");
-      else
-       {
-         gdk_window_add_filter (window, gdk_destroy_filter, &context->idt);
-       }
-    }
-#endif
-}
-
-/*************************************************************
- * gdk_drag_get_selection:
- *     Returns the selection atom for the current source window
- *   arguments:
- *
- *   results:
- *************************************************************/
-
-GdkAtom
-gdk_drag_get_selection (GdkDragContext *context)
-{
-  if (context->protocol == GDK_DRAG_PROTO_WIN32_DROPFILES)
-    return gdk_win32_dropfiles_atom;
-  else if (context->protocol == GDK_DRAG_PROTO_OLE2)
-    return gdk_ole2_dnd_atom;
-  else
-    return GDK_NONE;
-}
diff --git a/gdk/win32/gdkdraw.c b/gdk/win32/gdkdraw.c
deleted file mode 100644 (file)
index 73f5e51..0000000
+++ /dev/null
@@ -1,909 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <math.h>
-
-#include "gdkdrawable.h"
-#include "gdkprivate.h"
-#include "gdkwindow.h"
-#include "gdkx.h"
-
-#ifndef G_PI
-#define G_PI 3.14159265358979323846
-#endif
-
-/* Manipulation of drawables
- */
-void          
-gdk_drawable_set_data (GdkDrawable   *drawable,
-                      const gchar   *key,
-                      gpointer       data,
-                      GDestroyNotify destroy_func)
-{
-  g_dataset_set_data_full (drawable, key, data, destroy_func);
-}
-
-void          
-gdk_drawable_get_data (GdkDrawable   *drawable,
-                      const gchar   *key)
-{
-  g_dataset_get_data (drawable, key);
-}
-
-GdkDrawableType
-gdk_drawable_get_type (GdkDrawable *drawable)
-{
-  g_return_val_if_fail (drawable != NULL, (GdkDrawableType) -1);
-  
-  return GDK_DRAWABLE_TYPE (drawable);
-}
-
-void
-gdk_drawable_get_size (GdkDrawable *drawable,
-                      gint        *width,
-                      gint        *height)
-{
-  GdkDrawablePrivate *drawable_private;
-  
-  g_return_if_fail (drawable != NULL);
-  
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  
-  if (width)
-    *width = drawable_private->width;
-  if (height)
-    *height = drawable_private->height;
-}
-
-void
-gdk_drawable_set_colormap (GdkDrawable *drawable,
-                          GdkColormap *colormap)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkColormapPrivate *colormap_private;
-  
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (colormap != NULL);
-  
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  colormap_private = (GdkColormapPrivate*) colormap;
-  
-  if (!GDK_DRAWABLE_DESTROYED (drawable))
-    {
-      if (GDK_IS_WINDOW (drawable))
-       {
-         g_return_if_fail (colormap_private->visual !=
-                           ((GdkColormapPrivate*)(drawable_private->colormap))->visual);
-         /* XXX ??? */
-         GDK_NOTE (MISC, g_print ("gdk_drawable_set_colormap: %#x %#x\n",
-                                  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);
-    }
-}
-
-GdkColormap*
-gdk_drawable_get_colormap (GdkDrawable *drawable)
-{
-  GdkDrawablePrivate *drawable_private;
-  
-  g_return_val_if_fail (drawable != NULL, NULL);
-  drawable_private = (GdkDrawablePrivate*) drawable;
-
-  if (!GDK_DRAWABLE_DESTROYED (drawable))
-    {
-      if (drawable_private->colormap == NULL)
-       return gdk_colormap_get_system (); /* XXX ??? */
-      else
-       return drawable_private->colormap;
-    }
-  
-  return NULL;
-}
-
-GdkVisual*
-gdk_drawable_get_visual (GdkDrawable *drawable)
-{
-  GdkColormap *colormap;
-
-  g_return_val_if_fail (drawable != NULL, NULL);
-
-  colormap = gdk_drawable_get_colormap (drawable);
-  return colormap ? gdk_colormap_get_visual (colormap) : NULL;
-}
-
-void
-gdk_draw_point (GdkDrawable *drawable,
-                GdkGC       *gc,
-                gint         x,
-                gint         y)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  /* We use LineTo because SetPixel wants the COLORREF directly,
-   * and doesn't use the current pen, which is what we want.
-   */
-  if (!MoveToEx (hdc, x, y, NULL))
-    g_warning ("gdk_draw_point: MoveToEx failed");
-  if (!LineTo (hdc, x + 1, y))
-    g_warning ("gdk_draw_point: LineTo failed");
-  
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_line (GdkDrawable *drawable,
-              GdkGC       *gc,
-              gint         x1,
-              gint         y1,
-              gint         x2,
-              gint         y2)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-    
-  GDK_NOTE (MISC, g_print ("gdk_draw_line: %#x (%d) +%d+%d..+%d+%d\n",
-                          drawable_private->xwindow, gc_private,
-                          x1, y1, x2, y2));
-  
-  MoveToEx (hdc, x1, y1, NULL);
-  if (!LineTo (hdc, x2, y2))
-    g_warning ("gdk_draw_line: LineTo #1 failed");
-  /* LineTo doesn't draw the last point, so if we have a pen width of 1,
-   * we draw the end pixel separately... With wider pens we don't care.
-   * //HB: But the NT developers don't read their API documentation ...
-   */
-  if (gc_private->pen_width == 1 && windows_version > 0x80000000)
-    if (!LineTo (hdc, x2 + 1, y2))
-      g_warning ("gdk_draw_line: LineTo #2 failed");
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_rectangle (GdkDrawable *drawable,
-                   GdkGC       *gc,
-                   gint         filled,
-                   gint         x,
-                   gint         y,
-                   gint         width,
-                   gint         height)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  HGDIOBJ oldpen, oldbrush;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  if (width == -1)
-    width = drawable_private->width;
-  if (height == -1)
-    height = drawable_private->height;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_rectangle: %#x (%d) %s%dx%d@+%d+%d\n",
-                          drawable_private->xwindow,
-                          gc_private,
-                          (filled ? "fill " : ""),
-                          width, height, x, y));
-    
-#if 0
-  {
-    HBRUSH hbr = GetCurrentObject (hdc, OBJ_BRUSH);
-    HPEN hpen = GetCurrentObject (hdc, OBJ_PEN);
-    LOGBRUSH lbr;
-    LOGPEN lpen;
-    GetObject (hbr, sizeof (lbr), &lbr);
-    GetObject (hpen, sizeof (lpen), &lpen);
-    
-    g_print ("current brush: style = %s, color = 0x%.08x\n",
-            (lbr.lbStyle == BS_SOLID ? "SOLID" : "???"),
-            lbr.lbColor);
-    g_print ("current pen: style = %s, width = %d, color = 0x%.08x\n",
-            (lpen.lopnStyle == PS_SOLID ? "SOLID" : "???"),
-            lpen.lopnWidth,
-            lpen.lopnColor);
-  }
-#endif
-
-  if (filled)
-    oldpen = SelectObject (hdc, GetStockObject (NULL_PEN));
-  else
-    oldbrush = SelectObject (hdc, GetStockObject (HOLLOW_BRUSH));
-  
-  if (!Rectangle (hdc, x, y, x+width+1, y+height+1))
-    g_warning ("gdk_draw_rectangle: Rectangle failed");
-  
-  if (filled)
-    SelectObject (hdc, oldpen);
-  else
-    SelectObject (hdc, oldbrush);
-
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_arc (GdkDrawable *drawable,
-             GdkGC       *gc,
-             gint         filled,
-             gint         x,
-             gint         y,
-             gint         width,
-             gint         height,
-             gint         angle1,
-             gint         angle2)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  int nXStartArc, nYStartArc, nXEndArc, nYEndArc;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  if (width == -1)
-    width = drawable_private->width;
-  if (height == -1)
-    height = drawable_private->height;
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_arc: %#x  %d,%d,%d,%d  %d %d\n",
-                          drawable_private->xwindow,
-                          x, y, width, height, angle1, angle2));
-
-  if (width != 0 && height != 0 && angle2 != 0)
-    {
-      hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-      if (angle2 >= 360*64)
-       {
-         nXStartArc = nYStartArc = nXEndArc = nYEndArc = 0;
-       }
-      else if (angle2 > 0)
-       {
-         /* The 100. is just an arbitrary value */
-         nXStartArc = x + width/2 + 100. * cos(angle1/64.*2.*G_PI/360.);
-         nYStartArc = y + height/2 + -100. * sin(angle1/64.*2.*G_PI/360.);
-         nXEndArc = x + width/2 + 100. * cos((angle1+angle2)/64.*2.*G_PI/360.);
-         nYEndArc = y + height/2 + -100. * sin((angle1+angle2)/64.*2.*G_PI/360.);
-       }
-      else
-       {
-         nXEndArc = x + width/2 + 100. * cos(angle1/64.*2.*G_PI/360.);
-         nYEndArc = y + height/2 + -100. * sin(angle1/64.*2.*G_PI/360.);
-         nXStartArc = x + width/2 + 100. * cos((angle1+angle2)/64.*2.*G_PI/360.);
-         nYStartArc = y + height/2 + -100. * sin((angle1+angle2)/64.*2.*G_PI/360.);
-       }
-
-      if (filled)
-       {
-         GDK_NOTE (MISC, g_print ("...Pie(hdc,%d,%d,%d,%d,%d,%d,%d,%d)\n",
-                                  x, y, x+width, y+height,
-                                  nXStartArc, nYStartArc,
-                                  nXEndArc, nYEndArc));
-         Pie (hdc, x, y, x+width, y+height,
-              nXStartArc, nYStartArc, nXEndArc, nYEndArc);
-       }
-      else
-       {
-         GDK_NOTE (MISC, g_print ("...Arc(hdc,%d,%d,%d,%d,%d,%d,%d,%d)\n",
-                                  x, y, x+width, y+height,
-                                  nXStartArc, nYStartArc,
-                                  nXEndArc, nYEndArc));
-         Arc (hdc, x, y, x+width, y+height,
-              nXStartArc, nYStartArc, nXEndArc, nYEndArc);
-       }
-      gdk_gc_postdraw (drawable_private, gc_private);
-    }
-}
-
-void
-gdk_draw_polygon (GdkDrawable *drawable,
-                 GdkGC       *gc,
-                 gint         filled,
-                 GdkPoint    *points,
-                 gint         npoints)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  POINT *pts;
-  int i;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_polygon: %#x (%d) %d\n",
-                          drawable_private->xwindow, gc_private,
-                          npoints));
-
-  if (npoints < 2)
-    return;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-  pts = g_malloc ((npoints+1) * sizeof (POINT));
-
-  for (i = 0; i < npoints; i++)
-    {
-      pts[i].x = points[i].x;
-      pts[i].y = points[i].y;
-    }
-  
-  if ((points[0].x != points[npoints-1].x) ||
-      (points[0].y != points[npoints-1].y)) 
-    {
-      pts[npoints].x = points[0].x;
-      pts[npoints].y = points[0].y;
-      npoints++;
-    }
-  if (filled)
-    {
-      if (!Polygon (hdc, pts, npoints))
-       g_warning ("gdk_draw_polygon: Polygon failed");
-    }
-  else
-    {
-      if (!Polyline (hdc, pts, npoints))
-       g_warning ("gdk_draw_polygon: Polyline failed");
-    }
-  g_free (pts);
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-typedef struct
-{
-  gint x, y;
-  HDC hdc;
-} gdk_draw_text_arg;
-
-/* gdk_draw_string
- */
-void
-gdk_draw_string (GdkDrawable *drawable,
-                GdkFont     *font,
-                GdkGC       *gc,
-                gint         x,
-                gint         y,
-                const gchar *string)
-{
-  gdk_draw_text (drawable, font, gc, x, y, string, strlen (string));
-}
-
-static void
-gdk_draw_text_handler (GdkWin32SingleFont *singlefont,
-                      const wchar_t      *wcstr,
-                      int                 wclen,
-                      void               *arg)
-{
-  HGDIOBJ oldfont;
-  SIZE size;
-  gdk_draw_text_arg *argp = (gdk_draw_text_arg *) arg;
-
-  if (!singlefont)
-    return;
-
-  if ((oldfont = SelectObject (argp->hdc, singlefont->xfont)) == NULL)
-    {
-      g_warning ("gdk_draw_text_handler: SelectObject failed");
-      return;
-    }
-  
-  if (!TextOutW (argp->hdc, argp->x, argp->y, wcstr, wclen))
-    g_warning ("gdk_draw_text_handler: TextOutW failed");
-  GetTextExtentPoint32W (argp->hdc, wcstr, wclen, &size);
-  argp->x += size.cx;
-
-  SelectObject (argp->hdc, oldfont);
-}
-
-/* gdk_draw_text
- *
- */
-void
-gdk_draw_text (GdkDrawable *drawable,
-              GdkFont     *font,
-              GdkGC       *gc,
-              gint         x,
-              gint         y,
-              const gchar *text,
-              gint         text_length)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  wchar_t *wcstr;
-  gint wlen;
-  gdk_draw_text_arg arg;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (text != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-
-  if (text_length == 0)
-    return;
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  arg.x = x;
-  arg.y = y;
-  arg.hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_text: %#x (%d,%d) \"%.*s\" (len %d)\n",
-                          drawable_private->xwindow,
-                          x, y,
-                          (text_length > 10 ? 10 : text_length),
-                          text, text_length));
-  
-  wcstr = g_new (wchar_t, text_length);
-  if ((wlen = gdk_nmbstowchar_ts (wcstr, text, text_length, text_length)) == -1)
-    g_warning ("gdk_draw_text: gdk_nmbstowchar_ts failed");
-  else
-    gdk_wchar_text_handle (font, wcstr, wlen,
-                          gdk_draw_text_handler, &arg);
-
-  g_free (wcstr);
-
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_text_wc (GdkDrawable   *drawable,
-                 GdkFont        *font,
-                 GdkGC          *gc,
-                 gint            x,
-                 gint            y,
-                 const GdkWChar *text,
-                 gint            text_length)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  gint i, wlen;
-  wchar_t *wcstr;
-  gdk_draw_text_arg arg;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (text != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-
-  if (text_length == 0)
-    return;
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  arg.x = x;
-  arg.y = y;
-  arg.hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_text_wc: %#x (%d,%d) len: %d\n",
-                          drawable_private->xwindow,
-                          x, y, text_length));
-      
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    {
-      wcstr = g_new (wchar_t, text_length);
-      for (i = 0; i < text_length; i++)
-       wcstr[i] = text[i];
-    }
-  else
-    wcstr = (wchar_t *) text;
-
-  gdk_wchar_text_handle (font, wcstr, text_length,
-                        gdk_draw_text_handler, &arg);
-
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    g_free (wcstr);
-
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_pixmap (GdkDrawable *drawable,
-                GdkGC       *gc,
-                GdkPixmap   *src,
-                gint         xsrc,
-                gint         ysrc,
-                gint         xdest,
-                gint         ydest,
-                gint         width,
-                gint         height)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkDrawablePrivate *src_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  HDC srcdc;
-  HGDIOBJ hgdiobj;
-  HRGN src_rgn, draw_rgn, outside_rgn;
-  RECT r;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (src != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable) || GDK_DRAWABLE_DESTROYED (src))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  src_private = (GdkDrawablePrivate*) src;
-  gc_private = (GdkGCPrivate*) gc;
-
-  if (width == -1)
-    width = src_private->width;        /* Or should we subtract xsrc? */
-  if (height == -1)
-    height = src_private->height; /* Ditto? */
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_pixmap: dest: %#x "
-                          "src: %#x %dx%d@+%d+%d"
-                          " dest: %#x @+%d+%d\n",
-                          drawable_private->xwindow,
-                          src_private->xwindow,
-                          width, height, xsrc, ysrc,
-                          drawable_private->xwindow, xdest, ydest));
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  src_rgn = CreateRectRgn (0, 0, src_private->width + 1, src_private->height + 1);
-  draw_rgn = CreateRectRgn (xsrc, ysrc, xsrc + width + 1, ysrc + height + 1);
-  SetRectEmpty (&r);
-  outside_rgn = CreateRectRgnIndirect (&r);
-  
-  if (drawable_private->window_type != GDK_DRAWABLE_PIXMAP)
-    {
-      /* If we are drawing on a window, calculate the region that is
-       * outside the source pixmap, and invalidate that, causing it to
-       * be cleared. XXX
-       */
-      if (CombineRgn (outside_rgn, draw_rgn, src_rgn, RGN_DIFF) != NULLREGION)
-       {
-         OffsetRgn (outside_rgn, xdest, ydest);
-         GDK_NOTE (MISC, (GetRgnBox (outside_rgn, &r),
-                          g_print ("...calling InvalidateRgn, "
-                                   "bbox: %dx%d@+%d+%d\n",
-                                   r.right - r.left - 1, r.bottom - r.top - 1,
-                                   r.left, r.top)));
-         InvalidateRgn (drawable_private->xwindow, outside_rgn, TRUE);
-       }
-    }
-
-#if 1 /* Don't know if this is necessary  */
-  if (CombineRgn (draw_rgn, draw_rgn, src_rgn, RGN_AND) == COMPLEXREGION)
-    g_warning ("gdk_draw_pixmap: CombineRgn returned a COMPLEXREGION");
-
-  GetRgnBox (draw_rgn, &r);
-  if (r.left != xsrc
-      || r.top != ysrc
-      || r.right != xsrc + width + 1
-      || r.bottom != ysrc + height + 1)
-    {
-      xdest += r.left - xsrc;
-      xsrc = r.left;
-      ydest += r.top - ysrc;
-      ysrc = r.top;
-      width = r.right - xsrc - 1;
-      height = r.bottom - ysrc - 1;
-      
-      GDK_NOTE (MISC, g_print ("... restricted to src: %dx%d@+%d+%d, "
-                              "dest: @+%d+%d\n",
-                              width, height, xsrc, ysrc,
-                              xdest, ydest));
-    }
-#endif
-
-  DeleteObject (src_rgn);
-  DeleteObject (draw_rgn);
-  DeleteObject (outside_rgn);
-
-  /* Strangely enough, this function is called also to bitblt
-   * from a window.
-   */
-  if (src_private->window_type == GDK_DRAWABLE_PIXMAP)
-    {
-      if ((srcdc = CreateCompatibleDC (hdc)) == NULL)
-       g_warning ("gdk_draw_pixmap: CreateCompatibleDC failed");
-      
-      if ((hgdiobj = SelectObject (srcdc, src_private->xwindow)) == NULL)
-       g_warning ("gdk_draw_pixmap: SelectObject #1 failed");
-      
-      if (!BitBlt (hdc, xdest, ydest, width, height,
-                  srcdc, xsrc, ysrc, SRCCOPY))
-       g_warning ("gdk_draw_pixmap: BitBlt failed");
-      
-      if ((SelectObject (srcdc, hgdiobj) == NULL))
-       g_warning ("gdk_draw_pixmap: SelectObject #2 failed");
-      
-      if (!DeleteDC (srcdc))
-       g_warning ("gdk_draw_pixmap: DeleteDC failed");
-    }
-  else
-    {
-      if (drawable_private->xwindow == src_private->xwindow)
-       {
-         /* Blitting inside a window, use ScrollDC */
-         RECT scrollRect, clipRect, emptyRect;
-         HRGN updateRgn;
-
-         scrollRect.left = MIN (xsrc, xdest);
-         scrollRect.top = MIN (ysrc, ydest);
-         scrollRect.right = MAX (xsrc + width + 1, xdest + width + 1);
-         scrollRect.bottom = MAX (ysrc + height + 1, ydest + height + 1);
-
-         clipRect.left = xdest;
-         clipRect.top = ydest;
-         clipRect.right = xdest + width + 1;
-         clipRect.bottom = ydest + height + 1;
-
-         SetRectEmpty (&emptyRect);
-         updateRgn = CreateRectRgnIndirect (&emptyRect);
-         if (!ScrollDC (hdc, xdest - xsrc, ydest - ysrc,
-                        &scrollRect, &clipRect,
-                        updateRgn, NULL))
-           g_warning ("gdk_draw_pixmap: ScrollDC failed");
-         if (!InvalidateRgn (drawable_private->xwindow, updateRgn, FALSE))
-           g_warning ("gdk_draw_pixmap: InvalidateRgn failed");
-         if (!UpdateWindow (drawable_private->xwindow))
-           g_warning ("gdk_draw_pixmap: UpdateWindow failed");
-       }
-      else
-       {
-         if ((srcdc = GetDC (src_private->xwindow)) == NULL)
-           g_warning ("gdk_draw_pixmap: GetDC failed");
-         
-         if (!BitBlt (hdc, xdest, ydest, width, height,
-                      srcdc, xsrc, ysrc, SRCCOPY))
-           g_warning ("gdk_draw_pixmap: BitBlt failed");
-         ReleaseDC (src_private->xwindow, srcdc);
-       }
-    }
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_image (GdkDrawable *drawable,
-               GdkGC       *gc,
-               GdkImage    *image,
-               gint         xsrc,
-               gint         ysrc,
-               gint         xdest,
-               gint         ydest,
-               gint         width,
-               gint         height)
-{
-  GdkImagePrivate *image_private;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (image != NULL);
-  g_return_if_fail (gc != NULL);
-
-  image_private = (GdkImagePrivate*) image;
-
-  g_return_if_fail (image_private->image_put != NULL);
-
-  if (width == -1)
-    width = image->width;
-  if (height == -1)
-    height = image->height;
-
-  (* image_private->image_put) (drawable, gc, image, xsrc, ysrc,
-                               xdest, ydest, width, height);
-}
-
-void
-gdk_draw_points (GdkDrawable *drawable,
-                GdkGC       *gc,
-                GdkPoint    *points,
-                gint         npoints)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  int i;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail ((points != NULL) && (npoints > 0));
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-  
-  GDK_NOTE (MISC, g_print ("gdk_draw_points: %#x destdc: (%d) %#x "
-                          "npoints: %d\n",
-                          drawable_private->xwindow, gc_private, hdc,
-                          npoints));
-
-  for (i = 0; i < npoints; i++)
-    {
-      if (!MoveToEx (hdc, points[i].x, points[i].y, NULL))
-       g_warning ("gdk_draw_points: MoveToEx failed");
-      if (!LineTo (hdc, points[i].x + 1, points[i].y))
-       g_warning ("gdk_draw_points: LineTo failed");
-    }
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_segments (GdkDrawable *drawable,
-                  GdkGC       *gc,
-                  GdkSegment  *segs,
-                  gint         nsegs)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  int i;
-
-  if (nsegs <= 0)
-    return;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (segs != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  for (i = 0; i < nsegs; i++)
-    {
-      if (!MoveToEx (hdc, segs[i].x1, segs[i].y1, NULL))
-       g_warning ("gdk_draw_segments: MoveToEx failed");
-      if (!LineTo (hdc, segs[i].x2, segs[i].y2))
-       g_warning ("gdk_draw_segments: LineTo #1 failed");
-      
-      /* Draw end pixel */
-      if (gc_private->pen_width == 1)
-       if (!LineTo (hdc, segs[i].x2 + 1, segs[i].y2))
-         g_warning ("gdk_draw_segments: LineTo #2 failed");
-    }
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_lines (GdkDrawable *drawable,
-               GdkGC       *gc,
-               GdkPoint    *points,
-               gint         npoints)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  POINT *pts;
-  int i;
-
-  if (npoints < 2)
-    return;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (points != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-#if 1
-  pts = g_malloc (npoints * sizeof (POINT));
-
-  for (i = 0; i < npoints; i++)
-    {
-      pts[i].x = points[i].x;
-      pts[i].y = points[i].y;
-    }
-  
-  if (!Polyline (hdc, pts, npoints))
-    g_warning ("gdk_draw_lines: Polyline(,,%d) failed", npoints);
-  
-  g_free (pts);
-  
-  /* Draw end pixel */
-  if (gc_private->pen_width == 1)
-    {
-      MoveToEx (hdc, points[npoints-1].x, points[npoints-1].y, NULL);
-      if (!LineTo (hdc, points[npoints-1].x + 1, points[npoints-1].y))
-       g_warning ("gdk_draw_lines: LineTo failed");
-    }
-#else
-  MoveToEx (hdc, points[0].x, points[0].y, NULL);
-  for (i = 1; i < npoints; i++)
-    if (!LineTo (hdc, points[i].x, points[i].y))
-      g_warning ("gdk_draw_lines: LineTo #1 failed");
-  
-  /* Draw end pixel */
-  if (gc_private->pen_width == 1)
-    if (!LineTo (hdc, points[npoints-1].x + 1, points[npoints-1].y))
-      g_warning ("gdk_draw_lines: LineTo #2 failed");
-#endif 
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
diff --git a/gdk/win32/gdkdrawable-win32.c b/gdk/win32/gdkdrawable-win32.c
deleted file mode 100644 (file)
index 73f5e51..0000000
+++ /dev/null
@@ -1,909 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <math.h>
-
-#include "gdkdrawable.h"
-#include "gdkprivate.h"
-#include "gdkwindow.h"
-#include "gdkx.h"
-
-#ifndef G_PI
-#define G_PI 3.14159265358979323846
-#endif
-
-/* Manipulation of drawables
- */
-void          
-gdk_drawable_set_data (GdkDrawable   *drawable,
-                      const gchar   *key,
-                      gpointer       data,
-                      GDestroyNotify destroy_func)
-{
-  g_dataset_set_data_full (drawable, key, data, destroy_func);
-}
-
-void          
-gdk_drawable_get_data (GdkDrawable   *drawable,
-                      const gchar   *key)
-{
-  g_dataset_get_data (drawable, key);
-}
-
-GdkDrawableType
-gdk_drawable_get_type (GdkDrawable *drawable)
-{
-  g_return_val_if_fail (drawable != NULL, (GdkDrawableType) -1);
-  
-  return GDK_DRAWABLE_TYPE (drawable);
-}
-
-void
-gdk_drawable_get_size (GdkDrawable *drawable,
-                      gint        *width,
-                      gint        *height)
-{
-  GdkDrawablePrivate *drawable_private;
-  
-  g_return_if_fail (drawable != NULL);
-  
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  
-  if (width)
-    *width = drawable_private->width;
-  if (height)
-    *height = drawable_private->height;
-}
-
-void
-gdk_drawable_set_colormap (GdkDrawable *drawable,
-                          GdkColormap *colormap)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkColormapPrivate *colormap_private;
-  
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (colormap != NULL);
-  
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  colormap_private = (GdkColormapPrivate*) colormap;
-  
-  if (!GDK_DRAWABLE_DESTROYED (drawable))
-    {
-      if (GDK_IS_WINDOW (drawable))
-       {
-         g_return_if_fail (colormap_private->visual !=
-                           ((GdkColormapPrivate*)(drawable_private->colormap))->visual);
-         /* XXX ??? */
-         GDK_NOTE (MISC, g_print ("gdk_drawable_set_colormap: %#x %#x\n",
-                                  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);
-    }
-}
-
-GdkColormap*
-gdk_drawable_get_colormap (GdkDrawable *drawable)
-{
-  GdkDrawablePrivate *drawable_private;
-  
-  g_return_val_if_fail (drawable != NULL, NULL);
-  drawable_private = (GdkDrawablePrivate*) drawable;
-
-  if (!GDK_DRAWABLE_DESTROYED (drawable))
-    {
-      if (drawable_private->colormap == NULL)
-       return gdk_colormap_get_system (); /* XXX ??? */
-      else
-       return drawable_private->colormap;
-    }
-  
-  return NULL;
-}
-
-GdkVisual*
-gdk_drawable_get_visual (GdkDrawable *drawable)
-{
-  GdkColormap *colormap;
-
-  g_return_val_if_fail (drawable != NULL, NULL);
-
-  colormap = gdk_drawable_get_colormap (drawable);
-  return colormap ? gdk_colormap_get_visual (colormap) : NULL;
-}
-
-void
-gdk_draw_point (GdkDrawable *drawable,
-                GdkGC       *gc,
-                gint         x,
-                gint         y)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  /* We use LineTo because SetPixel wants the COLORREF directly,
-   * and doesn't use the current pen, which is what we want.
-   */
-  if (!MoveToEx (hdc, x, y, NULL))
-    g_warning ("gdk_draw_point: MoveToEx failed");
-  if (!LineTo (hdc, x + 1, y))
-    g_warning ("gdk_draw_point: LineTo failed");
-  
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_line (GdkDrawable *drawable,
-              GdkGC       *gc,
-              gint         x1,
-              gint         y1,
-              gint         x2,
-              gint         y2)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-    
-  GDK_NOTE (MISC, g_print ("gdk_draw_line: %#x (%d) +%d+%d..+%d+%d\n",
-                          drawable_private->xwindow, gc_private,
-                          x1, y1, x2, y2));
-  
-  MoveToEx (hdc, x1, y1, NULL);
-  if (!LineTo (hdc, x2, y2))
-    g_warning ("gdk_draw_line: LineTo #1 failed");
-  /* LineTo doesn't draw the last point, so if we have a pen width of 1,
-   * we draw the end pixel separately... With wider pens we don't care.
-   * //HB: But the NT developers don't read their API documentation ...
-   */
-  if (gc_private->pen_width == 1 && windows_version > 0x80000000)
-    if (!LineTo (hdc, x2 + 1, y2))
-      g_warning ("gdk_draw_line: LineTo #2 failed");
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_rectangle (GdkDrawable *drawable,
-                   GdkGC       *gc,
-                   gint         filled,
-                   gint         x,
-                   gint         y,
-                   gint         width,
-                   gint         height)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  HGDIOBJ oldpen, oldbrush;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  if (width == -1)
-    width = drawable_private->width;
-  if (height == -1)
-    height = drawable_private->height;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_rectangle: %#x (%d) %s%dx%d@+%d+%d\n",
-                          drawable_private->xwindow,
-                          gc_private,
-                          (filled ? "fill " : ""),
-                          width, height, x, y));
-    
-#if 0
-  {
-    HBRUSH hbr = GetCurrentObject (hdc, OBJ_BRUSH);
-    HPEN hpen = GetCurrentObject (hdc, OBJ_PEN);
-    LOGBRUSH lbr;
-    LOGPEN lpen;
-    GetObject (hbr, sizeof (lbr), &lbr);
-    GetObject (hpen, sizeof (lpen), &lpen);
-    
-    g_print ("current brush: style = %s, color = 0x%.08x\n",
-            (lbr.lbStyle == BS_SOLID ? "SOLID" : "???"),
-            lbr.lbColor);
-    g_print ("current pen: style = %s, width = %d, color = 0x%.08x\n",
-            (lpen.lopnStyle == PS_SOLID ? "SOLID" : "???"),
-            lpen.lopnWidth,
-            lpen.lopnColor);
-  }
-#endif
-
-  if (filled)
-    oldpen = SelectObject (hdc, GetStockObject (NULL_PEN));
-  else
-    oldbrush = SelectObject (hdc, GetStockObject (HOLLOW_BRUSH));
-  
-  if (!Rectangle (hdc, x, y, x+width+1, y+height+1))
-    g_warning ("gdk_draw_rectangle: Rectangle failed");
-  
-  if (filled)
-    SelectObject (hdc, oldpen);
-  else
-    SelectObject (hdc, oldbrush);
-
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_arc (GdkDrawable *drawable,
-             GdkGC       *gc,
-             gint         filled,
-             gint         x,
-             gint         y,
-             gint         width,
-             gint         height,
-             gint         angle1,
-             gint         angle2)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  int nXStartArc, nYStartArc, nXEndArc, nYEndArc;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  if (width == -1)
-    width = drawable_private->width;
-  if (height == -1)
-    height = drawable_private->height;
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_arc: %#x  %d,%d,%d,%d  %d %d\n",
-                          drawable_private->xwindow,
-                          x, y, width, height, angle1, angle2));
-
-  if (width != 0 && height != 0 && angle2 != 0)
-    {
-      hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-      if (angle2 >= 360*64)
-       {
-         nXStartArc = nYStartArc = nXEndArc = nYEndArc = 0;
-       }
-      else if (angle2 > 0)
-       {
-         /* The 100. is just an arbitrary value */
-         nXStartArc = x + width/2 + 100. * cos(angle1/64.*2.*G_PI/360.);
-         nYStartArc = y + height/2 + -100. * sin(angle1/64.*2.*G_PI/360.);
-         nXEndArc = x + width/2 + 100. * cos((angle1+angle2)/64.*2.*G_PI/360.);
-         nYEndArc = y + height/2 + -100. * sin((angle1+angle2)/64.*2.*G_PI/360.);
-       }
-      else
-       {
-         nXEndArc = x + width/2 + 100. * cos(angle1/64.*2.*G_PI/360.);
-         nYEndArc = y + height/2 + -100. * sin(angle1/64.*2.*G_PI/360.);
-         nXStartArc = x + width/2 + 100. * cos((angle1+angle2)/64.*2.*G_PI/360.);
-         nYStartArc = y + height/2 + -100. * sin((angle1+angle2)/64.*2.*G_PI/360.);
-       }
-
-      if (filled)
-       {
-         GDK_NOTE (MISC, g_print ("...Pie(hdc,%d,%d,%d,%d,%d,%d,%d,%d)\n",
-                                  x, y, x+width, y+height,
-                                  nXStartArc, nYStartArc,
-                                  nXEndArc, nYEndArc));
-         Pie (hdc, x, y, x+width, y+height,
-              nXStartArc, nYStartArc, nXEndArc, nYEndArc);
-       }
-      else
-       {
-         GDK_NOTE (MISC, g_print ("...Arc(hdc,%d,%d,%d,%d,%d,%d,%d,%d)\n",
-                                  x, y, x+width, y+height,
-                                  nXStartArc, nYStartArc,
-                                  nXEndArc, nYEndArc));
-         Arc (hdc, x, y, x+width, y+height,
-              nXStartArc, nYStartArc, nXEndArc, nYEndArc);
-       }
-      gdk_gc_postdraw (drawable_private, gc_private);
-    }
-}
-
-void
-gdk_draw_polygon (GdkDrawable *drawable,
-                 GdkGC       *gc,
-                 gint         filled,
-                 GdkPoint    *points,
-                 gint         npoints)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  POINT *pts;
-  int i;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_polygon: %#x (%d) %d\n",
-                          drawable_private->xwindow, gc_private,
-                          npoints));
-
-  if (npoints < 2)
-    return;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-  pts = g_malloc ((npoints+1) * sizeof (POINT));
-
-  for (i = 0; i < npoints; i++)
-    {
-      pts[i].x = points[i].x;
-      pts[i].y = points[i].y;
-    }
-  
-  if ((points[0].x != points[npoints-1].x) ||
-      (points[0].y != points[npoints-1].y)) 
-    {
-      pts[npoints].x = points[0].x;
-      pts[npoints].y = points[0].y;
-      npoints++;
-    }
-  if (filled)
-    {
-      if (!Polygon (hdc, pts, npoints))
-       g_warning ("gdk_draw_polygon: Polygon failed");
-    }
-  else
-    {
-      if (!Polyline (hdc, pts, npoints))
-       g_warning ("gdk_draw_polygon: Polyline failed");
-    }
-  g_free (pts);
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-typedef struct
-{
-  gint x, y;
-  HDC hdc;
-} gdk_draw_text_arg;
-
-/* gdk_draw_string
- */
-void
-gdk_draw_string (GdkDrawable *drawable,
-                GdkFont     *font,
-                GdkGC       *gc,
-                gint         x,
-                gint         y,
-                const gchar *string)
-{
-  gdk_draw_text (drawable, font, gc, x, y, string, strlen (string));
-}
-
-static void
-gdk_draw_text_handler (GdkWin32SingleFont *singlefont,
-                      const wchar_t      *wcstr,
-                      int                 wclen,
-                      void               *arg)
-{
-  HGDIOBJ oldfont;
-  SIZE size;
-  gdk_draw_text_arg *argp = (gdk_draw_text_arg *) arg;
-
-  if (!singlefont)
-    return;
-
-  if ((oldfont = SelectObject (argp->hdc, singlefont->xfont)) == NULL)
-    {
-      g_warning ("gdk_draw_text_handler: SelectObject failed");
-      return;
-    }
-  
-  if (!TextOutW (argp->hdc, argp->x, argp->y, wcstr, wclen))
-    g_warning ("gdk_draw_text_handler: TextOutW failed");
-  GetTextExtentPoint32W (argp->hdc, wcstr, wclen, &size);
-  argp->x += size.cx;
-
-  SelectObject (argp->hdc, oldfont);
-}
-
-/* gdk_draw_text
- *
- */
-void
-gdk_draw_text (GdkDrawable *drawable,
-              GdkFont     *font,
-              GdkGC       *gc,
-              gint         x,
-              gint         y,
-              const gchar *text,
-              gint         text_length)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  wchar_t *wcstr;
-  gint wlen;
-  gdk_draw_text_arg arg;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (text != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-
-  if (text_length == 0)
-    return;
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  arg.x = x;
-  arg.y = y;
-  arg.hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_text: %#x (%d,%d) \"%.*s\" (len %d)\n",
-                          drawable_private->xwindow,
-                          x, y,
-                          (text_length > 10 ? 10 : text_length),
-                          text, text_length));
-  
-  wcstr = g_new (wchar_t, text_length);
-  if ((wlen = gdk_nmbstowchar_ts (wcstr, text, text_length, text_length)) == -1)
-    g_warning ("gdk_draw_text: gdk_nmbstowchar_ts failed");
-  else
-    gdk_wchar_text_handle (font, wcstr, wlen,
-                          gdk_draw_text_handler, &arg);
-
-  g_free (wcstr);
-
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_text_wc (GdkDrawable   *drawable,
-                 GdkFont        *font,
-                 GdkGC          *gc,
-                 gint            x,
-                 gint            y,
-                 const GdkWChar *text,
-                 gint            text_length)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  gint i, wlen;
-  wchar_t *wcstr;
-  gdk_draw_text_arg arg;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (text != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-
-  if (text_length == 0)
-    return;
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  arg.x = x;
-  arg.y = y;
-  arg.hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_text_wc: %#x (%d,%d) len: %d\n",
-                          drawable_private->xwindow,
-                          x, y, text_length));
-      
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    {
-      wcstr = g_new (wchar_t, text_length);
-      for (i = 0; i < text_length; i++)
-       wcstr[i] = text[i];
-    }
-  else
-    wcstr = (wchar_t *) text;
-
-  gdk_wchar_text_handle (font, wcstr, text_length,
-                        gdk_draw_text_handler, &arg);
-
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    g_free (wcstr);
-
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_pixmap (GdkDrawable *drawable,
-                GdkGC       *gc,
-                GdkPixmap   *src,
-                gint         xsrc,
-                gint         ysrc,
-                gint         xdest,
-                gint         ydest,
-                gint         width,
-                gint         height)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkDrawablePrivate *src_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  HDC srcdc;
-  HGDIOBJ hgdiobj;
-  HRGN src_rgn, draw_rgn, outside_rgn;
-  RECT r;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (src != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable) || GDK_DRAWABLE_DESTROYED (src))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  src_private = (GdkDrawablePrivate*) src;
-  gc_private = (GdkGCPrivate*) gc;
-
-  if (width == -1)
-    width = src_private->width;        /* Or should we subtract xsrc? */
-  if (height == -1)
-    height = src_private->height; /* Ditto? */
-
-  GDK_NOTE (MISC, g_print ("gdk_draw_pixmap: dest: %#x "
-                          "src: %#x %dx%d@+%d+%d"
-                          " dest: %#x @+%d+%d\n",
-                          drawable_private->xwindow,
-                          src_private->xwindow,
-                          width, height, xsrc, ysrc,
-                          drawable_private->xwindow, xdest, ydest));
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  src_rgn = CreateRectRgn (0, 0, src_private->width + 1, src_private->height + 1);
-  draw_rgn = CreateRectRgn (xsrc, ysrc, xsrc + width + 1, ysrc + height + 1);
-  SetRectEmpty (&r);
-  outside_rgn = CreateRectRgnIndirect (&r);
-  
-  if (drawable_private->window_type != GDK_DRAWABLE_PIXMAP)
-    {
-      /* If we are drawing on a window, calculate the region that is
-       * outside the source pixmap, and invalidate that, causing it to
-       * be cleared. XXX
-       */
-      if (CombineRgn (outside_rgn, draw_rgn, src_rgn, RGN_DIFF) != NULLREGION)
-       {
-         OffsetRgn (outside_rgn, xdest, ydest);
-         GDK_NOTE (MISC, (GetRgnBox (outside_rgn, &r),
-                          g_print ("...calling InvalidateRgn, "
-                                   "bbox: %dx%d@+%d+%d\n",
-                                   r.right - r.left - 1, r.bottom - r.top - 1,
-                                   r.left, r.top)));
-         InvalidateRgn (drawable_private->xwindow, outside_rgn, TRUE);
-       }
-    }
-
-#if 1 /* Don't know if this is necessary  */
-  if (CombineRgn (draw_rgn, draw_rgn, src_rgn, RGN_AND) == COMPLEXREGION)
-    g_warning ("gdk_draw_pixmap: CombineRgn returned a COMPLEXREGION");
-
-  GetRgnBox (draw_rgn, &r);
-  if (r.left != xsrc
-      || r.top != ysrc
-      || r.right != xsrc + width + 1
-      || r.bottom != ysrc + height + 1)
-    {
-      xdest += r.left - xsrc;
-      xsrc = r.left;
-      ydest += r.top - ysrc;
-      ysrc = r.top;
-      width = r.right - xsrc - 1;
-      height = r.bottom - ysrc - 1;
-      
-      GDK_NOTE (MISC, g_print ("... restricted to src: %dx%d@+%d+%d, "
-                              "dest: @+%d+%d\n",
-                              width, height, xsrc, ysrc,
-                              xdest, ydest));
-    }
-#endif
-
-  DeleteObject (src_rgn);
-  DeleteObject (draw_rgn);
-  DeleteObject (outside_rgn);
-
-  /* Strangely enough, this function is called also to bitblt
-   * from a window.
-   */
-  if (src_private->window_type == GDK_DRAWABLE_PIXMAP)
-    {
-      if ((srcdc = CreateCompatibleDC (hdc)) == NULL)
-       g_warning ("gdk_draw_pixmap: CreateCompatibleDC failed");
-      
-      if ((hgdiobj = SelectObject (srcdc, src_private->xwindow)) == NULL)
-       g_warning ("gdk_draw_pixmap: SelectObject #1 failed");
-      
-      if (!BitBlt (hdc, xdest, ydest, width, height,
-                  srcdc, xsrc, ysrc, SRCCOPY))
-       g_warning ("gdk_draw_pixmap: BitBlt failed");
-      
-      if ((SelectObject (srcdc, hgdiobj) == NULL))
-       g_warning ("gdk_draw_pixmap: SelectObject #2 failed");
-      
-      if (!DeleteDC (srcdc))
-       g_warning ("gdk_draw_pixmap: DeleteDC failed");
-    }
-  else
-    {
-      if (drawable_private->xwindow == src_private->xwindow)
-       {
-         /* Blitting inside a window, use ScrollDC */
-         RECT scrollRect, clipRect, emptyRect;
-         HRGN updateRgn;
-
-         scrollRect.left = MIN (xsrc, xdest);
-         scrollRect.top = MIN (ysrc, ydest);
-         scrollRect.right = MAX (xsrc + width + 1, xdest + width + 1);
-         scrollRect.bottom = MAX (ysrc + height + 1, ydest + height + 1);
-
-         clipRect.left = xdest;
-         clipRect.top = ydest;
-         clipRect.right = xdest + width + 1;
-         clipRect.bottom = ydest + height + 1;
-
-         SetRectEmpty (&emptyRect);
-         updateRgn = CreateRectRgnIndirect (&emptyRect);
-         if (!ScrollDC (hdc, xdest - xsrc, ydest - ysrc,
-                        &scrollRect, &clipRect,
-                        updateRgn, NULL))
-           g_warning ("gdk_draw_pixmap: ScrollDC failed");
-         if (!InvalidateRgn (drawable_private->xwindow, updateRgn, FALSE))
-           g_warning ("gdk_draw_pixmap: InvalidateRgn failed");
-         if (!UpdateWindow (drawable_private->xwindow))
-           g_warning ("gdk_draw_pixmap: UpdateWindow failed");
-       }
-      else
-       {
-         if ((srcdc = GetDC (src_private->xwindow)) == NULL)
-           g_warning ("gdk_draw_pixmap: GetDC failed");
-         
-         if (!BitBlt (hdc, xdest, ydest, width, height,
-                      srcdc, xsrc, ysrc, SRCCOPY))
-           g_warning ("gdk_draw_pixmap: BitBlt failed");
-         ReleaseDC (src_private->xwindow, srcdc);
-       }
-    }
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_image (GdkDrawable *drawable,
-               GdkGC       *gc,
-               GdkImage    *image,
-               gint         xsrc,
-               gint         ysrc,
-               gint         xdest,
-               gint         ydest,
-               gint         width,
-               gint         height)
-{
-  GdkImagePrivate *image_private;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (image != NULL);
-  g_return_if_fail (gc != NULL);
-
-  image_private = (GdkImagePrivate*) image;
-
-  g_return_if_fail (image_private->image_put != NULL);
-
-  if (width == -1)
-    width = image->width;
-  if (height == -1)
-    height = image->height;
-
-  (* image_private->image_put) (drawable, gc, image, xsrc, ysrc,
-                               xdest, ydest, width, height);
-}
-
-void
-gdk_draw_points (GdkDrawable *drawable,
-                GdkGC       *gc,
-                GdkPoint    *points,
-                gint         npoints)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  int i;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail ((points != NULL) && (npoints > 0));
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-  
-  GDK_NOTE (MISC, g_print ("gdk_draw_points: %#x destdc: (%d) %#x "
-                          "npoints: %d\n",
-                          drawable_private->xwindow, gc_private, hdc,
-                          npoints));
-
-  for (i = 0; i < npoints; i++)
-    {
-      if (!MoveToEx (hdc, points[i].x, points[i].y, NULL))
-       g_warning ("gdk_draw_points: MoveToEx failed");
-      if (!LineTo (hdc, points[i].x + 1, points[i].y))
-       g_warning ("gdk_draw_points: LineTo failed");
-    }
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_segments (GdkDrawable *drawable,
-                  GdkGC       *gc,
-                  GdkSegment  *segs,
-                  gint         nsegs)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  int i;
-
-  if (nsegs <= 0)
-    return;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (segs != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-
-  for (i = 0; i < nsegs; i++)
-    {
-      if (!MoveToEx (hdc, segs[i].x1, segs[i].y1, NULL))
-       g_warning ("gdk_draw_segments: MoveToEx failed");
-      if (!LineTo (hdc, segs[i].x2, segs[i].y2))
-       g_warning ("gdk_draw_segments: LineTo #1 failed");
-      
-      /* Draw end pixel */
-      if (gc_private->pen_width == 1)
-       if (!LineTo (hdc, segs[i].x2 + 1, segs[i].y2))
-         g_warning ("gdk_draw_segments: LineTo #2 failed");
-    }
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
-
-void
-gdk_draw_lines (GdkDrawable *drawable,
-               GdkGC       *gc,
-               GdkPoint    *points,
-               gint         npoints)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  POINT *pts;
-  int i;
-
-  if (npoints < 2)
-    return;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (points != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-#if 1
-  pts = g_malloc (npoints * sizeof (POINT));
-
-  for (i = 0; i < npoints; i++)
-    {
-      pts[i].x = points[i].x;
-      pts[i].y = points[i].y;
-    }
-  
-  if (!Polyline (hdc, pts, npoints))
-    g_warning ("gdk_draw_lines: Polyline(,,%d) failed", npoints);
-  
-  g_free (pts);
-  
-  /* Draw end pixel */
-  if (gc_private->pen_width == 1)
-    {
-      MoveToEx (hdc, points[npoints-1].x, points[npoints-1].y, NULL);
-      if (!LineTo (hdc, points[npoints-1].x + 1, points[npoints-1].y))
-       g_warning ("gdk_draw_lines: LineTo failed");
-    }
-#else
-  MoveToEx (hdc, points[0].x, points[0].y, NULL);
-  for (i = 1; i < npoints; i++)
-    if (!LineTo (hdc, points[i].x, points[i].y))
-      g_warning ("gdk_draw_lines: LineTo #1 failed");
-  
-  /* Draw end pixel */
-  if (gc_private->pen_width == 1)
-    if (!LineTo (hdc, points[npoints-1].x + 1, points[npoints-1].y))
-      g_warning ("gdk_draw_lines: LineTo #2 failed");
-#endif 
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
deleted file mode 100644 (file)
index 9ef45fe..0000000
+++ /dev/null
@@ -1,5193 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1998-1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#define NEW_PROPAGATION_CODE
-
-#define USE_DISPATCHMESSAGE
-
-/* Cannot use TrackMouseEvent, as the stupid WM_MOUSELEAVE message
- * doesn't tell us where the mouse has gone. Thus we cannot use it to
- * generate a correct GdkNotifyType. Pity, as using TrackMouseEvent
- * otherwise would make it possible to reliably generate
- * GDK_LEAVE_NOTIFY events, which would help get rid of those pesky
- * tooltips sometimes popping up in the wrong place.
- */
-/* define USE_TRACKMOUSEEVENT */
-
-#include <stdio.h>
-
-#include <windows.h>
-
-#include <objbase.h>
-#include <imm.h>
-
-#ifdef HAVE_DIMM_H
-#include <dimm.h>
-#else
-#include "surrogate-dimm.h"
-#endif
-
-#ifdef HAVE_WINTAB
-#include <wintab.h>
-#endif
-
-#include "gdk.h"
-#include "gdkx.h"
-
-#include "gdkkeysyms.h"
-
-#include "gdkinputprivate.h"
-
-#define PING() printf("%s: %d\n",__FILE__,__LINE__),fflush(stdout)
-
-#define WINDOW_PRIVATE(wp) ((GdkWindowPrivate *) (wp))
-
-typedef struct _GdkIOClosure GdkIOClosure;
-typedef struct _GdkEventPrivate GdkEventPrivate;
-
-#define DOUBLE_CLICK_TIME      250
-#define TRIPLE_CLICK_TIME      500
-#define DOUBLE_CLICK_DIST      5
-#define TRIPLE_CLICK_DIST      5
-
-gint gdk_event_func_from_window_proc = FALSE;
-
-typedef enum
-{
-  /* Following flag is set for events on the event queue during
-   * translation and cleared afterwards.
-   */
-  GDK_EVENT_PENDING = 1 << 0
-} GdkEventFlags;
-
-struct _GdkIOClosure
-{
-  GdkInputFunction function;
-  GdkInputCondition condition;
-  GdkDestroyNotify notify;
-  gpointer data;
-};
-
-struct _GdkEventPrivate
-{
-  GdkEvent event;
-  guint    flags;
-};
-
-/* 
- * Private function declarations
- */
-
-static GdkEvent *gdk_event_new         (void);
-static GdkFilterReturn
-                gdk_event_apply_filters(MSG      *xevent,
-                                        GdkEvent *event,
-                                        GList    *filters);
-static gboolean  gdk_event_translate   (GdkEvent *event, 
-                                        MSG      *xevent,
-                                        gboolean *ret_val_flagp,
-                                        gint     *ret_valp);
-static void      gdk_events_queue       (void);
-static GdkEvent *gdk_event_unqueue      (void);
-static gboolean  gdk_event_prepare      (gpointer  source_data, 
-                                        GTimeVal *current_time,
-                                        gint     *timeout);
-static gboolean  gdk_event_check        (gpointer  source_data,
-                                        GTimeVal *current_time);
-static gboolean  gdk_event_dispatch     (gpointer  source_data,
-                                        GTimeVal *current_time,
-                                        gpointer  user_data);
-
-static void     gdk_synthesize_click   (GdkEvent     *event, 
-                                        gint          nclicks);
-
-/* Private variable declarations
- */
-
-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 GdkWindow *p_grab_window = NULL; /* Window that currently
-                                        * holds the pointer grab
-                                        */
-
-static GdkWindow *k_grab_window = NULL; /* Window the holds the
-                                        * keyboard grab
-                                        */
-
-static GList *client_filters;  /* Filters for client messages */
-
-static gboolean p_grab_automatic;
-static GdkEventMask p_grab_mask;
-static gboolean p_grab_owner_events, k_grab_owner_events;
-static HCURSOR p_grab_cursor;
-
-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,
-  gdk_event_dispatch,
-  (GDestroyNotify)g_free
-};
-
-GPollFD event_poll_fd;
-
-static GdkWindow *curWnd = NULL;
-static HWND active = NULL;
-static gint curX, curY;
-static gdouble curXroot, curYroot;
-static UINT gdk_ping_msg;
-static gboolean ignore_WM_CHAR = FALSE;
-static gboolean is_AltGr_key = FALSE;
-
-static IActiveIMMApp *paimmapp = NULL;
-static IActiveIMMMessagePumpOwner *paimmmpo = NULL;
-
-typedef BOOL (WINAPI *PFN_TrackMouseEvent) (LPTRACKMOUSEEVENT);
-static PFN_TrackMouseEvent p_TrackMouseEvent = NULL;
-
-static gboolean use_IME_COMPOSITION = FALSE;
-
-LRESULT CALLBACK 
-gdk_WindowProc (HWND hWnd,
-               UINT message,
-               WPARAM wParam,
-               LPARAM lParam)
-{
-  GdkEvent event;
-  GdkEvent *eventp;
-  MSG msg;
-  DWORD pos;
-  LRESULT lres;
-  gint ret_val;
-  gboolean ret_val_flag;
-
-  GDK_NOTE (EVENTS, g_print ("gdk_WindowProc: %#x %#.03x\n", hWnd, message));
-
-  msg.hwnd = hWnd;
-  msg.message = message;
-  msg.wParam = wParam;
-  msg.lParam = lParam;
-  msg.time = GetTickCount ();
-  pos = GetMessagePos ();
-  msg.pt.x = LOWORD (pos);
-  msg.pt.y = HIWORD (pos);
-
-  ((GdkEventPrivate *)&event)->flags |= GDK_EVENT_PENDING;
-  if (gdk_event_translate (&event, &msg, &ret_val_flag, &ret_val))
-    {
-      ((GdkEventPrivate *)&event)->flags &= ~GDK_EVENT_PENDING;
-#if 1
-      if (event.any.type == GDK_CONFIGURE)
-       {
-         /* Compress configure events */
-         GList *list = queued_events;
-
-         while (list != NULL
-                && (((GdkEvent *)list->data)->any.type != GDK_CONFIGURE
-                    || ((GdkEvent *)list->data)->any.window != event.any.window))
-           list = list->next;
-         if (list != NULL)
-           {
-             *((GdkEvent *)list->data) = event;
-             gdk_window_unref (event.any.window);
-             /* Wake up WaitMessage */
-             PostMessage (NULL, gdk_ping_msg, 0, 0);
-             return FALSE;
-           }
-       }
-      else if (event.any.type == GDK_EXPOSE)
-       {
-         /* Compress expose events */
-         GList *list = queued_events;
-
-         while (list != NULL
-                && (((GdkEvent *)list->data)->any.type != GDK_EXPOSE
-                    || ((GdkEvent *)list->data)->any.window != event.any.window))
-           list = list->next;
-         if (list != NULL)
-           {
-             GdkRectangle u;
-
-             gdk_rectangle_union (&event.expose.area,
-                                  &((GdkEvent *)list->data)->expose.area,
-                                  &u);
-             ((GdkEvent *)list->data)->expose.area = u;
-             gdk_window_unref (event.any.window);
-             /* Wake up WaitMessage */
-             PostMessage (NULL, gdk_ping_msg, 0, 0);
-             return FALSE;
-           }
-       }
-#endif
-      eventp = gdk_event_new ();
-      *eventp = event;
-
-      /* Philippe Colantoni <colanton@aris.ss.uci.edu> suggests this
-       * in order to handle events while opaque resizing neatly.  I
-       * don't want it as default. Set the
-       * GDK_EVENT_FUNC_FROM_WINDOW_PROC env var to get this
-       * behaviour.
-       */
-      if (gdk_event_func_from_window_proc && event_func)
-       {
-         GDK_THREADS_ENTER ();
-         
-         (*event_func) (eventp, event_data);
-         gdk_event_free (eventp);
-         
-         GDK_THREADS_LEAVE ();
-       }
-      else
-       {
-         gdk_event_queue_append (eventp);
-#if 1
-         /* Wake up WaitMessage */
-         PostMessage (NULL, gdk_ping_msg, 0, 0);
-#endif
-       }
-      
-      if (ret_val_flag)
-       return ret_val;
-      else
-       return FALSE;
-    }
-
-  if (ret_val_flag)
-    return ret_val;
-  else
-    {
-      if (paimmapp == NULL
-         || (*paimmapp->lpVtbl->OnDefWindowProc) (paimmapp, hWnd, message, wParam, lParam, &lres) == S_FALSE)
-       return DefWindowProc (hWnd, message, wParam, lParam);
-      else
-       return lres;
-    }
-}
-
-/*********************************************
- * 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:
- *************************************************************/
-
-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)
-{
-  HRESULT hres;
-  HMODULE user32, imm32;
-  HINSTANCE commctrl32;
-
-  if (g_pipe_readable_msg == 0)
-    g_pipe_readable_msg = RegisterWindowMessage ("g-pipe-readable");
-  GDK_NOTE (EVENTS, g_print ("g-pipe-readable = %#.03x\n",
-                            g_pipe_readable_msg));
-
-  gdk_ping_msg = RegisterWindowMessage ("gdk-ping");
-  GDK_NOTE (EVENTS, g_print ("gdk-ping = %#.03x\n",
-                            gdk_ping_msg));
-
-  g_source_add (GDK_PRIORITY_EVENTS, TRUE, &event_funcs, NULL, NULL, NULL);
-
-  event_poll_fd.fd = G_WIN32_MSG_HANDLE;
-  event_poll_fd.events = G_IO_IN;
-  
-  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;
-
-  hres = CoCreateInstance (&CLSID_CActiveIMM,
-                          NULL,
-                          CLSCTX_ALL,
-                          &IID_IActiveIMMApp,
-                          (LPVOID *) &paimmapp);
-  
-  if (hres == S_OK)
-    {
-      GDK_NOTE (EVENTS, g_print ("IActiveIMMApp created %#x\n",
-                                paimmapp));
-      (*paimmapp->lpVtbl->Activate) (paimmapp, TRUE);
-      
-      hres = (*paimmapp->lpVtbl->QueryInterface) (paimmapp, &IID_IActiveIMMMessagePumpOwner, &paimmmpo);
-      GDK_NOTE (EVENTS, g_print ("IActiveIMMMessagePumpOwner created %#x\n",
-                                paimmmpo));
-      (paimmmpo->lpVtbl->Start) (paimmmpo);
-    }
-
-#ifdef USE_TRACKMOUSEEVENT
-  user32 = GetModuleHandle ("user32.dll");
-  if ((p_TrackMouseEvent = GetProcAddress (user32, "TrackMouseEvent")) == NULL)
-    {
-      if ((commctrl32 = LoadLibrary ("commctrl32.dll")) != NULL)
-       p_TrackMouseEvent = (PFN_TrackMouseEvent)
-         GetProcAddress (commctrl32, "_TrackMouseEvent");
-    }
-  if (p_TrackMouseEvent != NULL)
-    GDK_NOTE (EVENTS, g_print ("Using TrackMouseEvent to detect leave events\n"));
-#endif
-  if (windows_version < 0x80000000 && (windows_version & 0xFF) == 5)
-    {
-      /* On Win2k (Beta 3, at least) WM_IME_CHAR doesn't seem to work
-       * correctly for non-Unicode applications. Handle
-       * WM_IME_COMPOSITION with GCS_RESULTSTR instead, fetch the
-       * Unicode char from the IME with ImmGetCompositionStringW().
-       */
-      use_IME_COMPOSITION = TRUE;
-    }
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_events_pending
- *
- *   Returns if events are pending on the queue.
- *
- * Arguments:
- *
- * Results:
- *   Returns TRUE if events are pending
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gboolean
-gdk_events_pending (void)
-{
-  MSG msg;
-
-  return (gdk_event_queue_find_first() || PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE));
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_event_get_graphics_expose
- *
- *   Waits for a GraphicsExpose or NoExpose event
- *
- * Arguments:
- *
- * Results: 
- *   For GraphicsExpose events, returns a pointer to the event
- *   converted into a GdkEvent Otherwise, returns NULL.
- *
- * Side effects:
- *
- *-------------------------------------------------------------- */
-
-GdkEvent*
-gdk_event_get_graphics_expose (GdkWindow *window)
-{
-  MSG xevent;
-  GdkEvent *event;
-  GdkWindowPrivate *private = (GdkWindowPrivate *) window;
-
-  g_return_val_if_fail (window != NULL, NULL);
-  
-  GDK_NOTE (EVENTS, g_print ("gdk_event_get_graphics_expose\n"));
-
-#if 1
-  /* Some nasty bugs here, just return NULL for now. */
-  return NULL;
-#else
-  if (GetMessage (&xevent, private->xwindow, WM_PAINT, WM_PAINT))
-    {
-      event = gdk_event_new ();
-      
-      if (gdk_event_translate (event, &xevent, NULL, NULL))
-       return event;
-      else
-       gdk_event_free (event);
-    }
-  
-  return NULL; 
-#endif
-}
-
-/*************************************************************
- * 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;
-  GList *tmp_list;
-  
-  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;
-  gchar *s;
-  
-  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:
-      if (event->key.length > 0)
-       {
-         s = event->key.string;
-         new_event->key.string = g_malloc (event->key.length + 1);
-         memcpy (new_event->key.string, s, event->key.length + 1);
-       }
-      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;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_pointer_grab
- *
- *   Grabs the pointer to a specific window
- *
- * Arguments:
- *   "window" is the window which will receive the grab
- *   "owner_events" specifies whether events will be reported as is,
- *     or relative to "window"
- *   "event_mask" masks only interesting events
- *   "confine_to" limits the cursor movement to the specified window
- *   "cursor" changes the cursor for the duration of the grab
- *   "time" specifies the time
- *
- * Results:
- *
- * Side effects:
- *   requires a corresponding call to gdk_pointer_ungrab
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_pointer_grab (GdkWindow *    window,
-                 gint            owner_events,
-                 GdkEventMask    event_mask,
-                 GdkWindow *     confine_to,
-                 GdkCursor *     cursor,
-                 guint32         time)
-{
-  HWND xwindow;
-  HWND xconfine_to;
-  HCURSOR xcursor;
-  GdkCursorPrivate *cursor_private;
-  gint return_val;
-
-  g_return_val_if_fail (window != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
-  g_return_val_if_fail (confine_to == NULL || GDK_IS_WINDOW (confine_to), 0);
-  
-  cursor_private = (GdkCursorPrivate*) cursor;
-  
-  xwindow = GDK_DRAWABLE_XID (window);
-  
-  if (!confine_to || GDK_DRAWABLE_DESTROYED (confine_to))
-    xconfine_to = NULL;
-  else
-    xconfine_to = GDK_DRAWABLE_XID (confine_to);
-  
-  if (!cursor)
-    xcursor = NULL;
-  else
-    xcursor = cursor_private->xcursor;
-  
-  if (gdk_input_vtable.grab_pointer)
-    return_val = gdk_input_vtable.grab_pointer (window,
-                                               owner_events,
-                                               event_mask,
-                                               confine_to,
-                                               time);
-  else
-    return_val = Success;
-  
-  if (return_val == Success)
-    {
-      if (!GDK_DRAWABLE_DESTROYED (window))
-      {
-       GDK_NOTE (EVENTS, g_print ("gdk_pointer_grab: %#x %s %#x%s%s\n",
-                                  xwindow,
-                                  (owner_events ? "TRUE" : "FALSE"),
-                                  xcursor,
-                                  (event_mask & GDK_BUTTON_PRESS_MASK) ?
-                                  " PRESS" : "",
-                                  (event_mask & GDK_BUTTON_RELEASE_MASK) ?
-                                  " RELEASE" : ""));
-       p_grab_mask = event_mask;
-       p_grab_owner_events = (owner_events != 0);
-       p_grab_automatic = FALSE;
-
-#if 0 /* Menus don't work if we use mouse capture. Pity, because many other
-       * things work better with mouse capture.
-       */
-       SetCapture (xwindow);
-#endif
-       return_val = GrabSuccess;
-      }
-      else
-       return_val = AlreadyGrabbed;
-    }
-  
-  if (return_val == GrabSuccess)
-    {
-      p_grab_window = window;
-      p_grab_cursor = xcursor;
-    }
-  
-  return return_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_pointer_ungrab
- *
- *   Releases any pointer grab
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_pointer_ungrab (guint32 time)
-{
-  if (gdk_input_vtable.ungrab_pointer)
-    gdk_input_vtable.ungrab_pointer (time);
-#if 0
-  if (GetCapture () != NULL)
-    ReleaseCapture ();
-#endif
-  GDK_NOTE (EVENTS, g_print ("gdk_pointer_ungrab\n"));
-
-  p_grab_window = NULL;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_pointer_is_grabbed
- *
- *   Tell wether there is an active x pointer grab in effect
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_pointer_is_grabbed (void)
-{
-  return p_grab_window != NULL;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_keyboard_grab
- *
- *   Grabs the keyboard to a specific window
- *
- * Arguments:
- *   "window" is the window which will receive the grab
- *   "owner_events" specifies whether events will be reported as is,
- *     or relative to "window"
- *   "time" specifies the time
- *
- * Results:
- *
- * Side effects:
- *   requires a corresponding call to gdk_keyboard_ungrab
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_keyboard_grab (GdkWindow *    window,
-                  gint            owner_events,
-                  guint32         time)
-{
-  gint return_val;
-  
-  g_return_val_if_fail (window != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
-  
-  GDK_NOTE (EVENTS, g_print ("gdk_keyboard_grab %#x\n",
-                            GDK_DRAWABLE_XID (window)));
-
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      k_grab_owner_events = owner_events != 0;
-      return_val = GrabSuccess;
-    }
-  else
-    return_val = AlreadyGrabbed;
-
-  if (return_val == GrabSuccess)
-    k_grab_window = window;
-  
-  return return_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_keyboard_ungrab
- *
- *   Releases any keyboard grab
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_keyboard_ungrab (guint32 time)
-{
-  GDK_NOTE (EVENTS, g_print ("gdk_keyboard_ungrab\n"));
-
-  k_grab_window = NULL;
-}
-
-static void
-gdk_io_destroy (gpointer data)
-{
-  GdkIOClosure *closure = data;
-
-  if (closure->notify)
-    closure->notify (closure->data);
-
-  g_free (closure);
-}
-
-static gboolean  
-gdk_io_invoke (GIOChannel   *source,
-              GIOCondition  condition,
-              gpointer      data)
-{
-  GdkIOClosure *closure = data;
-  GdkInputCondition gdk_cond = 0;
-
-  if (condition & (G_IO_IN | G_IO_PRI))
-    gdk_cond |= GDK_INPUT_READ;
-  if (condition & G_IO_OUT)
-    gdk_cond |= GDK_INPUT_WRITE;
-  if (condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL))
-    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 |= (G_IO_IN | G_IO_PRI);
-  if (condition & GDK_INPUT_WRITE)
-    cond |= G_IO_OUT;
-  if (condition & GDK_INPUT_EXCEPTION)
-    cond |= G_IO_ERR|G_IO_HUP|G_IO_NVAL;
-
-  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 GdkFilterReturn
-gdk_event_apply_filters (MSG      *xevent,
-                        GdkEvent *event,
-                        GList    *filters)
-{
-  GdkEventFilter *filter;
-  GList *tmp_list;
-  GdkFilterReturn result;
-  
-  tmp_list = filters;
-  
-  while (tmp_list)
-    {
-      filter = (GdkEventFilter *) tmp_list->data;
-      
-      result = (*filter->function) (xevent, event, filter->data);
-      if (result !=  GDK_FILTER_CONTINUE)
-       return result;
-      
-      tmp_list = tmp_list->next;
-    }
-  
-  return GDK_FILTER_CONTINUE;
-}
-
-void 
-gdk_add_client_message_filter (GdkAtom       message_type,
-                              GdkFilterFunc func,
-                              gpointer      data)
-{
-  GdkClientFilter *filter = g_new (GdkClientFilter, 1);
-
-  filter->type = message_type;
-  filter->function = func;
-  filter->data = data;
-  
-  client_filters = g_list_prepend (client_filters, filter);
-}
-
-/* Thanks to Markus G. Kuhn <mkuhn@acm.org> for the ksysym<->Unicode
- * mapping functions, from the xterm sources.
- */
-
-#if 0 /* Keyval-to-Unicode isn't actually needed  */
-
-struct k2u {
-  unsigned short keysym;
-  unsigned short ucs;
-} k2utab[] = {
-  { 0x01a1, 0x0104 }, /*                     Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */
-  { 0x01a2, 0x02d8 }, /*                       breve ˘ BREVE */
-  { 0x01a3, 0x0141 }, /*                     Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */
-  { 0x01a5, 0x013d }, /*                      Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */
-  { 0x01a6, 0x015a }, /*                      Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */
-  { 0x01a9, 0x0160 }, /*                      Scaron Š LATIN CAPITAL LETTER S WITH CARON */
-  { 0x01aa, 0x015e }, /*                    Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */
-  { 0x01ab, 0x0164 }, /*                      Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */
-  { 0x01ac, 0x0179 }, /*                      Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */
-  { 0x01ae, 0x017d }, /*                      Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */
-  { 0x01af, 0x017b }, /*                   Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */
-  { 0x01b1, 0x0105 }, /*                     aogonek ą LATIN SMALL LETTER A WITH OGONEK */
-  { 0x01b2, 0x02db }, /*                      ogonek ˛ OGONEK */
-  { 0x01b3, 0x0142 }, /*                     lstroke ł LATIN SMALL LETTER L WITH STROKE */
-  { 0x01b5, 0x013e }, /*                      lcaron ľ LATIN SMALL LETTER L WITH CARON */
-  { 0x01b6, 0x015b }, /*                      sacute ś LATIN SMALL LETTER S WITH ACUTE */
-  { 0x01b7, 0x02c7 }, /*                       caron ˇ CARON */
-  { 0x01b9, 0x0161 }, /*                      scaron š LATIN SMALL LETTER S WITH CARON */
-  { 0x01ba, 0x015f }, /*                    scedilla ş LATIN SMALL LETTER S WITH CEDILLA */
-  { 0x01bb, 0x0165 }, /*                      tcaron ť LATIN SMALL LETTER T WITH CARON */
-  { 0x01bc, 0x017a }, /*                      zacute ź LATIN SMALL LETTER Z WITH ACUTE */
-  { 0x01bd, 0x02dd }, /*                 doubleacute ˝ DOUBLE ACUTE ACCENT */
-  { 0x01be, 0x017e }, /*                      zcaron ž LATIN SMALL LETTER Z WITH CARON */
-  { 0x01bf, 0x017c }, /*                   zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */
-  { 0x01c0, 0x0154 }, /*                      Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */
-  { 0x01c3, 0x0102 }, /*                      Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */
-  { 0x01c5, 0x0139 }, /*                      Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */
-  { 0x01c6, 0x0106 }, /*                      Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */
-  { 0x01c8, 0x010c }, /*                      Ccaron Č LATIN CAPITAL LETTER C WITH CARON */
-  { 0x01ca, 0x0118 }, /*                     Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */
-  { 0x01cc, 0x011a }, /*                      Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */
-  { 0x01cf, 0x010e }, /*                      Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */
-  { 0x01d0, 0x0110 }, /*                     Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */
-  { 0x01d1, 0x0143 }, /*                      Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */
-  { 0x01d2, 0x0147 }, /*                      Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */
-  { 0x01d5, 0x0150 }, /*                Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
-  { 0x01d8, 0x0158 }, /*                      Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */
-  { 0x01d9, 0x016e }, /*                       Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */
-  { 0x01db, 0x0170 }, /*                Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
-  { 0x01de, 0x0162 }, /*                    Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */
-  { 0x01e0, 0x0155 }, /*                      racute ŕ LATIN SMALL LETTER R WITH ACUTE */
-  { 0x01e3, 0x0103 }, /*                      abreve ă LATIN SMALL LETTER A WITH BREVE */
-  { 0x01e5, 0x013a }, /*                      lacute ĺ LATIN SMALL LETTER L WITH ACUTE */
-  { 0x01e6, 0x0107 }, /*                      cacute ć LATIN SMALL LETTER C WITH ACUTE */
-  { 0x01e8, 0x010d }, /*                      ccaron č LATIN SMALL LETTER C WITH CARON */
-  { 0x01ea, 0x0119 }, /*                     eogonek ę LATIN SMALL LETTER E WITH OGONEK */
-  { 0x01ec, 0x011b }, /*                      ecaron ě LATIN SMALL LETTER E WITH CARON */
-  { 0x01ef, 0x010f }, /*                      dcaron ď LATIN SMALL LETTER D WITH CARON */
-  { 0x01f0, 0x0111 }, /*                     dstroke đ LATIN SMALL LETTER D WITH STROKE */
-  { 0x01f1, 0x0144 }, /*                      nacute ń LATIN SMALL LETTER N WITH ACUTE */
-  { 0x01f2, 0x0148 }, /*                      ncaron ň LATIN SMALL LETTER N WITH CARON */
-  { 0x01f5, 0x0151 }, /*                odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */
-  { 0x01f8, 0x0159 }, /*                      rcaron ř LATIN SMALL LETTER R WITH CARON */
-  { 0x01f9, 0x016f }, /*                       uring ů LATIN SMALL LETTER U WITH RING ABOVE */
-  { 0x01fb, 0x0171 }, /*                udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */
-  { 0x01fe, 0x0163 }, /*                    tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */
-  { 0x01ff, 0x02d9 }, /*                    abovedot ˙ DOT ABOVE */
-  { 0x02a1, 0x0126 }, /*                     Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */
-  { 0x02a6, 0x0124 }, /*                 Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
-  { 0x02a9, 0x0130 }, /*                   Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */
-  { 0x02ab, 0x011e }, /*                      Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */
-  { 0x02ac, 0x0134 }, /*                 Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
-  { 0x02b1, 0x0127 }, /*                     hstroke ħ LATIN SMALL LETTER H WITH STROKE */
-  { 0x02b6, 0x0125 }, /*                 hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */
-  { 0x02b9, 0x0131 }, /*                    idotless ı LATIN SMALL LETTER DOTLESS I */
-  { 0x02bb, 0x011f }, /*                      gbreve ğ LATIN SMALL LETTER G WITH BREVE */
-  { 0x02bc, 0x0135 }, /*                 jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */
-  { 0x02c5, 0x010a }, /*                   Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */
-  { 0x02c6, 0x0108 }, /*                 Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
-  { 0x02d5, 0x0120 }, /*                   Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */
-  { 0x02d8, 0x011c }, /*                 Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
-  { 0x02dd, 0x016c }, /*                      Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */
-  { 0x02de, 0x015c }, /*                 Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
-  { 0x02e5, 0x010b }, /*                   cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */
-  { 0x02e6, 0x0109 }, /*                 ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */
-  { 0x02f5, 0x0121 }, /*                   gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */
-  { 0x02f8, 0x011d }, /*                 gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */
-  { 0x02fd, 0x016d }, /*                      ubreve ŭ LATIN SMALL LETTER U WITH BREVE */
-  { 0x02fe, 0x015d }, /*                 scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */
-  { 0x03a2, 0x0138 }, /*                         kra ĸ LATIN SMALL LETTER KRA */
-  { 0x03a3, 0x0156 }, /*                    Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */
-  { 0x03a5, 0x0128 }, /*                      Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */
-  { 0x03a6, 0x013b }, /*                    Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */
-  { 0x03aa, 0x0112 }, /*                     Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */
-  { 0x03ab, 0x0122 }, /*                    Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */
-  { 0x03ac, 0x0166 }, /*                      Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */
-  { 0x03b3, 0x0157 }, /*                    rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */
-  { 0x03b5, 0x0129 }, /*                      itilde ĩ LATIN SMALL LETTER I WITH TILDE */
-  { 0x03b6, 0x013c }, /*                    lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */
-  { 0x03ba, 0x0113 }, /*                     emacron ē LATIN SMALL LETTER E WITH MACRON */
-  { 0x03bb, 0x0123 }, /*                    gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */
-  { 0x03bc, 0x0167 }, /*                      tslash ŧ LATIN SMALL LETTER T WITH STROKE */
-  { 0x03bd, 0x014a }, /*                         ENG Ŋ LATIN CAPITAL LETTER ENG */
-  { 0x03bf, 0x014b }, /*                         eng ŋ LATIN SMALL LETTER ENG */
-  { 0x03c0, 0x0100 }, /*                     Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */
-  { 0x03c7, 0x012e }, /*                     Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */
-  { 0x03cc, 0x0116 }, /*                   Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */
-  { 0x03cf, 0x012a }, /*                     Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */
-  { 0x03d1, 0x0145 }, /*                    Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */
-  { 0x03d2, 0x014c }, /*                     Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */
-  { 0x03d3, 0x0136 }, /*                    Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */
-  { 0x03d9, 0x0172 }, /*                     Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */
-  { 0x03dd, 0x0168 }, /*                      Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */
-  { 0x03de, 0x016a }, /*                     Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */
-  { 0x03e0, 0x0101 }, /*                     amacron ā LATIN SMALL LETTER A WITH MACRON */
-  { 0x03e7, 0x012f }, /*                     iogonek į LATIN SMALL LETTER I WITH OGONEK */
-  { 0x03ec, 0x0117 }, /*                   eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */
-  { 0x03ef, 0x012b }, /*                     imacron ī LATIN SMALL LETTER I WITH MACRON */
-  { 0x03f1, 0x0146 }, /*                    ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */
-  { 0x03f2, 0x014d }, /*                     omacron ō LATIN SMALL LETTER O WITH MACRON */
-  { 0x03f3, 0x0137 }, /*                    kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */
-  { 0x03f9, 0x0173 }, /*                     uogonek ų LATIN SMALL LETTER U WITH OGONEK */
-  { 0x03fd, 0x0169 }, /*                      utilde ũ LATIN SMALL LETTER U WITH TILDE */
-  { 0x03fe, 0x016b }, /*                     umacron ū LATIN SMALL LETTER U WITH MACRON */
-  { 0x047e, 0x203e }, /*                    overline ‾ OVERLINE */
-  { 0x04a1, 0x3002 }, /*               kana_fullstop 。 IDEOGRAPHIC FULL STOP */
-  { 0x04a2, 0x300c }, /*         kana_openingbracket 「 LEFT CORNER BRACKET */
-  { 0x04a3, 0x300d }, /*         kana_closingbracket 」 RIGHT CORNER BRACKET */
-  { 0x04a4, 0x3001 }, /*                  kana_comma 、 IDEOGRAPHIC COMMA */
-  { 0x04a5, 0x30fb }, /*            kana_conjunctive ・ KATAKANA MIDDLE DOT */
-  { 0x04a6, 0x30f2 }, /*                     kana_WO ヲ KATAKANA LETTER WO */
-  { 0x04a7, 0x30a1 }, /*                      kana_a ァ KATAKANA LETTER SMALL A */
-  { 0x04a8, 0x30a3 }, /*                      kana_i ィ KATAKANA LETTER SMALL I */
-  { 0x04a9, 0x30a5 }, /*                      kana_u ゥ KATAKANA LETTER SMALL U */
-  { 0x04aa, 0x30a7 }, /*                      kana_e ェ KATAKANA LETTER SMALL E */
-  { 0x04ab, 0x30a9 }, /*                      kana_o ォ KATAKANA LETTER SMALL O */
-  { 0x04ac, 0x30e3 }, /*                     kana_ya ャ KATAKANA LETTER SMALL YA */
-  { 0x04ad, 0x30e5 }, /*                     kana_yu ュ KATAKANA LETTER SMALL YU */
-  { 0x04ae, 0x30e7 }, /*                     kana_yo ョ KATAKANA LETTER SMALL YO */
-  { 0x04af, 0x30c3 }, /*                    kana_tsu ッ KATAKANA LETTER SMALL TU */
-  { 0x04b0, 0x30fc }, /*              prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */
-  { 0x04b1, 0x30a2 }, /*                      kana_A ア KATAKANA LETTER A */
-  { 0x04b2, 0x30a4 }, /*                      kana_I イ KATAKANA LETTER I */
-  { 0x04b3, 0x30a6 }, /*                      kana_U ウ KATAKANA LETTER U */
-  { 0x04b4, 0x30a8 }, /*                      kana_E エ KATAKANA LETTER E */
-  { 0x04b5, 0x30aa }, /*                      kana_O オ KATAKANA LETTER O */
-  { 0x04b6, 0x30ab }, /*                     kana_KA カ KATAKANA LETTER KA */
-  { 0x04b7, 0x30ad }, /*                     kana_KI キ KATAKANA LETTER KI */
-  { 0x04b8, 0x30af }, /*                     kana_KU ク KATAKANA LETTER KU */
-  { 0x04b9, 0x30b1 }, /*                     kana_KE ケ KATAKANA LETTER KE */
-  { 0x04ba, 0x30b3 }, /*                     kana_KO コ KATAKANA LETTER KO */
-  { 0x04bb, 0x30b5 }, /*                     kana_SA サ KATAKANA LETTER SA */
-  { 0x04bc, 0x30b7 }, /*                    kana_SHI シ KATAKANA LETTER SI */
-  { 0x04bd, 0x30b9 }, /*                     kana_SU ス KATAKANA LETTER SU */
-  { 0x04be, 0x30bb }, /*                     kana_SE セ KATAKANA LETTER SE */
-  { 0x04bf, 0x30bd }, /*                     kana_SO ソ KATAKANA LETTER SO */
-  { 0x04c0, 0x30bf }, /*                     kana_TA タ KATAKANA LETTER TA */
-  { 0x04c1, 0x30c1 }, /*                    kana_CHI チ KATAKANA LETTER TI */
-  { 0x04c2, 0x30c4 }, /*                    kana_TSU ツ KATAKANA LETTER TU */
-  { 0x04c3, 0x30c6 }, /*                     kana_TE テ KATAKANA LETTER TE */
-  { 0x04c4, 0x30c8 }, /*                     kana_TO ト KATAKANA LETTER TO */
-  { 0x04c5, 0x30ca }, /*                     kana_NA ナ KATAKANA LETTER NA */
-  { 0x04c6, 0x30cb }, /*                     kana_NI ニ KATAKANA LETTER NI */
-  { 0x04c7, 0x30cc }, /*                     kana_NU ヌ KATAKANA LETTER NU */
-  { 0x04c8, 0x30cd }, /*                     kana_NE ネ KATAKANA LETTER NE */
-  { 0x04c9, 0x30ce }, /*                     kana_NO ノ KATAKANA LETTER NO */
-  { 0x04ca, 0x30cf }, /*                     kana_HA ハ KATAKANA LETTER HA */
-  { 0x04cb, 0x30d2 }, /*                     kana_HI ヒ KATAKANA LETTER HI */
-  { 0x04cc, 0x30d5 }, /*                     kana_FU フ KATAKANA LETTER HU */
-  { 0x04cd, 0x30d8 }, /*                     kana_HE ヘ KATAKANA LETTER HE */
-  { 0x04ce, 0x30db }, /*                     kana_HO ホ KATAKANA LETTER HO */
-  { 0x04cf, 0x30de }, /*                     kana_MA マ KATAKANA LETTER MA */
-  { 0x04d0, 0x30df }, /*                     kana_MI ミ KATAKANA LETTER MI */
-  { 0x04d1, 0x30e0 }, /*                     kana_MU ム KATAKANA LETTER MU */
-  { 0x04d2, 0x30e1 }, /*                     kana_ME メ KATAKANA LETTER ME */
-  { 0x04d3, 0x30e2 }, /*                     kana_MO モ KATAKANA LETTER MO */
-  { 0x04d4, 0x30e4 }, /*                     kana_YA ヤ KATAKANA LETTER YA */
-  { 0x04d5, 0x30e6 }, /*                     kana_YU ユ KATAKANA LETTER YU */
-  { 0x04d6, 0x30e8 }, /*                     kana_YO ヨ KATAKANA LETTER YO */
-  { 0x04d7, 0x30e9 }, /*                     kana_RA ラ KATAKANA LETTER RA */
-  { 0x04d8, 0x30ea }, /*                     kana_RI リ KATAKANA LETTER RI */
-  { 0x04d9, 0x30eb }, /*                     kana_RU ル KATAKANA LETTER RU */
-  { 0x04da, 0x30ec }, /*                     kana_RE レ KATAKANA LETTER RE */
-  { 0x04db, 0x30ed }, /*                     kana_RO ロ KATAKANA LETTER RO */
-  { 0x04dc, 0x30ef }, /*                     kana_WA ワ KATAKANA LETTER WA */
-  { 0x04dd, 0x30f3 }, /*                      kana_N ン KATAKANA LETTER N */
-  { 0x04de, 0x309b }, /*                 voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */
-  { 0x04df, 0x309c }, /*             semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
-  { 0x05ac, 0x060c }, /*                Arabic_comma ، ARABIC COMMA */
-  { 0x05bb, 0x061b }, /*            Arabic_semicolon ؛ ARABIC SEMICOLON */
-  { 0x05bf, 0x061f }, /*        Arabic_question_mark ؟ ARABIC QUESTION MARK */
-  { 0x05c1, 0x0621 }, /*                Arabic_hamza ء ARABIC LETTER HAMZA */
-  { 0x05c2, 0x0622 }, /*          Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */
-  { 0x05c3, 0x0623 }, /*          Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */
-  { 0x05c4, 0x0624 }, /*           Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */
-  { 0x05c5, 0x0625 }, /*       Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */
-  { 0x05c6, 0x0626 }, /*           Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */
-  { 0x05c7, 0x0627 }, /*                 Arabic_alef ا ARABIC LETTER ALEF */
-  { 0x05c8, 0x0628 }, /*                  Arabic_beh ب ARABIC LETTER BEH */
-  { 0x05c9, 0x0629 }, /*           Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */
-  { 0x05ca, 0x062a }, /*                  Arabic_teh ت ARABIC LETTER TEH */
-  { 0x05cb, 0x062b }, /*                 Arabic_theh ث ARABIC LETTER THEH */
-  { 0x05cc, 0x062c }, /*                 Arabic_jeem ج ARABIC LETTER JEEM */
-  { 0x05cd, 0x062d }, /*                  Arabic_hah ح ARABIC LETTER HAH */
-  { 0x05ce, 0x062e }, /*                 Arabic_khah خ ARABIC LETTER KHAH */
-  { 0x05cf, 0x062f }, /*                  Arabic_dal د ARABIC LETTER DAL */
-  { 0x05d0, 0x0630 }, /*                 Arabic_thal ذ ARABIC LETTER THAL */
-  { 0x05d1, 0x0631 }, /*                   Arabic_ra ر ARABIC LETTER REH */
-  { 0x05d2, 0x0632 }, /*                 Arabic_zain ز ARABIC LETTER ZAIN */
-  { 0x05d3, 0x0633 }, /*                 Arabic_seen س ARABIC LETTER SEEN */
-  { 0x05d4, 0x0634 }, /*                Arabic_sheen ش ARABIC LETTER SHEEN */
-  { 0x05d5, 0x0635 }, /*                  Arabic_sad ص ARABIC LETTER SAD */
-  { 0x05d6, 0x0636 }, /*                  Arabic_dad ض ARABIC LETTER DAD */
-  { 0x05d7, 0x0637 }, /*                  Arabic_tah ط ARABIC LETTER TAH */
-  { 0x05d8, 0x0638 }, /*                  Arabic_zah ظ ARABIC LETTER ZAH */
-  { 0x05d9, 0x0639 }, /*                  Arabic_ain ع ARABIC LETTER AIN */
-  { 0x05da, 0x063a }, /*                Arabic_ghain غ ARABIC LETTER GHAIN */
-  { 0x05e0, 0x0640 }, /*              Arabic_tatweel ـ ARABIC TATWEEL */
-  { 0x05e1, 0x0641 }, /*                  Arabic_feh ف ARABIC LETTER FEH */
-  { 0x05e2, 0x0642 }, /*                  Arabic_qaf ق ARABIC LETTER QAF */
-  { 0x05e3, 0x0643 }, /*                  Arabic_kaf ك ARABIC LETTER KAF */
-  { 0x05e4, 0x0644 }, /*                  Arabic_lam ل ARABIC LETTER LAM */
-  { 0x05e5, 0x0645 }, /*                 Arabic_meem م ARABIC LETTER MEEM */
-  { 0x05e6, 0x0646 }, /*                 Arabic_noon ن ARABIC LETTER NOON */
-  { 0x05e7, 0x0647 }, /*                   Arabic_ha ه ARABIC LETTER HEH */
-  { 0x05e8, 0x0648 }, /*                  Arabic_waw و ARABIC LETTER WAW */
-  { 0x05e9, 0x0649 }, /*          Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */
-  { 0x05ea, 0x064a }, /*                  Arabic_yeh ي ARABIC LETTER YEH */
-  { 0x05eb, 0x064b }, /*             Arabic_fathatan ً ARABIC FATHATAN */
-  { 0x05ec, 0x064c }, /*             Arabic_dammatan ٌ ARABIC DAMMATAN */
-  { 0x05ed, 0x064d }, /*             Arabic_kasratan ٍ ARABIC KASRATAN */
-  { 0x05ee, 0x064e }, /*                Arabic_fatha َ ARABIC FATHA */
-  { 0x05ef, 0x064f }, /*                Arabic_damma ُ ARABIC DAMMA */
-  { 0x05f0, 0x0650 }, /*                Arabic_kasra ِ ARABIC KASRA */
-  { 0x05f1, 0x0651 }, /*               Arabic_shadda ّ ARABIC SHADDA */
-  { 0x05f2, 0x0652 }, /*                Arabic_sukun ْ ARABIC SUKUN */
-  { 0x06a1, 0x0452 }, /*                 Serbian_dje ђ CYRILLIC SMALL LETTER DJE */
-  { 0x06a2, 0x0453 }, /*               Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */
-  { 0x06a3, 0x0451 }, /*                 Cyrillic_io ё CYRILLIC SMALL LETTER IO */
-  { 0x06a4, 0x0454 }, /*                Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */
-  { 0x06a5, 0x0455 }, /*               Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */
-  { 0x06a6, 0x0456 }, /*                 Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
-  { 0x06a7, 0x0457 }, /*                Ukrainian_yi ї CYRILLIC SMALL LETTER YI */
-  { 0x06a8, 0x0458 }, /*                 Cyrillic_je ј CYRILLIC SMALL LETTER JE */
-  { 0x06a9, 0x0459 }, /*                Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */
-  { 0x06aa, 0x045a }, /*                Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */
-  { 0x06ab, 0x045b }, /*                Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */
-  { 0x06ac, 0x045c }, /*               Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */
-  { 0x06ae, 0x045e }, /*         Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */
-  { 0x06af, 0x045f }, /*               Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */
-  { 0x06b0, 0x2116 }, /*                  numerosign № NUMERO SIGN */
-  { 0x06b1, 0x0402 }, /*                 Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */
-  { 0x06b2, 0x0403 }, /*               Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */
-  { 0x06b3, 0x0401 }, /*                 Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */
-  { 0x06b4, 0x0404 }, /*                Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */
-  { 0x06b5, 0x0405 }, /*               Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */
-  { 0x06b6, 0x0406 }, /*                 Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
-  { 0x06b7, 0x0407 }, /*                Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */
-  { 0x06b8, 0x0408 }, /*                 Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */
-  { 0x06b9, 0x0409 }, /*                Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */
-  { 0x06ba, 0x040a }, /*                Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */
-  { 0x06bb, 0x040b }, /*                Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */
-  { 0x06bc, 0x040c }, /*               Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */
-  { 0x06be, 0x040e }, /*         Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */
-  { 0x06bf, 0x040f }, /*               Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */
-  { 0x06c0, 0x044e }, /*                 Cyrillic_yu ю CYRILLIC SMALL LETTER YU */
-  { 0x06c1, 0x0430 }, /*                  Cyrillic_a а CYRILLIC SMALL LETTER A */
-  { 0x06c2, 0x0431 }, /*                 Cyrillic_be б CYRILLIC SMALL LETTER BE */
-  { 0x06c3, 0x0446 }, /*                Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */
-  { 0x06c4, 0x0434 }, /*                 Cyrillic_de д CYRILLIC SMALL LETTER DE */
-  { 0x06c5, 0x0435 }, /*                 Cyrillic_ie е CYRILLIC SMALL LETTER IE */
-  { 0x06c6, 0x0444 }, /*                 Cyrillic_ef ф CYRILLIC SMALL LETTER EF */
-  { 0x06c7, 0x0433 }, /*                Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */
-  { 0x06c8, 0x0445 }, /*                 Cyrillic_ha х CYRILLIC SMALL LETTER HA */
-  { 0x06c9, 0x0438 }, /*                  Cyrillic_i и CYRILLIC SMALL LETTER I */
-  { 0x06ca, 0x0439 }, /*             Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */
-  { 0x06cb, 0x043a }, /*                 Cyrillic_ka к CYRILLIC SMALL LETTER KA */
-  { 0x06cc, 0x043b }, /*                 Cyrillic_el л CYRILLIC SMALL LETTER EL */
-  { 0x06cd, 0x043c }, /*                 Cyrillic_em м CYRILLIC SMALL LETTER EM */
-  { 0x06ce, 0x043d }, /*                 Cyrillic_en н CYRILLIC SMALL LETTER EN */
-  { 0x06cf, 0x043e }, /*                  Cyrillic_o о CYRILLIC SMALL LETTER O */
-  { 0x06d0, 0x043f }, /*                 Cyrillic_pe п CYRILLIC SMALL LETTER PE */
-  { 0x06d1, 0x044f }, /*                 Cyrillic_ya я CYRILLIC SMALL LETTER YA */
-  { 0x06d2, 0x0440 }, /*                 Cyrillic_er р CYRILLIC SMALL LETTER ER */
-  { 0x06d3, 0x0441 }, /*                 Cyrillic_es с CYRILLIC SMALL LETTER ES */
-  { 0x06d4, 0x0442 }, /*                 Cyrillic_te т CYRILLIC SMALL LETTER TE */
-  { 0x06d5, 0x0443 }, /*                  Cyrillic_u у CYRILLIC SMALL LETTER U */
-  { 0x06d6, 0x0436 }, /*                Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */
-  { 0x06d7, 0x0432 }, /*                 Cyrillic_ve в CYRILLIC SMALL LETTER VE */
-  { 0x06d8, 0x044c }, /*           Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */
-  { 0x06d9, 0x044b }, /*               Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */
-  { 0x06da, 0x0437 }, /*                 Cyrillic_ze з CYRILLIC SMALL LETTER ZE */
-  { 0x06db, 0x0448 }, /*                Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */
-  { 0x06dc, 0x044d }, /*                  Cyrillic_e э CYRILLIC SMALL LETTER E */
-  { 0x06dd, 0x0449 }, /*              Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */
-  { 0x06de, 0x0447 }, /*                Cyrillic_che ч CYRILLIC SMALL LETTER CHE */
-  { 0x06df, 0x044a }, /*           Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */
-  { 0x06e0, 0x042e }, /*                 Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */
-  { 0x06e1, 0x0410 }, /*                  Cyrillic_A А CYRILLIC CAPITAL LETTER A */
-  { 0x06e2, 0x0411 }, /*                 Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */
-  { 0x06e3, 0x0426 }, /*                Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */
-  { 0x06e4, 0x0414 }, /*                 Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */
-  { 0x06e5, 0x0415 }, /*                 Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */
-  { 0x06e6, 0x0424 }, /*                 Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */
-  { 0x06e7, 0x0413 }, /*                Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */
-  { 0x06e8, 0x0425 }, /*                 Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */
-  { 0x06e9, 0x0418 }, /*                  Cyrillic_I И CYRILLIC CAPITAL LETTER I */
-  { 0x06ea, 0x0419 }, /*             Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */
-  { 0x06eb, 0x041a }, /*                 Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */
-  { 0x06ec, 0x041b }, /*                 Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */
-  { 0x06ed, 0x041c }, /*                 Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */
-  { 0x06ee, 0x041d }, /*                 Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */
-  { 0x06ef, 0x041e }, /*                  Cyrillic_O О CYRILLIC CAPITAL LETTER O */
-  { 0x06f0, 0x041f }, /*                 Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */
-  { 0x06f1, 0x042f }, /*                 Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */
-  { 0x06f2, 0x0420 }, /*                 Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */
-  { 0x06f3, 0x0421 }, /*                 Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */
-  { 0x06f4, 0x0422 }, /*                 Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */
-  { 0x06f5, 0x0423 }, /*                  Cyrillic_U У CYRILLIC CAPITAL LETTER U */
-  { 0x06f6, 0x0416 }, /*                Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */
-  { 0x06f7, 0x0412 }, /*                 Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */
-  { 0x06f8, 0x042c }, /*           Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */
-  { 0x06f9, 0x042b }, /*               Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */
-  { 0x06fa, 0x0417 }, /*                 Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */
-  { 0x06fb, 0x0428 }, /*                Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */
-  { 0x06fc, 0x042d }, /*                  Cyrillic_E Э CYRILLIC CAPITAL LETTER E */
-  { 0x06fd, 0x0429 }, /*              Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */
-  { 0x06fe, 0x0427 }, /*                Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */
-  { 0x06ff, 0x042a }, /*           Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */
-  { 0x07a1, 0x0386 }, /*           Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */
-  { 0x07a2, 0x0388 }, /*         Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */
-  { 0x07a3, 0x0389 }, /*             Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */
-  { 0x07a4, 0x038a }, /*            Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */
-  { 0x07a5, 0x03aa }, /*         Greek_IOTAdiaeresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
-  { 0x07a7, 0x038c }, /*         Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */
-  { 0x07a8, 0x038e }, /*         Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */
-  { 0x07a9, 0x03ab }, /*       Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
-  { 0x07ab, 0x038f }, /*           Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */
-  { 0x07ae, 0x0385 }, /*        Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */
-  { 0x07af, 0x2015 }, /*              Greek_horizbar ― HORIZONTAL BAR */
-  { 0x07b1, 0x03ac }, /*           Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */
-  { 0x07b2, 0x03ad }, /*         Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */
-  { 0x07b3, 0x03ae }, /*             Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */
-  { 0x07b4, 0x03af }, /*            Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */
-  { 0x07b5, 0x03ca }, /*          Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */
-  { 0x07b6, 0x0390 }, /*    Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
-  { 0x07b7, 0x03cc }, /*         Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */
-  { 0x07b8, 0x03cd }, /*         Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */
-  { 0x07b9, 0x03cb }, /*       Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
-  { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
-  { 0x07bb, 0x03ce }, /*           Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */
-  { 0x07c1, 0x0391 }, /*                 Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */
-  { 0x07c2, 0x0392 }, /*                  Greek_BETA Β GREEK CAPITAL LETTER BETA */
-  { 0x07c3, 0x0393 }, /*                 Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */
-  { 0x07c4, 0x0394 }, /*                 Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */
-  { 0x07c5, 0x0395 }, /*               Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */
-  { 0x07c6, 0x0396 }, /*                  Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */
-  { 0x07c7, 0x0397 }, /*                   Greek_ETA Η GREEK CAPITAL LETTER ETA */
-  { 0x07c8, 0x0398 }, /*                 Greek_THETA Θ GREEK CAPITAL LETTER THETA */
-  { 0x07c9, 0x0399 }, /*                  Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */
-  { 0x07ca, 0x039a }, /*                 Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */
-  { 0x07cb, 0x039b }, /*                Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */
-  { 0x07cc, 0x039c }, /*                    Greek_MU Μ GREEK CAPITAL LETTER MU */
-  { 0x07cd, 0x039d }, /*                    Greek_NU Ν GREEK CAPITAL LETTER NU */
-  { 0x07ce, 0x039e }, /*                    Greek_XI Ξ GREEK CAPITAL LETTER XI */
-  { 0x07cf, 0x039f }, /*               Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */
-  { 0x07d0, 0x03a0 }, /*                    Greek_PI Π GREEK CAPITAL LETTER PI */
-  { 0x07d1, 0x03a1 }, /*                   Greek_RHO Ρ GREEK CAPITAL LETTER RHO */
-  { 0x07d2, 0x03a3 }, /*                 Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */
-  { 0x07d4, 0x03a4 }, /*                   Greek_TAU Τ GREEK CAPITAL LETTER TAU */
-  { 0x07d5, 0x03a5 }, /*               Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */
-  { 0x07d6, 0x03a6 }, /*                   Greek_PHI Φ GREEK CAPITAL LETTER PHI */
-  { 0x07d7, 0x03a7 }, /*                   Greek_CHI Χ GREEK CAPITAL LETTER CHI */
-  { 0x07d8, 0x03a8 }, /*                   Greek_PSI Ψ GREEK CAPITAL LETTER PSI */
-  { 0x07d9, 0x03a9 }, /*                 Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */
-  { 0x07e1, 0x03b1 }, /*                 Greek_alpha α GREEK SMALL LETTER ALPHA */
-  { 0x07e2, 0x03b2 }, /*                  Greek_beta β GREEK SMALL LETTER BETA */
-  { 0x07e3, 0x03b3 }, /*                 Greek_gamma γ GREEK SMALL LETTER GAMMA */
-  { 0x07e4, 0x03b4 }, /*                 Greek_delta δ GREEK SMALL LETTER DELTA */
-  { 0x07e5, 0x03b5 }, /*               Greek_epsilon ε GREEK SMALL LETTER EPSILON */
-  { 0x07e6, 0x03b6 }, /*                  Greek_zeta ζ GREEK SMALL LETTER ZETA */
-  { 0x07e7, 0x03b7 }, /*                   Greek_eta η GREEK SMALL LETTER ETA */
-  { 0x07e8, 0x03b8 }, /*                 Greek_theta θ GREEK SMALL LETTER THETA */
-  { 0x07e9, 0x03b9 }, /*                  Greek_iota ι GREEK SMALL LETTER IOTA */
-  { 0x07ea, 0x03ba }, /*                 Greek_kappa κ GREEK SMALL LETTER KAPPA */
-  { 0x07eb, 0x03bb }, /*                Greek_lambda λ GREEK SMALL LETTER LAMDA */
-  { 0x07ec, 0x03bc }, /*                    Greek_mu μ GREEK SMALL LETTER MU */
-  { 0x07ed, 0x03bd }, /*                    Greek_nu ν GREEK SMALL LETTER NU */
-  { 0x07ee, 0x03be }, /*                    Greek_xi ξ GREEK SMALL LETTER XI */
-  { 0x07ef, 0x03bf }, /*               Greek_omicron ο GREEK SMALL LETTER OMICRON */
-  { 0x07f0, 0x03c0 }, /*                    Greek_pi π GREEK SMALL LETTER PI */
-  { 0x07f1, 0x03c1 }, /*                   Greek_rho ρ GREEK SMALL LETTER RHO */
-  { 0x07f2, 0x03c3 }, /*                 Greek_sigma σ GREEK SMALL LETTER SIGMA */
-  { 0x07f3, 0x03c2 }, /*       Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */
-  { 0x07f4, 0x03c4 }, /*                   Greek_tau τ GREEK SMALL LETTER TAU */
-  { 0x07f5, 0x03c5 }, /*               Greek_upsilon υ GREEK SMALL LETTER UPSILON */
-  { 0x07f6, 0x03c6 }, /*                   Greek_phi φ GREEK SMALL LETTER PHI */
-  { 0x07f7, 0x03c7 }, /*                   Greek_chi χ GREEK SMALL LETTER CHI */
-  { 0x07f8, 0x03c8 }, /*                   Greek_psi ψ GREEK SMALL LETTER PSI */
-  { 0x07f9, 0x03c9 }, /*                 Greek_omega ω GREEK SMALL LETTER OMEGA */
-/*  0x08a1                               leftradical ? ??? */
-/*  0x08a2                            topleftradical ? ??? */
-/*  0x08a3                            horizconnector ? ??? */
-  { 0x08a4, 0x2320 }, /*                 topintegral ⌠ TOP HALF INTEGRAL */
-  { 0x08a5, 0x2321 }, /*                 botintegral ⌡ BOTTOM HALF INTEGRAL */
-  { 0x08a6, 0x2502 }, /*               vertconnector │ BOX DRAWINGS LIGHT VERTICAL */
-/*  0x08a7                          topleftsqbracket ? ??? */
-/*  0x08a8                          botleftsqbracket ? ??? */
-/*  0x08a9                         toprightsqbracket ? ??? */
-/*  0x08aa                         botrightsqbracket ? ??? */
-/*  0x08ab                             topleftparens ? ??? */
-/*  0x08ac                             botleftparens ? ??? */
-/*  0x08ad                            toprightparens ? ??? */
-/*  0x08ae                            botrightparens ? ??? */
-/*  0x08af                      leftmiddlecurlybrace ? ??? */
-/*  0x08b0                     rightmiddlecurlybrace ? ??? */
-/*  0x08b1                          topleftsummation ? ??? */
-/*  0x08b2                          botleftsummation ? ??? */
-/*  0x08b3                 topvertsummationconnector ? ??? */
-/*  0x08b4                 botvertsummationconnector ? ??? */
-/*  0x08b5                         toprightsummation ? ??? */
-/*  0x08b6                         botrightsummation ? ??? */
-/*  0x08b7                      rightmiddlesummation ? ??? */
-  { 0x08bc, 0x2264 }, /*               lessthanequal ≤ LESS-THAN OR EQUAL TO */
-  { 0x08bd, 0x2260 }, /*                    notequal ≠ NOT EQUAL TO */
-  { 0x08be, 0x2265 }, /*            greaterthanequal ≥ GREATER-THAN OR EQUAL TO */
-  { 0x08bf, 0x222b }, /*                    integral ∫ INTEGRAL */
-  { 0x08c0, 0x2234 }, /*                   therefore ∴ THEREFORE */
-  { 0x08c1, 0x221d }, /*                   variation ∝ PROPORTIONAL TO */
-  { 0x08c2, 0x221e }, /*                    infinity ∞ INFINITY */
-  { 0x08c5, 0x2207 }, /*                       nabla ∇ NABLA */
-  { 0x08c8, 0x2245 }, /*                 approximate ≅ APPROXIMATELY EQUAL TO */
-/*  0x08c9                              similarequal ? ??? */
-  { 0x08cd, 0x21d4 }, /*                    ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */
-  { 0x08ce, 0x21d2 }, /*                     implies ⇒ RIGHTWARDS DOUBLE ARROW */
-  { 0x08cf, 0x2261 }, /*                   identical ≡ IDENTICAL TO */
-  { 0x08d6, 0x221a }, /*                     radical √ SQUARE ROOT */
-  { 0x08da, 0x2282 }, /*                  includedin ⊂ SUBSET OF */
-  { 0x08db, 0x2283 }, /*                    includes ⊃ SUPERSET OF */
-  { 0x08dc, 0x2229 }, /*                intersection ∩ INTERSECTION */
-  { 0x08dd, 0x222a }, /*                       union ∪ UNION */
-  { 0x08de, 0x2227 }, /*                  logicaland ∧ LOGICAL AND */
-  { 0x08df, 0x2228 }, /*                   logicalor ∨ LOGICAL OR */
-  { 0x08ef, 0x2202 }, /*           partialderivative ∂ PARTIAL DIFFERENTIAL */
-  { 0x08f6, 0x0192 }, /*                    function ƒ LATIN SMALL LETTER F WITH HOOK */
-  { 0x08fb, 0x2190 }, /*                   leftarrow ← LEFTWARDS ARROW */
-  { 0x08fc, 0x2191 }, /*                     uparrow ↑ UPWARDS ARROW */
-  { 0x08fd, 0x2192 }, /*                  rightarrow → RIGHTWARDS ARROW */
-  { 0x08fe, 0x2193 }, /*                   downarrow ↓ DOWNWARDS ARROW */
-  { 0x09df, 0x2422 }, /*                       blank ␢ BLANK SYMBOL */
-  { 0x09e0, 0x25c6 }, /*                soliddiamond ◆ BLACK DIAMOND */
-  { 0x09e1, 0x2592 }, /*                checkerboard ▒ MEDIUM SHADE */
-  { 0x09e2, 0x2409 }, /*                          ht ␉ SYMBOL FOR HORIZONTAL TABULATION */
-  { 0x09e3, 0x240c }, /*                          ff ␌ SYMBOL FOR FORM FEED */
-  { 0x09e4, 0x240d }, /*                          cr ␍ SYMBOL FOR CARRIAGE RETURN */
-  { 0x09e5, 0x240a }, /*                          lf ␊ SYMBOL FOR LINE FEED */
-  { 0x09e8, 0x2424 }, /*                          nl ␤ SYMBOL FOR NEWLINE */
-  { 0x09e9, 0x240b }, /*                          vt ␋ SYMBOL FOR VERTICAL TABULATION */
-  { 0x09ea, 0x2518 }, /*              lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */
-  { 0x09eb, 0x2510 }, /*               uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */
-  { 0x09ec, 0x250c }, /*                upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */
-  { 0x09ed, 0x2514 }, /*               lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */
-  { 0x09ee, 0x253c }, /*               crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
-/*  0x09ef                            horizlinescan1 ? ??? */
-/*  0x09f0                            horizlinescan3 ? ??? */
-  { 0x09f1, 0x2500 }, /*              horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */
-/*  0x09f2                            horizlinescan7 ? ??? */
-/*  0x09f3                            horizlinescan9 ? ??? */
-  { 0x09f4, 0x251c }, /*                       leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
-  { 0x09f5, 0x2524 }, /*                      rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */
-  { 0x09f6, 0x2534 }, /*                        bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */
-  { 0x09f7, 0x252c }, /*                        topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
-  { 0x09f8, 0x2502 }, /*                     vertbar │ BOX DRAWINGS LIGHT VERTICAL */
-  { 0x0aa1, 0x2003 }, /*                     emspace   EM SPACE */
-  { 0x0aa2, 0x2002 }, /*                     enspace   EN SPACE */
-  { 0x0aa3, 0x2004 }, /*                    em3space   THREE-PER-EM SPACE */
-  { 0x0aa4, 0x2005 }, /*                    em4space   FOUR-PER-EM SPACE */
-  { 0x0aa5, 0x2007 }, /*                  digitspace   FIGURE SPACE */
-  { 0x0aa6, 0x2008 }, /*                  punctspace   PUNCTUATION SPACE */
-  { 0x0aa7, 0x2009 }, /*                   thinspace   THIN SPACE */
-  { 0x0aa8, 0x200a }, /*                   hairspace   HAIR SPACE */
-  { 0x0aa9, 0x2014 }, /*                      emdash — EM DASH */
-  { 0x0aaa, 0x2013 }, /*                      endash – EN DASH */
-/*  0x0aac                               signifblank ? ??? */
-  { 0x0aae, 0x2026 }, /*                    ellipsis … HORIZONTAL ELLIPSIS */
-/*  0x0aaf                           doubbaselinedot ? ??? */
-  { 0x0ab0, 0x2153 }, /*                    onethird ⅓ VULGAR FRACTION ONE THIRD */
-  { 0x0ab1, 0x2154 }, /*                   twothirds ⅔ VULGAR FRACTION TWO THIRDS */
-  { 0x0ab2, 0x2155 }, /*                    onefifth ⅕ VULGAR FRACTION ONE FIFTH */
-  { 0x0ab3, 0x2156 }, /*                   twofifths ⅖ VULGAR FRACTION TWO FIFTHS */
-  { 0x0ab4, 0x2157 }, /*                 threefifths ⅗ VULGAR FRACTION THREE FIFTHS */
-  { 0x0ab5, 0x2158 }, /*                  fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */
-  { 0x0ab6, 0x2159 }, /*                    onesixth ⅙ VULGAR FRACTION ONE SIXTH */
-  { 0x0ab7, 0x215a }, /*                  fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */
-  { 0x0ab8, 0x2105 }, /*                      careof ℅ CARE OF */
-  { 0x0abb, 0x2012 }, /*                     figdash ‒ FIGURE DASH */
-  { 0x0abc, 0x2329 }, /*            leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */
-  { 0x0abd, 0x002e }, /*                decimalpoint . FULL STOP */
-  { 0x0abe, 0x232a }, /*           rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */
-/*  0x0abf                                    marker ? ??? */
-  { 0x0ac3, 0x215b }, /*                   oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */
-  { 0x0ac4, 0x215c }, /*                threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */
-  { 0x0ac5, 0x215d }, /*                 fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */
-  { 0x0ac6, 0x215e }, /*                seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */
-  { 0x0ac9, 0x2122 }, /*                   trademark ™ TRADE MARK SIGN */
-  { 0x0aca, 0x2613 }, /*               signaturemark ☓ SALTIRE */
-/*  0x0acb                         trademarkincircle ? ??? */
-  { 0x0acc, 0x25c1 }, /*            leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */
-  { 0x0acd, 0x25b7 }, /*           rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */
-  { 0x0ace, 0x25cb }, /*                emopencircle ○ WHITE CIRCLE */
-  { 0x0acf, 0x25a1 }, /*             emopenrectangle □ WHITE SQUARE */
-  { 0x0ad0, 0x2018 }, /*         leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */
-  { 0x0ad1, 0x2019 }, /*        rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */
-  { 0x0ad2, 0x201c }, /*         leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */
-  { 0x0ad3, 0x201d }, /*        rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */
-  { 0x0ad4, 0x211e }, /*                prescription ℞ PRESCRIPTION TAKE */
-  { 0x0ad6, 0x2032 }, /*                     minutes ′ PRIME */
-  { 0x0ad7, 0x2033 }, /*                     seconds ″ DOUBLE PRIME */
-  { 0x0ad9, 0x271d }, /*                  latincross ✝ LATIN CROSS */
-/*  0x0ada                                  hexagram ? ??? */
-  { 0x0adb, 0x25ac }, /*            filledrectbullet ▬ BLACK RECTANGLE */
-  { 0x0adc, 0x25c0 }, /*         filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */
-  { 0x0add, 0x25b6 }, /*        filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */
-  { 0x0ade, 0x25cf }, /*              emfilledcircle ● BLACK CIRCLE */
-  { 0x0adf, 0x25a0 }, /*                emfilledrect ■ BLACK SQUARE */
-  { 0x0ae0, 0x25e6 }, /*            enopencircbullet ◦ WHITE BULLET */
-  { 0x0ae1, 0x25ab }, /*          enopensquarebullet ▫ WHITE SMALL SQUARE */
-  { 0x0ae2, 0x25ad }, /*              openrectbullet ▭ WHITE RECTANGLE */
-  { 0x0ae3, 0x25b3 }, /*             opentribulletup △ WHITE UP-POINTING TRIANGLE */
-  { 0x0ae4, 0x25bd }, /*           opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */
-  { 0x0ae5, 0x2606 }, /*                    openstar ☆ WHITE STAR */
-  { 0x0ae6, 0x2022 }, /*          enfilledcircbullet • BULLET */
-  { 0x0ae7, 0x25aa }, /*            enfilledsqbullet ▪ BLACK SMALL SQUARE */
-  { 0x0ae8, 0x25b2 }, /*           filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */
-  { 0x0ae9, 0x25bc }, /*         filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */
-  { 0x0aea, 0x261c }, /*                 leftpointer ☜ WHITE LEFT POINTING INDEX */
-  { 0x0aeb, 0x261e }, /*                rightpointer ☞ WHITE RIGHT POINTING INDEX */
-  { 0x0aec, 0x2663 }, /*                        club ♣ BLACK CLUB SUIT */
-  { 0x0aed, 0x2666 }, /*                     diamond ♦ BLACK DIAMOND SUIT */
-  { 0x0aee, 0x2665 }, /*                       heart ♥ BLACK HEART SUIT */
-  { 0x0af0, 0x2720 }, /*                maltesecross ✠ MALTESE CROSS */
-  { 0x0af1, 0x2020 }, /*                      dagger † DAGGER */
-  { 0x0af2, 0x2021 }, /*                doubledagger ‡ DOUBLE DAGGER */
-  { 0x0af3, 0x2713 }, /*                   checkmark ✓ CHECK MARK */
-  { 0x0af4, 0x2717 }, /*                 ballotcross ✗ BALLOT X */
-  { 0x0af5, 0x266f }, /*                musicalsharp ♯ MUSIC SHARP SIGN */
-  { 0x0af6, 0x266d }, /*                 musicalflat ♭ MUSIC FLAT SIGN */
-  { 0x0af7, 0x2642 }, /*                  malesymbol ♂ MALE SIGN */
-  { 0x0af8, 0x2640 }, /*                femalesymbol ♀ FEMALE SIGN */
-  { 0x0af9, 0x260e }, /*                   telephone ☎ BLACK TELEPHONE */
-  { 0x0afa, 0x2315 }, /*           telephonerecorder ⌕ TELEPHONE RECORDER */
-  { 0x0afb, 0x2117 }, /*         phonographcopyright ℗ SOUND RECORDING COPYRIGHT */
-  { 0x0afc, 0x2038 }, /*                       caret ‸ CARET */
-  { 0x0afd, 0x201a }, /*          singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */
-  { 0x0afe, 0x201e }, /*          doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */
-/*  0x0aff                                    cursor ? ??? */
-  { 0x0ba3, 0x003c }, /*                   leftcaret < LESS-THAN SIGN */
-  { 0x0ba6, 0x003e }, /*                  rightcaret > GREATER-THAN SIGN */
-  { 0x0ba8, 0x2228 }, /*                   downcaret ∨ LOGICAL OR */
-  { 0x0ba9, 0x2227 }, /*                     upcaret ∧ LOGICAL AND */
-  { 0x0bc0, 0x00af }, /*                     overbar ¯ MACRON */
-  { 0x0bc2, 0x22a4 }, /*                    downtack ⊤ DOWN TACK */
-  { 0x0bc3, 0x2229 }, /*                      upshoe ∩ INTERSECTION */
-  { 0x0bc4, 0x230a }, /*                   downstile ⌊ LEFT FLOOR */
-  { 0x0bc6, 0x005f }, /*                    underbar _ LOW LINE */
-  { 0x0bca, 0x2218 }, /*                         jot ∘ RING OPERATOR */
-  { 0x0bcc, 0x2395 }, /*                        quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */
-  { 0x0bce, 0x22a5 }, /*                      uptack ⊥ UP TACK */
-  { 0x0bcf, 0x25cb }, /*                      circle ○ WHITE CIRCLE */
-  { 0x0bd3, 0x2308 }, /*                     upstile ⌈ LEFT CEILING */
-  { 0x0bd6, 0x222a }, /*                    downshoe ∪ UNION */
-  { 0x0bd8, 0x2283 }, /*                   rightshoe ⊃ SUPERSET OF */
-  { 0x0bda, 0x2282 }, /*                    leftshoe ⊂ SUBSET OF */
-  { 0x0bdc, 0x22a3 }, /*                    lefttack ⊣ LEFT TACK */
-  { 0x0bfc, 0x22a2 }, /*                   righttack ⊢ RIGHT TACK */
-  { 0x0cdf, 0x2017 }, /*        hebrew_doublelowline ‗ DOUBLE LOW LINE */
-  { 0x0ce0, 0x05d0 }, /*                hebrew_aleph א HEBREW LETTER ALEF */
-  { 0x0ce1, 0x05d1 }, /*                  hebrew_bet ב HEBREW LETTER BET */
-  { 0x0ce2, 0x05d2 }, /*                hebrew_gimel ג HEBREW LETTER GIMEL */
-  { 0x0ce3, 0x05d3 }, /*                hebrew_dalet ד HEBREW LETTER DALET */
-  { 0x0ce4, 0x05d4 }, /*                   hebrew_he ה HEBREW LETTER HE */
-  { 0x0ce5, 0x05d5 }, /*                  hebrew_waw ו HEBREW LETTER VAV */
-  { 0x0ce6, 0x05d6 }, /*                 hebrew_zain ז HEBREW LETTER ZAYIN */
-  { 0x0ce7, 0x05d7 }, /*                 hebrew_chet ח HEBREW LETTER HET */
-  { 0x0ce8, 0x05d8 }, /*                  hebrew_tet ט HEBREW LETTER TET */
-  { 0x0ce9, 0x05d9 }, /*                  hebrew_yod י HEBREW LETTER YOD */
-  { 0x0cea, 0x05da }, /*            hebrew_finalkaph ך HEBREW LETTER FINAL KAF */
-  { 0x0ceb, 0x05db }, /*                 hebrew_kaph כ HEBREW LETTER KAF */
-  { 0x0cec, 0x05dc }, /*                hebrew_lamed ל HEBREW LETTER LAMED */
-  { 0x0ced, 0x05dd }, /*             hebrew_finalmem ם HEBREW LETTER FINAL MEM */
-  { 0x0cee, 0x05de }, /*                  hebrew_mem מ HEBREW LETTER MEM */
-  { 0x0cef, 0x05df }, /*             hebrew_finalnun ן HEBREW LETTER FINAL NUN */
-  { 0x0cf0, 0x05e0 }, /*                  hebrew_nun נ HEBREW LETTER NUN */
-  { 0x0cf1, 0x05e1 }, /*               hebrew_samech ס HEBREW LETTER SAMEKH */
-  { 0x0cf2, 0x05e2 }, /*                 hebrew_ayin ע HEBREW LETTER AYIN */
-  { 0x0cf3, 0x05e3 }, /*              hebrew_finalpe ף HEBREW LETTER FINAL PE */
-  { 0x0cf4, 0x05e4 }, /*                   hebrew_pe פ HEBREW LETTER PE */
-  { 0x0cf5, 0x05e5 }, /*            hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */
-  { 0x0cf6, 0x05e6 }, /*                 hebrew_zade צ HEBREW LETTER TSADI */
-  { 0x0cf7, 0x05e7 }, /*                 hebrew_qoph ק HEBREW LETTER QOF */
-  { 0x0cf8, 0x05e8 }, /*                 hebrew_resh ר HEBREW LETTER RESH */
-  { 0x0cf9, 0x05e9 }, /*                 hebrew_shin ש HEBREW LETTER SHIN */
-  { 0x0cfa, 0x05ea }, /*                  hebrew_taw ת HEBREW LETTER TAV */
-  { 0x0da1, 0x0e01 }, /*                  Thai_kokai ก THAI CHARACTER KO KAI */
-  { 0x0da2, 0x0e02 }, /*                Thai_khokhai ข THAI CHARACTER KHO KHAI */
-  { 0x0da3, 0x0e03 }, /*               Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */
-  { 0x0da4, 0x0e04 }, /*               Thai_khokhwai ค THAI CHARACTER KHO KHWAI */
-  { 0x0da5, 0x0e05 }, /*                Thai_khokhon ฅ THAI CHARACTER KHO KHON */
-  { 0x0da6, 0x0e06 }, /*             Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */
-  { 0x0da7, 0x0e07 }, /*                 Thai_ngongu ง THAI CHARACTER NGO NGU */
-  { 0x0da8, 0x0e08 }, /*                Thai_chochan จ THAI CHARACTER CHO CHAN */
-  { 0x0da9, 0x0e09 }, /*               Thai_choching ฉ THAI CHARACTER CHO CHING */
-  { 0x0daa, 0x0e0a }, /*               Thai_chochang ช THAI CHARACTER CHO CHANG */
-  { 0x0dab, 0x0e0b }, /*                   Thai_soso ซ THAI CHARACTER SO SO */
-  { 0x0dac, 0x0e0c }, /*                Thai_chochoe ฌ THAI CHARACTER CHO CHOE */
-  { 0x0dad, 0x0e0d }, /*                 Thai_yoying ญ THAI CHARACTER YO YING */
-  { 0x0dae, 0x0e0e }, /*                Thai_dochada ฎ THAI CHARACTER DO CHADA */
-  { 0x0daf, 0x0e0f }, /*                Thai_topatak ฏ THAI CHARACTER TO PATAK */
-  { 0x0db0, 0x0e10 }, /*                Thai_thothan ฐ THAI CHARACTER THO THAN */
-  { 0x0db1, 0x0e11 }, /*          Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */
-  { 0x0db2, 0x0e12 }, /*             Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */
-  { 0x0db3, 0x0e13 }, /*                  Thai_nonen ณ THAI CHARACTER NO NEN */
-  { 0x0db4, 0x0e14 }, /*                  Thai_dodek ด THAI CHARACTER DO DEK */
-  { 0x0db5, 0x0e15 }, /*                  Thai_totao ต THAI CHARACTER TO TAO */
-  { 0x0db6, 0x0e16 }, /*               Thai_thothung ถ THAI CHARACTER THO THUNG */
-  { 0x0db7, 0x0e17 }, /*              Thai_thothahan ท THAI CHARACTER THO THAHAN */
-  { 0x0db8, 0x0e18 }, /*               Thai_thothong ธ THAI CHARACTER THO THONG */
-  { 0x0db9, 0x0e19 }, /*                   Thai_nonu น THAI CHARACTER NO NU */
-  { 0x0dba, 0x0e1a }, /*               Thai_bobaimai บ THAI CHARACTER BO BAIMAI */
-  { 0x0dbb, 0x0e1b }, /*                  Thai_popla ป THAI CHARACTER PO PLA */
-  { 0x0dbc, 0x0e1c }, /*               Thai_phophung ผ THAI CHARACTER PHO PHUNG */
-  { 0x0dbd, 0x0e1d }, /*                   Thai_fofa ฝ THAI CHARACTER FO FA */
-  { 0x0dbe, 0x0e1e }, /*                Thai_phophan พ THAI CHARACTER PHO PHAN */
-  { 0x0dbf, 0x0e1f }, /*                  Thai_fofan ฟ THAI CHARACTER FO FAN */
-  { 0x0dc0, 0x0e20 }, /*             Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */
-  { 0x0dc1, 0x0e21 }, /*                   Thai_moma ม THAI CHARACTER MO MA */
-  { 0x0dc2, 0x0e22 }, /*                  Thai_yoyak ย THAI CHARACTER YO YAK */
-  { 0x0dc3, 0x0e23 }, /*                  Thai_rorua ร THAI CHARACTER RO RUA */
-  { 0x0dc4, 0x0e24 }, /*                     Thai_ru ฤ THAI CHARACTER RU */
-  { 0x0dc5, 0x0e25 }, /*                 Thai_loling ล THAI CHARACTER LO LING */
-  { 0x0dc6, 0x0e26 }, /*                     Thai_lu ฦ THAI CHARACTER LU */
-  { 0x0dc7, 0x0e27 }, /*                 Thai_wowaen ว THAI CHARACTER WO WAEN */
-  { 0x0dc8, 0x0e28 }, /*                 Thai_sosala ศ THAI CHARACTER SO SALA */
-  { 0x0dc9, 0x0e29 }, /*                 Thai_sorusi ษ THAI CHARACTER SO RUSI */
-  { 0x0dca, 0x0e2a }, /*                  Thai_sosua ส THAI CHARACTER SO SUA */
-  { 0x0dcb, 0x0e2b }, /*                  Thai_hohip ห THAI CHARACTER HO HIP */
-  { 0x0dcc, 0x0e2c }, /*                Thai_lochula ฬ THAI CHARACTER LO CHULA */
-  { 0x0dcd, 0x0e2d }, /*                   Thai_oang อ THAI CHARACTER O ANG */
-  { 0x0dce, 0x0e2e }, /*               Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */
-  { 0x0dcf, 0x0e2f }, /*              Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */
-  { 0x0dd0, 0x0e30 }, /*                  Thai_saraa ะ THAI CHARACTER SARA A */
-  { 0x0dd1, 0x0e31 }, /*             Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */
-  { 0x0dd2, 0x0e32 }, /*                 Thai_saraaa า THAI CHARACTER SARA AA */
-  { 0x0dd3, 0x0e33 }, /*                 Thai_saraam ำ THAI CHARACTER SARA AM */
-  { 0x0dd4, 0x0e34 }, /*                  Thai_sarai ิ THAI CHARACTER SARA I */
-  { 0x0dd5, 0x0e35 }, /*                 Thai_saraii ี THAI CHARACTER SARA II */
-  { 0x0dd6, 0x0e36 }, /*                 Thai_saraue ึ THAI CHARACTER SARA UE */
-  { 0x0dd7, 0x0e37 }, /*                Thai_sarauee ื THAI CHARACTER SARA UEE */
-  { 0x0dd8, 0x0e38 }, /*                  Thai_sarau ุ THAI CHARACTER SARA U */
-  { 0x0dd9, 0x0e39 }, /*                 Thai_sarauu ู THAI CHARACTER SARA UU */
-  { 0x0dda, 0x0e3a }, /*                Thai_phinthu ฺ THAI CHARACTER PHINTHU */
-  { 0x0dde, 0x0e3e }, /*      Thai_maihanakat_maitho ฾ ??? */
-  { 0x0ddf, 0x0e3f }, /*                   Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */
-  { 0x0de0, 0x0e40 }, /*                  Thai_sarae เ THAI CHARACTER SARA E */
-  { 0x0de1, 0x0e41 }, /*                 Thai_saraae แ THAI CHARACTER SARA AE */
-  { 0x0de2, 0x0e42 }, /*                  Thai_sarao โ THAI CHARACTER SARA O */
-  { 0x0de3, 0x0e43 }, /*          Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */
-  { 0x0de4, 0x0e44 }, /*         Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */
-  { 0x0de5, 0x0e45 }, /*            Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */
-  { 0x0de6, 0x0e46 }, /*               Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */
-  { 0x0de7, 0x0e47 }, /*              Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */
-  { 0x0de8, 0x0e48 }, /*                  Thai_maiek ่ THAI CHARACTER MAI EK */
-  { 0x0de9, 0x0e49 }, /*                 Thai_maitho ้ THAI CHARACTER MAI THO */
-  { 0x0dea, 0x0e4a }, /*                 Thai_maitri ๊ THAI CHARACTER MAI TRI */
-  { 0x0deb, 0x0e4b }, /*            Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */
-  { 0x0dec, 0x0e4c }, /*            Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */
-  { 0x0ded, 0x0e4d }, /*               Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */
-  { 0x0df0, 0x0e50 }, /*                 Thai_leksun ๐ THAI DIGIT ZERO */
-  { 0x0df1, 0x0e51 }, /*                Thai_leknung ๑ THAI DIGIT ONE */
-  { 0x0df2, 0x0e52 }, /*                Thai_leksong ๒ THAI DIGIT TWO */
-  { 0x0df3, 0x0e53 }, /*                 Thai_leksam ๓ THAI DIGIT THREE */
-  { 0x0df4, 0x0e54 }, /*                  Thai_leksi ๔ THAI DIGIT FOUR */
-  { 0x0df5, 0x0e55 }, /*                  Thai_lekha ๕ THAI DIGIT FIVE */
-  { 0x0df6, 0x0e56 }, /*                 Thai_lekhok ๖ THAI DIGIT SIX */
-  { 0x0df7, 0x0e57 }, /*                Thai_lekchet ๗ THAI DIGIT SEVEN */
-  { 0x0df8, 0x0e58 }, /*                Thai_lekpaet ๘ THAI DIGIT EIGHT */
-  { 0x0df9, 0x0e59 }, /*                 Thai_lekkao ๙ THAI DIGIT NINE */
-  { 0x0ea1, 0x3131 }, /*               Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */
-  { 0x0ea2, 0x3132 }, /*          Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */
-  { 0x0ea3, 0x3133 }, /*           Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */
-  { 0x0ea4, 0x3134 }, /*                Hangul_Nieun ㄴ HANGUL LETTER NIEUN */
-  { 0x0ea5, 0x3135 }, /*           Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */
-  { 0x0ea6, 0x3136 }, /*           Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */
-  { 0x0ea7, 0x3137 }, /*               Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */
-  { 0x0ea8, 0x3138 }, /*          Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */
-  { 0x0ea9, 0x3139 }, /*                Hangul_Rieul ㄹ HANGUL LETTER RIEUL */
-  { 0x0eaa, 0x313a }, /*          Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */
-  { 0x0eab, 0x313b }, /*           Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */
-  { 0x0eac, 0x313c }, /*           Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */
-  { 0x0ead, 0x313d }, /*            Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */
-  { 0x0eae, 0x313e }, /*           Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */
-  { 0x0eaf, 0x313f }, /*          Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */
-  { 0x0eb0, 0x3140 }, /*           Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */
-  { 0x0eb1, 0x3141 }, /*                Hangul_Mieum ㅁ HANGUL LETTER MIEUM */
-  { 0x0eb2, 0x3142 }, /*                Hangul_Pieub ㅂ HANGUL LETTER PIEUP */
-  { 0x0eb3, 0x3143 }, /*           Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */
-  { 0x0eb4, 0x3144 }, /*            Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */
-  { 0x0eb5, 0x3145 }, /*                 Hangul_Sios ㅅ HANGUL LETTER SIOS */
-  { 0x0eb6, 0x3146 }, /*            Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */
-  { 0x0eb7, 0x3147 }, /*                Hangul_Ieung ㅇ HANGUL LETTER IEUNG */
-  { 0x0eb8, 0x3148 }, /*                Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */
-  { 0x0eb9, 0x3149 }, /*           Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */
-  { 0x0eba, 0x314a }, /*                Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */
-  { 0x0ebb, 0x314b }, /*               Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */
-  { 0x0ebc, 0x314c }, /*                Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */
-  { 0x0ebd, 0x314d }, /*               Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */
-  { 0x0ebe, 0x314e }, /*                Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */
-  { 0x0ebf, 0x314f }, /*                    Hangul_A ㅏ HANGUL LETTER A */
-  { 0x0ec0, 0x3150 }, /*                   Hangul_AE ㅐ HANGUL LETTER AE */
-  { 0x0ec1, 0x3151 }, /*                   Hangul_YA ㅑ HANGUL LETTER YA */
-  { 0x0ec2, 0x3152 }, /*                  Hangul_YAE ㅒ HANGUL LETTER YAE */
-  { 0x0ec3, 0x3153 }, /*                   Hangul_EO ㅓ HANGUL LETTER EO */
-  { 0x0ec4, 0x3154 }, /*                    Hangul_E ㅔ HANGUL LETTER E */
-  { 0x0ec5, 0x3155 }, /*                  Hangul_YEO ㅕ HANGUL LETTER YEO */
-  { 0x0ec6, 0x3156 }, /*                   Hangul_YE ㅖ HANGUL LETTER YE */
-  { 0x0ec7, 0x3157 }, /*                    Hangul_O ㅗ HANGUL LETTER O */
-  { 0x0ec8, 0x3158 }, /*                   Hangul_WA ㅘ HANGUL LETTER WA */
-  { 0x0ec9, 0x3159 }, /*                  Hangul_WAE ㅙ HANGUL LETTER WAE */
-  { 0x0eca, 0x315a }, /*                   Hangul_OE ㅚ HANGUL LETTER OE */
-  { 0x0ecb, 0x315b }, /*                   Hangul_YO ㅛ HANGUL LETTER YO */
-  { 0x0ecc, 0x315c }, /*                    Hangul_U ㅜ HANGUL LETTER U */
-  { 0x0ecd, 0x315d }, /*                  Hangul_WEO ㅝ HANGUL LETTER WEO */
-  { 0x0ece, 0x315e }, /*                   Hangul_WE ㅞ HANGUL LETTER WE */
-  { 0x0ecf, 0x315f }, /*                   Hangul_WI ㅟ HANGUL LETTER WI */
-  { 0x0ed0, 0x3160 }, /*                   Hangul_YU ㅠ HANGUL LETTER YU */
-  { 0x0ed1, 0x3161 }, /*                   Hangul_EU ㅡ HANGUL LETTER EU */
-  { 0x0ed2, 0x3162 }, /*                   Hangul_YI ㅢ HANGUL LETTER YI */
-  { 0x0ed3, 0x3163 }, /*                    Hangul_I ㅣ HANGUL LETTER I */
-  { 0x0ed4, 0x11a8 }, /*             Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */
-  { 0x0ed5, 0x11a9 }, /*        Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */
-  { 0x0ed6, 0x11aa }, /*         Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */
-  { 0x0ed7, 0x11ab }, /*              Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */
-  { 0x0ed8, 0x11ac }, /*         Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */
-  { 0x0ed9, 0x11ad }, /*         Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */
-  { 0x0eda, 0x11ae }, /*             Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */
-  { 0x0edb, 0x11af }, /*              Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */
-  { 0x0edc, 0x11b0 }, /*        Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */
-  { 0x0edd, 0x11b1 }, /*         Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */
-  { 0x0ede, 0x11b2 }, /*         Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */
-  { 0x0edf, 0x11b3 }, /*          Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */
-  { 0x0ee0, 0x11b4 }, /*         Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */
-  { 0x0ee1, 0x11b5 }, /*        Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */
-  { 0x0ee2, 0x11b6 }, /*         Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */
-  { 0x0ee3, 0x11b7 }, /*              Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */
-  { 0x0ee4, 0x11b8 }, /*              Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */
-  { 0x0ee5, 0x11b9 }, /*          Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */
-  { 0x0ee6, 0x11ba }, /*               Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */
-  { 0x0ee7, 0x11bb }, /*          Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */
-  { 0x0ee8, 0x11bc }, /*              Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */
-  { 0x0ee9, 0x11bd }, /*              Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */
-  { 0x0eea, 0x11be }, /*              Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */
-  { 0x0eeb, 0x11bf }, /*             Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */
-  { 0x0eec, 0x11c0 }, /*              Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */
-  { 0x0eed, 0x11c1 }, /*             Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */
-  { 0x0eee, 0x11c2 }, /*              Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */
-  { 0x0eef, 0x316d }, /*     Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */
-  { 0x0ef0, 0x3171 }, /*    Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */
-  { 0x0ef1, 0x3178 }, /*    Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */
-  { 0x0ef2, 0x317f }, /*              Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */
-/*  0x0ef3                  Hangul_KkogjiDalrinIeung ? ??? */
-  { 0x0ef4, 0x3184 }, /*   Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */
-  { 0x0ef5, 0x3186 }, /*          Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */
-  { 0x0ef6, 0x318d }, /*                Hangul_AraeA ㆍ HANGUL LETTER ARAEA */
-  { 0x0ef7, 0x318e }, /*               Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */
-  { 0x0ef8, 0x11eb }, /*            Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */
-/*  0x0ef9                Hangul_J_KkogjiDalrinIeung ? ??? */
-  { 0x0efa, 0x11f9 }, /*        Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */
-  { 0x0eff, 0x20a9 }, /*                  Korean_Won ₩ WON SIGN */
-  { 0x13bc, 0x0152 }, /*                          OE Œ LATIN CAPITAL LIGATURE OE */
-  { 0x13bd, 0x0153 }, /*                          oe œ LATIN SMALL LIGATURE OE */
-  { 0x13be, 0x0178 }, /*                  Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */
-  { 0x20a0, 0x20a0 }, /*                     EcuSign ₠ EURO-CURRENCY SIGN */
-  { 0x20a1, 0x20a1 }, /*                   ColonSign ₡ COLON SIGN */
-  { 0x20a2, 0x20a2 }, /*                CruzeiroSign ₢ CRUZEIRO SIGN */
-  { 0x20a3, 0x20a3 }, /*                  FFrancSign ₣ FRENCH FRANC SIGN */
-  { 0x20a4, 0x20a4 }, /*                    LiraSign ₤ LIRA SIGN */
-  { 0x20a5, 0x20a5 }, /*                    MillSign ₥ MILL SIGN */
-  { 0x20a6, 0x20a6 }, /*                   NairaSign ₦ NAIRA SIGN */
-  { 0x20a7, 0x20a7 }, /*                  PesetaSign ₧ PESETA SIGN */
-  { 0x20a8, 0x20a8 }, /*                   RupeeSign ₨ RUPEE SIGN */
-  { 0x20a9, 0x20a9 }, /*                     WonSign ₩ WON SIGN */
-  { 0x20aa, 0x20aa }, /*               NewSheqelSign ₪ NEW SHEQEL SIGN */
-  { 0x20ab, 0x20ab }, /*                    DongSign ₫ DONG SIGN */
-  { 0x20ac, 0x20ac }, /*                    EuroSign € EURO SIGN */
-};
-
-static guint
-keyval_to_unicode (guint keysym)
-{
-  int min = 0;
-  int max = sizeof(k2utab) / sizeof(k2utab[0]) - 1;
-  int mid;
-
-  /* First check for Latin-1 characters (1:1 mapping) */
-  if ((keysym >= 0x0020 && keysym <= 0x007e) ||
-      (keysym >= 0x00a0 && keysym <= 0x00ff))
-    return keysym;
-
-  /* Also check for directly encoded 24-bit UCS characters */
-  if ((keysym & 0xff000000) == 0x01000000)
-    return keysym & 0x00ffffff;
-
-  /* binary search in table */
-  while (max >= min) {
-    mid = (min + max) / 2;
-    if (k2utab[mid].keysym < keysym)
-      min = mid + 1;
-    else if (k2utab[mid].keysym > keysym)
-      max = mid - 1;
-    else {
-      /* found it */
-      return k2utab[mid].ucs;
-    }
-  }
-  
-  /* No matching Unicode value found */
-  return -1;
-}
-
-#endif /* 0 */
-
-struct u2k {
-  unsigned short keysym;
-  unsigned short ucs;
-} u2ktab[] = {
-  { 0x0abd, 0x002e }, /*                decimalpoint . FULL STOP */
-  { 0x0ba3, 0x003c }, /*                   leftcaret < LESS-THAN SIGN */
-  { 0x0ba6, 0x003e }, /*                  rightcaret > GREATER-THAN SIGN */
-  { 0x0bc6, 0x005f }, /*                    underbar _ LOW LINE */
-  { 0x0bc0, 0x00af }, /*                     overbar ¯ MACRON */
-  { 0x03c0, 0x0100 }, /*                     Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */
-  { 0x03e0, 0x0101 }, /*                     amacron ā LATIN SMALL LETTER A WITH MACRON */
-  { 0x01c3, 0x0102 }, /*                      Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */
-  { 0x01e3, 0x0103 }, /*                      abreve ă LATIN SMALL LETTER A WITH BREVE */
-  { 0x01a1, 0x0104 }, /*                     Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */
-  { 0x01b1, 0x0105 }, /*                     aogonek ą LATIN SMALL LETTER A WITH OGONEK */
-  { 0x01c6, 0x0106 }, /*                      Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */
-  { 0x01e6, 0x0107 }, /*                      cacute ć LATIN SMALL LETTER C WITH ACUTE */
-  { 0x02c6, 0x0108 }, /*                 Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
-  { 0x02e6, 0x0109 }, /*                 ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */
-  { 0x02c5, 0x010a }, /*                   Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */
-  { 0x02e5, 0x010b }, /*                   cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */
-  { 0x01c8, 0x010c }, /*                      Ccaron Č LATIN CAPITAL LETTER C WITH CARON */
-  { 0x01e8, 0x010d }, /*                      ccaron č LATIN SMALL LETTER C WITH CARON */
-  { 0x01cf, 0x010e }, /*                      Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */
-  { 0x01ef, 0x010f }, /*                      dcaron ď LATIN SMALL LETTER D WITH CARON */
-  { 0x01d0, 0x0110 }, /*                     Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */
-  { 0x01f0, 0x0111 }, /*                     dstroke đ LATIN SMALL LETTER D WITH STROKE */
-  { 0x03aa, 0x0112 }, /*                     Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */
-  { 0x03ba, 0x0113 }, /*                     emacron ē LATIN SMALL LETTER E WITH MACRON */
-  { 0x03cc, 0x0116 }, /*                   Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */
-  { 0x03ec, 0x0117 }, /*                   eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */
-  { 0x01ca, 0x0118 }, /*                     Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */
-  { 0x01ea, 0x0119 }, /*                     eogonek ę LATIN SMALL LETTER E WITH OGONEK */
-  { 0x01cc, 0x011a }, /*                      Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */
-  { 0x01ec, 0x011b }, /*                      ecaron ě LATIN SMALL LETTER E WITH CARON */
-  { 0x02d8, 0x011c }, /*                 Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
-  { 0x02f8, 0x011d }, /*                 gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */
-  { 0x02ab, 0x011e }, /*                      Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */
-  { 0x02bb, 0x011f }, /*                      gbreve ğ LATIN SMALL LETTER G WITH BREVE */
-  { 0x02d5, 0x0120 }, /*                   Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */
-  { 0x02f5, 0x0121 }, /*                   gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */
-  { 0x03ab, 0x0122 }, /*                    Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */
-  { 0x03bb, 0x0123 }, /*                    gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */
-  { 0x02a6, 0x0124 }, /*                 Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
-  { 0x02b6, 0x0125 }, /*                 hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */
-  { 0x02a1, 0x0126 }, /*                     Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */
-  { 0x02b1, 0x0127 }, /*                     hstroke ħ LATIN SMALL LETTER H WITH STROKE */
-  { 0x03a5, 0x0128 }, /*                      Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */
-  { 0x03b5, 0x0129 }, /*                      itilde ĩ LATIN SMALL LETTER I WITH TILDE */
-  { 0x03cf, 0x012a }, /*                     Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */
-  { 0x03ef, 0x012b }, /*                     imacron ī LATIN SMALL LETTER I WITH MACRON */
-  { 0x03c7, 0x012e }, /*                     Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */
-  { 0x03e7, 0x012f }, /*                     iogonek į LATIN SMALL LETTER I WITH OGONEK */
-  { 0x02a9, 0x0130 }, /*                   Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */
-  { 0x02b9, 0x0131 }, /*                    idotless ı LATIN SMALL LETTER DOTLESS I */
-  { 0x02ac, 0x0134 }, /*                 Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
-  { 0x02bc, 0x0135 }, /*                 jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */
-  { 0x03d3, 0x0136 }, /*                    Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */
-  { 0x03f3, 0x0137 }, /*                    kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */
-  { 0x03a2, 0x0138 }, /*                         kra ĸ LATIN SMALL LETTER KRA */
-  { 0x01c5, 0x0139 }, /*                      Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */
-  { 0x01e5, 0x013a }, /*                      lacute ĺ LATIN SMALL LETTER L WITH ACUTE */
-  { 0x03a6, 0x013b }, /*                    Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */
-  { 0x03b6, 0x013c }, /*                    lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */
-  { 0x01a5, 0x013d }, /*                      Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */
-  { 0x01b5, 0x013e }, /*                      lcaron ľ LATIN SMALL LETTER L WITH CARON */
-  { 0x01a3, 0x0141 }, /*                     Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */
-  { 0x01b3, 0x0142 }, /*                     lstroke ł LATIN SMALL LETTER L WITH STROKE */
-  { 0x01d1, 0x0143 }, /*                      Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */
-  { 0x01f1, 0x0144 }, /*                      nacute ń LATIN SMALL LETTER N WITH ACUTE */
-  { 0x03d1, 0x0145 }, /*                    Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */
-  { 0x03f1, 0x0146 }, /*                    ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */
-  { 0x01d2, 0x0147 }, /*                      Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */
-  { 0x01f2, 0x0148 }, /*                      ncaron ň LATIN SMALL LETTER N WITH CARON */
-  { 0x03bd, 0x014a }, /*                         ENG Ŋ LATIN CAPITAL LETTER ENG */
-  { 0x03bf, 0x014b }, /*                         eng ŋ LATIN SMALL LETTER ENG */
-  { 0x03d2, 0x014c }, /*                     Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */
-  { 0x03f2, 0x014d }, /*                     omacron ō LATIN SMALL LETTER O WITH MACRON */
-  { 0x01d5, 0x0150 }, /*                Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
-  { 0x01f5, 0x0151 }, /*                odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */
-  { 0x13bc, 0x0152 }, /*                          OE Œ LATIN CAPITAL LIGATURE OE */
-  { 0x13bd, 0x0153 }, /*                          oe œ LATIN SMALL LIGATURE OE */
-  { 0x01c0, 0x0154 }, /*                      Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */
-  { 0x01e0, 0x0155 }, /*                      racute ŕ LATIN SMALL LETTER R WITH ACUTE */
-  { 0x03a3, 0x0156 }, /*                    Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */
-  { 0x03b3, 0x0157 }, /*                    rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */
-  { 0x01d8, 0x0158 }, /*                      Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */
-  { 0x01f8, 0x0159 }, /*                      rcaron ř LATIN SMALL LETTER R WITH CARON */
-  { 0x01a6, 0x015a }, /*                      Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */
-  { 0x01b6, 0x015b }, /*                      sacute ś LATIN SMALL LETTER S WITH ACUTE */
-  { 0x02de, 0x015c }, /*                 Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
-  { 0x02fe, 0x015d }, /*                 scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */
-  { 0x01aa, 0x015e }, /*                    Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */
-  { 0x01ba, 0x015f }, /*                    scedilla ş LATIN SMALL LETTER S WITH CEDILLA */
-  { 0x01a9, 0x0160 }, /*                      Scaron Š LATIN CAPITAL LETTER S WITH CARON */
-  { 0x01b9, 0x0161 }, /*                      scaron š LATIN SMALL LETTER S WITH CARON */
-  { 0x01de, 0x0162 }, /*                    Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */
-  { 0x01fe, 0x0163 }, /*                    tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */
-  { 0x01ab, 0x0164 }, /*                      Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */
-  { 0x01bb, 0x0165 }, /*                      tcaron ť LATIN SMALL LETTER T WITH CARON */
-  { 0x03ac, 0x0166 }, /*                      Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */
-  { 0x03bc, 0x0167 }, /*                      tslash ŧ LATIN SMALL LETTER T WITH STROKE */
-  { 0x03dd, 0x0168 }, /*                      Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */
-  { 0x03fd, 0x0169 }, /*                      utilde ũ LATIN SMALL LETTER U WITH TILDE */
-  { 0x03de, 0x016a }, /*                     Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */
-  { 0x03fe, 0x016b }, /*                     umacron ū LATIN SMALL LETTER U WITH MACRON */
-  { 0x02dd, 0x016c }, /*                      Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */
-  { 0x02fd, 0x016d }, /*                      ubreve ŭ LATIN SMALL LETTER U WITH BREVE */
-  { 0x01d9, 0x016e }, /*                       Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */
-  { 0x01f9, 0x016f }, /*                       uring ů LATIN SMALL LETTER U WITH RING ABOVE */
-  { 0x01db, 0x0170 }, /*                Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
-  { 0x01fb, 0x0171 }, /*                udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */
-  { 0x03d9, 0x0172 }, /*                     Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */
-  { 0x03f9, 0x0173 }, /*                     uogonek ų LATIN SMALL LETTER U WITH OGONEK */
-  { 0x13be, 0x0178 }, /*                  Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */
-  { 0x01ac, 0x0179 }, /*                      Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */
-  { 0x01bc, 0x017a }, /*                      zacute ź LATIN SMALL LETTER Z WITH ACUTE */
-  { 0x01af, 0x017b }, /*                   Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */
-  { 0x01bf, 0x017c }, /*                   zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */
-  { 0x01ae, 0x017d }, /*                      Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */
-  { 0x01be, 0x017e }, /*                      zcaron ž LATIN SMALL LETTER Z WITH CARON */
-  { 0x08f6, 0x0192 }, /*                    function ƒ LATIN SMALL LETTER F WITH HOOK */
-  { 0x01b7, 0x02c7 }, /*                       caron ˇ CARON */
-  { 0x01a2, 0x02d8 }, /*                       breve ˘ BREVE */
-  { 0x01ff, 0x02d9 }, /*                    abovedot ˙ DOT ABOVE */
-  { 0x01b2, 0x02db }, /*                      ogonek ˛ OGONEK */
-  { 0x01bd, 0x02dd }, /*                 doubleacute ˝ DOUBLE ACUTE ACCENT */
-  { 0x07ae, 0x0385 }, /*        Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */
-  { 0x07a1, 0x0386 }, /*           Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */
-  { 0x07a2, 0x0388 }, /*         Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */
-  { 0x07a3, 0x0389 }, /*             Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */
-  { 0x07a4, 0x038a }, /*            Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */
-  { 0x07a7, 0x038c }, /*         Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */
-  { 0x07a8, 0x038e }, /*         Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */
-  { 0x07ab, 0x038f }, /*           Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */
-  { 0x07b6, 0x0390 }, /*    Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
-  { 0x07c1, 0x0391 }, /*                 Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */
-  { 0x07c2, 0x0392 }, /*                  Greek_BETA Β GREEK CAPITAL LETTER BETA */
-  { 0x07c3, 0x0393 }, /*                 Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */
-  { 0x07c4, 0x0394 }, /*                 Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */
-  { 0x07c5, 0x0395 }, /*               Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */
-  { 0x07c6, 0x0396 }, /*                  Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */
-  { 0x07c7, 0x0397 }, /*                   Greek_ETA Η GREEK CAPITAL LETTER ETA */
-  { 0x07c8, 0x0398 }, /*                 Greek_THETA Θ GREEK CAPITAL LETTER THETA */
-  { 0x07c9, 0x0399 }, /*                  Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */
-  { 0x07ca, 0x039a }, /*                 Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */
-  { 0x07cb, 0x039b }, /*                Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */
-  { 0x07cc, 0x039c }, /*                    Greek_MU Μ GREEK CAPITAL LETTER MU */
-  { 0x07cd, 0x039d }, /*                    Greek_NU Ν GREEK CAPITAL LETTER NU */
-  { 0x07ce, 0x039e }, /*                    Greek_XI Ξ GREEK CAPITAL LETTER XI */
-  { 0x07cf, 0x039f }, /*               Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */
-  { 0x07d0, 0x03a0 }, /*                    Greek_PI Π GREEK CAPITAL LETTER PI */
-  { 0x07d1, 0x03a1 }, /*                   Greek_RHO Ρ GREEK CAPITAL LETTER RHO */
-  { 0x07d2, 0x03a3 }, /*                 Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */
-  { 0x07d4, 0x03a4 }, /*                   Greek_TAU Τ GREEK CAPITAL LETTER TAU */
-  { 0x07d5, 0x03a5 }, /*               Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */
-  { 0x07d6, 0x03a6 }, /*                   Greek_PHI Φ GREEK CAPITAL LETTER PHI */
-  { 0x07d7, 0x03a7 }, /*                   Greek_CHI Χ GREEK CAPITAL LETTER CHI */
-  { 0x07d8, 0x03a8 }, /*                   Greek_PSI Ψ GREEK CAPITAL LETTER PSI */
-  { 0x07d9, 0x03a9 }, /*                 Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */
-  { 0x07a5, 0x03aa }, /*         Greek_IOTAdiaeresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
-  { 0x07a9, 0x03ab }, /*       Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
-  { 0x07b1, 0x03ac }, /*           Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */
-  { 0x07b2, 0x03ad }, /*         Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */
-  { 0x07b3, 0x03ae }, /*             Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */
-  { 0x07b4, 0x03af }, /*            Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */
-  { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
-  { 0x07e1, 0x03b1 }, /*                 Greek_alpha α GREEK SMALL LETTER ALPHA */
-  { 0x07e2, 0x03b2 }, /*                  Greek_beta β GREEK SMALL LETTER BETA */
-  { 0x07e3, 0x03b3 }, /*                 Greek_gamma γ GREEK SMALL LETTER GAMMA */
-  { 0x07e4, 0x03b4 }, /*                 Greek_delta δ GREEK SMALL LETTER DELTA */
-  { 0x07e5, 0x03b5 }, /*               Greek_epsilon ε GREEK SMALL LETTER EPSILON */
-  { 0x07e6, 0x03b6 }, /*                  Greek_zeta ζ GREEK SMALL LETTER ZETA */
-  { 0x07e7, 0x03b7 }, /*                   Greek_eta η GREEK SMALL LETTER ETA */
-  { 0x07e8, 0x03b8 }, /*                 Greek_theta θ GREEK SMALL LETTER THETA */
-  { 0x07e9, 0x03b9 }, /*                  Greek_iota ι GREEK SMALL LETTER IOTA */
-  { 0x07ea, 0x03ba }, /*                 Greek_kappa κ GREEK SMALL LETTER KAPPA */
-  { 0x07eb, 0x03bb }, /*                Greek_lambda λ GREEK SMALL LETTER LAMDA */
-  { 0x07ec, 0x03bc }, /*                    Greek_mu μ GREEK SMALL LETTER MU */
-  { 0x07ed, 0x03bd }, /*                    Greek_nu ν GREEK SMALL LETTER NU */
-  { 0x07ee, 0x03be }, /*                    Greek_xi ξ GREEK SMALL LETTER XI */
-  { 0x07ef, 0x03bf }, /*               Greek_omicron ο GREEK SMALL LETTER OMICRON */
-  { 0x07f0, 0x03c0 }, /*                    Greek_pi π GREEK SMALL LETTER PI */
-  { 0x07f1, 0x03c1 }, /*                   Greek_rho ρ GREEK SMALL LETTER RHO */
-  { 0x07f3, 0x03c2 }, /*       Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */
-  { 0x07f2, 0x03c3 }, /*                 Greek_sigma σ GREEK SMALL LETTER SIGMA */
-  { 0x07f4, 0x03c4 }, /*                   Greek_tau τ GREEK SMALL LETTER TAU */
-  { 0x07f5, 0x03c5 }, /*               Greek_upsilon υ GREEK SMALL LETTER UPSILON */
-  { 0x07f6, 0x03c6 }, /*                   Greek_phi φ GREEK SMALL LETTER PHI */
-  { 0x07f7, 0x03c7 }, /*                   Greek_chi χ GREEK SMALL LETTER CHI */
-  { 0x07f8, 0x03c8 }, /*                   Greek_psi ψ GREEK SMALL LETTER PSI */
-  { 0x07f9, 0x03c9 }, /*                 Greek_omega ω GREEK SMALL LETTER OMEGA */
-  { 0x07b5, 0x03ca }, /*          Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */
-  { 0x07b9, 0x03cb }, /*       Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
-  { 0x07b7, 0x03cc }, /*         Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */
-  { 0x07b8, 0x03cd }, /*         Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */
-  { 0x07bb, 0x03ce }, /*           Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */
-  { 0x06b3, 0x0401 }, /*                 Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */
-  { 0x06b1, 0x0402 }, /*                 Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */
-  { 0x06b2, 0x0403 }, /*               Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */
-  { 0x06b4, 0x0404 }, /*                Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */
-  { 0x06b5, 0x0405 }, /*               Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */
-  { 0x06b6, 0x0406 }, /*                 Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
-  { 0x06b7, 0x0407 }, /*                Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */
-  { 0x06b8, 0x0408 }, /*                 Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */
-  { 0x06b9, 0x0409 }, /*                Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */
-  { 0x06ba, 0x040a }, /*                Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */
-  { 0x06bb, 0x040b }, /*                Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */
-  { 0x06bc, 0x040c }, /*               Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */
-  { 0x06be, 0x040e }, /*         Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */
-  { 0x06bf, 0x040f }, /*               Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */
-  { 0x06e1, 0x0410 }, /*                  Cyrillic_A А CYRILLIC CAPITAL LETTER A */
-  { 0x06e2, 0x0411 }, /*                 Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */
-  { 0x06f7, 0x0412 }, /*                 Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */
-  { 0x06e7, 0x0413 }, /*                Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */
-  { 0x06e4, 0x0414 }, /*                 Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */
-  { 0x06e5, 0x0415 }, /*                 Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */
-  { 0x06f6, 0x0416 }, /*                Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */
-  { 0x06fa, 0x0417 }, /*                 Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */
-  { 0x06e9, 0x0418 }, /*                  Cyrillic_I И CYRILLIC CAPITAL LETTER I */
-  { 0x06ea, 0x0419 }, /*             Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */
-  { 0x06eb, 0x041a }, /*                 Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */
-  { 0x06ec, 0x041b }, /*                 Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */
-  { 0x06ed, 0x041c }, /*                 Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */
-  { 0x06ee, 0x041d }, /*                 Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */
-  { 0x06ef, 0x041e }, /*                  Cyrillic_O О CYRILLIC CAPITAL LETTER O */
-  { 0x06f0, 0x041f }, /*                 Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */
-  { 0x06f2, 0x0420 }, /*                 Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */
-  { 0x06f3, 0x0421 }, /*                 Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */
-  { 0x06f4, 0x0422 }, /*                 Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */
-  { 0x06f5, 0x0423 }, /*                  Cyrillic_U У CYRILLIC CAPITAL LETTER U */
-  { 0x06e6, 0x0424 }, /*                 Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */
-  { 0x06e8, 0x0425 }, /*                 Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */
-  { 0x06e3, 0x0426 }, /*                Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */
-  { 0x06fe, 0x0427 }, /*                Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */
-  { 0x06fb, 0x0428 }, /*                Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */
-  { 0x06fd, 0x0429 }, /*              Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */
-  { 0x06ff, 0x042a }, /*           Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */
-  { 0x06f9, 0x042b }, /*               Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */
-  { 0x06f8, 0x042c }, /*           Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */
-  { 0x06fc, 0x042d }, /*                  Cyrillic_E Э CYRILLIC CAPITAL LETTER E */
-  { 0x06e0, 0x042e }, /*                 Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */
-  { 0x06f1, 0x042f }, /*                 Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */
-  { 0x06c1, 0x0430 }, /*                  Cyrillic_a а CYRILLIC SMALL LETTER A */
-  { 0x06c2, 0x0431 }, /*                 Cyrillic_be б CYRILLIC SMALL LETTER BE */
-  { 0x06d7, 0x0432 }, /*                 Cyrillic_ve в CYRILLIC SMALL LETTER VE */
-  { 0x06c7, 0x0433 }, /*                Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */
-  { 0x06c4, 0x0434 }, /*                 Cyrillic_de д CYRILLIC SMALL LETTER DE */
-  { 0x06c5, 0x0435 }, /*                 Cyrillic_ie е CYRILLIC SMALL LETTER IE */
-  { 0x06d6, 0x0436 }, /*                Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */
-  { 0x06da, 0x0437 }, /*                 Cyrillic_ze з CYRILLIC SMALL LETTER ZE */
-  { 0x06c9, 0x0438 }, /*                  Cyrillic_i и CYRILLIC SMALL LETTER I */
-  { 0x06ca, 0x0439 }, /*             Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */
-  { 0x06cb, 0x043a }, /*                 Cyrillic_ka к CYRILLIC SMALL LETTER KA */
-  { 0x06cc, 0x043b }, /*                 Cyrillic_el л CYRILLIC SMALL LETTER EL */
-  { 0x06cd, 0x043c }, /*                 Cyrillic_em м CYRILLIC SMALL LETTER EM */
-  { 0x06ce, 0x043d }, /*                 Cyrillic_en н CYRILLIC SMALL LETTER EN */
-  { 0x06cf, 0x043e }, /*                  Cyrillic_o о CYRILLIC SMALL LETTER O */
-  { 0x06d0, 0x043f }, /*                 Cyrillic_pe п CYRILLIC SMALL LETTER PE */
-  { 0x06d2, 0x0440 }, /*                 Cyrillic_er р CYRILLIC SMALL LETTER ER */
-  { 0x06d3, 0x0441 }, /*                 Cyrillic_es с CYRILLIC SMALL LETTER ES */
-  { 0x06d4, 0x0442 }, /*                 Cyrillic_te т CYRILLIC SMALL LETTER TE */
-  { 0x06d5, 0x0443 }, /*                  Cyrillic_u у CYRILLIC SMALL LETTER U */
-  { 0x06c6, 0x0444 }, /*                 Cyrillic_ef ф CYRILLIC SMALL LETTER EF */
-  { 0x06c8, 0x0445 }, /*                 Cyrillic_ha х CYRILLIC SMALL LETTER HA */
-  { 0x06c3, 0x0446 }, /*                Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */
-  { 0x06de, 0x0447 }, /*                Cyrillic_che ч CYRILLIC SMALL LETTER CHE */
-  { 0x06db, 0x0448 }, /*                Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */
-  { 0x06dd, 0x0449 }, /*              Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */
-  { 0x06df, 0x044a }, /*           Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */
-  { 0x06d9, 0x044b }, /*               Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */
-  { 0x06d8, 0x044c }, /*           Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */
-  { 0x06dc, 0x044d }, /*                  Cyrillic_e э CYRILLIC SMALL LETTER E */
-  { 0x06c0, 0x044e }, /*                 Cyrillic_yu ю CYRILLIC SMALL LETTER YU */
-  { 0x06d1, 0x044f }, /*                 Cyrillic_ya я CYRILLIC SMALL LETTER YA */
-  { 0x06a3, 0x0451 }, /*                 Cyrillic_io ё CYRILLIC SMALL LETTER IO */
-  { 0x06a1, 0x0452 }, /*                 Serbian_dje ђ CYRILLIC SMALL LETTER DJE */
-  { 0x06a2, 0x0453 }, /*               Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */
-  { 0x06a4, 0x0454 }, /*                Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */
-  { 0x06a5, 0x0455 }, /*               Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */
-  { 0x06a6, 0x0456 }, /*                 Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
-  { 0x06a7, 0x0457 }, /*                Ukrainian_yi ї CYRILLIC SMALL LETTER YI */
-  { 0x06a8, 0x0458 }, /*                 Cyrillic_je ј CYRILLIC SMALL LETTER JE */
-  { 0x06a9, 0x0459 }, /*                Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */
-  { 0x06aa, 0x045a }, /*                Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */
-  { 0x06ab, 0x045b }, /*                Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */
-  { 0x06ac, 0x045c }, /*               Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */
-  { 0x06ae, 0x045e }, /*         Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */
-  { 0x06af, 0x045f }, /*               Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */
-  { 0x0ce0, 0x05d0 }, /*                hebrew_aleph א HEBREW LETTER ALEF */
-  { 0x0ce1, 0x05d1 }, /*                  hebrew_bet ב HEBREW LETTER BET */
-  { 0x0ce2, 0x05d2 }, /*                hebrew_gimel ג HEBREW LETTER GIMEL */
-  { 0x0ce3, 0x05d3 }, /*                hebrew_dalet ד HEBREW LETTER DALET */
-  { 0x0ce4, 0x05d4 }, /*                   hebrew_he ה HEBREW LETTER HE */
-  { 0x0ce5, 0x05d5 }, /*                  hebrew_waw ו HEBREW LETTER VAV */
-  { 0x0ce6, 0x05d6 }, /*                 hebrew_zain ז HEBREW LETTER ZAYIN */
-  { 0x0ce7, 0x05d7 }, /*                 hebrew_chet ח HEBREW LETTER HET */
-  { 0x0ce8, 0x05d8 }, /*                  hebrew_tet ט HEBREW LETTER TET */
-  { 0x0ce9, 0x05d9 }, /*                  hebrew_yod י HEBREW LETTER YOD */
-  { 0x0cea, 0x05da }, /*            hebrew_finalkaph ך HEBREW LETTER FINAL KAF */
-  { 0x0ceb, 0x05db }, /*                 hebrew_kaph כ HEBREW LETTER KAF */
-  { 0x0cec, 0x05dc }, /*                hebrew_lamed ל HEBREW LETTER LAMED */
-  { 0x0ced, 0x05dd }, /*             hebrew_finalmem ם HEBREW LETTER FINAL MEM */
-  { 0x0cee, 0x05de }, /*                  hebrew_mem מ HEBREW LETTER MEM */
-  { 0x0cef, 0x05df }, /*             hebrew_finalnun ן HEBREW LETTER FINAL NUN */
-  { 0x0cf0, 0x05e0 }, /*                  hebrew_nun נ HEBREW LETTER NUN */
-  { 0x0cf1, 0x05e1 }, /*               hebrew_samech ס HEBREW LETTER SAMEKH */
-  { 0x0cf2, 0x05e2 }, /*                 hebrew_ayin ע HEBREW LETTER AYIN */
-  { 0x0cf3, 0x05e3 }, /*              hebrew_finalpe ף HEBREW LETTER FINAL PE */
-  { 0x0cf4, 0x05e4 }, /*                   hebrew_pe פ HEBREW LETTER PE */
-  { 0x0cf5, 0x05e5 }, /*            hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */
-  { 0x0cf6, 0x05e6 }, /*                 hebrew_zade צ HEBREW LETTER TSADI */
-  { 0x0cf7, 0x05e7 }, /*                 hebrew_qoph ק HEBREW LETTER QOF */
-  { 0x0cf8, 0x05e8 }, /*                 hebrew_resh ר HEBREW LETTER RESH */
-  { 0x0cf9, 0x05e9 }, /*                 hebrew_shin ש HEBREW LETTER SHIN */
-  { 0x0cfa, 0x05ea }, /*                  hebrew_taw ת HEBREW LETTER TAV */
-  { 0x05ac, 0x060c }, /*                Arabic_comma ، ARABIC COMMA */
-  { 0x05bb, 0x061b }, /*            Arabic_semicolon ؛ ARABIC SEMICOLON */
-  { 0x05bf, 0x061f }, /*        Arabic_question_mark ؟ ARABIC QUESTION MARK */
-  { 0x05c1, 0x0621 }, /*                Arabic_hamza ء ARABIC LETTER HAMZA */
-  { 0x05c2, 0x0622 }, /*          Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */
-  { 0x05c3, 0x0623 }, /*          Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */
-  { 0x05c4, 0x0624 }, /*           Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */
-  { 0x05c5, 0x0625 }, /*       Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */
-  { 0x05c6, 0x0626 }, /*           Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */
-  { 0x05c7, 0x0627 }, /*                 Arabic_alef ا ARABIC LETTER ALEF */
-  { 0x05c8, 0x0628 }, /*                  Arabic_beh ب ARABIC LETTER BEH */
-  { 0x05c9, 0x0629 }, /*           Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */
-  { 0x05ca, 0x062a }, /*                  Arabic_teh ت ARABIC LETTER TEH */
-  { 0x05cb, 0x062b }, /*                 Arabic_theh ث ARABIC LETTER THEH */
-  { 0x05cc, 0x062c }, /*                 Arabic_jeem ج ARABIC LETTER JEEM */
-  { 0x05cd, 0x062d }, /*                  Arabic_hah ح ARABIC LETTER HAH */
-  { 0x05ce, 0x062e }, /*                 Arabic_khah خ ARABIC LETTER KHAH */
-  { 0x05cf, 0x062f }, /*                  Arabic_dal د ARABIC LETTER DAL */
-  { 0x05d0, 0x0630 }, /*                 Arabic_thal ذ ARABIC LETTER THAL */
-  { 0x05d1, 0x0631 }, /*                   Arabic_ra ر ARABIC LETTER REH */
-  { 0x05d2, 0x0632 }, /*                 Arabic_zain ز ARABIC LETTER ZAIN */
-  { 0x05d3, 0x0633 }, /*                 Arabic_seen س ARABIC LETTER SEEN */
-  { 0x05d4, 0x0634 }, /*                Arabic_sheen ش ARABIC LETTER SHEEN */
-  { 0x05d5, 0x0635 }, /*                  Arabic_sad ص ARABIC LETTER SAD */
-  { 0x05d6, 0x0636 }, /*                  Arabic_dad ض ARABIC LETTER DAD */
-  { 0x05d7, 0x0637 }, /*                  Arabic_tah ط ARABIC LETTER TAH */
-  { 0x05d8, 0x0638 }, /*                  Arabic_zah ظ ARABIC LETTER ZAH */
-  { 0x05d9, 0x0639 }, /*                  Arabic_ain ع ARABIC LETTER AIN */
-  { 0x05da, 0x063a }, /*                Arabic_ghain غ ARABIC LETTER GHAIN */
-  { 0x05e0, 0x0640 }, /*              Arabic_tatweel ـ ARABIC TATWEEL */
-  { 0x05e1, 0x0641 }, /*                  Arabic_feh ف ARABIC LETTER FEH */
-  { 0x05e2, 0x0642 }, /*                  Arabic_qaf ق ARABIC LETTER QAF */
-  { 0x05e3, 0x0643 }, /*                  Arabic_kaf ك ARABIC LETTER KAF */
-  { 0x05e4, 0x0644 }, /*                  Arabic_lam ل ARABIC LETTER LAM */
-  { 0x05e5, 0x0645 }, /*                 Arabic_meem م ARABIC LETTER MEEM */
-  { 0x05e6, 0x0646 }, /*                 Arabic_noon ن ARABIC LETTER NOON */
-  { 0x05e7, 0x0647 }, /*                   Arabic_ha ه ARABIC LETTER HEH */
-  { 0x05e8, 0x0648 }, /*                  Arabic_waw و ARABIC LETTER WAW */
-  { 0x05e9, 0x0649 }, /*          Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */
-  { 0x05ea, 0x064a }, /*                  Arabic_yeh ي ARABIC LETTER YEH */
-  { 0x05eb, 0x064b }, /*             Arabic_fathatan ً ARABIC FATHATAN */
-  { 0x05ec, 0x064c }, /*             Arabic_dammatan ٌ ARABIC DAMMATAN */
-  { 0x05ed, 0x064d }, /*             Arabic_kasratan ٍ ARABIC KASRATAN */
-  { 0x05ee, 0x064e }, /*                Arabic_fatha َ ARABIC FATHA */
-  { 0x05ef, 0x064f }, /*                Arabic_damma ُ ARABIC DAMMA */
-  { 0x05f0, 0x0650 }, /*                Arabic_kasra ِ ARABIC KASRA */
-  { 0x05f1, 0x0651 }, /*               Arabic_shadda ّ ARABIC SHADDA */
-  { 0x05f2, 0x0652 }, /*                Arabic_sukun ْ ARABIC SUKUN */
-  { 0x0da1, 0x0e01 }, /*                  Thai_kokai ก THAI CHARACTER KO KAI */
-  { 0x0da2, 0x0e02 }, /*                Thai_khokhai ข THAI CHARACTER KHO KHAI */
-  { 0x0da3, 0x0e03 }, /*               Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */
-  { 0x0da4, 0x0e04 }, /*               Thai_khokhwai ค THAI CHARACTER KHO KHWAI */
-  { 0x0da5, 0x0e05 }, /*                Thai_khokhon ฅ THAI CHARACTER KHO KHON */
-  { 0x0da6, 0x0e06 }, /*             Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */
-  { 0x0da7, 0x0e07 }, /*                 Thai_ngongu ง THAI CHARACTER NGO NGU */
-  { 0x0da8, 0x0e08 }, /*                Thai_chochan จ THAI CHARACTER CHO CHAN */
-  { 0x0da9, 0x0e09 }, /*               Thai_choching ฉ THAI CHARACTER CHO CHING */
-  { 0x0daa, 0x0e0a }, /*               Thai_chochang ช THAI CHARACTER CHO CHANG */
-  { 0x0dab, 0x0e0b }, /*                   Thai_soso ซ THAI CHARACTER SO SO */
-  { 0x0dac, 0x0e0c }, /*                Thai_chochoe ฌ THAI CHARACTER CHO CHOE */
-  { 0x0dad, 0x0e0d }, /*                 Thai_yoying ญ THAI CHARACTER YO YING */
-  { 0x0dae, 0x0e0e }, /*                Thai_dochada ฎ THAI CHARACTER DO CHADA */
-  { 0x0daf, 0x0e0f }, /*                Thai_topatak ฏ THAI CHARACTER TO PATAK */
-  { 0x0db0, 0x0e10 }, /*                Thai_thothan ฐ THAI CHARACTER THO THAN */
-  { 0x0db1, 0x0e11 }, /*          Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */
-  { 0x0db2, 0x0e12 }, /*             Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */
-  { 0x0db3, 0x0e13 }, /*                  Thai_nonen ณ THAI CHARACTER NO NEN */
-  { 0x0db4, 0x0e14 }, /*                  Thai_dodek ด THAI CHARACTER DO DEK */
-  { 0x0db5, 0x0e15 }, /*                  Thai_totao ต THAI CHARACTER TO TAO */
-  { 0x0db6, 0x0e16 }, /*               Thai_thothung ถ THAI CHARACTER THO THUNG */
-  { 0x0db7, 0x0e17 }, /*              Thai_thothahan ท THAI CHARACTER THO THAHAN */
-  { 0x0db8, 0x0e18 }, /*               Thai_thothong ธ THAI CHARACTER THO THONG */
-  { 0x0db9, 0x0e19 }, /*                   Thai_nonu น THAI CHARACTER NO NU */
-  { 0x0dba, 0x0e1a }, /*               Thai_bobaimai บ THAI CHARACTER BO BAIMAI */
-  { 0x0dbb, 0x0e1b }, /*                  Thai_popla ป THAI CHARACTER PO PLA */
-  { 0x0dbc, 0x0e1c }, /*               Thai_phophung ผ THAI CHARACTER PHO PHUNG */
-  { 0x0dbd, 0x0e1d }, /*                   Thai_fofa ฝ THAI CHARACTER FO FA */
-  { 0x0dbe, 0x0e1e }, /*                Thai_phophan พ THAI CHARACTER PHO PHAN */
-  { 0x0dbf, 0x0e1f }, /*                  Thai_fofan ฟ THAI CHARACTER FO FAN */
-  { 0x0dc0, 0x0e20 }, /*             Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */
-  { 0x0dc1, 0x0e21 }, /*                   Thai_moma ม THAI CHARACTER MO MA */
-  { 0x0dc2, 0x0e22 }, /*                  Thai_yoyak ย THAI CHARACTER YO YAK */
-  { 0x0dc3, 0x0e23 }, /*                  Thai_rorua ร THAI CHARACTER RO RUA */
-  { 0x0dc4, 0x0e24 }, /*                     Thai_ru ฤ THAI CHARACTER RU */
-  { 0x0dc5, 0x0e25 }, /*                 Thai_loling ล THAI CHARACTER LO LING */
-  { 0x0dc6, 0x0e26 }, /*                     Thai_lu ฦ THAI CHARACTER LU */
-  { 0x0dc7, 0x0e27 }, /*                 Thai_wowaen ว THAI CHARACTER WO WAEN */
-  { 0x0dc8, 0x0e28 }, /*                 Thai_sosala ศ THAI CHARACTER SO SALA */
-  { 0x0dc9, 0x0e29 }, /*                 Thai_sorusi ษ THAI CHARACTER SO RUSI */
-  { 0x0dca, 0x0e2a }, /*                  Thai_sosua ส THAI CHARACTER SO SUA */
-  { 0x0dcb, 0x0e2b }, /*                  Thai_hohip ห THAI CHARACTER HO HIP */
-  { 0x0dcc, 0x0e2c }, /*                Thai_lochula ฬ THAI CHARACTER LO CHULA */
-  { 0x0dcd, 0x0e2d }, /*                   Thai_oang อ THAI CHARACTER O ANG */
-  { 0x0dce, 0x0e2e }, /*               Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */
-  { 0x0dcf, 0x0e2f }, /*              Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */
-  { 0x0dd0, 0x0e30 }, /*                  Thai_saraa ะ THAI CHARACTER SARA A */
-  { 0x0dd1, 0x0e31 }, /*             Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */
-  { 0x0dd2, 0x0e32 }, /*                 Thai_saraaa า THAI CHARACTER SARA AA */
-  { 0x0dd3, 0x0e33 }, /*                 Thai_saraam ำ THAI CHARACTER SARA AM */
-  { 0x0dd4, 0x0e34 }, /*                  Thai_sarai ิ THAI CHARACTER SARA I */
-  { 0x0dd5, 0x0e35 }, /*                 Thai_saraii ี THAI CHARACTER SARA II */
-  { 0x0dd6, 0x0e36 }, /*                 Thai_saraue ึ THAI CHARACTER SARA UE */
-  { 0x0dd7, 0x0e37 }, /*                Thai_sarauee ื THAI CHARACTER SARA UEE */
-  { 0x0dd8, 0x0e38 }, /*                  Thai_sarau ุ THAI CHARACTER SARA U */
-  { 0x0dd9, 0x0e39 }, /*                 Thai_sarauu ู THAI CHARACTER SARA UU */
-  { 0x0dda, 0x0e3a }, /*                Thai_phinthu ฺ THAI CHARACTER PHINTHU */
-  { 0x0ddf, 0x0e3f }, /*                   Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */
-  { 0x0de0, 0x0e40 }, /*                  Thai_sarae เ THAI CHARACTER SARA E */
-  { 0x0de1, 0x0e41 }, /*                 Thai_saraae แ THAI CHARACTER SARA AE */
-  { 0x0de2, 0x0e42 }, /*                  Thai_sarao โ THAI CHARACTER SARA O */
-  { 0x0de3, 0x0e43 }, /*          Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */
-  { 0x0de4, 0x0e44 }, /*         Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */
-  { 0x0de5, 0x0e45 }, /*            Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */
-  { 0x0de6, 0x0e46 }, /*               Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */
-  { 0x0de7, 0x0e47 }, /*              Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */
-  { 0x0de8, 0x0e48 }, /*                  Thai_maiek ่ THAI CHARACTER MAI EK */
-  { 0x0de9, 0x0e49 }, /*                 Thai_maitho ้ THAI CHARACTER MAI THO */
-  { 0x0dea, 0x0e4a }, /*                 Thai_maitri ๊ THAI CHARACTER MAI TRI */
-  { 0x0deb, 0x0e4b }, /*            Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */
-  { 0x0dec, 0x0e4c }, /*            Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */
-  { 0x0ded, 0x0e4d }, /*               Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */
-  { 0x0df0, 0x0e50 }, /*                 Thai_leksun ๐ THAI DIGIT ZERO */
-  { 0x0df1, 0x0e51 }, /*                Thai_leknung ๑ THAI DIGIT ONE */
-  { 0x0df2, 0x0e52 }, /*                Thai_leksong ๒ THAI DIGIT TWO */
-  { 0x0df3, 0x0e53 }, /*                 Thai_leksam ๓ THAI DIGIT THREE */
-  { 0x0df4, 0x0e54 }, /*                  Thai_leksi ๔ THAI DIGIT FOUR */
-  { 0x0df5, 0x0e55 }, /*                  Thai_lekha ๕ THAI DIGIT FIVE */
-  { 0x0df6, 0x0e56 }, /*                 Thai_lekhok ๖ THAI DIGIT SIX */
-  { 0x0df7, 0x0e57 }, /*                Thai_lekchet ๗ THAI DIGIT SEVEN */
-  { 0x0df8, 0x0e58 }, /*                Thai_lekpaet ๘ THAI DIGIT EIGHT */
-  { 0x0df9, 0x0e59 }, /*                 Thai_lekkao ๙ THAI DIGIT NINE */
-  { 0x0ed4, 0x11a8 }, /*             Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */
-  { 0x0ed5, 0x11a9 }, /*        Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */
-  { 0x0ed6, 0x11aa }, /*         Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */
-  { 0x0ed7, 0x11ab }, /*              Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */
-  { 0x0ed8, 0x11ac }, /*         Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */
-  { 0x0ed9, 0x11ad }, /*         Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */
-  { 0x0eda, 0x11ae }, /*             Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */
-  { 0x0edb, 0x11af }, /*              Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */
-  { 0x0edc, 0x11b0 }, /*        Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */
-  { 0x0edd, 0x11b1 }, /*         Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */
-  { 0x0ede, 0x11b2 }, /*         Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */
-  { 0x0edf, 0x11b3 }, /*          Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */
-  { 0x0ee0, 0x11b4 }, /*         Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */
-  { 0x0ee1, 0x11b5 }, /*        Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */
-  { 0x0ee2, 0x11b6 }, /*         Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */
-  { 0x0ee3, 0x11b7 }, /*              Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */
-  { 0x0ee4, 0x11b8 }, /*              Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */
-  { 0x0ee5, 0x11b9 }, /*          Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */
-  { 0x0ee6, 0x11ba }, /*               Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */
-  { 0x0ee7, 0x11bb }, /*          Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */
-  { 0x0ee8, 0x11bc }, /*              Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */
-  { 0x0ee9, 0x11bd }, /*              Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */
-  { 0x0eea, 0x11be }, /*              Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */
-  { 0x0eeb, 0x11bf }, /*             Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */
-  { 0x0eec, 0x11c0 }, /*              Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */
-  { 0x0eed, 0x11c1 }, /*             Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */
-  { 0x0eee, 0x11c2 }, /*              Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */
-  { 0x0ef8, 0x11eb }, /*            Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */
-  { 0x0efa, 0x11f9 }, /*        Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */
-  { 0x0aa2, 0x2002 }, /*                     enspace   EN SPACE */
-  { 0x0aa1, 0x2003 }, /*                     emspace   EM SPACE */
-  { 0x0aa3, 0x2004 }, /*                    em3space   THREE-PER-EM SPACE */
-  { 0x0aa4, 0x2005 }, /*                    em4space   FOUR-PER-EM SPACE */
-  { 0x0aa5, 0x2007 }, /*                  digitspace   FIGURE SPACE */
-  { 0x0aa6, 0x2008 }, /*                  punctspace   PUNCTUATION SPACE */
-  { 0x0aa7, 0x2009 }, /*                   thinspace   THIN SPACE */
-  { 0x0aa8, 0x200a }, /*                   hairspace   HAIR SPACE */
-  { 0x0abb, 0x2012 }, /*                     figdash ‒ FIGURE DASH */
-  { 0x0aaa, 0x2013 }, /*                      endash – EN DASH */
-  { 0x0aa9, 0x2014 }, /*                      emdash — EM DASH */
-  { 0x07af, 0x2015 }, /*              Greek_horizbar ― HORIZONTAL BAR */
-  { 0x0cdf, 0x2017 }, /*        hebrew_doublelowline ‗ DOUBLE LOW LINE */
-  { 0x0ad0, 0x2018 }, /*         leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */
-  { 0x0ad1, 0x2019 }, /*        rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */
-  { 0x0afd, 0x201a }, /*          singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */
-  { 0x0ad2, 0x201c }, /*         leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */
-  { 0x0ad3, 0x201d }, /*        rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */
-  { 0x0afe, 0x201e }, /*          doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */
-  { 0x0af1, 0x2020 }, /*                      dagger † DAGGER */
-  { 0x0af2, 0x2021 }, /*                doubledagger ‡ DOUBLE DAGGER */
-  { 0x0ae6, 0x2022 }, /*          enfilledcircbullet • BULLET */
-  { 0x0aae, 0x2026 }, /*                    ellipsis … HORIZONTAL ELLIPSIS */
-  { 0x0ad6, 0x2032 }, /*                     minutes ′ PRIME */
-  { 0x0ad7, 0x2033 }, /*                     seconds ″ DOUBLE PRIME */
-  { 0x0afc, 0x2038 }, /*                       caret ‸ CARET */
-  { 0x047e, 0x203e }, /*                    overline ‾ OVERLINE */
-  { 0x20a0, 0x20a0 }, /*                     EcuSign ₠ EURO-CURRENCY SIGN */
-  { 0x20a1, 0x20a1 }, /*                   ColonSign ₡ COLON SIGN */
-  { 0x20a2, 0x20a2 }, /*                CruzeiroSign ₢ CRUZEIRO SIGN */
-  { 0x20a3, 0x20a3 }, /*                  FFrancSign ₣ FRENCH FRANC SIGN */
-  { 0x20a4, 0x20a4 }, /*                    LiraSign ₤ LIRA SIGN */
-  { 0x20a5, 0x20a5 }, /*                    MillSign ₥ MILL SIGN */
-  { 0x20a6, 0x20a6 }, /*                   NairaSign ₦ NAIRA SIGN */
-  { 0x20a7, 0x20a7 }, /*                  PesetaSign ₧ PESETA SIGN */
-  { 0x20a8, 0x20a8 }, /*                   RupeeSign ₨ RUPEE SIGN */
-  { 0x0eff, 0x20a9 }, /*                  Korean_Won ₩ WON SIGN */
-  { 0x20a9, 0x20a9 }, /*                     WonSign ₩ WON SIGN */
-  { 0x20aa, 0x20aa }, /*               NewSheqelSign ₪ NEW SHEQEL SIGN */
-  { 0x20ab, 0x20ab }, /*                    DongSign ₫ DONG SIGN */
-  { 0x20ac, 0x20ac }, /*                    EuroSign € EURO SIGN */
-  { 0x0ab8, 0x2105 }, /*                      careof ℅ CARE OF */
-  { 0x06b0, 0x2116 }, /*                  numerosign № NUMERO SIGN */
-  { 0x0afb, 0x2117 }, /*         phonographcopyright ℗ SOUND RECORDING COPYRIGHT */
-  { 0x0ad4, 0x211e }, /*                prescription ℞ PRESCRIPTION TAKE */
-  { 0x0ac9, 0x2122 }, /*                   trademark ™ TRADE MARK SIGN */
-  { 0x0ab0, 0x2153 }, /*                    onethird ⅓ VULGAR FRACTION ONE THIRD */
-  { 0x0ab1, 0x2154 }, /*                   twothirds ⅔ VULGAR FRACTION TWO THIRDS */
-  { 0x0ab2, 0x2155 }, /*                    onefifth ⅕ VULGAR FRACTION ONE FIFTH */
-  { 0x0ab3, 0x2156 }, /*                   twofifths ⅖ VULGAR FRACTION TWO FIFTHS */
-  { 0x0ab4, 0x2157 }, /*                 threefifths ⅗ VULGAR FRACTION THREE FIFTHS */
-  { 0x0ab5, 0x2158 }, /*                  fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */
-  { 0x0ab6, 0x2159 }, /*                    onesixth ⅙ VULGAR FRACTION ONE SIXTH */
-  { 0x0ab7, 0x215a }, /*                  fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */
-  { 0x0ac3, 0x215b }, /*                   oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */
-  { 0x0ac4, 0x215c }, /*                threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */
-  { 0x0ac5, 0x215d }, /*                 fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */
-  { 0x0ac6, 0x215e }, /*                seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */
-  { 0x08fb, 0x2190 }, /*                   leftarrow ← LEFTWARDS ARROW */
-  { 0x08fc, 0x2191 }, /*                     uparrow ↑ UPWARDS ARROW */
-  { 0x08fd, 0x2192 }, /*                  rightarrow → RIGHTWARDS ARROW */
-  { 0x08fe, 0x2193 }, /*                   downarrow ↓ DOWNWARDS ARROW */
-  { 0x08ce, 0x21d2 }, /*                     implies ⇒ RIGHTWARDS DOUBLE ARROW */
-  { 0x08cd, 0x21d4 }, /*                    ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */
-  { 0x08ef, 0x2202 }, /*           partialderivative ∂ PARTIAL DIFFERENTIAL */
-  { 0x08c5, 0x2207 }, /*                       nabla ∇ NABLA */
-  { 0x0bca, 0x2218 }, /*                         jot ∘ RING OPERATOR */
-  { 0x08d6, 0x221a }, /*                     radical √ SQUARE ROOT */
-  { 0x08c1, 0x221d }, /*                   variation ∝ PROPORTIONAL TO */
-  { 0x08c2, 0x221e }, /*                    infinity ∞ INFINITY */
-  { 0x08de, 0x2227 }, /*                  logicaland ∧ LOGICAL AND */
-  { 0x0ba9, 0x2227 }, /*                     upcaret ∧ LOGICAL AND */
-  { 0x08df, 0x2228 }, /*                   logicalor ∨ LOGICAL OR */
-  { 0x0ba8, 0x2228 }, /*                   downcaret ∨ LOGICAL OR */
-  { 0x08dc, 0x2229 }, /*                intersection ∩ INTERSECTION */
-  { 0x0bc3, 0x2229 }, /*                      upshoe ∩ INTERSECTION */
-  { 0x08dd, 0x222a }, /*                       union ∪ UNION */
-  { 0x0bd6, 0x222a }, /*                    downshoe ∪ UNION */
-  { 0x08bf, 0x222b }, /*                    integral ∫ INTEGRAL */
-  { 0x08c0, 0x2234 }, /*                   therefore ∴ THEREFORE */
-  { 0x08c8, 0x2245 }, /*                 approximate ≅ APPROXIMATELY EQUAL TO */
-  { 0x08bd, 0x2260 }, /*                    notequal ≠ NOT EQUAL TO */
-  { 0x08cf, 0x2261 }, /*                   identical ≡ IDENTICAL TO */
-  { 0x08bc, 0x2264 }, /*               lessthanequal ≤ LESS-THAN OR EQUAL TO */
-  { 0x08be, 0x2265 }, /*            greaterthanequal ≥ GREATER-THAN OR EQUAL TO */
-  { 0x08da, 0x2282 }, /*                  includedin ⊂ SUBSET OF */
-  { 0x0bda, 0x2282 }, /*                    leftshoe ⊂ SUBSET OF */
-  { 0x08db, 0x2283 }, /*                    includes ⊃ SUPERSET OF */
-  { 0x0bd8, 0x2283 }, /*                   rightshoe ⊃ SUPERSET OF */
-  { 0x0bfc, 0x22a2 }, /*                   righttack ⊢ RIGHT TACK */
-  { 0x0bdc, 0x22a3 }, /*                    lefttack ⊣ LEFT TACK */
-  { 0x0bc2, 0x22a4 }, /*                    downtack ⊤ DOWN TACK */
-  { 0x0bce, 0x22a5 }, /*                      uptack ⊥ UP TACK */
-  { 0x0bd3, 0x2308 }, /*                     upstile ⌈ LEFT CEILING */
-  { 0x0bc4, 0x230a }, /*                   downstile ⌊ LEFT FLOOR */
-  { 0x0afa, 0x2315 }, /*           telephonerecorder ⌕ TELEPHONE RECORDER */
-  { 0x08a4, 0x2320 }, /*                 topintegral ⌠ TOP HALF INTEGRAL */
-  { 0x08a5, 0x2321 }, /*                 botintegral ⌡ BOTTOM HALF INTEGRAL */
-  { 0x0abc, 0x2329 }, /*            leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */
-  { 0x0abe, 0x232a }, /*           rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */
-  { 0x0bcc, 0x2395 }, /*                        quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */
-  { 0x09e2, 0x2409 }, /*                          ht ␉ SYMBOL FOR HORIZONTAL TABULATION */
-  { 0x09e5, 0x240a }, /*                          lf ␊ SYMBOL FOR LINE FEED */
-  { 0x09e9, 0x240b }, /*                          vt ␋ SYMBOL FOR VERTICAL TABULATION */
-  { 0x09e3, 0x240c }, /*                          ff ␌ SYMBOL FOR FORM FEED */
-  { 0x09e4, 0x240d }, /*                          cr ␍ SYMBOL FOR CARRIAGE RETURN */
-  { 0x09df, 0x2422 }, /*                       blank ␢ BLANK SYMBOL */
-  { 0x09e8, 0x2424 }, /*                          nl ␤ SYMBOL FOR NEWLINE */
-  { 0x09f1, 0x2500 }, /*              horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */
-  { 0x08a6, 0x2502 }, /*               vertconnector │ BOX DRAWINGS LIGHT VERTICAL */
-  { 0x09f8, 0x2502 }, /*                     vertbar │ BOX DRAWINGS LIGHT VERTICAL */
-  { 0x09ec, 0x250c }, /*                upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */
-  { 0x09eb, 0x2510 }, /*               uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */
-  { 0x09ed, 0x2514 }, /*               lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */
-  { 0x09ea, 0x2518 }, /*              lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */
-  { 0x09f4, 0x251c }, /*                       leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
-  { 0x09f5, 0x2524 }, /*                      rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */
-  { 0x09f7, 0x252c }, /*                        topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
-  { 0x09f6, 0x2534 }, /*                        bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */
-  { 0x09ee, 0x253c }, /*               crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
-  { 0x09e1, 0x2592 }, /*                checkerboard ▒ MEDIUM SHADE */
-  { 0x0adf, 0x25a0 }, /*                emfilledrect ■ BLACK SQUARE */
-  { 0x0acf, 0x25a1 }, /*             emopenrectangle □ WHITE SQUARE */
-  { 0x0ae7, 0x25aa }, /*            enfilledsqbullet ▪ BLACK SMALL SQUARE */
-  { 0x0ae1, 0x25ab }, /*          enopensquarebullet ▫ WHITE SMALL SQUARE */
-  { 0x0adb, 0x25ac }, /*            filledrectbullet ▬ BLACK RECTANGLE */
-  { 0x0ae2, 0x25ad }, /*              openrectbullet ▭ WHITE RECTANGLE */
-  { 0x0ae8, 0x25b2 }, /*           filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */
-  { 0x0ae3, 0x25b3 }, /*             opentribulletup △ WHITE UP-POINTING TRIANGLE */
-  { 0x0add, 0x25b6 }, /*        filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */
-  { 0x0acd, 0x25b7 }, /*           rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */
-  { 0x0ae9, 0x25bc }, /*         filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */
-  { 0x0ae4, 0x25bd }, /*           opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */
-  { 0x0adc, 0x25c0 }, /*         filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */
-  { 0x0acc, 0x25c1 }, /*            leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */
-  { 0x09e0, 0x25c6 }, /*                soliddiamond ◆ BLACK DIAMOND */
-  { 0x0ace, 0x25cb }, /*                emopencircle ○ WHITE CIRCLE */
-  { 0x0bcf, 0x25cb }, /*                      circle ○ WHITE CIRCLE */
-  { 0x0ade, 0x25cf }, /*              emfilledcircle ● BLACK CIRCLE */
-  { 0x0ae0, 0x25e6 }, /*            enopencircbullet ◦ WHITE BULLET */
-  { 0x0ae5, 0x2606 }, /*                    openstar ☆ WHITE STAR */
-  { 0x0af9, 0x260e }, /*                   telephone ☎ BLACK TELEPHONE */
-  { 0x0aca, 0x2613 }, /*               signaturemark ☓ SALTIRE */
-  { 0x0aea, 0x261c }, /*                 leftpointer ☜ WHITE LEFT POINTING INDEX */
-  { 0x0aeb, 0x261e }, /*                rightpointer ☞ WHITE RIGHT POINTING INDEX */
-  { 0x0af8, 0x2640 }, /*                femalesymbol ♀ FEMALE SIGN */
-  { 0x0af7, 0x2642 }, /*                  malesymbol ♂ MALE SIGN */
-  { 0x0aec, 0x2663 }, /*                        club ♣ BLACK CLUB SUIT */
-  { 0x0aee, 0x2665 }, /*                       heart ♥ BLACK HEART SUIT */
-  { 0x0aed, 0x2666 }, /*                     diamond ♦ BLACK DIAMOND SUIT */
-  { 0x0af6, 0x266d }, /*                 musicalflat ♭ MUSIC FLAT SIGN */
-  { 0x0af5, 0x266f }, /*                musicalsharp ♯ MUSIC SHARP SIGN */
-  { 0x0af3, 0x2713 }, /*                   checkmark ✓ CHECK MARK */
-  { 0x0af4, 0x2717 }, /*                 ballotcross ✗ BALLOT X */
-  { 0x0ad9, 0x271d }, /*                  latincross ✝ LATIN CROSS */
-  { 0x0af0, 0x2720 }, /*                maltesecross ✠ MALTESE CROSS */
-  { 0x04a4, 0x3001 }, /*                  kana_comma 、 IDEOGRAPHIC COMMA */
-  { 0x04a1, 0x3002 }, /*               kana_fullstop 。 IDEOGRAPHIC FULL STOP */
-  { 0x04a2, 0x300c }, /*         kana_openingbracket 「 LEFT CORNER BRACKET */
-  { 0x04a3, 0x300d }, /*         kana_closingbracket 」 RIGHT CORNER BRACKET */
-  { 0x04de, 0x309b }, /*                 voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */
-  { 0x04df, 0x309c }, /*             semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
-  { 0x04a7, 0x30a1 }, /*                      kana_a ァ KATAKANA LETTER SMALL A */
-  { 0x04b1, 0x30a2 }, /*                      kana_A ア KATAKANA LETTER A */
-  { 0x04a8, 0x30a3 }, /*                      kana_i ィ KATAKANA LETTER SMALL I */
-  { 0x04b2, 0x30a4 }, /*                      kana_I イ KATAKANA LETTER I */
-  { 0x04a9, 0x30a5 }, /*                      kana_u ゥ KATAKANA LETTER SMALL U */
-  { 0x04b3, 0x30a6 }, /*                      kana_U ウ KATAKANA LETTER U */
-  { 0x04aa, 0x30a7 }, /*                      kana_e ェ KATAKANA LETTER SMALL E */
-  { 0x04b4, 0x30a8 }, /*                      kana_E エ KATAKANA LETTER E */
-  { 0x04ab, 0x30a9 }, /*                      kana_o ォ KATAKANA LETTER SMALL O */
-  { 0x04b5, 0x30aa }, /*                      kana_O オ KATAKANA LETTER O */
-  { 0x04b6, 0x30ab }, /*                     kana_KA カ KATAKANA LETTER KA */
-  { 0x04b7, 0x30ad }, /*                     kana_KI キ KATAKANA LETTER KI */
-  { 0x04b8, 0x30af }, /*                     kana_KU ク KATAKANA LETTER KU */
-  { 0x04b9, 0x30b1 }, /*                     kana_KE ケ KATAKANA LETTER KE */
-  { 0x04ba, 0x30b3 }, /*                     kana_KO コ KATAKANA LETTER KO */
-  { 0x04bb, 0x30b5 }, /*                     kana_SA サ KATAKANA LETTER SA */
-  { 0x04bc, 0x30b7 }, /*                    kana_SHI シ KATAKANA LETTER SI */
-  { 0x04bd, 0x30b9 }, /*                     kana_SU ス KATAKANA LETTER SU */
-  { 0x04be, 0x30bb }, /*                     kana_SE セ KATAKANA LETTER SE */
-  { 0x04bf, 0x30bd }, /*                     kana_SO ソ KATAKANA LETTER SO */
-  { 0x04c0, 0x30bf }, /*                     kana_TA タ KATAKANA LETTER TA */
-  { 0x04c1, 0x30c1 }, /*                    kana_CHI チ KATAKANA LETTER TI */
-  { 0x04af, 0x30c3 }, /*                    kana_tsu ッ KATAKANA LETTER SMALL TU */
-  { 0x04c2, 0x30c4 }, /*                    kana_TSU ツ KATAKANA LETTER TU */
-  { 0x04c3, 0x30c6 }, /*                     kana_TE テ KATAKANA LETTER TE */
-  { 0x04c4, 0x30c8 }, /*                     kana_TO ト KATAKANA LETTER TO */
-  { 0x04c5, 0x30ca }, /*                     kana_NA ナ KATAKANA LETTER NA */
-  { 0x04c6, 0x30cb }, /*                     kana_NI ニ KATAKANA LETTER NI */
-  { 0x04c7, 0x30cc }, /*                     kana_NU ヌ KATAKANA LETTER NU */
-  { 0x04c8, 0x30cd }, /*                     kana_NE ネ KATAKANA LETTER NE */
-  { 0x04c9, 0x30ce }, /*                     kana_NO ノ KATAKANA LETTER NO */
-  { 0x04ca, 0x30cf }, /*                     kana_HA ハ KATAKANA LETTER HA */
-  { 0x04cb, 0x30d2 }, /*                     kana_HI ヒ KATAKANA LETTER HI */
-  { 0x04cc, 0x30d5 }, /*                     kana_FU フ KATAKANA LETTER HU */
-  { 0x04cd, 0x30d8 }, /*                     kana_HE ヘ KATAKANA LETTER HE */
-  { 0x04ce, 0x30db }, /*                     kana_HO ホ KATAKANA LETTER HO */
-  { 0x04cf, 0x30de }, /*                     kana_MA マ KATAKANA LETTER MA */
-  { 0x04d0, 0x30df }, /*                     kana_MI ミ KATAKANA LETTER MI */
-  { 0x04d1, 0x30e0 }, /*                     kana_MU ム KATAKANA LETTER MU */
-  { 0x04d2, 0x30e1 }, /*                     kana_ME メ KATAKANA LETTER ME */
-  { 0x04d3, 0x30e2 }, /*                     kana_MO モ KATAKANA LETTER MO */
-  { 0x04ac, 0x30e3 }, /*                     kana_ya ャ KATAKANA LETTER SMALL YA */
-  { 0x04d4, 0x30e4 }, /*                     kana_YA ヤ KATAKANA LETTER YA */
-  { 0x04ad, 0x30e5 }, /*                     kana_yu ュ KATAKANA LETTER SMALL YU */
-  { 0x04d5, 0x30e6 }, /*                     kana_YU ユ KATAKANA LETTER YU */
-  { 0x04ae, 0x30e7 }, /*                     kana_yo ョ KATAKANA LETTER SMALL YO */
-  { 0x04d6, 0x30e8 }, /*                     kana_YO ヨ KATAKANA LETTER YO */
-  { 0x04d7, 0x30e9 }, /*                     kana_RA ラ KATAKANA LETTER RA */
-  { 0x04d8, 0x30ea }, /*                     kana_RI リ KATAKANA LETTER RI */
-  { 0x04d9, 0x30eb }, /*                     kana_RU ル KATAKANA LETTER RU */
-  { 0x04da, 0x30ec }, /*                     kana_RE レ KATAKANA LETTER RE */
-  { 0x04db, 0x30ed }, /*                     kana_RO ロ KATAKANA LETTER RO */
-  { 0x04dc, 0x30ef }, /*                     kana_WA ワ KATAKANA LETTER WA */
-  { 0x04a6, 0x30f2 }, /*                     kana_WO ヲ KATAKANA LETTER WO */
-  { 0x04dd, 0x30f3 }, /*                      kana_N ン KATAKANA LETTER N */
-  { 0x04a5, 0x30fb }, /*            kana_conjunctive ・ KATAKANA MIDDLE DOT */
-  { 0x04b0, 0x30fc }, /*              prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */
-  { 0x0ea1, 0x3131 }, /*               Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */
-  { 0x0ea2, 0x3132 }, /*          Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */
-  { 0x0ea3, 0x3133 }, /*           Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */
-  { 0x0ea4, 0x3134 }, /*                Hangul_Nieun ㄴ HANGUL LETTER NIEUN */
-  { 0x0ea5, 0x3135 }, /*           Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */
-  { 0x0ea6, 0x3136 }, /*           Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */
-  { 0x0ea7, 0x3137 }, /*               Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */
-  { 0x0ea8, 0x3138 }, /*          Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */
-  { 0x0ea9, 0x3139 }, /*                Hangul_Rieul ㄹ HANGUL LETTER RIEUL */
-  { 0x0eaa, 0x313a }, /*          Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */
-  { 0x0eab, 0x313b }, /*           Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */
-  { 0x0eac, 0x313c }, /*           Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */
-  { 0x0ead, 0x313d }, /*            Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */
-  { 0x0eae, 0x313e }, /*           Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */
-  { 0x0eaf, 0x313f }, /*          Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */
-  { 0x0eb0, 0x3140 }, /*           Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */
-  { 0x0eb1, 0x3141 }, /*                Hangul_Mieum ㅁ HANGUL LETTER MIEUM */
-  { 0x0eb2, 0x3142 }, /*                Hangul_Pieub ㅂ HANGUL LETTER PIEUP */
-  { 0x0eb3, 0x3143 }, /*           Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */
-  { 0x0eb4, 0x3144 }, /*            Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */
-  { 0x0eb5, 0x3145 }, /*                 Hangul_Sios ㅅ HANGUL LETTER SIOS */
-  { 0x0eb6, 0x3146 }, /*            Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */
-  { 0x0eb7, 0x3147 }, /*                Hangul_Ieung ㅇ HANGUL LETTER IEUNG */
-  { 0x0eb8, 0x3148 }, /*                Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */
-  { 0x0eb9, 0x3149 }, /*           Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */
-  { 0x0eba, 0x314a }, /*                Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */
-  { 0x0ebb, 0x314b }, /*               Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */
-  { 0x0ebc, 0x314c }, /*                Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */
-  { 0x0ebd, 0x314d }, /*               Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */
-  { 0x0ebe, 0x314e }, /*                Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */
-  { 0x0ebf, 0x314f }, /*                    Hangul_A ㅏ HANGUL LETTER A */
-  { 0x0ec0, 0x3150 }, /*                   Hangul_AE ㅐ HANGUL LETTER AE */
-  { 0x0ec1, 0x3151 }, /*                   Hangul_YA ㅑ HANGUL LETTER YA */
-  { 0x0ec2, 0x3152 }, /*                  Hangul_YAE ㅒ HANGUL LETTER YAE */
-  { 0x0ec3, 0x3153 }, /*                   Hangul_EO ㅓ HANGUL LETTER EO */
-  { 0x0ec4, 0x3154 }, /*                    Hangul_E ㅔ HANGUL LETTER E */
-  { 0x0ec5, 0x3155 }, /*                  Hangul_YEO ㅕ HANGUL LETTER YEO */
-  { 0x0ec6, 0x3156 }, /*                   Hangul_YE ㅖ HANGUL LETTER YE */
-  { 0x0ec7, 0x3157 }, /*                    Hangul_O ㅗ HANGUL LETTER O */
-  { 0x0ec8, 0x3158 }, /*                   Hangul_WA ㅘ HANGUL LETTER WA */
-  { 0x0ec9, 0x3159 }, /*                  Hangul_WAE ㅙ HANGUL LETTER WAE */
-  { 0x0eca, 0x315a }, /*                   Hangul_OE ㅚ HANGUL LETTER OE */
-  { 0x0ecb, 0x315b }, /*                   Hangul_YO ㅛ HANGUL LETTER YO */
-  { 0x0ecc, 0x315c }, /*                    Hangul_U ㅜ HANGUL LETTER U */
-  { 0x0ecd, 0x315d }, /*                  Hangul_WEO ㅝ HANGUL LETTER WEO */
-  { 0x0ece, 0x315e }, /*                   Hangul_WE ㅞ HANGUL LETTER WE */
-  { 0x0ecf, 0x315f }, /*                   Hangul_WI ㅟ HANGUL LETTER WI */
-  { 0x0ed0, 0x3160 }, /*                   Hangul_YU ㅠ HANGUL LETTER YU */
-  { 0x0ed1, 0x3161 }, /*                   Hangul_EU ㅡ HANGUL LETTER EU */
-  { 0x0ed2, 0x3162 }, /*                   Hangul_YI ㅢ HANGUL LETTER YI */
-  { 0x0ed3, 0x3163 }, /*                    Hangul_I ㅣ HANGUL LETTER I */
-  { 0x0eef, 0x316d }, /*     Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */
-  { 0x0ef0, 0x3171 }, /*    Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */
-  { 0x0ef1, 0x3178 }, /*    Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */
-  { 0x0ef2, 0x317f }, /*              Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */
-  { 0x0ef4, 0x3184 }, /*   Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */
-  { 0x0ef5, 0x3186 }, /*          Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */
-  { 0x0ef6, 0x318d }, /*                Hangul_AraeA ㆍ HANGUL LETTER ARAEA */
-  { 0x0ef7, 0x318e }, /*               Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */
-};
-
-static guint
-unicode_to_keyval (wchar_t ucs)
-{
-  int min = 0;
-  int max = sizeof(u2ktab) / sizeof(u2ktab[0]) - 1;
-  int mid;
-
-  /* First check for Latin-1 characters (1:1 mapping) */
-  if ((ucs >= 0x0020 && ucs <= 0x007e) ||
-      (ucs >= 0x00a0 && ucs <= 0x00ff))
-    return ucs;
-
-  /* Binary search in table */
-  while (max >= min) {
-    mid = (min + max) / 2;
-    if (u2ktab[mid].ucs < ucs)
-      min = mid + 1;
-    else if (u2ktab[mid].ucs > ucs)
-      max = mid - 1;
-    else {
-      /* found it */
-      return u2ktab[mid].keysym;
-    }
-  }
-  
-  /*
-   * No matching keysym value found, return Unicode value plus 0x01000000
-   * (a convention introduced in the UTF-8 work on xterm).
-   */
-  return ucs | 0x01000000;
-}
-
-static void
-build_key_event_state (GdkEvent *event)
-{
-  event->key.state = 0;
-  if (GetKeyState (VK_SHIFT) < 0)
-    event->key.state |= GDK_SHIFT_MASK;
-  if (GetKeyState (VK_CAPITAL) & 0x1)
-    event->key.state |= GDK_LOCK_MASK;
-  if (!is_AltGr_key)
-    {
-      if (GetKeyState (VK_CONTROL) < 0)
-       {
-         event->key.state |= GDK_CONTROL_MASK;
-         if (event->key.keyval < ' ')
-           event->key.keyval += '@';
-       }
-      else if (event->key.keyval < ' ')
-       {
-         event->key.state |= GDK_CONTROL_MASK;
-         event->key.keyval += '@';
-       }
-      if (GetKeyState (VK_MENU) < 0)
-       event->key.state |= GDK_MOD1_MASK;
-    }
-}
-
-static gint
-build_pointer_event_state (MSG *xevent)
-{
-  gint state;
-  
-  state = 0;
-  if (xevent->wParam & MK_CONTROL)
-    state |= GDK_CONTROL_MASK;
-  if (xevent->wParam & MK_LBUTTON)
-    state |= GDK_BUTTON1_MASK;
-  if (xevent->wParam & MK_MBUTTON)
-    state |= GDK_BUTTON2_MASK;
-  if (xevent->wParam & MK_RBUTTON)
-    state |= GDK_BUTTON3_MASK;
-  if (xevent->wParam & MK_SHIFT)
-    state |= GDK_SHIFT_MASK;
-  if (GetKeyState (VK_MENU) < 0)
-    state |= GDK_MOD1_MASK;
-  if (GetKeyState (VK_CAPITAL) & 0x1)
-    state |= GDK_LOCK_MASK;
-
-  return state;
-}
-
-
-static void
-build_keypress_event (GdkWindowPrivate *window_private,
-                     GdkEvent         *event,
-                     MSG              *xevent)
-{
-  HIMC hIMC;
-  gint i, bytesleft, bytecount, ucount, ucleft, len;
-  guchar buf[100], *bp;
-  wchar_t wbuf[100], *wcp;
-
-  event->key.type = GDK_KEY_PRESS;
-  event->key.time = xevent->time;
-  
-  if (xevent->message == WM_IME_COMPOSITION)
-    {
-      hIMC = ImmGetContext (xevent->hwnd);
-
-      bytecount = ImmGetCompositionStringW (hIMC, GCS_RESULTSTR,
-                                           wbuf, sizeof (wbuf));
-      ucount = bytecount / 2;
-    }
-  else
-    {
-      if (xevent->message == WM_CHAR)
-       {
-         bytecount = MIN ((xevent->lParam & 0xFFFF), sizeof (buf));
-         for (i = 0; i < bytecount; i++)
-           buf[i] = xevent->wParam;
-       }
-      else /* WM_IME_CHAR */
-       {
-         event->key.keyval = GDK_VoidSymbol;
-         if (xevent->wParam & 0xFF00)
-           {
-             /* Contrary to some versions of the documentation,
-              * the lead byte is the most significant byte.
-              */
-             buf[0] = ((xevent->wParam >> 8) & 0xFF);
-             buf[1] = (xevent->wParam & 0xFF);
-             bytecount = 2;
-           }
-         else
-           {
-             buf[0] = (xevent->wParam & 0xFF);
-             bytecount = 1;
-           }
-       }
-
-      /* Convert from the window's current code page
-       * to Unicode. Then convert to UTF-8.
-       * We don't handle the surrogate stuff. Should we?
-       */
-      ucount = MultiByteToWideChar (window_private->charset_info.ciACP,
-                                   0, buf, bytecount,
-                                   wbuf, sizeof (wbuf) / sizeof (wbuf[0]));
-      
-    }
-  if (ucount == 0)
-    event->key.keyval = GDK_VoidSymbol;
-  else if (xevent->message == WM_CHAR)
-    if (xevent->wParam < ' ')
-      event->key.keyval = xevent->wParam + '@';
-    else
-      event->key.keyval = unicode_to_keyval (wbuf[0]);
-  else
-    event->key.keyval = GDK_VoidSymbol;
-
-  build_key_event_state (event);
-
-  ucleft = ucount;
-  len = 0;
-  wcp = wbuf;
-  while (ucleft-- > 0)
-    {
-      wchar_t c = *wcp++;
-
-      if (c < 0x80)
-       len += 1;
-      else if (c < 0x800)
-       len += 2;
-      else
-       len += 3;
-    }
-
-  event->key.string = g_malloc (len + 1);
-  event->key.length = len;
-  
-  ucleft = ucount;
-  wcp = wbuf;
-  bp = event->key.string;
-  while (ucleft-- > 0)
-    {
-      int first;
-      int i;
-      wchar_t c = *wcp++;
-
-      if (c < 0x80)
-       {
-         first = 0;
-         len = 1;
-       }
-      else if (c < 0x800)
-       {
-         first = 0xc0;
-         len = 2;
-       }
-      else
-       {
-         first = 0xe0;
-         len = 3;
-       }
-
-#if 1      
-      /* Woo-hoo! */
-      switch (len)
-       {
-       case 3: bp[2] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 2: bp[1] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 1: bp[0] = c | first;
-       }
-#else
-      for (i = len - 1; i > 0; --i)
-       {
-         bp[i] = (c & 0x3f) | 0x80;
-         c >>= 6;
-       }
-      bp[0] = c | first;
-#endif
-
-      bp += len;
-    }
-  *bp = 0;
-}
-
-static void
-build_keyrelease_event (GdkWindowPrivate *window_private,
-                       GdkEvent         *event,
-                       MSG              *xevent)
-{
-  guchar buf;
-  wchar_t wbuf;
-
-  event->key.type = GDK_KEY_RELEASE;
-  event->key.time = xevent->time;
-
-  if (xevent->message == WM_CHAR)
-    if (xevent->wParam < ' ')
-      event->key.keyval = xevent->wParam + '@';
-    else
-      {
-       buf = xevent->wParam;
-       MultiByteToWideChar (window_private->charset_info.ciACP,
-                            0, &buf, 1, &wbuf, 1);
-
-       event->key.keyval = unicode_to_keyval (wbuf);
-      }
-  else
-    event->key.keyval = GDK_VoidSymbol;
-  build_key_event_state (event);
-  event->key.string = NULL;
-  event->key.length = 0;
-}
-
-static void
-print_event_state (gint state)
-{
-  if (state & GDK_SHIFT_MASK)
-    g_print ("SHIFT ");
-  if (state & GDK_LOCK_MASK)
-    g_print ("LOCK ");
-  if (state & GDK_CONTROL_MASK)
-    g_print ("CONTROL ");
-  if (state & GDK_MOD1_MASK)
-    g_print ("MOD1 ");
-  if (state & GDK_BUTTON1_MASK)
-    g_print ("BUTTON1 ");
-  if (state & GDK_BUTTON2_MASK)
-    g_print ("BUTTON2 ");
-  if (state & GDK_BUTTON3_MASK)
-    g_print ("BUTTON3 ");
-}
-
-static void
-print_event (GdkEvent *event)
-{
-  gchar *escaped, *kvname;
-
-  switch (event->any.type)
-    {
-    case GDK_NOTHING: g_print ("GDK_NOTHING "); break;
-    case GDK_DELETE: g_print ("GDK_DELETE "); break;
-    case GDK_DESTROY: g_print ("GDK_DESTROY "); break;
-    case GDK_EXPOSE: g_print ("GDK_EXPOSE "); break;
-    case GDK_MOTION_NOTIFY: g_print ("GDK_MOTION_NOTIFY "); break;
-    case GDK_BUTTON_PRESS: g_print ("GDK_BUTTON_PRESS "); break;
-    case GDK_2BUTTON_PRESS: g_print ("GDK_2BUTTON_PRESS "); break;
-    case GDK_3BUTTON_PRESS: g_print ("GDK_3BUTTON_PRESS "); break;
-    case GDK_BUTTON_RELEASE: g_print ("GDK_BUTTON_RELEASE "); break;
-    case GDK_KEY_PRESS: g_print ("GDK_KEY_PRESS "); break;
-    case GDK_KEY_RELEASE: g_print ("GDK_KEY_RELEASE "); break;
-    case GDK_ENTER_NOTIFY: g_print ("GDK_ENTER_NOTIFY "); break;
-    case GDK_LEAVE_NOTIFY: g_print ("GDK_LEAVE_NOTIFY "); break;
-    case GDK_FOCUS_CHANGE: g_print ("GDK_FOCUS_CHANGE "); break;
-    case GDK_CONFIGURE: g_print ("GDK_CONFIGURE "); break;
-    case GDK_MAP: g_print ("GDK_MAP "); break;
-    case GDK_UNMAP: g_print ("GDK_UNMAP "); break;
-    case GDK_PROPERTY_NOTIFY: g_print ("GDK_PROPERTY_NOTIFY "); break;
-    case GDK_SELECTION_CLEAR: g_print ("GDK_SELECTION_CLEAR "); break;
-    case GDK_SELECTION_REQUEST: g_print ("GDK_SELECTION_REQUEST "); break;
-    case GDK_SELECTION_NOTIFY: g_print ("GDK_SELECTION_NOTIFY "); break;
-    case GDK_PROXIMITY_IN: g_print ("GDK_PROXIMITY_IN "); break;
-    case GDK_PROXIMITY_OUT: g_print ("GDK_PROXIMITY_OUT "); break;
-    case GDK_DRAG_ENTER: g_print ("GDK_DRAG_ENTER "); break;
-    case GDK_DRAG_LEAVE: g_print ("GDK_DRAG_LEAVE "); break;
-    case GDK_DRAG_MOTION: g_print ("GDK_DRAG_MOTION "); break;
-    case GDK_DRAG_STATUS: g_print ("GDK_DRAG_STATUS "); break;
-    case GDK_DROP_START: g_print ("GDK_DROP_START "); break;
-    case GDK_DROP_FINISHED: g_print ("GDK_DROP_FINISHED "); break;
-    case GDK_CLIENT_EVENT: g_print ("GDK_CLIENT_EVENT "); break;
-    case GDK_VISIBILITY_NOTIFY: g_print ("GDK_VISIBILITY_NOTIFY "); break;
-    case GDK_NO_EXPOSE: g_print ("GDK_NO_EXPOSE "); break;
-    }
-  g_print ("%#x ", GDK_DRAWABLE_XID (event->any.window));
-
-  switch (event->any.type)
-    {
-    case GDK_EXPOSE:
-      g_print ("%dx%d@+%d+%d %d",
-              event->expose.area.width,
-              event->expose.area.height,
-              event->expose.area.x,
-              event->expose.area.y,
-              event->expose.count);
-      break;
-    case GDK_MOTION_NOTIFY:
-      g_print ("(%.4g,%.4g) %s",
-              event->motion.x, event->motion.y,
-              event->motion.is_hint ? "HINT " : "");
-      print_event_state (event->motion.state);
-      break;
-    case GDK_BUTTON_PRESS:
-    case GDK_2BUTTON_PRESS:
-    case GDK_3BUTTON_PRESS:
-    case GDK_BUTTON_RELEASE:
-      g_print ("%d (%.4g,%.4g) ",
-              event->button.button,
-              event->button.x, event->button.y);
-      print_event_state (event->button.state);
-      break;
-    case GDK_KEY_PRESS: 
-    case GDK_KEY_RELEASE:
-      if (event->key.length == 0)
-       escaped = g_strdup ("");
-      else
-       escaped = g_strescape (event->key.string, NULL);
-      kvname = gdk_keyval_name (event->key.keyval);
-      g_print ("%s %d:\"%s\" ",
-              (kvname ? kvname : "??"),
-              event->key.length,
-              escaped);
-      g_free (escaped);
-      print_event_state (event->key.state);
-      break;
-    case GDK_ENTER_NOTIFY:
-    case GDK_LEAVE_NOTIFY:
-      g_print (" %s",
-              (event->crossing.detail == GDK_NOTIFY_INFERIOR ? "INFERIOR" :
-               (event->crossing.detail == GDK_NOTIFY_ANCESTOR ? "ANCESTOR" :
-                (event->crossing.detail == GDK_NOTIFY_NONLINEAR ? "NONLINEAR" :
-                 "???"))));
-      break;
-    }  
-  g_print ("\n");
-}
-
-static void
-synthesize_crossing_events (GdkWindow *window,
-                           MSG       *xevent)
-{
-  GdkEvent *event;
-  
-  /* If we are not using TrackMouseEvent, generate a leave notify
-   * event if necessary
-   */
-  if (p_TrackMouseEvent == NULL
-      && curWnd
-      && (WINDOW_PRIVATE(curWnd)->event_mask & GDK_LEAVE_NOTIFY_MASK))
-    {
-      GDK_NOTE (EVENTS, g_print ("synthesizing LEAVE_NOTIFY event\n"));
-
-      event = gdk_event_new ();
-      event->crossing.type = GDK_LEAVE_NOTIFY;
-      event->crossing.window = curWnd;
-      gdk_window_ref (event->crossing.window);
-      event->crossing.subwindow = NULL;
-      event->crossing.time = xevent->time;
-      event->crossing.x = curX;
-      event->crossing.y = curY;
-      event->crossing.x_root = curXroot;
-      event->crossing.y_root = curYroot;
-      event->crossing.mode = GDK_CROSSING_NORMAL;
-      if (IsChild (GDK_DRAWABLE_XID (curWnd), GDK_DRAWABLE_XID (window)))
-       event->crossing.detail = GDK_NOTIFY_INFERIOR;
-      else if (IsChild (GDK_DRAWABLE_XID (window), GDK_DRAWABLE_XID (curWnd)))
-       event->crossing.detail = GDK_NOTIFY_ANCESTOR;
-      else
-       event->crossing.detail = GDK_NOTIFY_NONLINEAR;
-
-      event->crossing.focus = TRUE; /* ??? */
-      event->crossing.state = 0; /* ??? */
-
-      gdk_event_queue_append (event);
-      GDK_NOTE (EVENTS, print_event (event));
-    }
-
-  if (WINDOW_PRIVATE(window)->event_mask & GDK_ENTER_NOTIFY_MASK)
-    {
-      GDK_NOTE (EVENTS, g_print ("synthesizing ENTER_NOTIFY event\n"));
-      
-      event = gdk_event_new ();
-      event->crossing.type = GDK_ENTER_NOTIFY;
-      event->crossing.window = window;
-      gdk_window_ref (event->crossing.window);
-      event->crossing.subwindow = NULL;
-      event->crossing.time = xevent->time;
-      event->crossing.x = LOWORD (xevent->lParam);
-      event->crossing.y = HIWORD (xevent->lParam);
-      event->crossing.x_root = (gfloat) xevent->pt.x;
-      event->crossing.y_root = (gfloat) xevent->pt.y;
-      event->crossing.mode = GDK_CROSSING_NORMAL;
-      if (curWnd
-         && IsChild (GDK_DRAWABLE_XID (curWnd), GDK_DRAWABLE_XID (window)))
-       event->crossing.detail = GDK_NOTIFY_ANCESTOR;
-      else if (curWnd
-              && IsChild (GDK_DRAWABLE_XID (window), GDK_DRAWABLE_XID (curWnd)))
-       event->crossing.detail = GDK_NOTIFY_INFERIOR;
-      else
-       event->crossing.detail = GDK_NOTIFY_NONLINEAR;
-      
-      event->crossing.focus = TRUE; /* ??? */
-      event->crossing.state = 0; /* ??? */
-      
-      gdk_event_queue_append (event);
-
-      GDK_NOTE (EVENTS, print_event (event));
-
-      if (WINDOW_PRIVATE(window)->extension_events != 0
-         && gdk_input_vtable.enter_event)
-       gdk_input_vtable.enter_event (&event->crossing, window);
-
-    }
-  
-  if (curWnd)
-    gdk_window_unref (curWnd);
-  curWnd = window;
-  gdk_window_ref (curWnd);
-#ifdef USE_TRACKMOUSEEVENT
-  if (p_TrackMouseEvent != NULL)
-    {
-      TRACKMOUSEEVENT tme;
-
-      tme.cbSize = sizeof (TRACKMOUSEEVENT);
-      tme.dwFlags = TME_LEAVE;
-      tme.hwndTrack = GDK_DRAWABLE_XID (curWnd);
-      tme.dwHoverTime = HOVER_DEFAULT;
-      
-      (*p_TrackMouseEvent) (&tme);
-    }
-#endif
-}
-
-#ifndef NEW_PROPAGATION_CODE
-
-static GdkWindow *
-key_propagate (GdkWindow *window,
-              MSG       *xevent)
-{
-  gdk_window_unref (window);
-  window = WINDOW_PRIVATE(window)->parent;
-  gdk_window_ref (window);
-
-  return window;
-}  
-
-static GdkWindow *
-pointer_propagate (GdkWindow *window,
-                  MSG       *xevent)
-{
-  POINT pt;
-
-  pt.x = LOWORD (xevent->lParam);
-  pt.y = HIWORD (xevent->lParam);
-  ClientToScreen (GDK_DRAWABLE_XID (window), &pt);
-  gdk_window_unref (window);
-  window = WINDOW_PRIVATE(window)->parent;
-  gdk_window_ref (window);
-  ScreenToClient (GDK_DRAWABLE_XID (window), &pt);
-  xevent->lParam = MAKELPARAM (pt.x, pt.y);
-
-  return window;
-}
-
-#endif /* !NEW_PROPAGATION_CODE */
-
-static void
-translate_mouse_coords (GdkWindow *window1,
-                       GdkWindow *window2,
-                       MSG       *xevent)
-{
-  POINT pt;
-
-  pt.x = LOWORD (xevent->lParam);
-  pt.y = HIWORD (xevent->lParam);
-  ClientToScreen (GDK_DRAWABLE_XID (window1), &pt);
-  ScreenToClient (GDK_DRAWABLE_XID (window2), &pt);
-  xevent->lParam = MAKELPARAM (pt.x, pt.y);
-  GDK_NOTE (EVENTS, g_print ("...new coords are (%d,%d)\n", pt.x, pt.y));
-}
-
-#ifdef NEW_PROPAGATION_CODE
-
-static gboolean
-propagate (GdkWindow  **window,
-          MSG         *xevent,
-          GdkWindow   *grab_window,
-          gboolean     grab_owner_events,
-          gint         grab_mask,
-          gboolean   (*doesnt_want_it) (gint mask,
-                                        MSG *xevent))
-{
-  if (grab_window != NULL && !grab_owner_events)
-    {
-      /* Event source is grabbed with owner_events FALSE */
-      GDK_NOTE (EVENTS, g_print ("...grabbed, owner_events FALSE, "));
-      if ((*doesnt_want_it) (grab_mask, xevent))
-       {
-         GDK_NOTE (EVENTS, g_print ("...grabber doesn't want it\n"));
-         return FALSE;
-       }
-      else
-       {
-         GDK_NOTE (EVENTS, g_print ("...sending to grabber %#x\n",
-                                    GDK_DRAWABLE_XID (grab_window)));
-         gdk_window_unref (*window);
-         *window = grab_window;
-         gdk_window_ref (*window);
-         return TRUE;
-       }
-    }
-  while (TRUE)
-    {
-     if ((*doesnt_want_it) (WINDOW_PRIVATE(*window)->event_mask, xevent))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(*window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (grab_window != NULL)
-               {
-                 /* Event source is grabbed with owner_events TRUE */
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 if ((*doesnt_want_it) (grab_mask, xevent))
-                   {
-                     /* Grabber doesn't want it either */
-                     GDK_NOTE (EVENTS, g_print ("...grabber doesn't want it\n"));
-                     return FALSE;
-                   }
-                 else
-                   {
-                     /* Grabbed! */
-                     GDK_NOTE (EVENTS, g_print ("...sending to grabber %#x\n",
-                                                GDK_DRAWABLE_XID (grab_window)));
-                     gdk_window_unref (*window);
-                     *window = grab_window;
-                     gdk_window_ref (*window);
-                     return TRUE;
-                   }
-               }
-             else
-               {
-                 GDK_NOTE (EVENTS, g_print ("...undelivered\n"));
-                 return FALSE;
-               }
-           }
-         else
-           {
-             gdk_window_unref (*window);
-             *window = WINDOW_PRIVATE(*window)->parent;
-             gdk_window_ref (*window);
-             GDK_NOTE (EVENTS, g_print ("...propagating to %#x\n",
-                                        GDK_DRAWABLE_XID (*window)));
-             /* The only branch where we actually continue the loop */
-           }
-       }
-      else
-       return TRUE;
-    }
-}
-
-static gboolean
-doesnt_want_key (gint mask,
-                MSG *xevent)
-{
-  return (((xevent->message == WM_KEYUP
-           || xevent->message == WM_SYSKEYUP)
-          && !(mask & GDK_KEY_RELEASE_MASK))
-         ||
-         ((xevent->message == WM_KEYDOWN
-           || xevent->message == WM_SYSKEYDOWN)
-          && !(mask & GDK_KEY_PRESS_MASK)));
-}
-
-static gboolean
-doesnt_want_char (gint mask,
-                 MSG *xevent)
-{
-  return !(mask & (GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK));
-}
-
-static gboolean
-doesnt_want_button_press (gint mask,
-                         MSG *xevent)
-{
-  return !(mask & GDK_BUTTON_PRESS_MASK);
-}
-
-static gboolean
-doesnt_want_button_release (gint mask,
-                           MSG *xevent)
-{
-  return !(mask & GDK_BUTTON_RELEASE_MASK);
-}
-
-static gboolean
-doesnt_want_button_motion (gint mask,
-                          MSG *xevent)
-{
-  return !((mask & GDK_POINTER_MOTION_MASK)
-          || ((xevent->wParam & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON))
-              && (mask & GDK_BUTTON_MOTION_MASK))
-          || ((xevent->wParam & MK_LBUTTON)
-              && (mask & GDK_BUTTON1_MOTION_MASK))
-          || ((xevent->wParam & MK_MBUTTON)
-              && (mask & GDK_BUTTON2_MOTION_MASK))
-          || ((xevent->wParam & MK_RBUTTON)
-              && (mask & GDK_BUTTON3_MOTION_MASK)));
-}
-
-#endif
-
-static gboolean
-gdk_event_translate (GdkEvent *event,
-                    MSG      *xevent,
-                    gboolean *ret_val_flagp,
-                    gint     *ret_valp)
-{
-  GdkWindow *window, *orig_window;
-  GdkColormapPrivate *colormap_private;
-  HWND owner;
-  DWORD pidActWin;
-  DWORD pidThis;
-  DWORD dwStyle;
-  PAINTSTRUCT paintstruct;
-  HDC hdc;
-  HBRUSH hbr;
-  RECT rect;
-  POINT pt;
-  MINMAXINFO *lpmmi;
-  GdkEventMask mask;
-  GdkDrawablePrivate *pixmap_private;
-  HDC bgdc;
-  HGDIOBJ oldbitmap;
-  int button;
-  int i, j, n, k;
-  gchar buf[256];
-  gchar *msgname;
-  gboolean return_val;
-  gboolean flag;
-  
-  return_val = FALSE;
-  
-  if (ret_val_flagp)
-    *ret_val_flagp = FALSE;
-
-#ifndef USE_DISPATCHMESSAGE
-  if (xevent->message == gdk_ping_msg)
-    {
-      /* Messages we post ourselves just to wakeup WaitMessage.  */
-      GDK_NOTE (EVENTS, g_print ("gdk_ping_msg\n"));
-
-      return FALSE;
-    }
-  else if (xevent->message == g_pipe_readable_msg)
-    {
-      GDK_NOTE (EVENTS, g_print ("g_pipe_readable_msg: %d %d\n",
-                                xevent->wParam, xevent->lParam));
-
-      g_io_channel_win32_pipe_readable (xevent->wParam, xevent->lParam);
-      return FALSE;
-    }
-#endif
-
-  window = gdk_window_lookup (xevent->hwnd);
-  orig_window = window;
-  
-  if (window != NULL)
-    gdk_window_ref (window);
-  else
-    {
-      /* Handle WM_QUIT here ? */
-      if (xevent->message == WM_QUIT)
-       {
-         GDK_NOTE (EVENTS, g_print ("WM_QUIT: %d\n", xevent->wParam));
-         exit (xevent->wParam);
-       }
-      else if (xevent->message == WM_MOVE
-              || xevent->message == WM_SIZE)
-       {
-         /* It's quite normal to get these messages before we have
-          * had time to register the window in our lookup table, or
-          * when the window is being destroyed and we already have
-          * removed it. Repost the same message to our queue so that
-          * we will get it later when we are prepared.
-          */
-         PostMessage (xevent->hwnd, xevent->message,
-                      xevent->wParam, xevent->lParam);
-       }
-      return FALSE;
-    }
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      /* Check for filters for this window */
-      GdkFilterReturn result;
-      result = gdk_event_apply_filters
-       (xevent, event, WINDOW_PRIVATE(window)->filters);
-      
-      if (result != GDK_FILTER_CONTINUE)
-       {
-         return (result == GDK_FILTER_TRANSLATE) ? TRUE : FALSE;
-       }
-    }
-
-  if (xevent->message == gdk_selection_notify_msg)
-    {
-      GDK_NOTE (SELECTION, g_print ("gdk_selection_notify_msg: %#x\n",
-                                   xevent->hwnd));
-
-      event->selection.type = GDK_SELECTION_NOTIFY;
-      event->selection.window = window;
-      event->selection.selection = xevent->wParam;
-      event->selection.target = xevent->lParam;
-      event->selection.property = gdk_selection_property;
-      event->selection.time = xevent->time;
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-
-      /* Will pass through switch below without match */
-    }
-  else if (xevent->message == gdk_selection_request_msg)
-    {
-      GDK_NOTE (SELECTION, g_print ("gdk_selection_request_msg: %#x\n",
-                                   xevent->hwnd));
-
-      event->selection.type = GDK_SELECTION_REQUEST;
-      event->selection.window = window;
-      event->selection.selection = gdk_clipboard_atom;
-      event->selection.target = GDK_TARGET_STRING;
-      event->selection.property = gdk_selection_property;
-      event->selection.requestor = (guint32) xevent->hwnd;
-      event->selection.time = xevent->time;
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-
-      /* Again, will pass through switch below without match */
-    }
-  else if (xevent->message == gdk_selection_clear_msg)
-    {
-      GDK_NOTE (SELECTION, g_print ("gdk_selection_clear_msg: %#x\n",
-                                   xevent->hwnd));
-
-      event->selection.type = GDK_SELECTION_CLEAR;
-      event->selection.window = window;
-      event->selection.selection = xevent->wParam;
-      event->selection.time = xevent->time;
-
-      return_val = GDK_DRAWABLE_DESTROYED (window);
-
-      /* Once again, we will pass through switch below without match */
-    }
-  else
-    {
-      GList *tmp_list;
-      GdkFilterReturn result = GDK_FILTER_CONTINUE;
-
-      tmp_list = client_filters;
-      while (tmp_list)
-       {
-         GdkClientFilter *filter = tmp_list->data;
-         if (filter->type == xevent->message)
-           {
-             GDK_NOTE (EVENTS, g_print ("client filter matched\n"));
-             result = (*filter->function) (xevent, event, filter->data);
-             switch (result)
-               {
-               case GDK_FILTER_REMOVE:
-                 return_val = FALSE;
-                 break;
-
-               case GDK_FILTER_TRANSLATE:
-                 return_val = TRUE;
-                 break;
-
-               case GDK_FILTER_CONTINUE:
-                 return_val = TRUE;
-                 event->client.type = GDK_CLIENT_EVENT;
-                 event->client.window = window;
-                 event->client.message_type = xevent->message;
-                 event->client.data_format = 0;
-                 event->client.data.l[0] = xevent->wParam;
-                 event->client.data.l[1] = xevent->lParam;
-                 break;
-               }
-             goto bypass_switch; /* Ouch */
-           }
-         tmp_list = tmp_list->next;
-       }
-    }
-
-  switch (xevent->message)
-    {
-    case WM_INPUTLANGCHANGE:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_INPUTLANGCHANGE: %#x charset %d locale %x\n",
-                        xevent->hwnd, xevent->wParam, xevent->lParam));
-      WINDOW_PRIVATE(window)->input_locale = (HKL) xevent->lParam;
-      TranslateCharsetInfo ((DWORD FAR *) xevent->wParam,
-                           &WINDOW_PRIVATE(window)->charset_info,
-                           TCI_SRCCHARSET);
-      break;
-
-    case WM_SYSKEYUP:
-    case WM_SYSKEYDOWN:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_SYSKEY%s: %#x  key: %s  %#x %#.08x\n",
-                        (xevent->message == WM_SYSKEYUP ? "UP" : "DOWN"),
-                        xevent->hwnd,
-                        (GetKeyNameText (xevent->lParam, buf,
-                                         sizeof (buf)) > 0 ?
-                         buf : ""),
-                        xevent->wParam,
-                        xevent->lParam));
-
-      /* Let the system handle Alt-Tab and Alt-Enter */
-      if (xevent->wParam == VK_TAB
-         || xevent->wParam == VK_RETURN
-         || xevent->wParam == VK_F4)
-       break;
-      /* If posted without us having keyboard focus, ignore */
-      if (!(xevent->lParam & 0x20000000))
-       break;
-#if 0
-      /* don't generate events for just the Alt key */
-      if (xevent->wParam == VK_MENU)
-       break;
-#endif
-      /* Jump to code in common with WM_KEYUP and WM_KEYDOWN */
-      goto keyup_or_down;
-
-    case WM_KEYUP:
-    case WM_KEYDOWN:
-      GDK_NOTE (EVENTS, 
-               g_print ("WM_KEY%s: %#x  key: %s  %#x %#.08x\n",
-                        (xevent->message == WM_KEYUP ? "UP" : "DOWN"),
-                        xevent->hwnd,
-                        (GetKeyNameText (xevent->lParam, buf,
-                                         sizeof (buf)) > 0 ?
-                         buf : ""),
-                        xevent->wParam,
-                        xevent->lParam));
-
-      ignore_WM_CHAR = TRUE;
-    keyup_or_down:
-
-#ifdef NEW_PROPAGATION_CODE
-      if (!propagate (&window, xevent,
-                     k_grab_window, k_grab_owner_events, GDK_ALL_EVENTS_MASK,
-                     doesnt_want_key))
-         break;
-      event->key.window = window;
-#else
-      if (k_grab_window != NULL && !k_grab_owner_events)
-       {
-         /* Keyboard is grabbed with owner_events FALSE */
-         GDK_NOTE (EVENTS, g_print ("...grabbed, owner_events FALSE, "
-                                    "sending to %#x\n",
-                                    GDK_DRAWABLE_XID (k_grab_window)));
-         event->key.window = k_grab_window;
-         /* Continue with switch statement below */
-       }
-      else if (((xevent->message == WM_KEYUP
-                    || xevent->message == WM_SYSKEYUP)
-                   && !(WINDOW_PRIVATE(window)->event_mask & GDK_KEY_RELEASE_MASK))
-                  || ((xevent->message == WM_KEYDOWN
-                       || xevent->message == WM_SYSKEYDOWN)
-                      && !(WINDOW_PRIVATE(window)->event_mask & GDK_KEY_PRESS_MASK)))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (k_grab_window != NULL)
-               {
-                 /* Keyboard is grabbed with owner_events TRUE */
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 event->key.window = k_grab_window;
-                 /* Continue with switch statement below */
-               }
-             else
-               break;
-           }
-         else
-           {
-             window = key_propagate (window, xevent);
-             /* Jump back up */
-             goto keyup_or_down;
-           }
-       }
-      else
-       event->key.window = window;
-
-      g_assert (event->key.window == window);
-#endif       
-      switch (xevent->wParam)
-       {
-       case VK_LBUTTON:
-         event->key.keyval = GDK_Pointer_Button1; break;
-       case VK_RBUTTON:
-         event->key.keyval = GDK_Pointer_Button3; break;
-       case VK_MBUTTON:
-         event->key.keyval = GDK_Pointer_Button2; break;
-       case VK_CANCEL:
-         event->key.keyval = GDK_Cancel; break;
-       case VK_BACK:
-         event->key.keyval = GDK_BackSpace; break;
-       case VK_TAB:
-         event->key.keyval = (GetKeyState(VK_SHIFT) < 0 ? 
-           GDK_ISO_Left_Tab : GDK_Tab);
-         break;
-       case VK_CLEAR:
-         event->key.keyval = GDK_Clear; break;
-       case VK_RETURN:
-         event->key.keyval = GDK_Return; break;
-       case VK_SHIFT:
-         event->key.keyval = GDK_Shift_L; break;
-       case VK_CONTROL:
-         if (xevent->lParam & 0x01000000)
-           event->key.keyval = GDK_Control_R;
-         else
-           event->key.keyval = GDK_Control_L;
-         break;
-       case VK_MENU:
-         if (xevent->lParam & 0x01000000)
-           {
-             /* AltGr key comes in as Control+Right Alt */
-             if (GetKeyState (VK_CONTROL) < 0)
-               {
-                 ignore_WM_CHAR = FALSE;
-                 is_AltGr_key = TRUE;
-               }
-             event->key.keyval = GDK_Alt_R;
-           }
-         else
-           event->key.keyval = GDK_Alt_L;
-         break;
-       case VK_PAUSE:
-         event->key.keyval = GDK_Pause; break;
-       case VK_CAPITAL:
-         event->key.keyval = GDK_Caps_Lock; break;
-       case VK_ESCAPE:
-         event->key.keyval = GDK_Escape; break;
-       case VK_PRIOR:
-         event->key.keyval = GDK_Prior; break;
-       case VK_NEXT:
-         event->key.keyval = GDK_Next; break;
-       case VK_END:
-         event->key.keyval = GDK_End; break;
-       case VK_HOME:
-         event->key.keyval = GDK_Home; break;
-       case VK_LEFT:
-         event->key.keyval = GDK_Left; break;
-       case VK_UP:
-         event->key.keyval = GDK_Up; break;
-       case VK_RIGHT:
-         event->key.keyval = GDK_Right; break;
-       case VK_DOWN:
-         event->key.keyval = GDK_Down; break;
-       case VK_SELECT:
-         event->key.keyval = GDK_Select; break;
-       case VK_PRINT:
-         event->key.keyval = GDK_Print; break;
-       case VK_EXECUTE:
-         event->key.keyval = GDK_Execute; break;
-       case VK_INSERT:
-         event->key.keyval = GDK_Insert; break;
-       case VK_DELETE:
-         event->key.keyval = GDK_Delete; break;
-       case VK_HELP:
-         event->key.keyval = GDK_Help; break;
-       case VK_NUMPAD0:
-       case VK_NUMPAD1:
-       case VK_NUMPAD2:
-       case VK_NUMPAD3:
-       case VK_NUMPAD4:
-       case VK_NUMPAD5:
-       case VK_NUMPAD6:
-       case VK_NUMPAD7:
-       case VK_NUMPAD8:
-       case VK_NUMPAD9:
-         /* Apparently applications work better if we just pass numpad digits
-          * on as real digits? So wait for the WM_CHAR instead.
-          */
-         ignore_WM_CHAR = FALSE;
-         break;
-       case VK_MULTIPLY:
-         event->key.keyval = GDK_KP_Multiply; break;
-       case VK_ADD:
-         /* Pass it on as an ASCII plus in WM_CHAR. */
-         ignore_WM_CHAR = FALSE;
-         break;
-       case VK_SEPARATOR:
-         event->key.keyval = GDK_KP_Separator; break;
-       case VK_SUBTRACT:
-         /* Pass it on as an ASCII minus in WM_CHAR. */
-         ignore_WM_CHAR = FALSE;
-         break;
-       case VK_DECIMAL:
-         /* The keypad decimal key should also be passed on as the decimal
-          * sign ('.' or ',' depending on the Windows locale settings,
-          * apparently). So wait for the WM_CHAR here, also.
-          */
-         ignore_WM_CHAR = FALSE;
-         break;
-       case VK_DIVIDE:
-         event->key.keyval = GDK_KP_Divide; break;
-       case VK_F1:
-         event->key.keyval = GDK_F1; break;
-       case VK_F2:
-         event->key.keyval = GDK_F2; break;
-       case VK_F3:
-         event->key.keyval = GDK_F3; break;
-       case VK_F4:
-         event->key.keyval = GDK_F4; break;
-       case VK_F5:
-         event->key.keyval = GDK_F5; break;
-       case VK_F6:
-         event->key.keyval = GDK_F6; break;
-       case VK_F7:
-         event->key.keyval = GDK_F7; break;
-       case VK_F8:
-         event->key.keyval = GDK_F8; break;
-       case VK_F9:
-         event->key.keyval = GDK_F9; break;
-       case VK_F10:
-         event->key.keyval = GDK_F10; break;
-       case VK_F11:
-         event->key.keyval = GDK_F11; break;
-       case VK_F12:
-         event->key.keyval = GDK_F12; break;
-       case VK_F13:
-         event->key.keyval = GDK_F13; break;
-       case VK_F14:
-         event->key.keyval = GDK_F14; break;
-       case VK_F15:
-         event->key.keyval = GDK_F15; break;
-       case VK_F16:
-         event->key.keyval = GDK_F16; break;
-       case '0':
-       case '1':
-       case '2':
-       case '3':
-       case '4':
-       case '5':
-       case '6':
-       case '7':
-       case '8':
-       case '9':
-         if (!is_AltGr_key && (GetKeyState (VK_CONTROL) < 0
-                               || GetKeyState (VK_MENU) < 0))
-           /* Control- or Alt-digits won't come in as a WM_CHAR,
-            * but beware of AltGr-digits, which are used for instance
-            * on Finnish keyboards.
-            */
-           event->key.keyval = GDK_0 + (xevent->wParam - '0');
-         else
-           ignore_WM_CHAR = FALSE;
-         break;
-       case VK_OEM_PLUS:       /* On my Win98, the '+' key comes in
-                                * as VK_OEM_PLUS
-                                */
-         if (!is_AltGr_key && (GetKeyState (VK_CONTROL) < 0
-                               || GetKeyState (VK_MENU) < 0))
-           /* Control- or Alt-plus won't come in as WM_CHAR,
-            * but beware of AltGr-plus which is backslash on
-            * Finnish keyboards
-            */
-           event->key.keyval = '+';
-         else
-           ignore_WM_CHAR = FALSE;
-         break;
-       default:
-         if (xevent->message == WM_SYSKEYDOWN || xevent->message == WM_SYSKEYUP)
-           event->key.keyval = xevent->wParam;
-         else
-           ignore_WM_CHAR = FALSE;
-         break;
-       }
-
-      if (!ignore_WM_CHAR)
-       break;
-
-      is_AltGr_key = FALSE;
-      event->key.type = ((xevent->message == WM_KEYDOWN
-                         || xevent->message == WM_SYSKEYDOWN) ?
-                        GDK_KEY_PRESS : GDK_KEY_RELEASE);
-      event->key.time = xevent->time;
-      event->key.state = 0;
-      if (GetKeyState (VK_SHIFT) < 0)
-       event->key.state |= GDK_SHIFT_MASK;
-      if (GetKeyState (VK_CAPITAL) & 0x1)
-       event->key.state |= GDK_LOCK_MASK;
-      if (GetKeyState (VK_CONTROL) < 0)
-       event->key.state |= GDK_CONTROL_MASK;
-      if (xevent->wParam != VK_MENU && GetKeyState (VK_MENU) < 0)
-       event->key.state |= GDK_MOD1_MASK;
-      event->key.string = NULL;
-      event->key.length = 0;
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-    case WM_IME_COMPOSITION:
-      if (!use_IME_COMPOSITION)
-       break;
-      GDK_NOTE (EVENTS, g_print ("WM_IME_COMPOSITION: %#x  %#x\n",
-                                xevent->hwnd, xevent->lParam));
-      if (xevent->lParam & GCS_RESULTSTR)
-       goto wm_char;
-      break;
-
-    case WM_IME_CHAR:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_IME_CHAR: %#x  bytes: %#.04x\n",
-                        xevent->hwnd, xevent->wParam));
-      goto wm_char;
-      
-    case WM_CHAR:
-      GDK_NOTE (EVENTS, 
-               g_print ("WM_CHAR: %#x  char: %#x %#.08x  %s\n",
-                        xevent->hwnd, xevent->wParam, xevent->lParam,
-                        (ignore_WM_CHAR ? "ignored" : "")));
-
-      if (ignore_WM_CHAR)
-       {
-         ignore_WM_CHAR = FALSE;
-         break;
-       }
-
-    wm_char:
-#ifdef NEW_PROPAGATION_CODE
-      if (!propagate (&window, xevent,
-                     k_grab_window, k_grab_owner_events, GDK_ALL_EVENTS_MASK,
-                     doesnt_want_char))
-         break;
-      event->key.window = window;
-#else
-      /* This doesn't handle the rather theorethical case that a window
-       * wants key presses but still wants releases to be propagated,
-       * for instance. Or is that so theorethical?
-       */
-      if (k_grab_window != NULL && !k_grab_owner_events)
-       {
-         /* Keyboard is grabbed with owner_events FALSE */
-         GDK_NOTE (EVENTS,
-                   g_print ("...grabbed, owner_events FALSE, "
-                            "sending to %#x\n",
-                            GDK_DRAWABLE_XID (k_grab_window)));
-         event->key.window = k_grab_window;
-       }
-      else if (!(WINDOW_PRIVATE(window)->event_mask & (GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK)))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (k_grab_window != NULL)
-               {
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 event->key.window = k_grab_window;
-               }
-             else
-               break;
-           }
-         else
-           {
-             window = key_propagate (window, xevent);
-             /* Jump back up */
-             goto wm_char;
-           }
-       }
-      else
-       event->key.window = window;
-
-      g_assert (event->key.window == window);
-#endif
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      if (return_val && (event->key.window == k_grab_window
-                        || (WINDOW_PRIVATE(window)->event_mask & GDK_KEY_RELEASE_MASK)))
-       {
-         if (window == k_grab_window
-             || (WINDOW_PRIVATE(window)->event_mask & GDK_KEY_PRESS_MASK))
-           {
-             /* Append a GDK_KEY_PRESS event to the pushback list
-              * (from which it will be fetched before the release
-              * event).
-              */
-             GdkEvent *event2 = gdk_event_new ();
-             build_keypress_event (WINDOW_PRIVATE(window), event2, xevent);
-             event2->key.window = window;
-             gdk_window_ref (window);
-             gdk_event_queue_append (event2);
-             GDK_NOTE (EVENTS, print_event (event2));
-           }
-         /* Return the key release event.  */
-         build_keyrelease_event (WINDOW_PRIVATE(window), event, xevent);
-       }
-      else if (return_val
-              && (WINDOW_PRIVATE(window)->event_mask & GDK_KEY_PRESS_MASK))
-       {
-         /* Return just the key press event. */
-         build_keypress_event (WINDOW_PRIVATE(window), event, xevent);
-       }
-      else
-       return_val = FALSE;
-
-#if 0 /* Don't reset is_AltGr_key here. Othewise we can't type several
-       * AltGr-accessed chars while keeping the AltGr pressed down
-       * all the time.
-       */
-      is_AltGr_key = FALSE;
-#endif
-      break;
-
-    case WM_LBUTTONDOWN:
-      button = 1;
-      goto buttondown0;
-    case WM_MBUTTONDOWN:
-      button = 2;
-      goto buttondown0;
-    case WM_RBUTTONDOWN:
-      button = 3;
-
-    buttondown0:
-      GDK_NOTE (EVENTS, 
-               g_print ("WM_%cBUTTONDOWN: %#x  (%d,%d)\n",
-                        " LMR"[button],
-                        xevent->hwnd,
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      if (WINDOW_PRIVATE(window)->extension_events != 0
-         && gdk_input_ignore_core)
-       {
-         GDK_NOTE (EVENTS, g_print ("...ignored\n"));
-         break;
-       }
-
-      if (window != curWnd)
-       synthesize_crossing_events (window, xevent);
-
-      event->button.type = GDK_BUTTON_PRESS;
-#ifdef NEW_PROPAGATION_CODE
-      if (!propagate (&window, xevent,
-                     p_grab_window, p_grab_owner_events, p_grab_mask,
-                     doesnt_want_button_press))
-         break;
-      event->button.window = window;
-#else
-    buttondown:
-      mask = WINDOW_PRIVATE(window)->event_mask;
-
-      if (p_grab_window != NULL && !p_grab_owner_events)
-       {
-         /* Pointer is grabbed with owner_events FALSE */
-         GDK_NOTE (EVENTS, g_print ("...grabbed, owner_events FALSE\n"));
-
-         mask = p_grab_mask;
-         if (!(mask & GDK_BUTTON_PRESS_MASK))
-           /* Grabber doesn't want it */
-           break;
-         else
-           event->button.window = p_grab_window;
-         GDK_NOTE (EVENTS, g_print ("...sending to %#x\n",
-                                    GDK_DRAWABLE_XID (p_grab_window)));
-       }
-      else if (!(mask & GDK_BUTTON_PRESS_MASK))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (p_grab_window != NULL)
-               {
-                 /* Pointer is grabbed wíth owner_events TRUE */
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 mask = p_grab_mask;
-                 if (!(mask & GDK_BUTTON_PRESS_MASK))
-                   {
-                     /* Grabber doesn't want it either */
-                     GDK_NOTE (EVENTS, g_print ("...grabber uninterested\n"));
-                     break;
-                   }
-                 else
-                   event->button.window = p_grab_window;
-                 GDK_NOTE (EVENTS, g_print ("...sending to %#x\n",
-                                            GDK_DRAWABLE_XID (p_grab_window)));
-               }
-             else
-               break;
-           }
-         else
-           {
-             window = pointer_propagate (window, xevent);
-             /* Jump back up */
-             goto buttondown; /* What did Dijkstra say? */
-           }
-       }
-      else
-       event->button.window = window;
-
-      g_assert (event->button.window == window);
-#endif
-      /* Emulate X11's automatic active grab */
-      if (!p_grab_window)
-       {
-         /* No explicit active grab, let's start one automatically */
-         gint owner_events =
-           WINDOW_PRIVATE(window)->event_mask
-           & (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK);
-         
-         GDK_NOTE (EVENTS, g_print ("...automatic grab started\n"));
-         gdk_pointer_grab (window,
-                           owner_events,
-                           WINDOW_PRIVATE(window)->event_mask,
-                           NULL, NULL, 0);
-         p_grab_automatic = TRUE;
-       }
-
-      event->button.time = xevent->time;
-      if (window != orig_window)
-       translate_mouse_coords (orig_window, window, xevent);
-      event->button.x = curX = LOWORD (xevent->lParam);
-      event->button.y = curY = HIWORD (xevent->lParam);
-      event->button.x_root = xevent->pt.x;
-      event->button.y_root = xevent->pt.y;
-      event->button.pressure = 0.5;
-      event->button.xtilt = 0;
-      event->button.ytilt = 0;
-      event->button.state = build_pointer_event_state (xevent);
-      event->button.button = 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;
-       }
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-    case WM_LBUTTONUP:
-      button = 1;
-      goto buttonup0;
-    case WM_MBUTTONUP:
-      button = 2;
-      goto buttonup0;
-    case WM_RBUTTONUP:
-      button = 3;
-
-    buttonup0:
-      GDK_NOTE (EVENTS, 
-               g_print ("WM_%cBUTTONUP: %#x  (%d,%d)\n",
-                        " LMR"[button],
-                        xevent->hwnd,
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      if (WINDOW_PRIVATE(window)->extension_events != 0
-         && gdk_input_ignore_core)
-       {
-         GDK_NOTE (EVENTS, g_print ("...ignored\n"));
-         break;
-       }
-
-      if (window != curWnd)
-       synthesize_crossing_events (window, xevent);
-
-      event->button.type = GDK_BUTTON_RELEASE;
-#ifdef NEW_PROPAGATION_CODE
-      if (!propagate (&window, xevent,
-                     p_grab_window, p_grab_owner_events, p_grab_mask,
-                     doesnt_want_button_release))
-         goto maybe_ungrab;
-      event->button.window = window;
-#else
-    buttonup:
-      mask = WINDOW_PRIVATE(window)->event_mask;
-
-      if (p_grab_window != NULL && !p_grab_owner_events)
-       {
-         /* Pointer is grabbed with owner_events FALSE */
-         GDK_NOTE (EVENTS, g_print ("...grabbed, owner_events FALSE\n"));
-
-         mask = p_grab_mask;
-         if (!(mask & GDK_BUTTON_RELEASE_MASK))
-           /* Grabber doesn't want it */
-           goto maybe_ungrab;
-         else
-           event->button.window = p_grab_window;
-         GDK_NOTE (EVENTS, g_print ("...sending to %#x\n",
-                                    GDK_DRAWABLE_XID (p_grab_window)));
-       }
-      else if (!(mask & GDK_BUTTON_RELEASE_MASK))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (p_grab_window != NULL)
-               {
-                 /* Pointer is grabbed wíth owner_events TRUE */
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 mask = p_grab_mask;
-                 if (!(mask & GDK_BUTTON_RELEASE_MASK))
-                   {
-                     /* Grabber doesn't want it either */
-                     GDK_NOTE (EVENTS, g_print ("...grabber uninterested\n"));
-                     goto maybe_ungrab;
-                   }
-                 else
-                   event->button.window = p_grab_window;
-                 GDK_NOTE (EVENTS,
-                           g_print ("...sending to %#x\n",
-                                    GDK_DRAWABLE_XID (p_grab_window)));
-               }
-             else
-               break;
-           }
-         else
-           {
-             window = pointer_propagate (window, xevent);
-             /* Jump back up */
-             goto buttonup;
-           }
-       }
-      else
-       event->button.window = window;
-
-      g_assert (event->button.window == window);
-#endif
-      event->button.time = xevent->time;
-      if (window != orig_window)
-       translate_mouse_coords (orig_window, window, xevent);
-      event->button.x = LOWORD (xevent->lParam);
-      event->button.y = HIWORD (xevent->lParam);
-      event->button.x_root = xevent->pt.x;
-      event->button.y_root = xevent->pt.y;
-      event->button.pressure = 0.5;
-      event->button.xtilt = 0;
-      event->button.ytilt = 0;
-      event->button.state = build_pointer_event_state (xevent);
-      event->button.button = button;
-      event->button.source = GDK_SOURCE_MOUSE;
-      event->button.deviceid = GDK_CORE_POINTER;
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-
-    maybe_ungrab:
-      if (p_grab_window != NULL
-         && p_grab_automatic
-         && (event->button.state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) == 0)
-       gdk_pointer_ungrab (0);
-      break;
-
-    case WM_MOUSEMOVE:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_MOUSEMOVE: %#x  %#x (%d,%d)\n",
-                        xevent->hwnd, xevent->wParam,
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      /* If we haven't moved, don't create any event.
-       * Windows sends WM_MOUSEMOVE messages after button presses
-       * even if the mouse doesn't move. This disturbs gtk.
-       */
-      if (window == curWnd
-         && LOWORD (xevent->lParam) == curX
-         && HIWORD (xevent->lParam) == curY)
-       break;
-
-      /* HB: only process mouse move messages if we own the active window. */
-      GetWindowThreadProcessId(GetActiveWindow(), &pidActWin);
-      GetWindowThreadProcessId(xevent->hwnd, &pidThis);
-      if (pidActWin != pidThis)
-       break;
-
-      if (window != curWnd)
-       synthesize_crossing_events (window, xevent);
-
-      if (WINDOW_PRIVATE(window)->extension_events != 0
-         && gdk_input_ignore_core)
-       {
-         GDK_NOTE (EVENTS, g_print ("...ignored\n"));
-         break;
-       }
-
-      event->motion.type = GDK_MOTION_NOTIFY;
-#ifdef NEW_PROPAGATION_CODE
-      if (!propagate (&window, xevent,
-                     p_grab_window, p_grab_owner_events, p_grab_mask,
-                     doesnt_want_button_motion))
-         break;
-      event->motion.window = window;
-#else
-    mousemotion:
-      mask = WINDOW_PRIVATE(window)->event_mask;
-
-      if (p_grab_window != NULL && !p_grab_owner_events)
-       {
-         /* Pointer is grabbed with owner_events FALSE */
-         GDK_NOTE (EVENTS, g_print ("...grabbed, owner_events FALSE\n"));
-
-         mask = p_grab_mask;
-         if (!((mask & GDK_POINTER_MOTION_MASK)
-               || ((xevent->wParam & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON))
-                   && (mask & GDK_BUTTON_MOTION_MASK))
-               || ((xevent->wParam & MK_LBUTTON)
-                   && (mask & GDK_BUTTON1_MOTION_MASK))
-               || ((xevent->wParam & MK_MBUTTON)
-                   && (mask & GDK_BUTTON2_MOTION_MASK))
-               || ((xevent->wParam & MK_RBUTTON)
-                   && (mask & GDK_BUTTON3_MOTION_MASK))))
-           /* Grabber doesn't want it */
-           break;
-         else
-           event->motion.window = p_grab_window;
-         GDK_NOTE (EVENTS, g_print ("...sending to %#x\n",
-                                    GDK_DRAWABLE_XID (p_grab_window)));
-       }
-      else if (!((mask & GDK_POINTER_MOTION_MASK)
-                || ((xevent->wParam & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON))
-                    && (mask & GDK_BUTTON_MOTION_MASK))
-                || ((xevent->wParam & MK_LBUTTON)
-                    && (mask & GDK_BUTTON1_MOTION_MASK))
-                || ((xevent->wParam & MK_MBUTTON)
-                    && (mask & GDK_BUTTON2_MOTION_MASK))
-                || ((xevent->wParam & MK_RBUTTON)
-                    && (mask & GDK_BUTTON3_MOTION_MASK))))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (p_grab_window != NULL)
-               {
-                 /* Pointer is grabbed wíth owner_events TRUE */
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 mask = p_grab_mask;
-                 if (!((p_grab_mask & GDK_POINTER_MOTION_MASK)
-                       || ((xevent->wParam & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON))
-                           && (mask & GDK_BUTTON_MOTION_MASK))
-                       || ((xevent->wParam & MK_LBUTTON)
-                           && (mask & GDK_BUTTON1_MOTION_MASK))
-                       || ((xevent->wParam & MK_MBUTTON)
-                           && (mask & GDK_BUTTON2_MOTION_MASK))
-                       || ((xevent->wParam & MK_RBUTTON)
-                           && (mask & GDK_BUTTON3_MOTION_MASK))))
-                   {
-                     /* Grabber doesn't want it either */
-                     GDK_NOTE (EVENTS, g_print ("...grabber uninterested\n"));
-                     break;
-                   }
-                 else
-                   event->motion.window = p_grab_window;
-                 GDK_NOTE (EVENTS,
-                           g_print ("...sending to %#x\n",
-                                    GDK_DRAWABLE_XID (p_grab_window)));
-               }
-             else
-               break;
-           }
-         else
-           {
-             window = pointer_propagate (window, xevent);
-             /* Jump back up */
-             goto mousemotion;
-           }
-       }
-      else
-       event->motion.window = window;
-#endif
-      event->motion.time = xevent->time;
-      if (window != orig_window)
-       translate_mouse_coords (orig_window, window, xevent);
-      event->motion.x = curX = LOWORD (xevent->lParam);
-      event->motion.y = curY = HIWORD (xevent->lParam);
-      event->motion.x_root = xevent->pt.x;
-      event->motion.y_root = xevent->pt.y;
-      curXroot = event->motion.x_root;
-      curYroot = event->motion.y_root;
-      event->motion.pressure = 0.5;
-      event->motion.xtilt = 0;
-      event->motion.ytilt = 0;
-      event->motion.state = build_pointer_event_state (xevent);
-      event->motion.is_hint = FALSE;
-      event->motion.source = GDK_SOURCE_MOUSE;
-      event->motion.deviceid = GDK_CORE_POINTER;
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-    case WM_NCMOUSEMOVE:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_NCMOUSEMOVE: %#x  x,y: %d %d\n",
-                        xevent->hwnd,
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-      if (p_TrackMouseEvent == NULL
-         && curWnd != NULL
-         && (WINDOW_PRIVATE(curWnd)->event_mask & GDK_LEAVE_NOTIFY_MASK))
-       {
-         GDK_NOTE (EVENTS, g_print ("...synthesizing LEAVE_NOTIFY event\n"));
-
-         event->crossing.type = GDK_LEAVE_NOTIFY;
-         event->crossing.window = curWnd;
-         event->crossing.subwindow = NULL;
-         event->crossing.time = xevent->time;
-         event->crossing.x = curX;
-         event->crossing.y = curY;
-         event->crossing.x_root = curXroot;
-         event->crossing.y_root = curYroot;
-         event->crossing.mode = GDK_CROSSING_NORMAL;
-         event->crossing.detail = GDK_NOTIFY_NONLINEAR;
-
-         event->crossing.focus = TRUE; /* ??? */
-         event->crossing.state = 0; /* ??? */
-         return_val = TRUE;
-       }
-
-      if (curWnd)
-       {
-         gdk_window_unref (curWnd);
-         curWnd = NULL;
-       }
-
-      break;
-
-#ifdef USE_TRACKMOUSEEVENT
-    case WM_MOUSELEAVE:
-      GDK_NOTE (EVENTS, g_print ("WM_MOUSELEAVE: %#x\n", xevent->hwnd));
-
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_LEAVE_NOTIFY_MASK))
-       break;
-
-      event->crossing.type = GDK_LEAVE_NOTIFY;
-      event->crossing.window = window;
-      event->crossing.subwindow = NULL;
-      event->crossing.time = xevent->time;
-      event->crossing.x = curX;
-      event->crossing.y = curY;
-      event->crossing.x_root = curXroot;
-      event->crossing.y_root = curYroot;
-      event->crossing.mode = GDK_CROSSING_NORMAL;
-      if (curWnd
-         && IsChild (GDK_DRAWABLE_XID (curWnd), GDK_DRAWABLE_XID (window)))
-       event->crossing.detail = GDK_NOTIFY_INFERIOR;
-      else if (curWnd
-              && IsChild (GDK_DRAWABLE_XID (window), GDK_DRAWABLE_XID (curWnd)))
-       event->crossing.detail = GDK_NOTIFY_ANCESTOR;
-      else
-       event->crossing.detail = GDK_NOTIFY_NONLINEAR;
-
-      event->crossing.focus = TRUE; /* ??? */
-      event->crossing.state = 0; /* ??? */
-
-      if (curWnd)
-       {
-         gdk_window_unref (curWnd);
-         curWnd = NULL;
-       }
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-#endif
-       
-    case WM_SETFOCUS:
-    case WM_KILLFOCUS:
-      GDK_NOTE (EVENTS, g_print ("WM_%sFOCUS: %#x\n",
-                                (xevent->message == WM_SETFOCUS ?
-                                 "SET" : "KILL"),
-                                xevent->hwnd));
-      
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_FOCUS_CHANGE_MASK))
-       break;
-
-      event->focus_change.type = GDK_FOCUS_CHANGE;
-      event->focus_change.window = window;
-      event->focus_change.in = (xevent->message == WM_SETFOCUS);
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-    case WM_ERASEBKGND:
-      GDK_NOTE (EVENTS, g_print ("WM_ERASEBKGND: %#x  dc %#x\n",
-                                xevent->hwnd, xevent->wParam));
-      
-      if (GDK_DRAWABLE_DESTROYED (window))
-       break;
-
-      colormap_private = (GdkColormapPrivate *) WINDOW_PRIVATE(window)->drawable.colormap;
-      hdc = (HDC) xevent->wParam;
-      if (colormap_private
-         && colormap_private->xcolormap->rc_palette)
-       {
-         int k;
-
-         if (SelectPalette (hdc,  colormap_private->xcolormap->palette,
-                            FALSE) == NULL)
-           g_warning ("WM_ERASEBKGND: SelectPalette failed");
-         if ((k = RealizePalette (hdc)) == GDI_ERROR)
-           g_warning ("WM_ERASEBKGND: RealizePalette failed");
-#if 0
-         g_print ("WM_ERASEBKGND: selected %#x, realized %d colors\n",
-                  colormap_private->xcolormap->palette, k);
-#endif
-       }
-      *ret_val_flagp = TRUE;
-      *ret_valp = 1;
-
-      if (WINDOW_PRIVATE(window)->bg_type == GDK_WIN32_BG_TRANSPARENT)
-       break;
-
-      if (WINDOW_PRIVATE(window)->bg_type == GDK_WIN32_BG_PARENT_RELATIVE)
-       {
-         /* If this window should have the same background as the
-          * parent, fetch the parent. (And if the same goes for
-          * the parent, fetch the grandparent, etc.)
-          */
-         while (window
-                && WINDOW_PRIVATE(window)->bg_type == GDK_WIN32_BG_PARENT_RELATIVE)
-           {
-             gdk_window_unref (window);
-             window = WINDOW_PRIVATE(window)->parent;
-             gdk_window_ref (window);
-           }
-       }
-
-      if (WINDOW_PRIVATE(window)->bg_type == GDK_WIN32_BG_PIXEL)
-       {
-         COLORREF bg;
-         GetClipBox (hdc, &rect);
-         GDK_NOTE (EVENTS,
-                   g_print ("...%dx%d@+%d+%d BG_PIXEL %s\n",
-                            rect.right - rect.left,
-                            rect.bottom - rect.top,
-                            rect.left, rect.top,
-                            gdk_color_to_string (&WINDOW_PRIVATE(window)->bg_pixel)));
-         bg = GetNearestColor
-           (hdc, RGB (WINDOW_PRIVATE(window)->bg_pixel.red >> 8,
-                      WINDOW_PRIVATE(window)->bg_pixel.green >> 8,
-                      WINDOW_PRIVATE(window)->bg_pixel.blue >> 8));
-         hbr = CreateSolidBrush (bg);
-#if 0
-         g_print ("...CreateSolidBrush (%.08x) = %.08x\n", bg, hbr);
-#endif
-         if (!FillRect (hdc, &rect, hbr))
-           g_warning ("WM_ERASEBKGND: FillRect failed");
-         DeleteObject (hbr);
-       }
-      else if (WINDOW_PRIVATE(window)->bg_type == GDK_WIN32_BG_PIXMAP)
-       {
-         pixmap_private =
-           (GdkDrawablePrivate*) WINDOW_PRIVATE(window)->bg_pixmap;
-         GetClipBox (hdc, &rect);
-
-         if (pixmap_private->width <= 8
-             && pixmap_private->height <= 8)
-           {
-             GDK_NOTE (EVENTS, g_print ("...small pixmap, using brush\n"));
-             hbr = CreatePatternBrush (pixmap_private->xwindow);
-             if (!FillRect (hdc, &rect, hbr))
-               g_warning ("WM_ERASEBKGND: FillRect failed");
-             DeleteObject (hbr);
-           }
-         else
-           {
-             GDK_NOTE (EVENTS,
-                       g_print ("...blitting pixmap %#x (%dx%d) "
-                                "all over the place,\n"
-                                "...clip box = %dx%d@+%d+%d\n",
-                                pixmap_private->xwindow,
-                                pixmap_private->width, pixmap_private->height,
-                                rect.right - rect.left, rect.bottom - rect.top,
-                                rect.left, rect.top));
-
-             if (!(bgdc = CreateCompatibleDC (hdc)))
-               {
-                 g_warning ("WM_ERASEBKGND: CreateCompatibleDC failed");
-                 break;
-               }
-             if (!(oldbitmap = SelectObject (bgdc, pixmap_private->xwindow)))
-               {
-                 g_warning ("WM_ERASEBKGND: SelectObject failed");
-                 DeleteDC (bgdc);
-                 break;
-               }
-             i = 0;
-             while (i < rect.right)
-               {
-                 j = 0;
-                 while (j < rect.bottom)
-                   {
-                     if (i + pixmap_private->width >= rect.left
-                         && j + pixmap_private->height >= rect.top)
-                       {
-                         if (!BitBlt (hdc, i, j,
-                                      pixmap_private->width, pixmap_private->height,
-                                      bgdc, 0, 0, SRCCOPY))
-                           {
-                             g_warning ("WM_ERASEBKGND: BitBlt failed");
-                             goto loopexit;
-                           }
-                       }
-                     j += pixmap_private->height;
-                   }
-                 i += pixmap_private->width;
-               }
-           loopexit:
-             SelectObject (bgdc, oldbitmap);
-             DeleteDC (bgdc);
-           }
-       }
-      else
-       {
-         GDK_NOTE (EVENTS, g_print ("...BLACK_BRUSH (?)\n"));
-         hbr = GetStockObject (BLACK_BRUSH);
-         GetClipBox (hdc, &rect);
-         if (!FillRect (hdc, &rect, hbr))
-           g_warning ("WM_ERASEBKGND: FillRect failed");
-       }
-      break;
-
-    case WM_PAINT:
-      hdc = BeginPaint (xevent->hwnd, &paintstruct);
-
-      GDK_NOTE (EVENTS,
-               g_print ("WM_PAINT: %#x  %dx%d@+%d+%d %s dc %#x\n",
-                        xevent->hwnd,
-                        paintstruct.rcPaint.right - paintstruct.rcPaint.left,
-                        paintstruct.rcPaint.bottom - paintstruct.rcPaint.top,
-                        paintstruct.rcPaint.left, paintstruct.rcPaint.top,
-                        (paintstruct.fErase ? "erase" : ""),
-                        hdc));
-
-      EndPaint (xevent->hwnd, &paintstruct);
-
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_EXPOSURE_MASK))
-       break;
-
-      event->expose.type = GDK_EXPOSE;
-      event->expose.window = window;
-      event->expose.area.x = paintstruct.rcPaint.left;
-      event->expose.area.y = paintstruct.rcPaint.top;
-      event->expose.area.width = paintstruct.rcPaint.right - paintstruct.rcPaint.left;
-      event->expose.area.height = paintstruct.rcPaint.bottom - paintstruct.rcPaint.top;
-      event->expose.count = 0;
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      if (return_val)
-       {
-         GList *list = queued_events;
-         while (list != NULL )
-           {
-             if ((((GdkEvent *)list->data)->any.type == GDK_EXPOSE) &&
-                 (((GdkEvent *)list->data)->any.window == window) &&
-                 !(((GdkEventPrivate *)list->data)->flags & GDK_EVENT_PENDING))
-               ((GdkEvent *)list->data)->expose.count++;
-             
-             list = list->next;
-           }
-       }
-      break;
-
-    case WM_SETCURSOR:
-      GDK_NOTE (EVENTS, g_print ("WM_SETCURSOR: %#x %#x %#x\n",
-                                xevent->hwnd,
-                                LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      if (LOWORD (xevent->lParam) != HTCLIENT)
-       break;
-      if (p_grab_window != NULL && p_grab_cursor != NULL)
-       {
-         GDK_NOTE (EVENTS, g_print ("...SetCursor(%#x)\n", p_grab_cursor));
-         SetCursor (p_grab_cursor);
-       }
-      else if (!GDK_DRAWABLE_DESTROYED (window)
-              && WINDOW_PRIVATE(window)->xcursor)
-       {
-         GDK_NOTE (EVENTS, g_print ("...SetCursor(%#x)\n",
-                                    WINDOW_PRIVATE(window)->xcursor));
-         SetCursor (WINDOW_PRIVATE(window)->xcursor);
-       }
-
-      if (window != curWnd)
-       synthesize_crossing_events (window, xevent);
-
-      *ret_val_flagp = TRUE;
-      *ret_valp = FALSE;
-      break;
-
-    case WM_SHOWWINDOW:
-      GDK_NOTE (EVENTS, g_print ("WM_SHOWWINDOW: %#x  %d\n",
-                                xevent->hwnd,
-                                xevent->wParam));
-
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_STRUCTURE_MASK))
-       break;
-
-      event->any.type = (xevent->wParam ? GDK_MAP : GDK_UNMAP);
-      event->any.window = window;
-
-      if (event->any.type == GDK_UNMAP
-         && p_grab_window == window)
-       gdk_pointer_ungrab (xevent->time);
-
-      if (event->any.type == GDK_UNMAP
-         && k_grab_window == window)
-       gdk_keyboard_ungrab (xevent->time);
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-    case WM_SIZE:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_SIZE: %#x  %s %dx%d\n",
-                        xevent->hwnd,
-                        (xevent->wParam == SIZE_MAXHIDE ? "MAXHIDE" :
-                         (xevent->wParam == SIZE_MAXIMIZED ? "MAXIMIZED" :
-                          (xevent->wParam == SIZE_MAXSHOW ? "MAXSHOW" :
-                           (xevent->wParam == SIZE_MINIMIZED ? "MINIMIZED" :
-                            (xevent->wParam == SIZE_RESTORED ? "RESTORED" : "?"))))),
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_STRUCTURE_MASK))
-       break;
-
-      if (xevent->wParam == SIZE_MINIMIZED)
-       {
-         event->any.type = GDK_UNMAP;
-         event->any.window = window;
-
-         if (p_grab_window == window)
-           gdk_pointer_ungrab (xevent->time);
-
-         if (k_grab_window == window)
-           gdk_keyboard_ungrab (xevent->time);
-
-         return_val = !GDK_DRAWABLE_DESTROYED (window);
-       }
-      else if ((xevent->wParam == SIZE_RESTORED
-               || xevent->wParam == SIZE_MAXIMIZED)
-#if 1
-              && GDK_DRAWABLE_TYPE (window) != GDK_WINDOW_CHILD
-#endif
-                                                                )
-       {
-         if (LOWORD (xevent->lParam) == 0)
-           break;
-
-         event->configure.type = GDK_CONFIGURE;
-         event->configure.window = window;
-         pt.x = 0;
-         pt.y = 0;
-         ClientToScreen (xevent->hwnd, &pt);
-         event->configure.x = pt.x;
-         event->configure.y = pt.y;
-         event->configure.width = LOWORD (xevent->lParam);
-         event->configure.height = HIWORD (xevent->lParam);
-         WINDOW_PRIVATE(window)->x = event->configure.x;
-         WINDOW_PRIVATE(window)->y = event->configure.y;
-         WINDOW_PRIVATE(window)->drawable.width = event->configure.width;
-         WINDOW_PRIVATE(window)->drawable.height = event->configure.height;
-         if (WINDOW_PRIVATE(window)->resize_count > 1)
-           WINDOW_PRIVATE(window)->resize_count -= 1;
-         
-         return_val = !GDK_DRAWABLE_DESTROYED (window);
-         if (return_val
-             && WINDOW_PRIVATE(window)->extension_events != 0
-             && gdk_input_vtable.configure_event)
-           gdk_input_vtable.configure_event (&event->configure, window);
-       }
-      break;
-
-    case WM_GETMINMAXINFO:
-      GDK_NOTE (EVENTS, g_print ("WM_GETMINMAXINFO: %#x\n", xevent->hwnd));
-
-      lpmmi = (MINMAXINFO*) xevent->lParam;
-      if (WINDOW_PRIVATE(window)->hint_flags & GDK_HINT_MIN_SIZE)
-       {
-         lpmmi->ptMinTrackSize.x = WINDOW_PRIVATE(window)->hint_min_width;
-         lpmmi->ptMinTrackSize.y = WINDOW_PRIVATE(window)->hint_min_height;
-       }
-      if (WINDOW_PRIVATE(window)->hint_flags & GDK_HINT_MAX_SIZE)
-       {
-         lpmmi->ptMaxTrackSize.x = WINDOW_PRIVATE(window)->hint_max_width;
-         lpmmi->ptMaxTrackSize.y = WINDOW_PRIVATE(window)->hint_max_height;
-           
-         lpmmi->ptMaxSize.x = WINDOW_PRIVATE(window)->hint_max_width;
-         lpmmi->ptMaxSize.y = WINDOW_PRIVATE(window)->hint_max_height;
-       }
-      break;
-
-    case WM_MOVE:
-      GDK_NOTE (EVENTS, g_print ("WM_MOVE: %#x  (%d,%d)\n",
-                                xevent->hwnd,
-                                LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_STRUCTURE_MASK))
-       break;
-
-      if (GDK_DRAWABLE_TYPE (window) != GDK_WINDOW_CHILD)
-       {
-         event->configure.type = GDK_CONFIGURE;
-         event->configure.window = window;
-         event->configure.x = LOWORD (xevent->lParam);
-         event->configure.y = HIWORD (xevent->lParam);
-         GetClientRect (xevent->hwnd, &rect);
-         event->configure.width = rect.right;
-         event->configure.height = rect.bottom;
-         WINDOW_PRIVATE(window)->x = event->configure.x;
-         WINDOW_PRIVATE(window)->y = event->configure.y;
-         WINDOW_PRIVATE(window)->drawable.width = event->configure.width;
-         WINDOW_PRIVATE(window)->drawable.height = event->configure.height;
-         
-         return_val = !GDK_DRAWABLE_DESTROYED (window);
-       }
-      break;
-
-    case WM_CLOSE:
-      GDK_NOTE (EVENTS, g_print ("WM_CLOSE: %#x\n", xevent->hwnd));
-
-      event->any.type = GDK_DELETE;
-      event->any.window = window;
-      
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-#if 0
-    /* No, don't use delayed rendering after all. It works only if the
-     * delayed SetClipboardData is called from the WindowProc, it
-     * seems. (The #else part below is test code for that. It succeeds
-     * in setting the clipboard data. But if I call SetClipboardData
-     * in gdk_property_change (as a consequence of the
-     * GDK_SELECTION_REQUEST event), it fails.  I deduce that this is
-     * because delayed rendering requires that SetClipboardData is
-     * called in the window procedure.)
-     */
-    case WM_RENDERFORMAT:
-    case WM_RENDERALLFORMATS:
-      flag = FALSE;
-      GDK_NOTE (EVENTS, flag = TRUE);
-      GDK_NOTE (SELECTION, flag = TRUE);
-      if (flag)
-       g_print ("WM_%s: %#x %#x (%s)\n",
-                (xevent->message == WM_RENDERFORMAT ? "RENDERFORMAT" :
-                 "RENDERALLFORMATS"),
-                xevent->hwnd,
-                xevent->wParam,
-                (xevent->wParam == CF_TEXT ? "CF_TEXT" :
-                 (xevent->wParam == CF_DIB ? "CF_DIB" :
-                  (xevent->wParam == CF_UNICODETEXT ? "CF_UNICODETEXT" :
-                   (GetClipboardFormatName (xevent->wParam, buf, sizeof (buf)), buf)))));
-
-#if 0
-      event->selection.type = GDK_SELECTION_REQUEST;
-      event->selection.window = window;
-      event->selection.selection = gdk_clipboard_atom;
-      if (xevent->wParam == CF_TEXT)
-       event->selection.target = GDK_TARGET_STRING;
-      else
-       {
-         GetClipboardFormatName (xevent->wParam, buf, sizeof (buf));
-         event->selection.target = gdk_atom_intern (buf, FALSE);
-       }
-      event->selection.property = gdk_selection_property;
-      event->selection.requestor = (guint32) xevent->hwnd;
-      event->selection.time = xevent->time;
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-#else
-      /* Test code, to see if SetClipboardData works when called from
-       * the window procedure.
-       */
-      {
-       HGLOBAL hdata = GlobalAlloc (GMEM_MOVEABLE|GMEM_DDESHARE, 10);
-       char *ptr = GlobalLock (hdata);
-       strcpy (ptr, "Huhhaa");
-       GlobalUnlock (hdata);
-       if (!SetClipboardData (CF_TEXT, hdata))
-         g_print ("SetClipboardData failed: %d\n", GetLastError ());
-      }
-      *ret_valp = 0;
-      *ret_val_flagp = TRUE;
-      return_val = FALSE;
-#endif
-      break;
-#endif /* No delayed rendering */
-
-    case WM_DESTROY:
-      GDK_NOTE (EVENTS, g_print ("WM_DESTROY: %#x\n", xevent->hwnd));
-
-      event->any.type = GDK_DESTROY;
-      event->any.window = window;
-      if (window != NULL && window == curWnd)
-       {
-         gdk_window_unref (curWnd);
-         curWnd = NULL;
-       }
-
-      if (p_grab_window == window)
-       gdk_pointer_ungrab (xevent->time);
-
-      if (k_grab_window == window)
-       gdk_keyboard_ungrab (xevent->time);
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-#ifdef HAVE_WINTAB
-      /* Handle WINTAB events here, as we know that gdkinput.c will
-       * use the fixed WT_DEFBASE as lcMsgBase, and we thus can use the
-       * constants as case labels.
-       */
-    case WT_PACKET:
-      GDK_NOTE (EVENTS, g_print ("WT_PACKET: %d %#x\n",
-                                xevent->wParam, xevent->lParam));
-      goto wintab;
-      
-    case WT_CSRCHANGE:
-      GDK_NOTE (EVENTS, g_print ("WT_CSRCHANGE: %d %#x\n",
-                                xevent->wParam, xevent->lParam));
-      goto wintab;
-      
-    case WT_PROXIMITY:
-      GDK_NOTE (EVENTS,
-               g_print ("WT_PROXIMITY: %#x %d %d\n",
-                        xevent->wParam,
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-      /* Fall through */
-    wintab:
-      return_val = gdk_input_vtable.other_event(event, xevent);
-      break;
-#endif
-    }
-
-bypass_switch:
-
-  if (return_val)
-    {
-      if (event->any.window)
-       gdk_window_ref (event->any.window);
-      if (((event->any.type == GDK_ENTER_NOTIFY) ||
-          (event->any.type == GDK_LEAVE_NOTIFY)) &&
-         (event->crossing.subwindow != NULL))
-       gdk_window_ref (event->crossing.subwindow);
-
-      GDK_NOTE (EVENTS, print_event (event));
-    }
-  else
-    {
-      /* Mark this event as having no resources to be freed */
-      event->any.window = NULL;
-      event->any.type = GDK_NOTHING;
-    }
-
-  if (window)
-    gdk_window_unref (window);
-  
-  return return_val;
-}
-
-static void
-gdk_events_queue (void)
-{
-  GList *node;
-  GdkEvent *event;
-  MSG msg;
-  LRESULT lres;
-
-  while (!gdk_event_queue_find_first()
-        && PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
-    {
-      GDK_NOTE (EVENTS, g_print ("PeekMessage: %#x %#x\n",
-                                msg.hwnd, msg.message));
-
-      if (paimmmpo == NULL
-         || (paimmmpo->lpVtbl->OnTranslateMessage) (paimmmpo, &msg) != S_OK)
-       TranslateMessage (&msg);
-
-#ifdef USE_DISPATCHMESSAGE
-      if (msg.message == g_pipe_readable_msg)
-       {
-         GDK_NOTE (EVENTS, g_print ("g_pipe_readable_msg: %d %d\n",
-                                    msg.wParam, msg.lParam));
-
-         g_io_channel_win32_pipe_readable (msg.wParam, msg.lParam);
-
-         continue;
-       }
-      
-      DispatchMessage (&msg);
-#else
-      event = gdk_event_new ();
-      
-      event->any.type = GDK_NOTHING;
-      event->any.window = NULL;
-      event->any.send_event = FALSE;
-
-      ((GdkEventPrivate *)event)->flags |= GDK_EVENT_PENDING;
-
-      gdk_event_queue_append (event);
-      node = queued_tail;
-
-      if (gdk_event_translate (event, &msg, NULL, NULL))
-       ((GdkEventPrivate *)event)->flags &= ~GDK_EVENT_PENDING;
-      else
-       {
-         if (paimmapp == NULL
-             || (paimmapp->lpVtbl->OnDefWindowProc) (paimmapp, msg.hwnd,
-                                                     msg.message,
-                                                     msg.wParam, msg.lParam,
-                                                     &lres) == S_FALSE)
-           DefWindowProc (msg.hwnd, msg.message, msg.wParam, msg.lParam);
-         gdk_event_queue_remove_link (node);
-         g_list_free_1 (node);
-         gdk_event_free (event);
-       }
-#endif
-    }
-}
-
-static gboolean  
-gdk_event_prepare (gpointer  source_data, 
-                  GTimeVal *current_time,
-                  gint     *timeout)
-{
-  MSG msg;
-  gboolean retval;
-  
-  GDK_THREADS_ENTER ();
-
-  *timeout = -1;
-
-  retval = (gdk_event_queue_find_first () != NULL)
-             || PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE);
-
-  GDK_THREADS_LEAVE ();
-
-  return retval;
-}
-
-static gboolean  
-gdk_event_check (gpointer  source_data,
-                GTimeVal *current_time)
-{
-  MSG msg;
-  gboolean retval;
-  
-  GDK_THREADS_ENTER ();
-
-  if (event_poll_fd.revents & G_IO_IN)
-    retval = (gdk_event_queue_find_first () != NULL)
-             || PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE);
-  else
-    retval = FALSE;
-
-  GDK_THREADS_LEAVE ();
-
-  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,
-                   gpointer  user_data)
-{
-  GdkEvent *event;
-  GDK_THREADS_ENTER ();
-
-  gdk_events_queue();
-  event = gdk_event_unqueue();
-
-  if (event)
-    {
-      if (event_func)
-       (*event_func) (event, event_data);
-      
-      gdk_event_free (event);
-    }
-  
-  GDK_THREADS_LEAVE ();
-
-  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);
-}
-
-void
-gdk_event_button_generate (GdkEvent *event)
-{
-  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;
-    }
-}
-
-/* Sends a ClientMessage to all toplevel client windows */
-gboolean
-gdk_event_send_client_message (GdkEvent *event, guint32 xid)
-{
-  /* XXX */
-  return FALSE;
-}
-
-void
-gdk_event_send_clientmessage_toall (GdkEvent *event)
-{
-  /* XXX */
-}
-
diff --git a/gdk/win32/gdkevents.c b/gdk/win32/gdkevents.c
deleted file mode 100644 (file)
index 9ef45fe..0000000
+++ /dev/null
@@ -1,5193 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1998-1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#define NEW_PROPAGATION_CODE
-
-#define USE_DISPATCHMESSAGE
-
-/* Cannot use TrackMouseEvent, as the stupid WM_MOUSELEAVE message
- * doesn't tell us where the mouse has gone. Thus we cannot use it to
- * generate a correct GdkNotifyType. Pity, as using TrackMouseEvent
- * otherwise would make it possible to reliably generate
- * GDK_LEAVE_NOTIFY events, which would help get rid of those pesky
- * tooltips sometimes popping up in the wrong place.
- */
-/* define USE_TRACKMOUSEEVENT */
-
-#include <stdio.h>
-
-#include <windows.h>
-
-#include <objbase.h>
-#include <imm.h>
-
-#ifdef HAVE_DIMM_H
-#include <dimm.h>
-#else
-#include "surrogate-dimm.h"
-#endif
-
-#ifdef HAVE_WINTAB
-#include <wintab.h>
-#endif
-
-#include "gdk.h"
-#include "gdkx.h"
-
-#include "gdkkeysyms.h"
-
-#include "gdkinputprivate.h"
-
-#define PING() printf("%s: %d\n",__FILE__,__LINE__),fflush(stdout)
-
-#define WINDOW_PRIVATE(wp) ((GdkWindowPrivate *) (wp))
-
-typedef struct _GdkIOClosure GdkIOClosure;
-typedef struct _GdkEventPrivate GdkEventPrivate;
-
-#define DOUBLE_CLICK_TIME      250
-#define TRIPLE_CLICK_TIME      500
-#define DOUBLE_CLICK_DIST      5
-#define TRIPLE_CLICK_DIST      5
-
-gint gdk_event_func_from_window_proc = FALSE;
-
-typedef enum
-{
-  /* Following flag is set for events on the event queue during
-   * translation and cleared afterwards.
-   */
-  GDK_EVENT_PENDING = 1 << 0
-} GdkEventFlags;
-
-struct _GdkIOClosure
-{
-  GdkInputFunction function;
-  GdkInputCondition condition;
-  GdkDestroyNotify notify;
-  gpointer data;
-};
-
-struct _GdkEventPrivate
-{
-  GdkEvent event;
-  guint    flags;
-};
-
-/* 
- * Private function declarations
- */
-
-static GdkEvent *gdk_event_new         (void);
-static GdkFilterReturn
-                gdk_event_apply_filters(MSG      *xevent,
-                                        GdkEvent *event,
-                                        GList    *filters);
-static gboolean  gdk_event_translate   (GdkEvent *event, 
-                                        MSG      *xevent,
-                                        gboolean *ret_val_flagp,
-                                        gint     *ret_valp);
-static void      gdk_events_queue       (void);
-static GdkEvent *gdk_event_unqueue      (void);
-static gboolean  gdk_event_prepare      (gpointer  source_data, 
-                                        GTimeVal *current_time,
-                                        gint     *timeout);
-static gboolean  gdk_event_check        (gpointer  source_data,
-                                        GTimeVal *current_time);
-static gboolean  gdk_event_dispatch     (gpointer  source_data,
-                                        GTimeVal *current_time,
-                                        gpointer  user_data);
-
-static void     gdk_synthesize_click   (GdkEvent     *event, 
-                                        gint          nclicks);
-
-/* Private variable declarations
- */
-
-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 GdkWindow *p_grab_window = NULL; /* Window that currently
-                                        * holds the pointer grab
-                                        */
-
-static GdkWindow *k_grab_window = NULL; /* Window the holds the
-                                        * keyboard grab
-                                        */
-
-static GList *client_filters;  /* Filters for client messages */
-
-static gboolean p_grab_automatic;
-static GdkEventMask p_grab_mask;
-static gboolean p_grab_owner_events, k_grab_owner_events;
-static HCURSOR p_grab_cursor;
-
-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,
-  gdk_event_dispatch,
-  (GDestroyNotify)g_free
-};
-
-GPollFD event_poll_fd;
-
-static GdkWindow *curWnd = NULL;
-static HWND active = NULL;
-static gint curX, curY;
-static gdouble curXroot, curYroot;
-static UINT gdk_ping_msg;
-static gboolean ignore_WM_CHAR = FALSE;
-static gboolean is_AltGr_key = FALSE;
-
-static IActiveIMMApp *paimmapp = NULL;
-static IActiveIMMMessagePumpOwner *paimmmpo = NULL;
-
-typedef BOOL (WINAPI *PFN_TrackMouseEvent) (LPTRACKMOUSEEVENT);
-static PFN_TrackMouseEvent p_TrackMouseEvent = NULL;
-
-static gboolean use_IME_COMPOSITION = FALSE;
-
-LRESULT CALLBACK 
-gdk_WindowProc (HWND hWnd,
-               UINT message,
-               WPARAM wParam,
-               LPARAM lParam)
-{
-  GdkEvent event;
-  GdkEvent *eventp;
-  MSG msg;
-  DWORD pos;
-  LRESULT lres;
-  gint ret_val;
-  gboolean ret_val_flag;
-
-  GDK_NOTE (EVENTS, g_print ("gdk_WindowProc: %#x %#.03x\n", hWnd, message));
-
-  msg.hwnd = hWnd;
-  msg.message = message;
-  msg.wParam = wParam;
-  msg.lParam = lParam;
-  msg.time = GetTickCount ();
-  pos = GetMessagePos ();
-  msg.pt.x = LOWORD (pos);
-  msg.pt.y = HIWORD (pos);
-
-  ((GdkEventPrivate *)&event)->flags |= GDK_EVENT_PENDING;
-  if (gdk_event_translate (&event, &msg, &ret_val_flag, &ret_val))
-    {
-      ((GdkEventPrivate *)&event)->flags &= ~GDK_EVENT_PENDING;
-#if 1
-      if (event.any.type == GDK_CONFIGURE)
-       {
-         /* Compress configure events */
-         GList *list = queued_events;
-
-         while (list != NULL
-                && (((GdkEvent *)list->data)->any.type != GDK_CONFIGURE
-                    || ((GdkEvent *)list->data)->any.window != event.any.window))
-           list = list->next;
-         if (list != NULL)
-           {
-             *((GdkEvent *)list->data) = event;
-             gdk_window_unref (event.any.window);
-             /* Wake up WaitMessage */
-             PostMessage (NULL, gdk_ping_msg, 0, 0);
-             return FALSE;
-           }
-       }
-      else if (event.any.type == GDK_EXPOSE)
-       {
-         /* Compress expose events */
-         GList *list = queued_events;
-
-         while (list != NULL
-                && (((GdkEvent *)list->data)->any.type != GDK_EXPOSE
-                    || ((GdkEvent *)list->data)->any.window != event.any.window))
-           list = list->next;
-         if (list != NULL)
-           {
-             GdkRectangle u;
-
-             gdk_rectangle_union (&event.expose.area,
-                                  &((GdkEvent *)list->data)->expose.area,
-                                  &u);
-             ((GdkEvent *)list->data)->expose.area = u;
-             gdk_window_unref (event.any.window);
-             /* Wake up WaitMessage */
-             PostMessage (NULL, gdk_ping_msg, 0, 0);
-             return FALSE;
-           }
-       }
-#endif
-      eventp = gdk_event_new ();
-      *eventp = event;
-
-      /* Philippe Colantoni <colanton@aris.ss.uci.edu> suggests this
-       * in order to handle events while opaque resizing neatly.  I
-       * don't want it as default. Set the
-       * GDK_EVENT_FUNC_FROM_WINDOW_PROC env var to get this
-       * behaviour.
-       */
-      if (gdk_event_func_from_window_proc && event_func)
-       {
-         GDK_THREADS_ENTER ();
-         
-         (*event_func) (eventp, event_data);
-         gdk_event_free (eventp);
-         
-         GDK_THREADS_LEAVE ();
-       }
-      else
-       {
-         gdk_event_queue_append (eventp);
-#if 1
-         /* Wake up WaitMessage */
-         PostMessage (NULL, gdk_ping_msg, 0, 0);
-#endif
-       }
-      
-      if (ret_val_flag)
-       return ret_val;
-      else
-       return FALSE;
-    }
-
-  if (ret_val_flag)
-    return ret_val;
-  else
-    {
-      if (paimmapp == NULL
-         || (*paimmapp->lpVtbl->OnDefWindowProc) (paimmapp, hWnd, message, wParam, lParam, &lres) == S_FALSE)
-       return DefWindowProc (hWnd, message, wParam, lParam);
-      else
-       return lres;
-    }
-}
-
-/*********************************************
- * 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:
- *************************************************************/
-
-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)
-{
-  HRESULT hres;
-  HMODULE user32, imm32;
-  HINSTANCE commctrl32;
-
-  if (g_pipe_readable_msg == 0)
-    g_pipe_readable_msg = RegisterWindowMessage ("g-pipe-readable");
-  GDK_NOTE (EVENTS, g_print ("g-pipe-readable = %#.03x\n",
-                            g_pipe_readable_msg));
-
-  gdk_ping_msg = RegisterWindowMessage ("gdk-ping");
-  GDK_NOTE (EVENTS, g_print ("gdk-ping = %#.03x\n",
-                            gdk_ping_msg));
-
-  g_source_add (GDK_PRIORITY_EVENTS, TRUE, &event_funcs, NULL, NULL, NULL);
-
-  event_poll_fd.fd = G_WIN32_MSG_HANDLE;
-  event_poll_fd.events = G_IO_IN;
-  
-  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;
-
-  hres = CoCreateInstance (&CLSID_CActiveIMM,
-                          NULL,
-                          CLSCTX_ALL,
-                          &IID_IActiveIMMApp,
-                          (LPVOID *) &paimmapp);
-  
-  if (hres == S_OK)
-    {
-      GDK_NOTE (EVENTS, g_print ("IActiveIMMApp created %#x\n",
-                                paimmapp));
-      (*paimmapp->lpVtbl->Activate) (paimmapp, TRUE);
-      
-      hres = (*paimmapp->lpVtbl->QueryInterface) (paimmapp, &IID_IActiveIMMMessagePumpOwner, &paimmmpo);
-      GDK_NOTE (EVENTS, g_print ("IActiveIMMMessagePumpOwner created %#x\n",
-                                paimmmpo));
-      (paimmmpo->lpVtbl->Start) (paimmmpo);
-    }
-
-#ifdef USE_TRACKMOUSEEVENT
-  user32 = GetModuleHandle ("user32.dll");
-  if ((p_TrackMouseEvent = GetProcAddress (user32, "TrackMouseEvent")) == NULL)
-    {
-      if ((commctrl32 = LoadLibrary ("commctrl32.dll")) != NULL)
-       p_TrackMouseEvent = (PFN_TrackMouseEvent)
-         GetProcAddress (commctrl32, "_TrackMouseEvent");
-    }
-  if (p_TrackMouseEvent != NULL)
-    GDK_NOTE (EVENTS, g_print ("Using TrackMouseEvent to detect leave events\n"));
-#endif
-  if (windows_version < 0x80000000 && (windows_version & 0xFF) == 5)
-    {
-      /* On Win2k (Beta 3, at least) WM_IME_CHAR doesn't seem to work
-       * correctly for non-Unicode applications. Handle
-       * WM_IME_COMPOSITION with GCS_RESULTSTR instead, fetch the
-       * Unicode char from the IME with ImmGetCompositionStringW().
-       */
-      use_IME_COMPOSITION = TRUE;
-    }
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_events_pending
- *
- *   Returns if events are pending on the queue.
- *
- * Arguments:
- *
- * Results:
- *   Returns TRUE if events are pending
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gboolean
-gdk_events_pending (void)
-{
-  MSG msg;
-
-  return (gdk_event_queue_find_first() || PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE));
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_event_get_graphics_expose
- *
- *   Waits for a GraphicsExpose or NoExpose event
- *
- * Arguments:
- *
- * Results: 
- *   For GraphicsExpose events, returns a pointer to the event
- *   converted into a GdkEvent Otherwise, returns NULL.
- *
- * Side effects:
- *
- *-------------------------------------------------------------- */
-
-GdkEvent*
-gdk_event_get_graphics_expose (GdkWindow *window)
-{
-  MSG xevent;
-  GdkEvent *event;
-  GdkWindowPrivate *private = (GdkWindowPrivate *) window;
-
-  g_return_val_if_fail (window != NULL, NULL);
-  
-  GDK_NOTE (EVENTS, g_print ("gdk_event_get_graphics_expose\n"));
-
-#if 1
-  /* Some nasty bugs here, just return NULL for now. */
-  return NULL;
-#else
-  if (GetMessage (&xevent, private->xwindow, WM_PAINT, WM_PAINT))
-    {
-      event = gdk_event_new ();
-      
-      if (gdk_event_translate (event, &xevent, NULL, NULL))
-       return event;
-      else
-       gdk_event_free (event);
-    }
-  
-  return NULL; 
-#endif
-}
-
-/*************************************************************
- * 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;
-  GList *tmp_list;
-  
-  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;
-  gchar *s;
-  
-  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:
-      if (event->key.length > 0)
-       {
-         s = event->key.string;
-         new_event->key.string = g_malloc (event->key.length + 1);
-         memcpy (new_event->key.string, s, event->key.length + 1);
-       }
-      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;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_pointer_grab
- *
- *   Grabs the pointer to a specific window
- *
- * Arguments:
- *   "window" is the window which will receive the grab
- *   "owner_events" specifies whether events will be reported as is,
- *     or relative to "window"
- *   "event_mask" masks only interesting events
- *   "confine_to" limits the cursor movement to the specified window
- *   "cursor" changes the cursor for the duration of the grab
- *   "time" specifies the time
- *
- * Results:
- *
- * Side effects:
- *   requires a corresponding call to gdk_pointer_ungrab
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_pointer_grab (GdkWindow *    window,
-                 gint            owner_events,
-                 GdkEventMask    event_mask,
-                 GdkWindow *     confine_to,
-                 GdkCursor *     cursor,
-                 guint32         time)
-{
-  HWND xwindow;
-  HWND xconfine_to;
-  HCURSOR xcursor;
-  GdkCursorPrivate *cursor_private;
-  gint return_val;
-
-  g_return_val_if_fail (window != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
-  g_return_val_if_fail (confine_to == NULL || GDK_IS_WINDOW (confine_to), 0);
-  
-  cursor_private = (GdkCursorPrivate*) cursor;
-  
-  xwindow = GDK_DRAWABLE_XID (window);
-  
-  if (!confine_to || GDK_DRAWABLE_DESTROYED (confine_to))
-    xconfine_to = NULL;
-  else
-    xconfine_to = GDK_DRAWABLE_XID (confine_to);
-  
-  if (!cursor)
-    xcursor = NULL;
-  else
-    xcursor = cursor_private->xcursor;
-  
-  if (gdk_input_vtable.grab_pointer)
-    return_val = gdk_input_vtable.grab_pointer (window,
-                                               owner_events,
-                                               event_mask,
-                                               confine_to,
-                                               time);
-  else
-    return_val = Success;
-  
-  if (return_val == Success)
-    {
-      if (!GDK_DRAWABLE_DESTROYED (window))
-      {
-       GDK_NOTE (EVENTS, g_print ("gdk_pointer_grab: %#x %s %#x%s%s\n",
-                                  xwindow,
-                                  (owner_events ? "TRUE" : "FALSE"),
-                                  xcursor,
-                                  (event_mask & GDK_BUTTON_PRESS_MASK) ?
-                                  " PRESS" : "",
-                                  (event_mask & GDK_BUTTON_RELEASE_MASK) ?
-                                  " RELEASE" : ""));
-       p_grab_mask = event_mask;
-       p_grab_owner_events = (owner_events != 0);
-       p_grab_automatic = FALSE;
-
-#if 0 /* Menus don't work if we use mouse capture. Pity, because many other
-       * things work better with mouse capture.
-       */
-       SetCapture (xwindow);
-#endif
-       return_val = GrabSuccess;
-      }
-      else
-       return_val = AlreadyGrabbed;
-    }
-  
-  if (return_val == GrabSuccess)
-    {
-      p_grab_window = window;
-      p_grab_cursor = xcursor;
-    }
-  
-  return return_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_pointer_ungrab
- *
- *   Releases any pointer grab
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_pointer_ungrab (guint32 time)
-{
-  if (gdk_input_vtable.ungrab_pointer)
-    gdk_input_vtable.ungrab_pointer (time);
-#if 0
-  if (GetCapture () != NULL)
-    ReleaseCapture ();
-#endif
-  GDK_NOTE (EVENTS, g_print ("gdk_pointer_ungrab\n"));
-
-  p_grab_window = NULL;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_pointer_is_grabbed
- *
- *   Tell wether there is an active x pointer grab in effect
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_pointer_is_grabbed (void)
-{
-  return p_grab_window != NULL;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_keyboard_grab
- *
- *   Grabs the keyboard to a specific window
- *
- * Arguments:
- *   "window" is the window which will receive the grab
- *   "owner_events" specifies whether events will be reported as is,
- *     or relative to "window"
- *   "time" specifies the time
- *
- * Results:
- *
- * Side effects:
- *   requires a corresponding call to gdk_keyboard_ungrab
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_keyboard_grab (GdkWindow *    window,
-                  gint            owner_events,
-                  guint32         time)
-{
-  gint return_val;
-  
-  g_return_val_if_fail (window != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
-  
-  GDK_NOTE (EVENTS, g_print ("gdk_keyboard_grab %#x\n",
-                            GDK_DRAWABLE_XID (window)));
-
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      k_grab_owner_events = owner_events != 0;
-      return_val = GrabSuccess;
-    }
-  else
-    return_val = AlreadyGrabbed;
-
-  if (return_val == GrabSuccess)
-    k_grab_window = window;
-  
-  return return_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_keyboard_ungrab
- *
- *   Releases any keyboard grab
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_keyboard_ungrab (guint32 time)
-{
-  GDK_NOTE (EVENTS, g_print ("gdk_keyboard_ungrab\n"));
-
-  k_grab_window = NULL;
-}
-
-static void
-gdk_io_destroy (gpointer data)
-{
-  GdkIOClosure *closure = data;
-
-  if (closure->notify)
-    closure->notify (closure->data);
-
-  g_free (closure);
-}
-
-static gboolean  
-gdk_io_invoke (GIOChannel   *source,
-              GIOCondition  condition,
-              gpointer      data)
-{
-  GdkIOClosure *closure = data;
-  GdkInputCondition gdk_cond = 0;
-
-  if (condition & (G_IO_IN | G_IO_PRI))
-    gdk_cond |= GDK_INPUT_READ;
-  if (condition & G_IO_OUT)
-    gdk_cond |= GDK_INPUT_WRITE;
-  if (condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL))
-    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 |= (G_IO_IN | G_IO_PRI);
-  if (condition & GDK_INPUT_WRITE)
-    cond |= G_IO_OUT;
-  if (condition & GDK_INPUT_EXCEPTION)
-    cond |= G_IO_ERR|G_IO_HUP|G_IO_NVAL;
-
-  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 GdkFilterReturn
-gdk_event_apply_filters (MSG      *xevent,
-                        GdkEvent *event,
-                        GList    *filters)
-{
-  GdkEventFilter *filter;
-  GList *tmp_list;
-  GdkFilterReturn result;
-  
-  tmp_list = filters;
-  
-  while (tmp_list)
-    {
-      filter = (GdkEventFilter *) tmp_list->data;
-      
-      result = (*filter->function) (xevent, event, filter->data);
-      if (result !=  GDK_FILTER_CONTINUE)
-       return result;
-      
-      tmp_list = tmp_list->next;
-    }
-  
-  return GDK_FILTER_CONTINUE;
-}
-
-void 
-gdk_add_client_message_filter (GdkAtom       message_type,
-                              GdkFilterFunc func,
-                              gpointer      data)
-{
-  GdkClientFilter *filter = g_new (GdkClientFilter, 1);
-
-  filter->type = message_type;
-  filter->function = func;
-  filter->data = data;
-  
-  client_filters = g_list_prepend (client_filters, filter);
-}
-
-/* Thanks to Markus G. Kuhn <mkuhn@acm.org> for the ksysym<->Unicode
- * mapping functions, from the xterm sources.
- */
-
-#if 0 /* Keyval-to-Unicode isn't actually needed  */
-
-struct k2u {
-  unsigned short keysym;
-  unsigned short ucs;
-} k2utab[] = {
-  { 0x01a1, 0x0104 }, /*                     Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */
-  { 0x01a2, 0x02d8 }, /*                       breve ˘ BREVE */
-  { 0x01a3, 0x0141 }, /*                     Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */
-  { 0x01a5, 0x013d }, /*                      Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */
-  { 0x01a6, 0x015a }, /*                      Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */
-  { 0x01a9, 0x0160 }, /*                      Scaron Š LATIN CAPITAL LETTER S WITH CARON */
-  { 0x01aa, 0x015e }, /*                    Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */
-  { 0x01ab, 0x0164 }, /*                      Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */
-  { 0x01ac, 0x0179 }, /*                      Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */
-  { 0x01ae, 0x017d }, /*                      Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */
-  { 0x01af, 0x017b }, /*                   Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */
-  { 0x01b1, 0x0105 }, /*                     aogonek ą LATIN SMALL LETTER A WITH OGONEK */
-  { 0x01b2, 0x02db }, /*                      ogonek ˛ OGONEK */
-  { 0x01b3, 0x0142 }, /*                     lstroke ł LATIN SMALL LETTER L WITH STROKE */
-  { 0x01b5, 0x013e }, /*                      lcaron ľ LATIN SMALL LETTER L WITH CARON */
-  { 0x01b6, 0x015b }, /*                      sacute ś LATIN SMALL LETTER S WITH ACUTE */
-  { 0x01b7, 0x02c7 }, /*                       caron ˇ CARON */
-  { 0x01b9, 0x0161 }, /*                      scaron š LATIN SMALL LETTER S WITH CARON */
-  { 0x01ba, 0x015f }, /*                    scedilla ş LATIN SMALL LETTER S WITH CEDILLA */
-  { 0x01bb, 0x0165 }, /*                      tcaron ť LATIN SMALL LETTER T WITH CARON */
-  { 0x01bc, 0x017a }, /*                      zacute ź LATIN SMALL LETTER Z WITH ACUTE */
-  { 0x01bd, 0x02dd }, /*                 doubleacute ˝ DOUBLE ACUTE ACCENT */
-  { 0x01be, 0x017e }, /*                      zcaron ž LATIN SMALL LETTER Z WITH CARON */
-  { 0x01bf, 0x017c }, /*                   zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */
-  { 0x01c0, 0x0154 }, /*                      Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */
-  { 0x01c3, 0x0102 }, /*                      Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */
-  { 0x01c5, 0x0139 }, /*                      Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */
-  { 0x01c6, 0x0106 }, /*                      Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */
-  { 0x01c8, 0x010c }, /*                      Ccaron Č LATIN CAPITAL LETTER C WITH CARON */
-  { 0x01ca, 0x0118 }, /*                     Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */
-  { 0x01cc, 0x011a }, /*                      Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */
-  { 0x01cf, 0x010e }, /*                      Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */
-  { 0x01d0, 0x0110 }, /*                     Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */
-  { 0x01d1, 0x0143 }, /*                      Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */
-  { 0x01d2, 0x0147 }, /*                      Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */
-  { 0x01d5, 0x0150 }, /*                Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
-  { 0x01d8, 0x0158 }, /*                      Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */
-  { 0x01d9, 0x016e }, /*                       Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */
-  { 0x01db, 0x0170 }, /*                Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
-  { 0x01de, 0x0162 }, /*                    Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */
-  { 0x01e0, 0x0155 }, /*                      racute ŕ LATIN SMALL LETTER R WITH ACUTE */
-  { 0x01e3, 0x0103 }, /*                      abreve ă LATIN SMALL LETTER A WITH BREVE */
-  { 0x01e5, 0x013a }, /*                      lacute ĺ LATIN SMALL LETTER L WITH ACUTE */
-  { 0x01e6, 0x0107 }, /*                      cacute ć LATIN SMALL LETTER C WITH ACUTE */
-  { 0x01e8, 0x010d }, /*                      ccaron č LATIN SMALL LETTER C WITH CARON */
-  { 0x01ea, 0x0119 }, /*                     eogonek ę LATIN SMALL LETTER E WITH OGONEK */
-  { 0x01ec, 0x011b }, /*                      ecaron ě LATIN SMALL LETTER E WITH CARON */
-  { 0x01ef, 0x010f }, /*                      dcaron ď LATIN SMALL LETTER D WITH CARON */
-  { 0x01f0, 0x0111 }, /*                     dstroke đ LATIN SMALL LETTER D WITH STROKE */
-  { 0x01f1, 0x0144 }, /*                      nacute ń LATIN SMALL LETTER N WITH ACUTE */
-  { 0x01f2, 0x0148 }, /*                      ncaron ň LATIN SMALL LETTER N WITH CARON */
-  { 0x01f5, 0x0151 }, /*                odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */
-  { 0x01f8, 0x0159 }, /*                      rcaron ř LATIN SMALL LETTER R WITH CARON */
-  { 0x01f9, 0x016f }, /*                       uring ů LATIN SMALL LETTER U WITH RING ABOVE */
-  { 0x01fb, 0x0171 }, /*                udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */
-  { 0x01fe, 0x0163 }, /*                    tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */
-  { 0x01ff, 0x02d9 }, /*                    abovedot ˙ DOT ABOVE */
-  { 0x02a1, 0x0126 }, /*                     Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */
-  { 0x02a6, 0x0124 }, /*                 Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
-  { 0x02a9, 0x0130 }, /*                   Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */
-  { 0x02ab, 0x011e }, /*                      Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */
-  { 0x02ac, 0x0134 }, /*                 Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
-  { 0x02b1, 0x0127 }, /*                     hstroke ħ LATIN SMALL LETTER H WITH STROKE */
-  { 0x02b6, 0x0125 }, /*                 hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */
-  { 0x02b9, 0x0131 }, /*                    idotless ı LATIN SMALL LETTER DOTLESS I */
-  { 0x02bb, 0x011f }, /*                      gbreve ğ LATIN SMALL LETTER G WITH BREVE */
-  { 0x02bc, 0x0135 }, /*                 jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */
-  { 0x02c5, 0x010a }, /*                   Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */
-  { 0x02c6, 0x0108 }, /*                 Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
-  { 0x02d5, 0x0120 }, /*                   Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */
-  { 0x02d8, 0x011c }, /*                 Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
-  { 0x02dd, 0x016c }, /*                      Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */
-  { 0x02de, 0x015c }, /*                 Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
-  { 0x02e5, 0x010b }, /*                   cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */
-  { 0x02e6, 0x0109 }, /*                 ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */
-  { 0x02f5, 0x0121 }, /*                   gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */
-  { 0x02f8, 0x011d }, /*                 gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */
-  { 0x02fd, 0x016d }, /*                      ubreve ŭ LATIN SMALL LETTER U WITH BREVE */
-  { 0x02fe, 0x015d }, /*                 scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */
-  { 0x03a2, 0x0138 }, /*                         kra ĸ LATIN SMALL LETTER KRA */
-  { 0x03a3, 0x0156 }, /*                    Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */
-  { 0x03a5, 0x0128 }, /*                      Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */
-  { 0x03a6, 0x013b }, /*                    Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */
-  { 0x03aa, 0x0112 }, /*                     Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */
-  { 0x03ab, 0x0122 }, /*                    Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */
-  { 0x03ac, 0x0166 }, /*                      Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */
-  { 0x03b3, 0x0157 }, /*                    rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */
-  { 0x03b5, 0x0129 }, /*                      itilde ĩ LATIN SMALL LETTER I WITH TILDE */
-  { 0x03b6, 0x013c }, /*                    lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */
-  { 0x03ba, 0x0113 }, /*                     emacron ē LATIN SMALL LETTER E WITH MACRON */
-  { 0x03bb, 0x0123 }, /*                    gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */
-  { 0x03bc, 0x0167 }, /*                      tslash ŧ LATIN SMALL LETTER T WITH STROKE */
-  { 0x03bd, 0x014a }, /*                         ENG Ŋ LATIN CAPITAL LETTER ENG */
-  { 0x03bf, 0x014b }, /*                         eng ŋ LATIN SMALL LETTER ENG */
-  { 0x03c0, 0x0100 }, /*                     Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */
-  { 0x03c7, 0x012e }, /*                     Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */
-  { 0x03cc, 0x0116 }, /*                   Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */
-  { 0x03cf, 0x012a }, /*                     Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */
-  { 0x03d1, 0x0145 }, /*                    Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */
-  { 0x03d2, 0x014c }, /*                     Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */
-  { 0x03d3, 0x0136 }, /*                    Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */
-  { 0x03d9, 0x0172 }, /*                     Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */
-  { 0x03dd, 0x0168 }, /*                      Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */
-  { 0x03de, 0x016a }, /*                     Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */
-  { 0x03e0, 0x0101 }, /*                     amacron ā LATIN SMALL LETTER A WITH MACRON */
-  { 0x03e7, 0x012f }, /*                     iogonek į LATIN SMALL LETTER I WITH OGONEK */
-  { 0x03ec, 0x0117 }, /*                   eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */
-  { 0x03ef, 0x012b }, /*                     imacron ī LATIN SMALL LETTER I WITH MACRON */
-  { 0x03f1, 0x0146 }, /*                    ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */
-  { 0x03f2, 0x014d }, /*                     omacron ō LATIN SMALL LETTER O WITH MACRON */
-  { 0x03f3, 0x0137 }, /*                    kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */
-  { 0x03f9, 0x0173 }, /*                     uogonek ų LATIN SMALL LETTER U WITH OGONEK */
-  { 0x03fd, 0x0169 }, /*                      utilde ũ LATIN SMALL LETTER U WITH TILDE */
-  { 0x03fe, 0x016b }, /*                     umacron ū LATIN SMALL LETTER U WITH MACRON */
-  { 0x047e, 0x203e }, /*                    overline ‾ OVERLINE */
-  { 0x04a1, 0x3002 }, /*               kana_fullstop 。 IDEOGRAPHIC FULL STOP */
-  { 0x04a2, 0x300c }, /*         kana_openingbracket 「 LEFT CORNER BRACKET */
-  { 0x04a3, 0x300d }, /*         kana_closingbracket 」 RIGHT CORNER BRACKET */
-  { 0x04a4, 0x3001 }, /*                  kana_comma 、 IDEOGRAPHIC COMMA */
-  { 0x04a5, 0x30fb }, /*            kana_conjunctive ・ KATAKANA MIDDLE DOT */
-  { 0x04a6, 0x30f2 }, /*                     kana_WO ヲ KATAKANA LETTER WO */
-  { 0x04a7, 0x30a1 }, /*                      kana_a ァ KATAKANA LETTER SMALL A */
-  { 0x04a8, 0x30a3 }, /*                      kana_i ィ KATAKANA LETTER SMALL I */
-  { 0x04a9, 0x30a5 }, /*                      kana_u ゥ KATAKANA LETTER SMALL U */
-  { 0x04aa, 0x30a7 }, /*                      kana_e ェ KATAKANA LETTER SMALL E */
-  { 0x04ab, 0x30a9 }, /*                      kana_o ォ KATAKANA LETTER SMALL O */
-  { 0x04ac, 0x30e3 }, /*                     kana_ya ャ KATAKANA LETTER SMALL YA */
-  { 0x04ad, 0x30e5 }, /*                     kana_yu ュ KATAKANA LETTER SMALL YU */
-  { 0x04ae, 0x30e7 }, /*                     kana_yo ョ KATAKANA LETTER SMALL YO */
-  { 0x04af, 0x30c3 }, /*                    kana_tsu ッ KATAKANA LETTER SMALL TU */
-  { 0x04b0, 0x30fc }, /*              prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */
-  { 0x04b1, 0x30a2 }, /*                      kana_A ア KATAKANA LETTER A */
-  { 0x04b2, 0x30a4 }, /*                      kana_I イ KATAKANA LETTER I */
-  { 0x04b3, 0x30a6 }, /*                      kana_U ウ KATAKANA LETTER U */
-  { 0x04b4, 0x30a8 }, /*                      kana_E エ KATAKANA LETTER E */
-  { 0x04b5, 0x30aa }, /*                      kana_O オ KATAKANA LETTER O */
-  { 0x04b6, 0x30ab }, /*                     kana_KA カ KATAKANA LETTER KA */
-  { 0x04b7, 0x30ad }, /*                     kana_KI キ KATAKANA LETTER KI */
-  { 0x04b8, 0x30af }, /*                     kana_KU ク KATAKANA LETTER KU */
-  { 0x04b9, 0x30b1 }, /*                     kana_KE ケ KATAKANA LETTER KE */
-  { 0x04ba, 0x30b3 }, /*                     kana_KO コ KATAKANA LETTER KO */
-  { 0x04bb, 0x30b5 }, /*                     kana_SA サ KATAKANA LETTER SA */
-  { 0x04bc, 0x30b7 }, /*                    kana_SHI シ KATAKANA LETTER SI */
-  { 0x04bd, 0x30b9 }, /*                     kana_SU ス KATAKANA LETTER SU */
-  { 0x04be, 0x30bb }, /*                     kana_SE セ KATAKANA LETTER SE */
-  { 0x04bf, 0x30bd }, /*                     kana_SO ソ KATAKANA LETTER SO */
-  { 0x04c0, 0x30bf }, /*                     kana_TA タ KATAKANA LETTER TA */
-  { 0x04c1, 0x30c1 }, /*                    kana_CHI チ KATAKANA LETTER TI */
-  { 0x04c2, 0x30c4 }, /*                    kana_TSU ツ KATAKANA LETTER TU */
-  { 0x04c3, 0x30c6 }, /*                     kana_TE テ KATAKANA LETTER TE */
-  { 0x04c4, 0x30c8 }, /*                     kana_TO ト KATAKANA LETTER TO */
-  { 0x04c5, 0x30ca }, /*                     kana_NA ナ KATAKANA LETTER NA */
-  { 0x04c6, 0x30cb }, /*                     kana_NI ニ KATAKANA LETTER NI */
-  { 0x04c7, 0x30cc }, /*                     kana_NU ヌ KATAKANA LETTER NU */
-  { 0x04c8, 0x30cd }, /*                     kana_NE ネ KATAKANA LETTER NE */
-  { 0x04c9, 0x30ce }, /*                     kana_NO ノ KATAKANA LETTER NO */
-  { 0x04ca, 0x30cf }, /*                     kana_HA ハ KATAKANA LETTER HA */
-  { 0x04cb, 0x30d2 }, /*                     kana_HI ヒ KATAKANA LETTER HI */
-  { 0x04cc, 0x30d5 }, /*                     kana_FU フ KATAKANA LETTER HU */
-  { 0x04cd, 0x30d8 }, /*                     kana_HE ヘ KATAKANA LETTER HE */
-  { 0x04ce, 0x30db }, /*                     kana_HO ホ KATAKANA LETTER HO */
-  { 0x04cf, 0x30de }, /*                     kana_MA マ KATAKANA LETTER MA */
-  { 0x04d0, 0x30df }, /*                     kana_MI ミ KATAKANA LETTER MI */
-  { 0x04d1, 0x30e0 }, /*                     kana_MU ム KATAKANA LETTER MU */
-  { 0x04d2, 0x30e1 }, /*                     kana_ME メ KATAKANA LETTER ME */
-  { 0x04d3, 0x30e2 }, /*                     kana_MO モ KATAKANA LETTER MO */
-  { 0x04d4, 0x30e4 }, /*                     kana_YA ヤ KATAKANA LETTER YA */
-  { 0x04d5, 0x30e6 }, /*                     kana_YU ユ KATAKANA LETTER YU */
-  { 0x04d6, 0x30e8 }, /*                     kana_YO ヨ KATAKANA LETTER YO */
-  { 0x04d7, 0x30e9 }, /*                     kana_RA ラ KATAKANA LETTER RA */
-  { 0x04d8, 0x30ea }, /*                     kana_RI リ KATAKANA LETTER RI */
-  { 0x04d9, 0x30eb }, /*                     kana_RU ル KATAKANA LETTER RU */
-  { 0x04da, 0x30ec }, /*                     kana_RE レ KATAKANA LETTER RE */
-  { 0x04db, 0x30ed }, /*                     kana_RO ロ KATAKANA LETTER RO */
-  { 0x04dc, 0x30ef }, /*                     kana_WA ワ KATAKANA LETTER WA */
-  { 0x04dd, 0x30f3 }, /*                      kana_N ン KATAKANA LETTER N */
-  { 0x04de, 0x309b }, /*                 voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */
-  { 0x04df, 0x309c }, /*             semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
-  { 0x05ac, 0x060c }, /*                Arabic_comma ، ARABIC COMMA */
-  { 0x05bb, 0x061b }, /*            Arabic_semicolon ؛ ARABIC SEMICOLON */
-  { 0x05bf, 0x061f }, /*        Arabic_question_mark ؟ ARABIC QUESTION MARK */
-  { 0x05c1, 0x0621 }, /*                Arabic_hamza ء ARABIC LETTER HAMZA */
-  { 0x05c2, 0x0622 }, /*          Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */
-  { 0x05c3, 0x0623 }, /*          Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */
-  { 0x05c4, 0x0624 }, /*           Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */
-  { 0x05c5, 0x0625 }, /*       Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */
-  { 0x05c6, 0x0626 }, /*           Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */
-  { 0x05c7, 0x0627 }, /*                 Arabic_alef ا ARABIC LETTER ALEF */
-  { 0x05c8, 0x0628 }, /*                  Arabic_beh ب ARABIC LETTER BEH */
-  { 0x05c9, 0x0629 }, /*           Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */
-  { 0x05ca, 0x062a }, /*                  Arabic_teh ت ARABIC LETTER TEH */
-  { 0x05cb, 0x062b }, /*                 Arabic_theh ث ARABIC LETTER THEH */
-  { 0x05cc, 0x062c }, /*                 Arabic_jeem ج ARABIC LETTER JEEM */
-  { 0x05cd, 0x062d }, /*                  Arabic_hah ح ARABIC LETTER HAH */
-  { 0x05ce, 0x062e }, /*                 Arabic_khah خ ARABIC LETTER KHAH */
-  { 0x05cf, 0x062f }, /*                  Arabic_dal د ARABIC LETTER DAL */
-  { 0x05d0, 0x0630 }, /*                 Arabic_thal ذ ARABIC LETTER THAL */
-  { 0x05d1, 0x0631 }, /*                   Arabic_ra ر ARABIC LETTER REH */
-  { 0x05d2, 0x0632 }, /*                 Arabic_zain ز ARABIC LETTER ZAIN */
-  { 0x05d3, 0x0633 }, /*                 Arabic_seen س ARABIC LETTER SEEN */
-  { 0x05d4, 0x0634 }, /*                Arabic_sheen ش ARABIC LETTER SHEEN */
-  { 0x05d5, 0x0635 }, /*                  Arabic_sad ص ARABIC LETTER SAD */
-  { 0x05d6, 0x0636 }, /*                  Arabic_dad ض ARABIC LETTER DAD */
-  { 0x05d7, 0x0637 }, /*                  Arabic_tah ط ARABIC LETTER TAH */
-  { 0x05d8, 0x0638 }, /*                  Arabic_zah ظ ARABIC LETTER ZAH */
-  { 0x05d9, 0x0639 }, /*                  Arabic_ain ع ARABIC LETTER AIN */
-  { 0x05da, 0x063a }, /*                Arabic_ghain غ ARABIC LETTER GHAIN */
-  { 0x05e0, 0x0640 }, /*              Arabic_tatweel ـ ARABIC TATWEEL */
-  { 0x05e1, 0x0641 }, /*                  Arabic_feh ف ARABIC LETTER FEH */
-  { 0x05e2, 0x0642 }, /*                  Arabic_qaf ق ARABIC LETTER QAF */
-  { 0x05e3, 0x0643 }, /*                  Arabic_kaf ك ARABIC LETTER KAF */
-  { 0x05e4, 0x0644 }, /*                  Arabic_lam ل ARABIC LETTER LAM */
-  { 0x05e5, 0x0645 }, /*                 Arabic_meem م ARABIC LETTER MEEM */
-  { 0x05e6, 0x0646 }, /*                 Arabic_noon ن ARABIC LETTER NOON */
-  { 0x05e7, 0x0647 }, /*                   Arabic_ha ه ARABIC LETTER HEH */
-  { 0x05e8, 0x0648 }, /*                  Arabic_waw و ARABIC LETTER WAW */
-  { 0x05e9, 0x0649 }, /*          Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */
-  { 0x05ea, 0x064a }, /*                  Arabic_yeh ي ARABIC LETTER YEH */
-  { 0x05eb, 0x064b }, /*             Arabic_fathatan ً ARABIC FATHATAN */
-  { 0x05ec, 0x064c }, /*             Arabic_dammatan ٌ ARABIC DAMMATAN */
-  { 0x05ed, 0x064d }, /*             Arabic_kasratan ٍ ARABIC KASRATAN */
-  { 0x05ee, 0x064e }, /*                Arabic_fatha َ ARABIC FATHA */
-  { 0x05ef, 0x064f }, /*                Arabic_damma ُ ARABIC DAMMA */
-  { 0x05f0, 0x0650 }, /*                Arabic_kasra ِ ARABIC KASRA */
-  { 0x05f1, 0x0651 }, /*               Arabic_shadda ّ ARABIC SHADDA */
-  { 0x05f2, 0x0652 }, /*                Arabic_sukun ْ ARABIC SUKUN */
-  { 0x06a1, 0x0452 }, /*                 Serbian_dje ђ CYRILLIC SMALL LETTER DJE */
-  { 0x06a2, 0x0453 }, /*               Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */
-  { 0x06a3, 0x0451 }, /*                 Cyrillic_io ё CYRILLIC SMALL LETTER IO */
-  { 0x06a4, 0x0454 }, /*                Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */
-  { 0x06a5, 0x0455 }, /*               Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */
-  { 0x06a6, 0x0456 }, /*                 Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
-  { 0x06a7, 0x0457 }, /*                Ukrainian_yi ї CYRILLIC SMALL LETTER YI */
-  { 0x06a8, 0x0458 }, /*                 Cyrillic_je ј CYRILLIC SMALL LETTER JE */
-  { 0x06a9, 0x0459 }, /*                Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */
-  { 0x06aa, 0x045a }, /*                Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */
-  { 0x06ab, 0x045b }, /*                Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */
-  { 0x06ac, 0x045c }, /*               Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */
-  { 0x06ae, 0x045e }, /*         Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */
-  { 0x06af, 0x045f }, /*               Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */
-  { 0x06b0, 0x2116 }, /*                  numerosign № NUMERO SIGN */
-  { 0x06b1, 0x0402 }, /*                 Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */
-  { 0x06b2, 0x0403 }, /*               Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */
-  { 0x06b3, 0x0401 }, /*                 Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */
-  { 0x06b4, 0x0404 }, /*                Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */
-  { 0x06b5, 0x0405 }, /*               Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */
-  { 0x06b6, 0x0406 }, /*                 Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
-  { 0x06b7, 0x0407 }, /*                Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */
-  { 0x06b8, 0x0408 }, /*                 Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */
-  { 0x06b9, 0x0409 }, /*                Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */
-  { 0x06ba, 0x040a }, /*                Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */
-  { 0x06bb, 0x040b }, /*                Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */
-  { 0x06bc, 0x040c }, /*               Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */
-  { 0x06be, 0x040e }, /*         Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */
-  { 0x06bf, 0x040f }, /*               Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */
-  { 0x06c0, 0x044e }, /*                 Cyrillic_yu ю CYRILLIC SMALL LETTER YU */
-  { 0x06c1, 0x0430 }, /*                  Cyrillic_a а CYRILLIC SMALL LETTER A */
-  { 0x06c2, 0x0431 }, /*                 Cyrillic_be б CYRILLIC SMALL LETTER BE */
-  { 0x06c3, 0x0446 }, /*                Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */
-  { 0x06c4, 0x0434 }, /*                 Cyrillic_de д CYRILLIC SMALL LETTER DE */
-  { 0x06c5, 0x0435 }, /*                 Cyrillic_ie е CYRILLIC SMALL LETTER IE */
-  { 0x06c6, 0x0444 }, /*                 Cyrillic_ef ф CYRILLIC SMALL LETTER EF */
-  { 0x06c7, 0x0433 }, /*                Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */
-  { 0x06c8, 0x0445 }, /*                 Cyrillic_ha х CYRILLIC SMALL LETTER HA */
-  { 0x06c9, 0x0438 }, /*                  Cyrillic_i и CYRILLIC SMALL LETTER I */
-  { 0x06ca, 0x0439 }, /*             Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */
-  { 0x06cb, 0x043a }, /*                 Cyrillic_ka к CYRILLIC SMALL LETTER KA */
-  { 0x06cc, 0x043b }, /*                 Cyrillic_el л CYRILLIC SMALL LETTER EL */
-  { 0x06cd, 0x043c }, /*                 Cyrillic_em м CYRILLIC SMALL LETTER EM */
-  { 0x06ce, 0x043d }, /*                 Cyrillic_en н CYRILLIC SMALL LETTER EN */
-  { 0x06cf, 0x043e }, /*                  Cyrillic_o о CYRILLIC SMALL LETTER O */
-  { 0x06d0, 0x043f }, /*                 Cyrillic_pe п CYRILLIC SMALL LETTER PE */
-  { 0x06d1, 0x044f }, /*                 Cyrillic_ya я CYRILLIC SMALL LETTER YA */
-  { 0x06d2, 0x0440 }, /*                 Cyrillic_er р CYRILLIC SMALL LETTER ER */
-  { 0x06d3, 0x0441 }, /*                 Cyrillic_es с CYRILLIC SMALL LETTER ES */
-  { 0x06d4, 0x0442 }, /*                 Cyrillic_te т CYRILLIC SMALL LETTER TE */
-  { 0x06d5, 0x0443 }, /*                  Cyrillic_u у CYRILLIC SMALL LETTER U */
-  { 0x06d6, 0x0436 }, /*                Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */
-  { 0x06d7, 0x0432 }, /*                 Cyrillic_ve в CYRILLIC SMALL LETTER VE */
-  { 0x06d8, 0x044c }, /*           Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */
-  { 0x06d9, 0x044b }, /*               Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */
-  { 0x06da, 0x0437 }, /*                 Cyrillic_ze з CYRILLIC SMALL LETTER ZE */
-  { 0x06db, 0x0448 }, /*                Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */
-  { 0x06dc, 0x044d }, /*                  Cyrillic_e э CYRILLIC SMALL LETTER E */
-  { 0x06dd, 0x0449 }, /*              Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */
-  { 0x06de, 0x0447 }, /*                Cyrillic_che ч CYRILLIC SMALL LETTER CHE */
-  { 0x06df, 0x044a }, /*           Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */
-  { 0x06e0, 0x042e }, /*                 Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */
-  { 0x06e1, 0x0410 }, /*                  Cyrillic_A А CYRILLIC CAPITAL LETTER A */
-  { 0x06e2, 0x0411 }, /*                 Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */
-  { 0x06e3, 0x0426 }, /*                Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */
-  { 0x06e4, 0x0414 }, /*                 Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */
-  { 0x06e5, 0x0415 }, /*                 Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */
-  { 0x06e6, 0x0424 }, /*                 Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */
-  { 0x06e7, 0x0413 }, /*                Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */
-  { 0x06e8, 0x0425 }, /*                 Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */
-  { 0x06e9, 0x0418 }, /*                  Cyrillic_I И CYRILLIC CAPITAL LETTER I */
-  { 0x06ea, 0x0419 }, /*             Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */
-  { 0x06eb, 0x041a }, /*                 Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */
-  { 0x06ec, 0x041b }, /*                 Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */
-  { 0x06ed, 0x041c }, /*                 Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */
-  { 0x06ee, 0x041d }, /*                 Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */
-  { 0x06ef, 0x041e }, /*                  Cyrillic_O О CYRILLIC CAPITAL LETTER O */
-  { 0x06f0, 0x041f }, /*                 Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */
-  { 0x06f1, 0x042f }, /*                 Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */
-  { 0x06f2, 0x0420 }, /*                 Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */
-  { 0x06f3, 0x0421 }, /*                 Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */
-  { 0x06f4, 0x0422 }, /*                 Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */
-  { 0x06f5, 0x0423 }, /*                  Cyrillic_U У CYRILLIC CAPITAL LETTER U */
-  { 0x06f6, 0x0416 }, /*                Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */
-  { 0x06f7, 0x0412 }, /*                 Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */
-  { 0x06f8, 0x042c }, /*           Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */
-  { 0x06f9, 0x042b }, /*               Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */
-  { 0x06fa, 0x0417 }, /*                 Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */
-  { 0x06fb, 0x0428 }, /*                Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */
-  { 0x06fc, 0x042d }, /*                  Cyrillic_E Э CYRILLIC CAPITAL LETTER E */
-  { 0x06fd, 0x0429 }, /*              Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */
-  { 0x06fe, 0x0427 }, /*                Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */
-  { 0x06ff, 0x042a }, /*           Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */
-  { 0x07a1, 0x0386 }, /*           Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */
-  { 0x07a2, 0x0388 }, /*         Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */
-  { 0x07a3, 0x0389 }, /*             Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */
-  { 0x07a4, 0x038a }, /*            Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */
-  { 0x07a5, 0x03aa }, /*         Greek_IOTAdiaeresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
-  { 0x07a7, 0x038c }, /*         Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */
-  { 0x07a8, 0x038e }, /*         Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */
-  { 0x07a9, 0x03ab }, /*       Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
-  { 0x07ab, 0x038f }, /*           Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */
-  { 0x07ae, 0x0385 }, /*        Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */
-  { 0x07af, 0x2015 }, /*              Greek_horizbar ― HORIZONTAL BAR */
-  { 0x07b1, 0x03ac }, /*           Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */
-  { 0x07b2, 0x03ad }, /*         Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */
-  { 0x07b3, 0x03ae }, /*             Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */
-  { 0x07b4, 0x03af }, /*            Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */
-  { 0x07b5, 0x03ca }, /*          Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */
-  { 0x07b6, 0x0390 }, /*    Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
-  { 0x07b7, 0x03cc }, /*         Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */
-  { 0x07b8, 0x03cd }, /*         Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */
-  { 0x07b9, 0x03cb }, /*       Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
-  { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
-  { 0x07bb, 0x03ce }, /*           Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */
-  { 0x07c1, 0x0391 }, /*                 Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */
-  { 0x07c2, 0x0392 }, /*                  Greek_BETA Β GREEK CAPITAL LETTER BETA */
-  { 0x07c3, 0x0393 }, /*                 Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */
-  { 0x07c4, 0x0394 }, /*                 Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */
-  { 0x07c5, 0x0395 }, /*               Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */
-  { 0x07c6, 0x0396 }, /*                  Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */
-  { 0x07c7, 0x0397 }, /*                   Greek_ETA Η GREEK CAPITAL LETTER ETA */
-  { 0x07c8, 0x0398 }, /*                 Greek_THETA Θ GREEK CAPITAL LETTER THETA */
-  { 0x07c9, 0x0399 }, /*                  Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */
-  { 0x07ca, 0x039a }, /*                 Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */
-  { 0x07cb, 0x039b }, /*                Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */
-  { 0x07cc, 0x039c }, /*                    Greek_MU Μ GREEK CAPITAL LETTER MU */
-  { 0x07cd, 0x039d }, /*                    Greek_NU Ν GREEK CAPITAL LETTER NU */
-  { 0x07ce, 0x039e }, /*                    Greek_XI Ξ GREEK CAPITAL LETTER XI */
-  { 0x07cf, 0x039f }, /*               Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */
-  { 0x07d0, 0x03a0 }, /*                    Greek_PI Π GREEK CAPITAL LETTER PI */
-  { 0x07d1, 0x03a1 }, /*                   Greek_RHO Ρ GREEK CAPITAL LETTER RHO */
-  { 0x07d2, 0x03a3 }, /*                 Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */
-  { 0x07d4, 0x03a4 }, /*                   Greek_TAU Τ GREEK CAPITAL LETTER TAU */
-  { 0x07d5, 0x03a5 }, /*               Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */
-  { 0x07d6, 0x03a6 }, /*                   Greek_PHI Φ GREEK CAPITAL LETTER PHI */
-  { 0x07d7, 0x03a7 }, /*                   Greek_CHI Χ GREEK CAPITAL LETTER CHI */
-  { 0x07d8, 0x03a8 }, /*                   Greek_PSI Ψ GREEK CAPITAL LETTER PSI */
-  { 0x07d9, 0x03a9 }, /*                 Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */
-  { 0x07e1, 0x03b1 }, /*                 Greek_alpha α GREEK SMALL LETTER ALPHA */
-  { 0x07e2, 0x03b2 }, /*                  Greek_beta β GREEK SMALL LETTER BETA */
-  { 0x07e3, 0x03b3 }, /*                 Greek_gamma γ GREEK SMALL LETTER GAMMA */
-  { 0x07e4, 0x03b4 }, /*                 Greek_delta δ GREEK SMALL LETTER DELTA */
-  { 0x07e5, 0x03b5 }, /*               Greek_epsilon ε GREEK SMALL LETTER EPSILON */
-  { 0x07e6, 0x03b6 }, /*                  Greek_zeta ζ GREEK SMALL LETTER ZETA */
-  { 0x07e7, 0x03b7 }, /*                   Greek_eta η GREEK SMALL LETTER ETA */
-  { 0x07e8, 0x03b8 }, /*                 Greek_theta θ GREEK SMALL LETTER THETA */
-  { 0x07e9, 0x03b9 }, /*                  Greek_iota ι GREEK SMALL LETTER IOTA */
-  { 0x07ea, 0x03ba }, /*                 Greek_kappa κ GREEK SMALL LETTER KAPPA */
-  { 0x07eb, 0x03bb }, /*                Greek_lambda λ GREEK SMALL LETTER LAMDA */
-  { 0x07ec, 0x03bc }, /*                    Greek_mu μ GREEK SMALL LETTER MU */
-  { 0x07ed, 0x03bd }, /*                    Greek_nu ν GREEK SMALL LETTER NU */
-  { 0x07ee, 0x03be }, /*                    Greek_xi ξ GREEK SMALL LETTER XI */
-  { 0x07ef, 0x03bf }, /*               Greek_omicron ο GREEK SMALL LETTER OMICRON */
-  { 0x07f0, 0x03c0 }, /*                    Greek_pi π GREEK SMALL LETTER PI */
-  { 0x07f1, 0x03c1 }, /*                   Greek_rho ρ GREEK SMALL LETTER RHO */
-  { 0x07f2, 0x03c3 }, /*                 Greek_sigma σ GREEK SMALL LETTER SIGMA */
-  { 0x07f3, 0x03c2 }, /*       Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */
-  { 0x07f4, 0x03c4 }, /*                   Greek_tau τ GREEK SMALL LETTER TAU */
-  { 0x07f5, 0x03c5 }, /*               Greek_upsilon υ GREEK SMALL LETTER UPSILON */
-  { 0x07f6, 0x03c6 }, /*                   Greek_phi φ GREEK SMALL LETTER PHI */
-  { 0x07f7, 0x03c7 }, /*                   Greek_chi χ GREEK SMALL LETTER CHI */
-  { 0x07f8, 0x03c8 }, /*                   Greek_psi ψ GREEK SMALL LETTER PSI */
-  { 0x07f9, 0x03c9 }, /*                 Greek_omega ω GREEK SMALL LETTER OMEGA */
-/*  0x08a1                               leftradical ? ??? */
-/*  0x08a2                            topleftradical ? ??? */
-/*  0x08a3                            horizconnector ? ??? */
-  { 0x08a4, 0x2320 }, /*                 topintegral ⌠ TOP HALF INTEGRAL */
-  { 0x08a5, 0x2321 }, /*                 botintegral ⌡ BOTTOM HALF INTEGRAL */
-  { 0x08a6, 0x2502 }, /*               vertconnector │ BOX DRAWINGS LIGHT VERTICAL */
-/*  0x08a7                          topleftsqbracket ? ??? */
-/*  0x08a8                          botleftsqbracket ? ??? */
-/*  0x08a9                         toprightsqbracket ? ??? */
-/*  0x08aa                         botrightsqbracket ? ??? */
-/*  0x08ab                             topleftparens ? ??? */
-/*  0x08ac                             botleftparens ? ??? */
-/*  0x08ad                            toprightparens ? ??? */
-/*  0x08ae                            botrightparens ? ??? */
-/*  0x08af                      leftmiddlecurlybrace ? ??? */
-/*  0x08b0                     rightmiddlecurlybrace ? ??? */
-/*  0x08b1                          topleftsummation ? ??? */
-/*  0x08b2                          botleftsummation ? ??? */
-/*  0x08b3                 topvertsummationconnector ? ??? */
-/*  0x08b4                 botvertsummationconnector ? ??? */
-/*  0x08b5                         toprightsummation ? ??? */
-/*  0x08b6                         botrightsummation ? ??? */
-/*  0x08b7                      rightmiddlesummation ? ??? */
-  { 0x08bc, 0x2264 }, /*               lessthanequal ≤ LESS-THAN OR EQUAL TO */
-  { 0x08bd, 0x2260 }, /*                    notequal ≠ NOT EQUAL TO */
-  { 0x08be, 0x2265 }, /*            greaterthanequal ≥ GREATER-THAN OR EQUAL TO */
-  { 0x08bf, 0x222b }, /*                    integral ∫ INTEGRAL */
-  { 0x08c0, 0x2234 }, /*                   therefore ∴ THEREFORE */
-  { 0x08c1, 0x221d }, /*                   variation ∝ PROPORTIONAL TO */
-  { 0x08c2, 0x221e }, /*                    infinity ∞ INFINITY */
-  { 0x08c5, 0x2207 }, /*                       nabla ∇ NABLA */
-  { 0x08c8, 0x2245 }, /*                 approximate ≅ APPROXIMATELY EQUAL TO */
-/*  0x08c9                              similarequal ? ??? */
-  { 0x08cd, 0x21d4 }, /*                    ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */
-  { 0x08ce, 0x21d2 }, /*                     implies ⇒ RIGHTWARDS DOUBLE ARROW */
-  { 0x08cf, 0x2261 }, /*                   identical ≡ IDENTICAL TO */
-  { 0x08d6, 0x221a }, /*                     radical √ SQUARE ROOT */
-  { 0x08da, 0x2282 }, /*                  includedin ⊂ SUBSET OF */
-  { 0x08db, 0x2283 }, /*                    includes ⊃ SUPERSET OF */
-  { 0x08dc, 0x2229 }, /*                intersection ∩ INTERSECTION */
-  { 0x08dd, 0x222a }, /*                       union ∪ UNION */
-  { 0x08de, 0x2227 }, /*                  logicaland ∧ LOGICAL AND */
-  { 0x08df, 0x2228 }, /*                   logicalor ∨ LOGICAL OR */
-  { 0x08ef, 0x2202 }, /*           partialderivative ∂ PARTIAL DIFFERENTIAL */
-  { 0x08f6, 0x0192 }, /*                    function ƒ LATIN SMALL LETTER F WITH HOOK */
-  { 0x08fb, 0x2190 }, /*                   leftarrow ← LEFTWARDS ARROW */
-  { 0x08fc, 0x2191 }, /*                     uparrow ↑ UPWARDS ARROW */
-  { 0x08fd, 0x2192 }, /*                  rightarrow → RIGHTWARDS ARROW */
-  { 0x08fe, 0x2193 }, /*                   downarrow ↓ DOWNWARDS ARROW */
-  { 0x09df, 0x2422 }, /*                       blank ␢ BLANK SYMBOL */
-  { 0x09e0, 0x25c6 }, /*                soliddiamond ◆ BLACK DIAMOND */
-  { 0x09e1, 0x2592 }, /*                checkerboard ▒ MEDIUM SHADE */
-  { 0x09e2, 0x2409 }, /*                          ht ␉ SYMBOL FOR HORIZONTAL TABULATION */
-  { 0x09e3, 0x240c }, /*                          ff ␌ SYMBOL FOR FORM FEED */
-  { 0x09e4, 0x240d }, /*                          cr ␍ SYMBOL FOR CARRIAGE RETURN */
-  { 0x09e5, 0x240a }, /*                          lf ␊ SYMBOL FOR LINE FEED */
-  { 0x09e8, 0x2424 }, /*                          nl ␤ SYMBOL FOR NEWLINE */
-  { 0x09e9, 0x240b }, /*                          vt ␋ SYMBOL FOR VERTICAL TABULATION */
-  { 0x09ea, 0x2518 }, /*              lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */
-  { 0x09eb, 0x2510 }, /*               uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */
-  { 0x09ec, 0x250c }, /*                upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */
-  { 0x09ed, 0x2514 }, /*               lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */
-  { 0x09ee, 0x253c }, /*               crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
-/*  0x09ef                            horizlinescan1 ? ??? */
-/*  0x09f0                            horizlinescan3 ? ??? */
-  { 0x09f1, 0x2500 }, /*              horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */
-/*  0x09f2                            horizlinescan7 ? ??? */
-/*  0x09f3                            horizlinescan9 ? ??? */
-  { 0x09f4, 0x251c }, /*                       leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
-  { 0x09f5, 0x2524 }, /*                      rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */
-  { 0x09f6, 0x2534 }, /*                        bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */
-  { 0x09f7, 0x252c }, /*                        topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
-  { 0x09f8, 0x2502 }, /*                     vertbar │ BOX DRAWINGS LIGHT VERTICAL */
-  { 0x0aa1, 0x2003 }, /*                     emspace   EM SPACE */
-  { 0x0aa2, 0x2002 }, /*                     enspace   EN SPACE */
-  { 0x0aa3, 0x2004 }, /*                    em3space   THREE-PER-EM SPACE */
-  { 0x0aa4, 0x2005 }, /*                    em4space   FOUR-PER-EM SPACE */
-  { 0x0aa5, 0x2007 }, /*                  digitspace   FIGURE SPACE */
-  { 0x0aa6, 0x2008 }, /*                  punctspace   PUNCTUATION SPACE */
-  { 0x0aa7, 0x2009 }, /*                   thinspace   THIN SPACE */
-  { 0x0aa8, 0x200a }, /*                   hairspace   HAIR SPACE */
-  { 0x0aa9, 0x2014 }, /*                      emdash — EM DASH */
-  { 0x0aaa, 0x2013 }, /*                      endash – EN DASH */
-/*  0x0aac                               signifblank ? ??? */
-  { 0x0aae, 0x2026 }, /*                    ellipsis … HORIZONTAL ELLIPSIS */
-/*  0x0aaf                           doubbaselinedot ? ??? */
-  { 0x0ab0, 0x2153 }, /*                    onethird ⅓ VULGAR FRACTION ONE THIRD */
-  { 0x0ab1, 0x2154 }, /*                   twothirds ⅔ VULGAR FRACTION TWO THIRDS */
-  { 0x0ab2, 0x2155 }, /*                    onefifth ⅕ VULGAR FRACTION ONE FIFTH */
-  { 0x0ab3, 0x2156 }, /*                   twofifths ⅖ VULGAR FRACTION TWO FIFTHS */
-  { 0x0ab4, 0x2157 }, /*                 threefifths ⅗ VULGAR FRACTION THREE FIFTHS */
-  { 0x0ab5, 0x2158 }, /*                  fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */
-  { 0x0ab6, 0x2159 }, /*                    onesixth ⅙ VULGAR FRACTION ONE SIXTH */
-  { 0x0ab7, 0x215a }, /*                  fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */
-  { 0x0ab8, 0x2105 }, /*                      careof ℅ CARE OF */
-  { 0x0abb, 0x2012 }, /*                     figdash ‒ FIGURE DASH */
-  { 0x0abc, 0x2329 }, /*            leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */
-  { 0x0abd, 0x002e }, /*                decimalpoint . FULL STOP */
-  { 0x0abe, 0x232a }, /*           rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */
-/*  0x0abf                                    marker ? ??? */
-  { 0x0ac3, 0x215b }, /*                   oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */
-  { 0x0ac4, 0x215c }, /*                threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */
-  { 0x0ac5, 0x215d }, /*                 fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */
-  { 0x0ac6, 0x215e }, /*                seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */
-  { 0x0ac9, 0x2122 }, /*                   trademark ™ TRADE MARK SIGN */
-  { 0x0aca, 0x2613 }, /*               signaturemark ☓ SALTIRE */
-/*  0x0acb                         trademarkincircle ? ??? */
-  { 0x0acc, 0x25c1 }, /*            leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */
-  { 0x0acd, 0x25b7 }, /*           rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */
-  { 0x0ace, 0x25cb }, /*                emopencircle ○ WHITE CIRCLE */
-  { 0x0acf, 0x25a1 }, /*             emopenrectangle □ WHITE SQUARE */
-  { 0x0ad0, 0x2018 }, /*         leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */
-  { 0x0ad1, 0x2019 }, /*        rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */
-  { 0x0ad2, 0x201c }, /*         leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */
-  { 0x0ad3, 0x201d }, /*        rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */
-  { 0x0ad4, 0x211e }, /*                prescription ℞ PRESCRIPTION TAKE */
-  { 0x0ad6, 0x2032 }, /*                     minutes ′ PRIME */
-  { 0x0ad7, 0x2033 }, /*                     seconds ″ DOUBLE PRIME */
-  { 0x0ad9, 0x271d }, /*                  latincross ✝ LATIN CROSS */
-/*  0x0ada                                  hexagram ? ??? */
-  { 0x0adb, 0x25ac }, /*            filledrectbullet ▬ BLACK RECTANGLE */
-  { 0x0adc, 0x25c0 }, /*         filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */
-  { 0x0add, 0x25b6 }, /*        filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */
-  { 0x0ade, 0x25cf }, /*              emfilledcircle ● BLACK CIRCLE */
-  { 0x0adf, 0x25a0 }, /*                emfilledrect ■ BLACK SQUARE */
-  { 0x0ae0, 0x25e6 }, /*            enopencircbullet ◦ WHITE BULLET */
-  { 0x0ae1, 0x25ab }, /*          enopensquarebullet ▫ WHITE SMALL SQUARE */
-  { 0x0ae2, 0x25ad }, /*              openrectbullet ▭ WHITE RECTANGLE */
-  { 0x0ae3, 0x25b3 }, /*             opentribulletup △ WHITE UP-POINTING TRIANGLE */
-  { 0x0ae4, 0x25bd }, /*           opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */
-  { 0x0ae5, 0x2606 }, /*                    openstar ☆ WHITE STAR */
-  { 0x0ae6, 0x2022 }, /*          enfilledcircbullet • BULLET */
-  { 0x0ae7, 0x25aa }, /*            enfilledsqbullet ▪ BLACK SMALL SQUARE */
-  { 0x0ae8, 0x25b2 }, /*           filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */
-  { 0x0ae9, 0x25bc }, /*         filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */
-  { 0x0aea, 0x261c }, /*                 leftpointer ☜ WHITE LEFT POINTING INDEX */
-  { 0x0aeb, 0x261e }, /*                rightpointer ☞ WHITE RIGHT POINTING INDEX */
-  { 0x0aec, 0x2663 }, /*                        club ♣ BLACK CLUB SUIT */
-  { 0x0aed, 0x2666 }, /*                     diamond ♦ BLACK DIAMOND SUIT */
-  { 0x0aee, 0x2665 }, /*                       heart ♥ BLACK HEART SUIT */
-  { 0x0af0, 0x2720 }, /*                maltesecross ✠ MALTESE CROSS */
-  { 0x0af1, 0x2020 }, /*                      dagger † DAGGER */
-  { 0x0af2, 0x2021 }, /*                doubledagger ‡ DOUBLE DAGGER */
-  { 0x0af3, 0x2713 }, /*                   checkmark ✓ CHECK MARK */
-  { 0x0af4, 0x2717 }, /*                 ballotcross ✗ BALLOT X */
-  { 0x0af5, 0x266f }, /*                musicalsharp ♯ MUSIC SHARP SIGN */
-  { 0x0af6, 0x266d }, /*                 musicalflat ♭ MUSIC FLAT SIGN */
-  { 0x0af7, 0x2642 }, /*                  malesymbol ♂ MALE SIGN */
-  { 0x0af8, 0x2640 }, /*                femalesymbol ♀ FEMALE SIGN */
-  { 0x0af9, 0x260e }, /*                   telephone ☎ BLACK TELEPHONE */
-  { 0x0afa, 0x2315 }, /*           telephonerecorder ⌕ TELEPHONE RECORDER */
-  { 0x0afb, 0x2117 }, /*         phonographcopyright ℗ SOUND RECORDING COPYRIGHT */
-  { 0x0afc, 0x2038 }, /*                       caret ‸ CARET */
-  { 0x0afd, 0x201a }, /*          singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */
-  { 0x0afe, 0x201e }, /*          doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */
-/*  0x0aff                                    cursor ? ??? */
-  { 0x0ba3, 0x003c }, /*                   leftcaret < LESS-THAN SIGN */
-  { 0x0ba6, 0x003e }, /*                  rightcaret > GREATER-THAN SIGN */
-  { 0x0ba8, 0x2228 }, /*                   downcaret ∨ LOGICAL OR */
-  { 0x0ba9, 0x2227 }, /*                     upcaret ∧ LOGICAL AND */
-  { 0x0bc0, 0x00af }, /*                     overbar ¯ MACRON */
-  { 0x0bc2, 0x22a4 }, /*                    downtack ⊤ DOWN TACK */
-  { 0x0bc3, 0x2229 }, /*                      upshoe ∩ INTERSECTION */
-  { 0x0bc4, 0x230a }, /*                   downstile ⌊ LEFT FLOOR */
-  { 0x0bc6, 0x005f }, /*                    underbar _ LOW LINE */
-  { 0x0bca, 0x2218 }, /*                         jot ∘ RING OPERATOR */
-  { 0x0bcc, 0x2395 }, /*                        quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */
-  { 0x0bce, 0x22a5 }, /*                      uptack ⊥ UP TACK */
-  { 0x0bcf, 0x25cb }, /*                      circle ○ WHITE CIRCLE */
-  { 0x0bd3, 0x2308 }, /*                     upstile ⌈ LEFT CEILING */
-  { 0x0bd6, 0x222a }, /*                    downshoe ∪ UNION */
-  { 0x0bd8, 0x2283 }, /*                   rightshoe ⊃ SUPERSET OF */
-  { 0x0bda, 0x2282 }, /*                    leftshoe ⊂ SUBSET OF */
-  { 0x0bdc, 0x22a3 }, /*                    lefttack ⊣ LEFT TACK */
-  { 0x0bfc, 0x22a2 }, /*                   righttack ⊢ RIGHT TACK */
-  { 0x0cdf, 0x2017 }, /*        hebrew_doublelowline ‗ DOUBLE LOW LINE */
-  { 0x0ce0, 0x05d0 }, /*                hebrew_aleph א HEBREW LETTER ALEF */
-  { 0x0ce1, 0x05d1 }, /*                  hebrew_bet ב HEBREW LETTER BET */
-  { 0x0ce2, 0x05d2 }, /*                hebrew_gimel ג HEBREW LETTER GIMEL */
-  { 0x0ce3, 0x05d3 }, /*                hebrew_dalet ד HEBREW LETTER DALET */
-  { 0x0ce4, 0x05d4 }, /*                   hebrew_he ה HEBREW LETTER HE */
-  { 0x0ce5, 0x05d5 }, /*                  hebrew_waw ו HEBREW LETTER VAV */
-  { 0x0ce6, 0x05d6 }, /*                 hebrew_zain ז HEBREW LETTER ZAYIN */
-  { 0x0ce7, 0x05d7 }, /*                 hebrew_chet ח HEBREW LETTER HET */
-  { 0x0ce8, 0x05d8 }, /*                  hebrew_tet ט HEBREW LETTER TET */
-  { 0x0ce9, 0x05d9 }, /*                  hebrew_yod י HEBREW LETTER YOD */
-  { 0x0cea, 0x05da }, /*            hebrew_finalkaph ך HEBREW LETTER FINAL KAF */
-  { 0x0ceb, 0x05db }, /*                 hebrew_kaph כ HEBREW LETTER KAF */
-  { 0x0cec, 0x05dc }, /*                hebrew_lamed ל HEBREW LETTER LAMED */
-  { 0x0ced, 0x05dd }, /*             hebrew_finalmem ם HEBREW LETTER FINAL MEM */
-  { 0x0cee, 0x05de }, /*                  hebrew_mem מ HEBREW LETTER MEM */
-  { 0x0cef, 0x05df }, /*             hebrew_finalnun ן HEBREW LETTER FINAL NUN */
-  { 0x0cf0, 0x05e0 }, /*                  hebrew_nun נ HEBREW LETTER NUN */
-  { 0x0cf1, 0x05e1 }, /*               hebrew_samech ס HEBREW LETTER SAMEKH */
-  { 0x0cf2, 0x05e2 }, /*                 hebrew_ayin ע HEBREW LETTER AYIN */
-  { 0x0cf3, 0x05e3 }, /*              hebrew_finalpe ף HEBREW LETTER FINAL PE */
-  { 0x0cf4, 0x05e4 }, /*                   hebrew_pe פ HEBREW LETTER PE */
-  { 0x0cf5, 0x05e5 }, /*            hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */
-  { 0x0cf6, 0x05e6 }, /*                 hebrew_zade צ HEBREW LETTER TSADI */
-  { 0x0cf7, 0x05e7 }, /*                 hebrew_qoph ק HEBREW LETTER QOF */
-  { 0x0cf8, 0x05e8 }, /*                 hebrew_resh ר HEBREW LETTER RESH */
-  { 0x0cf9, 0x05e9 }, /*                 hebrew_shin ש HEBREW LETTER SHIN */
-  { 0x0cfa, 0x05ea }, /*                  hebrew_taw ת HEBREW LETTER TAV */
-  { 0x0da1, 0x0e01 }, /*                  Thai_kokai ก THAI CHARACTER KO KAI */
-  { 0x0da2, 0x0e02 }, /*                Thai_khokhai ข THAI CHARACTER KHO KHAI */
-  { 0x0da3, 0x0e03 }, /*               Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */
-  { 0x0da4, 0x0e04 }, /*               Thai_khokhwai ค THAI CHARACTER KHO KHWAI */
-  { 0x0da5, 0x0e05 }, /*                Thai_khokhon ฅ THAI CHARACTER KHO KHON */
-  { 0x0da6, 0x0e06 }, /*             Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */
-  { 0x0da7, 0x0e07 }, /*                 Thai_ngongu ง THAI CHARACTER NGO NGU */
-  { 0x0da8, 0x0e08 }, /*                Thai_chochan จ THAI CHARACTER CHO CHAN */
-  { 0x0da9, 0x0e09 }, /*               Thai_choching ฉ THAI CHARACTER CHO CHING */
-  { 0x0daa, 0x0e0a }, /*               Thai_chochang ช THAI CHARACTER CHO CHANG */
-  { 0x0dab, 0x0e0b }, /*                   Thai_soso ซ THAI CHARACTER SO SO */
-  { 0x0dac, 0x0e0c }, /*                Thai_chochoe ฌ THAI CHARACTER CHO CHOE */
-  { 0x0dad, 0x0e0d }, /*                 Thai_yoying ญ THAI CHARACTER YO YING */
-  { 0x0dae, 0x0e0e }, /*                Thai_dochada ฎ THAI CHARACTER DO CHADA */
-  { 0x0daf, 0x0e0f }, /*                Thai_topatak ฏ THAI CHARACTER TO PATAK */
-  { 0x0db0, 0x0e10 }, /*                Thai_thothan ฐ THAI CHARACTER THO THAN */
-  { 0x0db1, 0x0e11 }, /*          Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */
-  { 0x0db2, 0x0e12 }, /*             Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */
-  { 0x0db3, 0x0e13 }, /*                  Thai_nonen ณ THAI CHARACTER NO NEN */
-  { 0x0db4, 0x0e14 }, /*                  Thai_dodek ด THAI CHARACTER DO DEK */
-  { 0x0db5, 0x0e15 }, /*                  Thai_totao ต THAI CHARACTER TO TAO */
-  { 0x0db6, 0x0e16 }, /*               Thai_thothung ถ THAI CHARACTER THO THUNG */
-  { 0x0db7, 0x0e17 }, /*              Thai_thothahan ท THAI CHARACTER THO THAHAN */
-  { 0x0db8, 0x0e18 }, /*               Thai_thothong ธ THAI CHARACTER THO THONG */
-  { 0x0db9, 0x0e19 }, /*                   Thai_nonu น THAI CHARACTER NO NU */
-  { 0x0dba, 0x0e1a }, /*               Thai_bobaimai บ THAI CHARACTER BO BAIMAI */
-  { 0x0dbb, 0x0e1b }, /*                  Thai_popla ป THAI CHARACTER PO PLA */
-  { 0x0dbc, 0x0e1c }, /*               Thai_phophung ผ THAI CHARACTER PHO PHUNG */
-  { 0x0dbd, 0x0e1d }, /*                   Thai_fofa ฝ THAI CHARACTER FO FA */
-  { 0x0dbe, 0x0e1e }, /*                Thai_phophan พ THAI CHARACTER PHO PHAN */
-  { 0x0dbf, 0x0e1f }, /*                  Thai_fofan ฟ THAI CHARACTER FO FAN */
-  { 0x0dc0, 0x0e20 }, /*             Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */
-  { 0x0dc1, 0x0e21 }, /*                   Thai_moma ม THAI CHARACTER MO MA */
-  { 0x0dc2, 0x0e22 }, /*                  Thai_yoyak ย THAI CHARACTER YO YAK */
-  { 0x0dc3, 0x0e23 }, /*                  Thai_rorua ร THAI CHARACTER RO RUA */
-  { 0x0dc4, 0x0e24 }, /*                     Thai_ru ฤ THAI CHARACTER RU */
-  { 0x0dc5, 0x0e25 }, /*                 Thai_loling ล THAI CHARACTER LO LING */
-  { 0x0dc6, 0x0e26 }, /*                     Thai_lu ฦ THAI CHARACTER LU */
-  { 0x0dc7, 0x0e27 }, /*                 Thai_wowaen ว THAI CHARACTER WO WAEN */
-  { 0x0dc8, 0x0e28 }, /*                 Thai_sosala ศ THAI CHARACTER SO SALA */
-  { 0x0dc9, 0x0e29 }, /*                 Thai_sorusi ษ THAI CHARACTER SO RUSI */
-  { 0x0dca, 0x0e2a }, /*                  Thai_sosua ส THAI CHARACTER SO SUA */
-  { 0x0dcb, 0x0e2b }, /*                  Thai_hohip ห THAI CHARACTER HO HIP */
-  { 0x0dcc, 0x0e2c }, /*                Thai_lochula ฬ THAI CHARACTER LO CHULA */
-  { 0x0dcd, 0x0e2d }, /*                   Thai_oang อ THAI CHARACTER O ANG */
-  { 0x0dce, 0x0e2e }, /*               Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */
-  { 0x0dcf, 0x0e2f }, /*              Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */
-  { 0x0dd0, 0x0e30 }, /*                  Thai_saraa ะ THAI CHARACTER SARA A */
-  { 0x0dd1, 0x0e31 }, /*             Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */
-  { 0x0dd2, 0x0e32 }, /*                 Thai_saraaa า THAI CHARACTER SARA AA */
-  { 0x0dd3, 0x0e33 }, /*                 Thai_saraam ำ THAI CHARACTER SARA AM */
-  { 0x0dd4, 0x0e34 }, /*                  Thai_sarai ิ THAI CHARACTER SARA I */
-  { 0x0dd5, 0x0e35 }, /*                 Thai_saraii ี THAI CHARACTER SARA II */
-  { 0x0dd6, 0x0e36 }, /*                 Thai_saraue ึ THAI CHARACTER SARA UE */
-  { 0x0dd7, 0x0e37 }, /*                Thai_sarauee ื THAI CHARACTER SARA UEE */
-  { 0x0dd8, 0x0e38 }, /*                  Thai_sarau ุ THAI CHARACTER SARA U */
-  { 0x0dd9, 0x0e39 }, /*                 Thai_sarauu ู THAI CHARACTER SARA UU */
-  { 0x0dda, 0x0e3a }, /*                Thai_phinthu ฺ THAI CHARACTER PHINTHU */
-  { 0x0dde, 0x0e3e }, /*      Thai_maihanakat_maitho ฾ ??? */
-  { 0x0ddf, 0x0e3f }, /*                   Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */
-  { 0x0de0, 0x0e40 }, /*                  Thai_sarae เ THAI CHARACTER SARA E */
-  { 0x0de1, 0x0e41 }, /*                 Thai_saraae แ THAI CHARACTER SARA AE */
-  { 0x0de2, 0x0e42 }, /*                  Thai_sarao โ THAI CHARACTER SARA O */
-  { 0x0de3, 0x0e43 }, /*          Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */
-  { 0x0de4, 0x0e44 }, /*         Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */
-  { 0x0de5, 0x0e45 }, /*            Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */
-  { 0x0de6, 0x0e46 }, /*               Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */
-  { 0x0de7, 0x0e47 }, /*              Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */
-  { 0x0de8, 0x0e48 }, /*                  Thai_maiek ่ THAI CHARACTER MAI EK */
-  { 0x0de9, 0x0e49 }, /*                 Thai_maitho ้ THAI CHARACTER MAI THO */
-  { 0x0dea, 0x0e4a }, /*                 Thai_maitri ๊ THAI CHARACTER MAI TRI */
-  { 0x0deb, 0x0e4b }, /*            Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */
-  { 0x0dec, 0x0e4c }, /*            Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */
-  { 0x0ded, 0x0e4d }, /*               Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */
-  { 0x0df0, 0x0e50 }, /*                 Thai_leksun ๐ THAI DIGIT ZERO */
-  { 0x0df1, 0x0e51 }, /*                Thai_leknung ๑ THAI DIGIT ONE */
-  { 0x0df2, 0x0e52 }, /*                Thai_leksong ๒ THAI DIGIT TWO */
-  { 0x0df3, 0x0e53 }, /*                 Thai_leksam ๓ THAI DIGIT THREE */
-  { 0x0df4, 0x0e54 }, /*                  Thai_leksi ๔ THAI DIGIT FOUR */
-  { 0x0df5, 0x0e55 }, /*                  Thai_lekha ๕ THAI DIGIT FIVE */
-  { 0x0df6, 0x0e56 }, /*                 Thai_lekhok ๖ THAI DIGIT SIX */
-  { 0x0df7, 0x0e57 }, /*                Thai_lekchet ๗ THAI DIGIT SEVEN */
-  { 0x0df8, 0x0e58 }, /*                Thai_lekpaet ๘ THAI DIGIT EIGHT */
-  { 0x0df9, 0x0e59 }, /*                 Thai_lekkao ๙ THAI DIGIT NINE */
-  { 0x0ea1, 0x3131 }, /*               Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */
-  { 0x0ea2, 0x3132 }, /*          Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */
-  { 0x0ea3, 0x3133 }, /*           Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */
-  { 0x0ea4, 0x3134 }, /*                Hangul_Nieun ㄴ HANGUL LETTER NIEUN */
-  { 0x0ea5, 0x3135 }, /*           Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */
-  { 0x0ea6, 0x3136 }, /*           Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */
-  { 0x0ea7, 0x3137 }, /*               Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */
-  { 0x0ea8, 0x3138 }, /*          Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */
-  { 0x0ea9, 0x3139 }, /*                Hangul_Rieul ㄹ HANGUL LETTER RIEUL */
-  { 0x0eaa, 0x313a }, /*          Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */
-  { 0x0eab, 0x313b }, /*           Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */
-  { 0x0eac, 0x313c }, /*           Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */
-  { 0x0ead, 0x313d }, /*            Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */
-  { 0x0eae, 0x313e }, /*           Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */
-  { 0x0eaf, 0x313f }, /*          Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */
-  { 0x0eb0, 0x3140 }, /*           Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */
-  { 0x0eb1, 0x3141 }, /*                Hangul_Mieum ㅁ HANGUL LETTER MIEUM */
-  { 0x0eb2, 0x3142 }, /*                Hangul_Pieub ㅂ HANGUL LETTER PIEUP */
-  { 0x0eb3, 0x3143 }, /*           Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */
-  { 0x0eb4, 0x3144 }, /*            Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */
-  { 0x0eb5, 0x3145 }, /*                 Hangul_Sios ㅅ HANGUL LETTER SIOS */
-  { 0x0eb6, 0x3146 }, /*            Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */
-  { 0x0eb7, 0x3147 }, /*                Hangul_Ieung ㅇ HANGUL LETTER IEUNG */
-  { 0x0eb8, 0x3148 }, /*                Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */
-  { 0x0eb9, 0x3149 }, /*           Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */
-  { 0x0eba, 0x314a }, /*                Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */
-  { 0x0ebb, 0x314b }, /*               Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */
-  { 0x0ebc, 0x314c }, /*                Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */
-  { 0x0ebd, 0x314d }, /*               Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */
-  { 0x0ebe, 0x314e }, /*                Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */
-  { 0x0ebf, 0x314f }, /*                    Hangul_A ㅏ HANGUL LETTER A */
-  { 0x0ec0, 0x3150 }, /*                   Hangul_AE ㅐ HANGUL LETTER AE */
-  { 0x0ec1, 0x3151 }, /*                   Hangul_YA ㅑ HANGUL LETTER YA */
-  { 0x0ec2, 0x3152 }, /*                  Hangul_YAE ㅒ HANGUL LETTER YAE */
-  { 0x0ec3, 0x3153 }, /*                   Hangul_EO ㅓ HANGUL LETTER EO */
-  { 0x0ec4, 0x3154 }, /*                    Hangul_E ㅔ HANGUL LETTER E */
-  { 0x0ec5, 0x3155 }, /*                  Hangul_YEO ㅕ HANGUL LETTER YEO */
-  { 0x0ec6, 0x3156 }, /*                   Hangul_YE ㅖ HANGUL LETTER YE */
-  { 0x0ec7, 0x3157 }, /*                    Hangul_O ㅗ HANGUL LETTER O */
-  { 0x0ec8, 0x3158 }, /*                   Hangul_WA ㅘ HANGUL LETTER WA */
-  { 0x0ec9, 0x3159 }, /*                  Hangul_WAE ㅙ HANGUL LETTER WAE */
-  { 0x0eca, 0x315a }, /*                   Hangul_OE ㅚ HANGUL LETTER OE */
-  { 0x0ecb, 0x315b }, /*                   Hangul_YO ㅛ HANGUL LETTER YO */
-  { 0x0ecc, 0x315c }, /*                    Hangul_U ㅜ HANGUL LETTER U */
-  { 0x0ecd, 0x315d }, /*                  Hangul_WEO ㅝ HANGUL LETTER WEO */
-  { 0x0ece, 0x315e }, /*                   Hangul_WE ㅞ HANGUL LETTER WE */
-  { 0x0ecf, 0x315f }, /*                   Hangul_WI ㅟ HANGUL LETTER WI */
-  { 0x0ed0, 0x3160 }, /*                   Hangul_YU ㅠ HANGUL LETTER YU */
-  { 0x0ed1, 0x3161 }, /*                   Hangul_EU ㅡ HANGUL LETTER EU */
-  { 0x0ed2, 0x3162 }, /*                   Hangul_YI ㅢ HANGUL LETTER YI */
-  { 0x0ed3, 0x3163 }, /*                    Hangul_I ㅣ HANGUL LETTER I */
-  { 0x0ed4, 0x11a8 }, /*             Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */
-  { 0x0ed5, 0x11a9 }, /*        Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */
-  { 0x0ed6, 0x11aa }, /*         Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */
-  { 0x0ed7, 0x11ab }, /*              Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */
-  { 0x0ed8, 0x11ac }, /*         Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */
-  { 0x0ed9, 0x11ad }, /*         Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */
-  { 0x0eda, 0x11ae }, /*             Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */
-  { 0x0edb, 0x11af }, /*              Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */
-  { 0x0edc, 0x11b0 }, /*        Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */
-  { 0x0edd, 0x11b1 }, /*         Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */
-  { 0x0ede, 0x11b2 }, /*         Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */
-  { 0x0edf, 0x11b3 }, /*          Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */
-  { 0x0ee0, 0x11b4 }, /*         Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */
-  { 0x0ee1, 0x11b5 }, /*        Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */
-  { 0x0ee2, 0x11b6 }, /*         Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */
-  { 0x0ee3, 0x11b7 }, /*              Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */
-  { 0x0ee4, 0x11b8 }, /*              Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */
-  { 0x0ee5, 0x11b9 }, /*          Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */
-  { 0x0ee6, 0x11ba }, /*               Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */
-  { 0x0ee7, 0x11bb }, /*          Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */
-  { 0x0ee8, 0x11bc }, /*              Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */
-  { 0x0ee9, 0x11bd }, /*              Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */
-  { 0x0eea, 0x11be }, /*              Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */
-  { 0x0eeb, 0x11bf }, /*             Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */
-  { 0x0eec, 0x11c0 }, /*              Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */
-  { 0x0eed, 0x11c1 }, /*             Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */
-  { 0x0eee, 0x11c2 }, /*              Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */
-  { 0x0eef, 0x316d }, /*     Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */
-  { 0x0ef0, 0x3171 }, /*    Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */
-  { 0x0ef1, 0x3178 }, /*    Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */
-  { 0x0ef2, 0x317f }, /*              Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */
-/*  0x0ef3                  Hangul_KkogjiDalrinIeung ? ??? */
-  { 0x0ef4, 0x3184 }, /*   Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */
-  { 0x0ef5, 0x3186 }, /*          Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */
-  { 0x0ef6, 0x318d }, /*                Hangul_AraeA ㆍ HANGUL LETTER ARAEA */
-  { 0x0ef7, 0x318e }, /*               Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */
-  { 0x0ef8, 0x11eb }, /*            Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */
-/*  0x0ef9                Hangul_J_KkogjiDalrinIeung ? ??? */
-  { 0x0efa, 0x11f9 }, /*        Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */
-  { 0x0eff, 0x20a9 }, /*                  Korean_Won ₩ WON SIGN */
-  { 0x13bc, 0x0152 }, /*                          OE Œ LATIN CAPITAL LIGATURE OE */
-  { 0x13bd, 0x0153 }, /*                          oe œ LATIN SMALL LIGATURE OE */
-  { 0x13be, 0x0178 }, /*                  Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */
-  { 0x20a0, 0x20a0 }, /*                     EcuSign ₠ EURO-CURRENCY SIGN */
-  { 0x20a1, 0x20a1 }, /*                   ColonSign ₡ COLON SIGN */
-  { 0x20a2, 0x20a2 }, /*                CruzeiroSign ₢ CRUZEIRO SIGN */
-  { 0x20a3, 0x20a3 }, /*                  FFrancSign ₣ FRENCH FRANC SIGN */
-  { 0x20a4, 0x20a4 }, /*                    LiraSign ₤ LIRA SIGN */
-  { 0x20a5, 0x20a5 }, /*                    MillSign ₥ MILL SIGN */
-  { 0x20a6, 0x20a6 }, /*                   NairaSign ₦ NAIRA SIGN */
-  { 0x20a7, 0x20a7 }, /*                  PesetaSign ₧ PESETA SIGN */
-  { 0x20a8, 0x20a8 }, /*                   RupeeSign ₨ RUPEE SIGN */
-  { 0x20a9, 0x20a9 }, /*                     WonSign ₩ WON SIGN */
-  { 0x20aa, 0x20aa }, /*               NewSheqelSign ₪ NEW SHEQEL SIGN */
-  { 0x20ab, 0x20ab }, /*                    DongSign ₫ DONG SIGN */
-  { 0x20ac, 0x20ac }, /*                    EuroSign € EURO SIGN */
-};
-
-static guint
-keyval_to_unicode (guint keysym)
-{
-  int min = 0;
-  int max = sizeof(k2utab) / sizeof(k2utab[0]) - 1;
-  int mid;
-
-  /* First check for Latin-1 characters (1:1 mapping) */
-  if ((keysym >= 0x0020 && keysym <= 0x007e) ||
-      (keysym >= 0x00a0 && keysym <= 0x00ff))
-    return keysym;
-
-  /* Also check for directly encoded 24-bit UCS characters */
-  if ((keysym & 0xff000000) == 0x01000000)
-    return keysym & 0x00ffffff;
-
-  /* binary search in table */
-  while (max >= min) {
-    mid = (min + max) / 2;
-    if (k2utab[mid].keysym < keysym)
-      min = mid + 1;
-    else if (k2utab[mid].keysym > keysym)
-      max = mid - 1;
-    else {
-      /* found it */
-      return k2utab[mid].ucs;
-    }
-  }
-  
-  /* No matching Unicode value found */
-  return -1;
-}
-
-#endif /* 0 */
-
-struct u2k {
-  unsigned short keysym;
-  unsigned short ucs;
-} u2ktab[] = {
-  { 0x0abd, 0x002e }, /*                decimalpoint . FULL STOP */
-  { 0x0ba3, 0x003c }, /*                   leftcaret < LESS-THAN SIGN */
-  { 0x0ba6, 0x003e }, /*                  rightcaret > GREATER-THAN SIGN */
-  { 0x0bc6, 0x005f }, /*                    underbar _ LOW LINE */
-  { 0x0bc0, 0x00af }, /*                     overbar ¯ MACRON */
-  { 0x03c0, 0x0100 }, /*                     Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */
-  { 0x03e0, 0x0101 }, /*                     amacron ā LATIN SMALL LETTER A WITH MACRON */
-  { 0x01c3, 0x0102 }, /*                      Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */
-  { 0x01e3, 0x0103 }, /*                      abreve ă LATIN SMALL LETTER A WITH BREVE */
-  { 0x01a1, 0x0104 }, /*                     Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */
-  { 0x01b1, 0x0105 }, /*                     aogonek ą LATIN SMALL LETTER A WITH OGONEK */
-  { 0x01c6, 0x0106 }, /*                      Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */
-  { 0x01e6, 0x0107 }, /*                      cacute ć LATIN SMALL LETTER C WITH ACUTE */
-  { 0x02c6, 0x0108 }, /*                 Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
-  { 0x02e6, 0x0109 }, /*                 ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */
-  { 0x02c5, 0x010a }, /*                   Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */
-  { 0x02e5, 0x010b }, /*                   cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */
-  { 0x01c8, 0x010c }, /*                      Ccaron Č LATIN CAPITAL LETTER C WITH CARON */
-  { 0x01e8, 0x010d }, /*                      ccaron č LATIN SMALL LETTER C WITH CARON */
-  { 0x01cf, 0x010e }, /*                      Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */
-  { 0x01ef, 0x010f }, /*                      dcaron ď LATIN SMALL LETTER D WITH CARON */
-  { 0x01d0, 0x0110 }, /*                     Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */
-  { 0x01f0, 0x0111 }, /*                     dstroke đ LATIN SMALL LETTER D WITH STROKE */
-  { 0x03aa, 0x0112 }, /*                     Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */
-  { 0x03ba, 0x0113 }, /*                     emacron ē LATIN SMALL LETTER E WITH MACRON */
-  { 0x03cc, 0x0116 }, /*                   Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */
-  { 0x03ec, 0x0117 }, /*                   eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */
-  { 0x01ca, 0x0118 }, /*                     Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */
-  { 0x01ea, 0x0119 }, /*                     eogonek ę LATIN SMALL LETTER E WITH OGONEK */
-  { 0x01cc, 0x011a }, /*                      Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */
-  { 0x01ec, 0x011b }, /*                      ecaron ě LATIN SMALL LETTER E WITH CARON */
-  { 0x02d8, 0x011c }, /*                 Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
-  { 0x02f8, 0x011d }, /*                 gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */
-  { 0x02ab, 0x011e }, /*                      Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */
-  { 0x02bb, 0x011f }, /*                      gbreve ğ LATIN SMALL LETTER G WITH BREVE */
-  { 0x02d5, 0x0120 }, /*                   Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */
-  { 0x02f5, 0x0121 }, /*                   gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */
-  { 0x03ab, 0x0122 }, /*                    Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */
-  { 0x03bb, 0x0123 }, /*                    gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */
-  { 0x02a6, 0x0124 }, /*                 Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
-  { 0x02b6, 0x0125 }, /*                 hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */
-  { 0x02a1, 0x0126 }, /*                     Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */
-  { 0x02b1, 0x0127 }, /*                     hstroke ħ LATIN SMALL LETTER H WITH STROKE */
-  { 0x03a5, 0x0128 }, /*                      Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */
-  { 0x03b5, 0x0129 }, /*                      itilde ĩ LATIN SMALL LETTER I WITH TILDE */
-  { 0x03cf, 0x012a }, /*                     Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */
-  { 0x03ef, 0x012b }, /*                     imacron ī LATIN SMALL LETTER I WITH MACRON */
-  { 0x03c7, 0x012e }, /*                     Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */
-  { 0x03e7, 0x012f }, /*                     iogonek į LATIN SMALL LETTER I WITH OGONEK */
-  { 0x02a9, 0x0130 }, /*                   Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */
-  { 0x02b9, 0x0131 }, /*                    idotless ı LATIN SMALL LETTER DOTLESS I */
-  { 0x02ac, 0x0134 }, /*                 Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
-  { 0x02bc, 0x0135 }, /*                 jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */
-  { 0x03d3, 0x0136 }, /*                    Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */
-  { 0x03f3, 0x0137 }, /*                    kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */
-  { 0x03a2, 0x0138 }, /*                         kra ĸ LATIN SMALL LETTER KRA */
-  { 0x01c5, 0x0139 }, /*                      Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */
-  { 0x01e5, 0x013a }, /*                      lacute ĺ LATIN SMALL LETTER L WITH ACUTE */
-  { 0x03a6, 0x013b }, /*                    Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */
-  { 0x03b6, 0x013c }, /*                    lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */
-  { 0x01a5, 0x013d }, /*                      Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */
-  { 0x01b5, 0x013e }, /*                      lcaron ľ LATIN SMALL LETTER L WITH CARON */
-  { 0x01a3, 0x0141 }, /*                     Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */
-  { 0x01b3, 0x0142 }, /*                     lstroke ł LATIN SMALL LETTER L WITH STROKE */
-  { 0x01d1, 0x0143 }, /*                      Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */
-  { 0x01f1, 0x0144 }, /*                      nacute ń LATIN SMALL LETTER N WITH ACUTE */
-  { 0x03d1, 0x0145 }, /*                    Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */
-  { 0x03f1, 0x0146 }, /*                    ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */
-  { 0x01d2, 0x0147 }, /*                      Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */
-  { 0x01f2, 0x0148 }, /*                      ncaron ň LATIN SMALL LETTER N WITH CARON */
-  { 0x03bd, 0x014a }, /*                         ENG Ŋ LATIN CAPITAL LETTER ENG */
-  { 0x03bf, 0x014b }, /*                         eng ŋ LATIN SMALL LETTER ENG */
-  { 0x03d2, 0x014c }, /*                     Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */
-  { 0x03f2, 0x014d }, /*                     omacron ō LATIN SMALL LETTER O WITH MACRON */
-  { 0x01d5, 0x0150 }, /*                Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
-  { 0x01f5, 0x0151 }, /*                odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */
-  { 0x13bc, 0x0152 }, /*                          OE Œ LATIN CAPITAL LIGATURE OE */
-  { 0x13bd, 0x0153 }, /*                          oe œ LATIN SMALL LIGATURE OE */
-  { 0x01c0, 0x0154 }, /*                      Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */
-  { 0x01e0, 0x0155 }, /*                      racute ŕ LATIN SMALL LETTER R WITH ACUTE */
-  { 0x03a3, 0x0156 }, /*                    Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */
-  { 0x03b3, 0x0157 }, /*                    rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */
-  { 0x01d8, 0x0158 }, /*                      Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */
-  { 0x01f8, 0x0159 }, /*                      rcaron ř LATIN SMALL LETTER R WITH CARON */
-  { 0x01a6, 0x015a }, /*                      Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */
-  { 0x01b6, 0x015b }, /*                      sacute ś LATIN SMALL LETTER S WITH ACUTE */
-  { 0x02de, 0x015c }, /*                 Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
-  { 0x02fe, 0x015d }, /*                 scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */
-  { 0x01aa, 0x015e }, /*                    Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */
-  { 0x01ba, 0x015f }, /*                    scedilla ş LATIN SMALL LETTER S WITH CEDILLA */
-  { 0x01a9, 0x0160 }, /*                      Scaron Š LATIN CAPITAL LETTER S WITH CARON */
-  { 0x01b9, 0x0161 }, /*                      scaron š LATIN SMALL LETTER S WITH CARON */
-  { 0x01de, 0x0162 }, /*                    Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */
-  { 0x01fe, 0x0163 }, /*                    tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */
-  { 0x01ab, 0x0164 }, /*                      Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */
-  { 0x01bb, 0x0165 }, /*                      tcaron ť LATIN SMALL LETTER T WITH CARON */
-  { 0x03ac, 0x0166 }, /*                      Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */
-  { 0x03bc, 0x0167 }, /*                      tslash ŧ LATIN SMALL LETTER T WITH STROKE */
-  { 0x03dd, 0x0168 }, /*                      Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */
-  { 0x03fd, 0x0169 }, /*                      utilde ũ LATIN SMALL LETTER U WITH TILDE */
-  { 0x03de, 0x016a }, /*                     Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */
-  { 0x03fe, 0x016b }, /*                     umacron ū LATIN SMALL LETTER U WITH MACRON */
-  { 0x02dd, 0x016c }, /*                      Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */
-  { 0x02fd, 0x016d }, /*                      ubreve ŭ LATIN SMALL LETTER U WITH BREVE */
-  { 0x01d9, 0x016e }, /*                       Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */
-  { 0x01f9, 0x016f }, /*                       uring ů LATIN SMALL LETTER U WITH RING ABOVE */
-  { 0x01db, 0x0170 }, /*                Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
-  { 0x01fb, 0x0171 }, /*                udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */
-  { 0x03d9, 0x0172 }, /*                     Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */
-  { 0x03f9, 0x0173 }, /*                     uogonek ų LATIN SMALL LETTER U WITH OGONEK */
-  { 0x13be, 0x0178 }, /*                  Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */
-  { 0x01ac, 0x0179 }, /*                      Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */
-  { 0x01bc, 0x017a }, /*                      zacute ź LATIN SMALL LETTER Z WITH ACUTE */
-  { 0x01af, 0x017b }, /*                   Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */
-  { 0x01bf, 0x017c }, /*                   zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */
-  { 0x01ae, 0x017d }, /*                      Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */
-  { 0x01be, 0x017e }, /*                      zcaron ž LATIN SMALL LETTER Z WITH CARON */
-  { 0x08f6, 0x0192 }, /*                    function ƒ LATIN SMALL LETTER F WITH HOOK */
-  { 0x01b7, 0x02c7 }, /*                       caron ˇ CARON */
-  { 0x01a2, 0x02d8 }, /*                       breve ˘ BREVE */
-  { 0x01ff, 0x02d9 }, /*                    abovedot ˙ DOT ABOVE */
-  { 0x01b2, 0x02db }, /*                      ogonek ˛ OGONEK */
-  { 0x01bd, 0x02dd }, /*                 doubleacute ˝ DOUBLE ACUTE ACCENT */
-  { 0x07ae, 0x0385 }, /*        Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */
-  { 0x07a1, 0x0386 }, /*           Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */
-  { 0x07a2, 0x0388 }, /*         Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */
-  { 0x07a3, 0x0389 }, /*             Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */
-  { 0x07a4, 0x038a }, /*            Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */
-  { 0x07a7, 0x038c }, /*         Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */
-  { 0x07a8, 0x038e }, /*         Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */
-  { 0x07ab, 0x038f }, /*           Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */
-  { 0x07b6, 0x0390 }, /*    Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
-  { 0x07c1, 0x0391 }, /*                 Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */
-  { 0x07c2, 0x0392 }, /*                  Greek_BETA Β GREEK CAPITAL LETTER BETA */
-  { 0x07c3, 0x0393 }, /*                 Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */
-  { 0x07c4, 0x0394 }, /*                 Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */
-  { 0x07c5, 0x0395 }, /*               Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */
-  { 0x07c6, 0x0396 }, /*                  Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */
-  { 0x07c7, 0x0397 }, /*                   Greek_ETA Η GREEK CAPITAL LETTER ETA */
-  { 0x07c8, 0x0398 }, /*                 Greek_THETA Θ GREEK CAPITAL LETTER THETA */
-  { 0x07c9, 0x0399 }, /*                  Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */
-  { 0x07ca, 0x039a }, /*                 Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */
-  { 0x07cb, 0x039b }, /*                Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */
-  { 0x07cc, 0x039c }, /*                    Greek_MU Μ GREEK CAPITAL LETTER MU */
-  { 0x07cd, 0x039d }, /*                    Greek_NU Ν GREEK CAPITAL LETTER NU */
-  { 0x07ce, 0x039e }, /*                    Greek_XI Ξ GREEK CAPITAL LETTER XI */
-  { 0x07cf, 0x039f }, /*               Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */
-  { 0x07d0, 0x03a0 }, /*                    Greek_PI Π GREEK CAPITAL LETTER PI */
-  { 0x07d1, 0x03a1 }, /*                   Greek_RHO Ρ GREEK CAPITAL LETTER RHO */
-  { 0x07d2, 0x03a3 }, /*                 Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */
-  { 0x07d4, 0x03a4 }, /*                   Greek_TAU Τ GREEK CAPITAL LETTER TAU */
-  { 0x07d5, 0x03a5 }, /*               Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */
-  { 0x07d6, 0x03a6 }, /*                   Greek_PHI Φ GREEK CAPITAL LETTER PHI */
-  { 0x07d7, 0x03a7 }, /*                   Greek_CHI Χ GREEK CAPITAL LETTER CHI */
-  { 0x07d8, 0x03a8 }, /*                   Greek_PSI Ψ GREEK CAPITAL LETTER PSI */
-  { 0x07d9, 0x03a9 }, /*                 Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */
-  { 0x07a5, 0x03aa }, /*         Greek_IOTAdiaeresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
-  { 0x07a9, 0x03ab }, /*       Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
-  { 0x07b1, 0x03ac }, /*           Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */
-  { 0x07b2, 0x03ad }, /*         Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */
-  { 0x07b3, 0x03ae }, /*             Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */
-  { 0x07b4, 0x03af }, /*            Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */
-  { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
-  { 0x07e1, 0x03b1 }, /*                 Greek_alpha α GREEK SMALL LETTER ALPHA */
-  { 0x07e2, 0x03b2 }, /*                  Greek_beta β GREEK SMALL LETTER BETA */
-  { 0x07e3, 0x03b3 }, /*                 Greek_gamma γ GREEK SMALL LETTER GAMMA */
-  { 0x07e4, 0x03b4 }, /*                 Greek_delta δ GREEK SMALL LETTER DELTA */
-  { 0x07e5, 0x03b5 }, /*               Greek_epsilon ε GREEK SMALL LETTER EPSILON */
-  { 0x07e6, 0x03b6 }, /*                  Greek_zeta ζ GREEK SMALL LETTER ZETA */
-  { 0x07e7, 0x03b7 }, /*                   Greek_eta η GREEK SMALL LETTER ETA */
-  { 0x07e8, 0x03b8 }, /*                 Greek_theta θ GREEK SMALL LETTER THETA */
-  { 0x07e9, 0x03b9 }, /*                  Greek_iota ι GREEK SMALL LETTER IOTA */
-  { 0x07ea, 0x03ba }, /*                 Greek_kappa κ GREEK SMALL LETTER KAPPA */
-  { 0x07eb, 0x03bb }, /*                Greek_lambda λ GREEK SMALL LETTER LAMDA */
-  { 0x07ec, 0x03bc }, /*                    Greek_mu μ GREEK SMALL LETTER MU */
-  { 0x07ed, 0x03bd }, /*                    Greek_nu ν GREEK SMALL LETTER NU */
-  { 0x07ee, 0x03be }, /*                    Greek_xi ξ GREEK SMALL LETTER XI */
-  { 0x07ef, 0x03bf }, /*               Greek_omicron ο GREEK SMALL LETTER OMICRON */
-  { 0x07f0, 0x03c0 }, /*                    Greek_pi π GREEK SMALL LETTER PI */
-  { 0x07f1, 0x03c1 }, /*                   Greek_rho ρ GREEK SMALL LETTER RHO */
-  { 0x07f3, 0x03c2 }, /*       Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */
-  { 0x07f2, 0x03c3 }, /*                 Greek_sigma σ GREEK SMALL LETTER SIGMA */
-  { 0x07f4, 0x03c4 }, /*                   Greek_tau τ GREEK SMALL LETTER TAU */
-  { 0x07f5, 0x03c5 }, /*               Greek_upsilon υ GREEK SMALL LETTER UPSILON */
-  { 0x07f6, 0x03c6 }, /*                   Greek_phi φ GREEK SMALL LETTER PHI */
-  { 0x07f7, 0x03c7 }, /*                   Greek_chi χ GREEK SMALL LETTER CHI */
-  { 0x07f8, 0x03c8 }, /*                   Greek_psi ψ GREEK SMALL LETTER PSI */
-  { 0x07f9, 0x03c9 }, /*                 Greek_omega ω GREEK SMALL LETTER OMEGA */
-  { 0x07b5, 0x03ca }, /*          Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */
-  { 0x07b9, 0x03cb }, /*       Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
-  { 0x07b7, 0x03cc }, /*         Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */
-  { 0x07b8, 0x03cd }, /*         Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */
-  { 0x07bb, 0x03ce }, /*           Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */
-  { 0x06b3, 0x0401 }, /*                 Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */
-  { 0x06b1, 0x0402 }, /*                 Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */
-  { 0x06b2, 0x0403 }, /*               Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */
-  { 0x06b4, 0x0404 }, /*                Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */
-  { 0x06b5, 0x0405 }, /*               Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */
-  { 0x06b6, 0x0406 }, /*                 Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
-  { 0x06b7, 0x0407 }, /*                Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */
-  { 0x06b8, 0x0408 }, /*                 Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */
-  { 0x06b9, 0x0409 }, /*                Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */
-  { 0x06ba, 0x040a }, /*                Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */
-  { 0x06bb, 0x040b }, /*                Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */
-  { 0x06bc, 0x040c }, /*               Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */
-  { 0x06be, 0x040e }, /*         Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */
-  { 0x06bf, 0x040f }, /*               Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */
-  { 0x06e1, 0x0410 }, /*                  Cyrillic_A А CYRILLIC CAPITAL LETTER A */
-  { 0x06e2, 0x0411 }, /*                 Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */
-  { 0x06f7, 0x0412 }, /*                 Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */
-  { 0x06e7, 0x0413 }, /*                Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */
-  { 0x06e4, 0x0414 }, /*                 Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */
-  { 0x06e5, 0x0415 }, /*                 Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */
-  { 0x06f6, 0x0416 }, /*                Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */
-  { 0x06fa, 0x0417 }, /*                 Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */
-  { 0x06e9, 0x0418 }, /*                  Cyrillic_I И CYRILLIC CAPITAL LETTER I */
-  { 0x06ea, 0x0419 }, /*             Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */
-  { 0x06eb, 0x041a }, /*                 Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */
-  { 0x06ec, 0x041b }, /*                 Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */
-  { 0x06ed, 0x041c }, /*                 Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */
-  { 0x06ee, 0x041d }, /*                 Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */
-  { 0x06ef, 0x041e }, /*                  Cyrillic_O О CYRILLIC CAPITAL LETTER O */
-  { 0x06f0, 0x041f }, /*                 Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */
-  { 0x06f2, 0x0420 }, /*                 Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */
-  { 0x06f3, 0x0421 }, /*                 Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */
-  { 0x06f4, 0x0422 }, /*                 Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */
-  { 0x06f5, 0x0423 }, /*                  Cyrillic_U У CYRILLIC CAPITAL LETTER U */
-  { 0x06e6, 0x0424 }, /*                 Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */
-  { 0x06e8, 0x0425 }, /*                 Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */
-  { 0x06e3, 0x0426 }, /*                Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */
-  { 0x06fe, 0x0427 }, /*                Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */
-  { 0x06fb, 0x0428 }, /*                Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */
-  { 0x06fd, 0x0429 }, /*              Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */
-  { 0x06ff, 0x042a }, /*           Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */
-  { 0x06f9, 0x042b }, /*               Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */
-  { 0x06f8, 0x042c }, /*           Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */
-  { 0x06fc, 0x042d }, /*                  Cyrillic_E Э CYRILLIC CAPITAL LETTER E */
-  { 0x06e0, 0x042e }, /*                 Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */
-  { 0x06f1, 0x042f }, /*                 Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */
-  { 0x06c1, 0x0430 }, /*                  Cyrillic_a а CYRILLIC SMALL LETTER A */
-  { 0x06c2, 0x0431 }, /*                 Cyrillic_be б CYRILLIC SMALL LETTER BE */
-  { 0x06d7, 0x0432 }, /*                 Cyrillic_ve в CYRILLIC SMALL LETTER VE */
-  { 0x06c7, 0x0433 }, /*                Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */
-  { 0x06c4, 0x0434 }, /*                 Cyrillic_de д CYRILLIC SMALL LETTER DE */
-  { 0x06c5, 0x0435 }, /*                 Cyrillic_ie е CYRILLIC SMALL LETTER IE */
-  { 0x06d6, 0x0436 }, /*                Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */
-  { 0x06da, 0x0437 }, /*                 Cyrillic_ze з CYRILLIC SMALL LETTER ZE */
-  { 0x06c9, 0x0438 }, /*                  Cyrillic_i и CYRILLIC SMALL LETTER I */
-  { 0x06ca, 0x0439 }, /*             Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */
-  { 0x06cb, 0x043a }, /*                 Cyrillic_ka к CYRILLIC SMALL LETTER KA */
-  { 0x06cc, 0x043b }, /*                 Cyrillic_el л CYRILLIC SMALL LETTER EL */
-  { 0x06cd, 0x043c }, /*                 Cyrillic_em м CYRILLIC SMALL LETTER EM */
-  { 0x06ce, 0x043d }, /*                 Cyrillic_en н CYRILLIC SMALL LETTER EN */
-  { 0x06cf, 0x043e }, /*                  Cyrillic_o о CYRILLIC SMALL LETTER O */
-  { 0x06d0, 0x043f }, /*                 Cyrillic_pe п CYRILLIC SMALL LETTER PE */
-  { 0x06d2, 0x0440 }, /*                 Cyrillic_er р CYRILLIC SMALL LETTER ER */
-  { 0x06d3, 0x0441 }, /*                 Cyrillic_es с CYRILLIC SMALL LETTER ES */
-  { 0x06d4, 0x0442 }, /*                 Cyrillic_te т CYRILLIC SMALL LETTER TE */
-  { 0x06d5, 0x0443 }, /*                  Cyrillic_u у CYRILLIC SMALL LETTER U */
-  { 0x06c6, 0x0444 }, /*                 Cyrillic_ef ф CYRILLIC SMALL LETTER EF */
-  { 0x06c8, 0x0445 }, /*                 Cyrillic_ha х CYRILLIC SMALL LETTER HA */
-  { 0x06c3, 0x0446 }, /*                Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */
-  { 0x06de, 0x0447 }, /*                Cyrillic_che ч CYRILLIC SMALL LETTER CHE */
-  { 0x06db, 0x0448 }, /*                Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */
-  { 0x06dd, 0x0449 }, /*              Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */
-  { 0x06df, 0x044a }, /*           Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */
-  { 0x06d9, 0x044b }, /*               Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */
-  { 0x06d8, 0x044c }, /*           Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */
-  { 0x06dc, 0x044d }, /*                  Cyrillic_e э CYRILLIC SMALL LETTER E */
-  { 0x06c0, 0x044e }, /*                 Cyrillic_yu ю CYRILLIC SMALL LETTER YU */
-  { 0x06d1, 0x044f }, /*                 Cyrillic_ya я CYRILLIC SMALL LETTER YA */
-  { 0x06a3, 0x0451 }, /*                 Cyrillic_io ё CYRILLIC SMALL LETTER IO */
-  { 0x06a1, 0x0452 }, /*                 Serbian_dje ђ CYRILLIC SMALL LETTER DJE */
-  { 0x06a2, 0x0453 }, /*               Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */
-  { 0x06a4, 0x0454 }, /*                Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */
-  { 0x06a5, 0x0455 }, /*               Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */
-  { 0x06a6, 0x0456 }, /*                 Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
-  { 0x06a7, 0x0457 }, /*                Ukrainian_yi ї CYRILLIC SMALL LETTER YI */
-  { 0x06a8, 0x0458 }, /*                 Cyrillic_je ј CYRILLIC SMALL LETTER JE */
-  { 0x06a9, 0x0459 }, /*                Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */
-  { 0x06aa, 0x045a }, /*                Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */
-  { 0x06ab, 0x045b }, /*                Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */
-  { 0x06ac, 0x045c }, /*               Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */
-  { 0x06ae, 0x045e }, /*         Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */
-  { 0x06af, 0x045f }, /*               Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */
-  { 0x0ce0, 0x05d0 }, /*                hebrew_aleph א HEBREW LETTER ALEF */
-  { 0x0ce1, 0x05d1 }, /*                  hebrew_bet ב HEBREW LETTER BET */
-  { 0x0ce2, 0x05d2 }, /*                hebrew_gimel ג HEBREW LETTER GIMEL */
-  { 0x0ce3, 0x05d3 }, /*                hebrew_dalet ד HEBREW LETTER DALET */
-  { 0x0ce4, 0x05d4 }, /*                   hebrew_he ה HEBREW LETTER HE */
-  { 0x0ce5, 0x05d5 }, /*                  hebrew_waw ו HEBREW LETTER VAV */
-  { 0x0ce6, 0x05d6 }, /*                 hebrew_zain ז HEBREW LETTER ZAYIN */
-  { 0x0ce7, 0x05d7 }, /*                 hebrew_chet ח HEBREW LETTER HET */
-  { 0x0ce8, 0x05d8 }, /*                  hebrew_tet ט HEBREW LETTER TET */
-  { 0x0ce9, 0x05d9 }, /*                  hebrew_yod י HEBREW LETTER YOD */
-  { 0x0cea, 0x05da }, /*            hebrew_finalkaph ך HEBREW LETTER FINAL KAF */
-  { 0x0ceb, 0x05db }, /*                 hebrew_kaph כ HEBREW LETTER KAF */
-  { 0x0cec, 0x05dc }, /*                hebrew_lamed ל HEBREW LETTER LAMED */
-  { 0x0ced, 0x05dd }, /*             hebrew_finalmem ם HEBREW LETTER FINAL MEM */
-  { 0x0cee, 0x05de }, /*                  hebrew_mem מ HEBREW LETTER MEM */
-  { 0x0cef, 0x05df }, /*             hebrew_finalnun ן HEBREW LETTER FINAL NUN */
-  { 0x0cf0, 0x05e0 }, /*                  hebrew_nun נ HEBREW LETTER NUN */
-  { 0x0cf1, 0x05e1 }, /*               hebrew_samech ס HEBREW LETTER SAMEKH */
-  { 0x0cf2, 0x05e2 }, /*                 hebrew_ayin ע HEBREW LETTER AYIN */
-  { 0x0cf3, 0x05e3 }, /*              hebrew_finalpe ף HEBREW LETTER FINAL PE */
-  { 0x0cf4, 0x05e4 }, /*                   hebrew_pe פ HEBREW LETTER PE */
-  { 0x0cf5, 0x05e5 }, /*            hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */
-  { 0x0cf6, 0x05e6 }, /*                 hebrew_zade צ HEBREW LETTER TSADI */
-  { 0x0cf7, 0x05e7 }, /*                 hebrew_qoph ק HEBREW LETTER QOF */
-  { 0x0cf8, 0x05e8 }, /*                 hebrew_resh ר HEBREW LETTER RESH */
-  { 0x0cf9, 0x05e9 }, /*                 hebrew_shin ש HEBREW LETTER SHIN */
-  { 0x0cfa, 0x05ea }, /*                  hebrew_taw ת HEBREW LETTER TAV */
-  { 0x05ac, 0x060c }, /*                Arabic_comma ، ARABIC COMMA */
-  { 0x05bb, 0x061b }, /*            Arabic_semicolon ؛ ARABIC SEMICOLON */
-  { 0x05bf, 0x061f }, /*        Arabic_question_mark ؟ ARABIC QUESTION MARK */
-  { 0x05c1, 0x0621 }, /*                Arabic_hamza ء ARABIC LETTER HAMZA */
-  { 0x05c2, 0x0622 }, /*          Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */
-  { 0x05c3, 0x0623 }, /*          Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */
-  { 0x05c4, 0x0624 }, /*           Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */
-  { 0x05c5, 0x0625 }, /*       Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */
-  { 0x05c6, 0x0626 }, /*           Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */
-  { 0x05c7, 0x0627 }, /*                 Arabic_alef ا ARABIC LETTER ALEF */
-  { 0x05c8, 0x0628 }, /*                  Arabic_beh ب ARABIC LETTER BEH */
-  { 0x05c9, 0x0629 }, /*           Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */
-  { 0x05ca, 0x062a }, /*                  Arabic_teh ت ARABIC LETTER TEH */
-  { 0x05cb, 0x062b }, /*                 Arabic_theh ث ARABIC LETTER THEH */
-  { 0x05cc, 0x062c }, /*                 Arabic_jeem ج ARABIC LETTER JEEM */
-  { 0x05cd, 0x062d }, /*                  Arabic_hah ح ARABIC LETTER HAH */
-  { 0x05ce, 0x062e }, /*                 Arabic_khah خ ARABIC LETTER KHAH */
-  { 0x05cf, 0x062f }, /*                  Arabic_dal د ARABIC LETTER DAL */
-  { 0x05d0, 0x0630 }, /*                 Arabic_thal ذ ARABIC LETTER THAL */
-  { 0x05d1, 0x0631 }, /*                   Arabic_ra ر ARABIC LETTER REH */
-  { 0x05d2, 0x0632 }, /*                 Arabic_zain ز ARABIC LETTER ZAIN */
-  { 0x05d3, 0x0633 }, /*                 Arabic_seen س ARABIC LETTER SEEN */
-  { 0x05d4, 0x0634 }, /*                Arabic_sheen ش ARABIC LETTER SHEEN */
-  { 0x05d5, 0x0635 }, /*                  Arabic_sad ص ARABIC LETTER SAD */
-  { 0x05d6, 0x0636 }, /*                  Arabic_dad ض ARABIC LETTER DAD */
-  { 0x05d7, 0x0637 }, /*                  Arabic_tah ط ARABIC LETTER TAH */
-  { 0x05d8, 0x0638 }, /*                  Arabic_zah ظ ARABIC LETTER ZAH */
-  { 0x05d9, 0x0639 }, /*                  Arabic_ain ع ARABIC LETTER AIN */
-  { 0x05da, 0x063a }, /*                Arabic_ghain غ ARABIC LETTER GHAIN */
-  { 0x05e0, 0x0640 }, /*              Arabic_tatweel ـ ARABIC TATWEEL */
-  { 0x05e1, 0x0641 }, /*                  Arabic_feh ف ARABIC LETTER FEH */
-  { 0x05e2, 0x0642 }, /*                  Arabic_qaf ق ARABIC LETTER QAF */
-  { 0x05e3, 0x0643 }, /*                  Arabic_kaf ك ARABIC LETTER KAF */
-  { 0x05e4, 0x0644 }, /*                  Arabic_lam ل ARABIC LETTER LAM */
-  { 0x05e5, 0x0645 }, /*                 Arabic_meem م ARABIC LETTER MEEM */
-  { 0x05e6, 0x0646 }, /*                 Arabic_noon ن ARABIC LETTER NOON */
-  { 0x05e7, 0x0647 }, /*                   Arabic_ha ه ARABIC LETTER HEH */
-  { 0x05e8, 0x0648 }, /*                  Arabic_waw و ARABIC LETTER WAW */
-  { 0x05e9, 0x0649 }, /*          Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */
-  { 0x05ea, 0x064a }, /*                  Arabic_yeh ي ARABIC LETTER YEH */
-  { 0x05eb, 0x064b }, /*             Arabic_fathatan ً ARABIC FATHATAN */
-  { 0x05ec, 0x064c }, /*             Arabic_dammatan ٌ ARABIC DAMMATAN */
-  { 0x05ed, 0x064d }, /*             Arabic_kasratan ٍ ARABIC KASRATAN */
-  { 0x05ee, 0x064e }, /*                Arabic_fatha َ ARABIC FATHA */
-  { 0x05ef, 0x064f }, /*                Arabic_damma ُ ARABIC DAMMA */
-  { 0x05f0, 0x0650 }, /*                Arabic_kasra ِ ARABIC KASRA */
-  { 0x05f1, 0x0651 }, /*               Arabic_shadda ّ ARABIC SHADDA */
-  { 0x05f2, 0x0652 }, /*                Arabic_sukun ْ ARABIC SUKUN */
-  { 0x0da1, 0x0e01 }, /*                  Thai_kokai ก THAI CHARACTER KO KAI */
-  { 0x0da2, 0x0e02 }, /*                Thai_khokhai ข THAI CHARACTER KHO KHAI */
-  { 0x0da3, 0x0e03 }, /*               Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */
-  { 0x0da4, 0x0e04 }, /*               Thai_khokhwai ค THAI CHARACTER KHO KHWAI */
-  { 0x0da5, 0x0e05 }, /*                Thai_khokhon ฅ THAI CHARACTER KHO KHON */
-  { 0x0da6, 0x0e06 }, /*             Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */
-  { 0x0da7, 0x0e07 }, /*                 Thai_ngongu ง THAI CHARACTER NGO NGU */
-  { 0x0da8, 0x0e08 }, /*                Thai_chochan จ THAI CHARACTER CHO CHAN */
-  { 0x0da9, 0x0e09 }, /*               Thai_choching ฉ THAI CHARACTER CHO CHING */
-  { 0x0daa, 0x0e0a }, /*               Thai_chochang ช THAI CHARACTER CHO CHANG */
-  { 0x0dab, 0x0e0b }, /*                   Thai_soso ซ THAI CHARACTER SO SO */
-  { 0x0dac, 0x0e0c }, /*                Thai_chochoe ฌ THAI CHARACTER CHO CHOE */
-  { 0x0dad, 0x0e0d }, /*                 Thai_yoying ญ THAI CHARACTER YO YING */
-  { 0x0dae, 0x0e0e }, /*                Thai_dochada ฎ THAI CHARACTER DO CHADA */
-  { 0x0daf, 0x0e0f }, /*                Thai_topatak ฏ THAI CHARACTER TO PATAK */
-  { 0x0db0, 0x0e10 }, /*                Thai_thothan ฐ THAI CHARACTER THO THAN */
-  { 0x0db1, 0x0e11 }, /*          Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */
-  { 0x0db2, 0x0e12 }, /*             Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */
-  { 0x0db3, 0x0e13 }, /*                  Thai_nonen ณ THAI CHARACTER NO NEN */
-  { 0x0db4, 0x0e14 }, /*                  Thai_dodek ด THAI CHARACTER DO DEK */
-  { 0x0db5, 0x0e15 }, /*                  Thai_totao ต THAI CHARACTER TO TAO */
-  { 0x0db6, 0x0e16 }, /*               Thai_thothung ถ THAI CHARACTER THO THUNG */
-  { 0x0db7, 0x0e17 }, /*              Thai_thothahan ท THAI CHARACTER THO THAHAN */
-  { 0x0db8, 0x0e18 }, /*               Thai_thothong ธ THAI CHARACTER THO THONG */
-  { 0x0db9, 0x0e19 }, /*                   Thai_nonu น THAI CHARACTER NO NU */
-  { 0x0dba, 0x0e1a }, /*               Thai_bobaimai บ THAI CHARACTER BO BAIMAI */
-  { 0x0dbb, 0x0e1b }, /*                  Thai_popla ป THAI CHARACTER PO PLA */
-  { 0x0dbc, 0x0e1c }, /*               Thai_phophung ผ THAI CHARACTER PHO PHUNG */
-  { 0x0dbd, 0x0e1d }, /*                   Thai_fofa ฝ THAI CHARACTER FO FA */
-  { 0x0dbe, 0x0e1e }, /*                Thai_phophan พ THAI CHARACTER PHO PHAN */
-  { 0x0dbf, 0x0e1f }, /*                  Thai_fofan ฟ THAI CHARACTER FO FAN */
-  { 0x0dc0, 0x0e20 }, /*             Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */
-  { 0x0dc1, 0x0e21 }, /*                   Thai_moma ม THAI CHARACTER MO MA */
-  { 0x0dc2, 0x0e22 }, /*                  Thai_yoyak ย THAI CHARACTER YO YAK */
-  { 0x0dc3, 0x0e23 }, /*                  Thai_rorua ร THAI CHARACTER RO RUA */
-  { 0x0dc4, 0x0e24 }, /*                     Thai_ru ฤ THAI CHARACTER RU */
-  { 0x0dc5, 0x0e25 }, /*                 Thai_loling ล THAI CHARACTER LO LING */
-  { 0x0dc6, 0x0e26 }, /*                     Thai_lu ฦ THAI CHARACTER LU */
-  { 0x0dc7, 0x0e27 }, /*                 Thai_wowaen ว THAI CHARACTER WO WAEN */
-  { 0x0dc8, 0x0e28 }, /*                 Thai_sosala ศ THAI CHARACTER SO SALA */
-  { 0x0dc9, 0x0e29 }, /*                 Thai_sorusi ษ THAI CHARACTER SO RUSI */
-  { 0x0dca, 0x0e2a }, /*                  Thai_sosua ส THAI CHARACTER SO SUA */
-  { 0x0dcb, 0x0e2b }, /*                  Thai_hohip ห THAI CHARACTER HO HIP */
-  { 0x0dcc, 0x0e2c }, /*                Thai_lochula ฬ THAI CHARACTER LO CHULA */
-  { 0x0dcd, 0x0e2d }, /*                   Thai_oang อ THAI CHARACTER O ANG */
-  { 0x0dce, 0x0e2e }, /*               Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */
-  { 0x0dcf, 0x0e2f }, /*              Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */
-  { 0x0dd0, 0x0e30 }, /*                  Thai_saraa ะ THAI CHARACTER SARA A */
-  { 0x0dd1, 0x0e31 }, /*             Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */
-  { 0x0dd2, 0x0e32 }, /*                 Thai_saraaa า THAI CHARACTER SARA AA */
-  { 0x0dd3, 0x0e33 }, /*                 Thai_saraam ำ THAI CHARACTER SARA AM */
-  { 0x0dd4, 0x0e34 }, /*                  Thai_sarai ิ THAI CHARACTER SARA I */
-  { 0x0dd5, 0x0e35 }, /*                 Thai_saraii ี THAI CHARACTER SARA II */
-  { 0x0dd6, 0x0e36 }, /*                 Thai_saraue ึ THAI CHARACTER SARA UE */
-  { 0x0dd7, 0x0e37 }, /*                Thai_sarauee ื THAI CHARACTER SARA UEE */
-  { 0x0dd8, 0x0e38 }, /*                  Thai_sarau ุ THAI CHARACTER SARA U */
-  { 0x0dd9, 0x0e39 }, /*                 Thai_sarauu ู THAI CHARACTER SARA UU */
-  { 0x0dda, 0x0e3a }, /*                Thai_phinthu ฺ THAI CHARACTER PHINTHU */
-  { 0x0ddf, 0x0e3f }, /*                   Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */
-  { 0x0de0, 0x0e40 }, /*                  Thai_sarae เ THAI CHARACTER SARA E */
-  { 0x0de1, 0x0e41 }, /*                 Thai_saraae แ THAI CHARACTER SARA AE */
-  { 0x0de2, 0x0e42 }, /*                  Thai_sarao โ THAI CHARACTER SARA O */
-  { 0x0de3, 0x0e43 }, /*          Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */
-  { 0x0de4, 0x0e44 }, /*         Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */
-  { 0x0de5, 0x0e45 }, /*            Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */
-  { 0x0de6, 0x0e46 }, /*               Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */
-  { 0x0de7, 0x0e47 }, /*              Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */
-  { 0x0de8, 0x0e48 }, /*                  Thai_maiek ่ THAI CHARACTER MAI EK */
-  { 0x0de9, 0x0e49 }, /*                 Thai_maitho ้ THAI CHARACTER MAI THO */
-  { 0x0dea, 0x0e4a }, /*                 Thai_maitri ๊ THAI CHARACTER MAI TRI */
-  { 0x0deb, 0x0e4b }, /*            Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */
-  { 0x0dec, 0x0e4c }, /*            Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */
-  { 0x0ded, 0x0e4d }, /*               Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */
-  { 0x0df0, 0x0e50 }, /*                 Thai_leksun ๐ THAI DIGIT ZERO */
-  { 0x0df1, 0x0e51 }, /*                Thai_leknung ๑ THAI DIGIT ONE */
-  { 0x0df2, 0x0e52 }, /*                Thai_leksong ๒ THAI DIGIT TWO */
-  { 0x0df3, 0x0e53 }, /*                 Thai_leksam ๓ THAI DIGIT THREE */
-  { 0x0df4, 0x0e54 }, /*                  Thai_leksi ๔ THAI DIGIT FOUR */
-  { 0x0df5, 0x0e55 }, /*                  Thai_lekha ๕ THAI DIGIT FIVE */
-  { 0x0df6, 0x0e56 }, /*                 Thai_lekhok ๖ THAI DIGIT SIX */
-  { 0x0df7, 0x0e57 }, /*                Thai_lekchet ๗ THAI DIGIT SEVEN */
-  { 0x0df8, 0x0e58 }, /*                Thai_lekpaet ๘ THAI DIGIT EIGHT */
-  { 0x0df9, 0x0e59 }, /*                 Thai_lekkao ๙ THAI DIGIT NINE */
-  { 0x0ed4, 0x11a8 }, /*             Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */
-  { 0x0ed5, 0x11a9 }, /*        Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */
-  { 0x0ed6, 0x11aa }, /*         Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */
-  { 0x0ed7, 0x11ab }, /*              Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */
-  { 0x0ed8, 0x11ac }, /*         Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */
-  { 0x0ed9, 0x11ad }, /*         Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */
-  { 0x0eda, 0x11ae }, /*             Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */
-  { 0x0edb, 0x11af }, /*              Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */
-  { 0x0edc, 0x11b0 }, /*        Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */
-  { 0x0edd, 0x11b1 }, /*         Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */
-  { 0x0ede, 0x11b2 }, /*         Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */
-  { 0x0edf, 0x11b3 }, /*          Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */
-  { 0x0ee0, 0x11b4 }, /*         Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */
-  { 0x0ee1, 0x11b5 }, /*        Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */
-  { 0x0ee2, 0x11b6 }, /*         Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */
-  { 0x0ee3, 0x11b7 }, /*              Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */
-  { 0x0ee4, 0x11b8 }, /*              Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */
-  { 0x0ee5, 0x11b9 }, /*          Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */
-  { 0x0ee6, 0x11ba }, /*               Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */
-  { 0x0ee7, 0x11bb }, /*          Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */
-  { 0x0ee8, 0x11bc }, /*              Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */
-  { 0x0ee9, 0x11bd }, /*              Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */
-  { 0x0eea, 0x11be }, /*              Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */
-  { 0x0eeb, 0x11bf }, /*             Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */
-  { 0x0eec, 0x11c0 }, /*              Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */
-  { 0x0eed, 0x11c1 }, /*             Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */
-  { 0x0eee, 0x11c2 }, /*              Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */
-  { 0x0ef8, 0x11eb }, /*            Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */
-  { 0x0efa, 0x11f9 }, /*        Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */
-  { 0x0aa2, 0x2002 }, /*                     enspace   EN SPACE */
-  { 0x0aa1, 0x2003 }, /*                     emspace   EM SPACE */
-  { 0x0aa3, 0x2004 }, /*                    em3space   THREE-PER-EM SPACE */
-  { 0x0aa4, 0x2005 }, /*                    em4space   FOUR-PER-EM SPACE */
-  { 0x0aa5, 0x2007 }, /*                  digitspace   FIGURE SPACE */
-  { 0x0aa6, 0x2008 }, /*                  punctspace   PUNCTUATION SPACE */
-  { 0x0aa7, 0x2009 }, /*                   thinspace   THIN SPACE */
-  { 0x0aa8, 0x200a }, /*                   hairspace   HAIR SPACE */
-  { 0x0abb, 0x2012 }, /*                     figdash ‒ FIGURE DASH */
-  { 0x0aaa, 0x2013 }, /*                      endash – EN DASH */
-  { 0x0aa9, 0x2014 }, /*                      emdash — EM DASH */
-  { 0x07af, 0x2015 }, /*              Greek_horizbar ― HORIZONTAL BAR */
-  { 0x0cdf, 0x2017 }, /*        hebrew_doublelowline ‗ DOUBLE LOW LINE */
-  { 0x0ad0, 0x2018 }, /*         leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */
-  { 0x0ad1, 0x2019 }, /*        rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */
-  { 0x0afd, 0x201a }, /*          singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */
-  { 0x0ad2, 0x201c }, /*         leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */
-  { 0x0ad3, 0x201d }, /*        rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */
-  { 0x0afe, 0x201e }, /*          doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */
-  { 0x0af1, 0x2020 }, /*                      dagger † DAGGER */
-  { 0x0af2, 0x2021 }, /*                doubledagger ‡ DOUBLE DAGGER */
-  { 0x0ae6, 0x2022 }, /*          enfilledcircbullet • BULLET */
-  { 0x0aae, 0x2026 }, /*                    ellipsis … HORIZONTAL ELLIPSIS */
-  { 0x0ad6, 0x2032 }, /*                     minutes ′ PRIME */
-  { 0x0ad7, 0x2033 }, /*                     seconds ″ DOUBLE PRIME */
-  { 0x0afc, 0x2038 }, /*                       caret ‸ CARET */
-  { 0x047e, 0x203e }, /*                    overline ‾ OVERLINE */
-  { 0x20a0, 0x20a0 }, /*                     EcuSign ₠ EURO-CURRENCY SIGN */
-  { 0x20a1, 0x20a1 }, /*                   ColonSign ₡ COLON SIGN */
-  { 0x20a2, 0x20a2 }, /*                CruzeiroSign ₢ CRUZEIRO SIGN */
-  { 0x20a3, 0x20a3 }, /*                  FFrancSign ₣ FRENCH FRANC SIGN */
-  { 0x20a4, 0x20a4 }, /*                    LiraSign ₤ LIRA SIGN */
-  { 0x20a5, 0x20a5 }, /*                    MillSign ₥ MILL SIGN */
-  { 0x20a6, 0x20a6 }, /*                   NairaSign ₦ NAIRA SIGN */
-  { 0x20a7, 0x20a7 }, /*                  PesetaSign ₧ PESETA SIGN */
-  { 0x20a8, 0x20a8 }, /*                   RupeeSign ₨ RUPEE SIGN */
-  { 0x0eff, 0x20a9 }, /*                  Korean_Won ₩ WON SIGN */
-  { 0x20a9, 0x20a9 }, /*                     WonSign ₩ WON SIGN */
-  { 0x20aa, 0x20aa }, /*               NewSheqelSign ₪ NEW SHEQEL SIGN */
-  { 0x20ab, 0x20ab }, /*                    DongSign ₫ DONG SIGN */
-  { 0x20ac, 0x20ac }, /*                    EuroSign € EURO SIGN */
-  { 0x0ab8, 0x2105 }, /*                      careof ℅ CARE OF */
-  { 0x06b0, 0x2116 }, /*                  numerosign № NUMERO SIGN */
-  { 0x0afb, 0x2117 }, /*         phonographcopyright ℗ SOUND RECORDING COPYRIGHT */
-  { 0x0ad4, 0x211e }, /*                prescription ℞ PRESCRIPTION TAKE */
-  { 0x0ac9, 0x2122 }, /*                   trademark ™ TRADE MARK SIGN */
-  { 0x0ab0, 0x2153 }, /*                    onethird ⅓ VULGAR FRACTION ONE THIRD */
-  { 0x0ab1, 0x2154 }, /*                   twothirds ⅔ VULGAR FRACTION TWO THIRDS */
-  { 0x0ab2, 0x2155 }, /*                    onefifth ⅕ VULGAR FRACTION ONE FIFTH */
-  { 0x0ab3, 0x2156 }, /*                   twofifths ⅖ VULGAR FRACTION TWO FIFTHS */
-  { 0x0ab4, 0x2157 }, /*                 threefifths ⅗ VULGAR FRACTION THREE FIFTHS */
-  { 0x0ab5, 0x2158 }, /*                  fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */
-  { 0x0ab6, 0x2159 }, /*                    onesixth ⅙ VULGAR FRACTION ONE SIXTH */
-  { 0x0ab7, 0x215a }, /*                  fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */
-  { 0x0ac3, 0x215b }, /*                   oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */
-  { 0x0ac4, 0x215c }, /*                threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */
-  { 0x0ac5, 0x215d }, /*                 fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */
-  { 0x0ac6, 0x215e }, /*                seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */
-  { 0x08fb, 0x2190 }, /*                   leftarrow ← LEFTWARDS ARROW */
-  { 0x08fc, 0x2191 }, /*                     uparrow ↑ UPWARDS ARROW */
-  { 0x08fd, 0x2192 }, /*                  rightarrow → RIGHTWARDS ARROW */
-  { 0x08fe, 0x2193 }, /*                   downarrow ↓ DOWNWARDS ARROW */
-  { 0x08ce, 0x21d2 }, /*                     implies ⇒ RIGHTWARDS DOUBLE ARROW */
-  { 0x08cd, 0x21d4 }, /*                    ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */
-  { 0x08ef, 0x2202 }, /*           partialderivative ∂ PARTIAL DIFFERENTIAL */
-  { 0x08c5, 0x2207 }, /*                       nabla ∇ NABLA */
-  { 0x0bca, 0x2218 }, /*                         jot ∘ RING OPERATOR */
-  { 0x08d6, 0x221a }, /*                     radical √ SQUARE ROOT */
-  { 0x08c1, 0x221d }, /*                   variation ∝ PROPORTIONAL TO */
-  { 0x08c2, 0x221e }, /*                    infinity ∞ INFINITY */
-  { 0x08de, 0x2227 }, /*                  logicaland ∧ LOGICAL AND */
-  { 0x0ba9, 0x2227 }, /*                     upcaret ∧ LOGICAL AND */
-  { 0x08df, 0x2228 }, /*                   logicalor ∨ LOGICAL OR */
-  { 0x0ba8, 0x2228 }, /*                   downcaret ∨ LOGICAL OR */
-  { 0x08dc, 0x2229 }, /*                intersection ∩ INTERSECTION */
-  { 0x0bc3, 0x2229 }, /*                      upshoe ∩ INTERSECTION */
-  { 0x08dd, 0x222a }, /*                       union ∪ UNION */
-  { 0x0bd6, 0x222a }, /*                    downshoe ∪ UNION */
-  { 0x08bf, 0x222b }, /*                    integral ∫ INTEGRAL */
-  { 0x08c0, 0x2234 }, /*                   therefore ∴ THEREFORE */
-  { 0x08c8, 0x2245 }, /*                 approximate ≅ APPROXIMATELY EQUAL TO */
-  { 0x08bd, 0x2260 }, /*                    notequal ≠ NOT EQUAL TO */
-  { 0x08cf, 0x2261 }, /*                   identical ≡ IDENTICAL TO */
-  { 0x08bc, 0x2264 }, /*               lessthanequal ≤ LESS-THAN OR EQUAL TO */
-  { 0x08be, 0x2265 }, /*            greaterthanequal ≥ GREATER-THAN OR EQUAL TO */
-  { 0x08da, 0x2282 }, /*                  includedin ⊂ SUBSET OF */
-  { 0x0bda, 0x2282 }, /*                    leftshoe ⊂ SUBSET OF */
-  { 0x08db, 0x2283 }, /*                    includes ⊃ SUPERSET OF */
-  { 0x0bd8, 0x2283 }, /*                   rightshoe ⊃ SUPERSET OF */
-  { 0x0bfc, 0x22a2 }, /*                   righttack ⊢ RIGHT TACK */
-  { 0x0bdc, 0x22a3 }, /*                    lefttack ⊣ LEFT TACK */
-  { 0x0bc2, 0x22a4 }, /*                    downtack ⊤ DOWN TACK */
-  { 0x0bce, 0x22a5 }, /*                      uptack ⊥ UP TACK */
-  { 0x0bd3, 0x2308 }, /*                     upstile ⌈ LEFT CEILING */
-  { 0x0bc4, 0x230a }, /*                   downstile ⌊ LEFT FLOOR */
-  { 0x0afa, 0x2315 }, /*           telephonerecorder ⌕ TELEPHONE RECORDER */
-  { 0x08a4, 0x2320 }, /*                 topintegral ⌠ TOP HALF INTEGRAL */
-  { 0x08a5, 0x2321 }, /*                 botintegral ⌡ BOTTOM HALF INTEGRAL */
-  { 0x0abc, 0x2329 }, /*            leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */
-  { 0x0abe, 0x232a }, /*           rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */
-  { 0x0bcc, 0x2395 }, /*                        quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */
-  { 0x09e2, 0x2409 }, /*                          ht ␉ SYMBOL FOR HORIZONTAL TABULATION */
-  { 0x09e5, 0x240a }, /*                          lf ␊ SYMBOL FOR LINE FEED */
-  { 0x09e9, 0x240b }, /*                          vt ␋ SYMBOL FOR VERTICAL TABULATION */
-  { 0x09e3, 0x240c }, /*                          ff ␌ SYMBOL FOR FORM FEED */
-  { 0x09e4, 0x240d }, /*                          cr ␍ SYMBOL FOR CARRIAGE RETURN */
-  { 0x09df, 0x2422 }, /*                       blank ␢ BLANK SYMBOL */
-  { 0x09e8, 0x2424 }, /*                          nl ␤ SYMBOL FOR NEWLINE */
-  { 0x09f1, 0x2500 }, /*              horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */
-  { 0x08a6, 0x2502 }, /*               vertconnector │ BOX DRAWINGS LIGHT VERTICAL */
-  { 0x09f8, 0x2502 }, /*                     vertbar │ BOX DRAWINGS LIGHT VERTICAL */
-  { 0x09ec, 0x250c }, /*                upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */
-  { 0x09eb, 0x2510 }, /*               uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */
-  { 0x09ed, 0x2514 }, /*               lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */
-  { 0x09ea, 0x2518 }, /*              lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */
-  { 0x09f4, 0x251c }, /*                       leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
-  { 0x09f5, 0x2524 }, /*                      rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */
-  { 0x09f7, 0x252c }, /*                        topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
-  { 0x09f6, 0x2534 }, /*                        bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */
-  { 0x09ee, 0x253c }, /*               crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
-  { 0x09e1, 0x2592 }, /*                checkerboard ▒ MEDIUM SHADE */
-  { 0x0adf, 0x25a0 }, /*                emfilledrect ■ BLACK SQUARE */
-  { 0x0acf, 0x25a1 }, /*             emopenrectangle □ WHITE SQUARE */
-  { 0x0ae7, 0x25aa }, /*            enfilledsqbullet ▪ BLACK SMALL SQUARE */
-  { 0x0ae1, 0x25ab }, /*          enopensquarebullet ▫ WHITE SMALL SQUARE */
-  { 0x0adb, 0x25ac }, /*            filledrectbullet ▬ BLACK RECTANGLE */
-  { 0x0ae2, 0x25ad }, /*              openrectbullet ▭ WHITE RECTANGLE */
-  { 0x0ae8, 0x25b2 }, /*           filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */
-  { 0x0ae3, 0x25b3 }, /*             opentribulletup △ WHITE UP-POINTING TRIANGLE */
-  { 0x0add, 0x25b6 }, /*        filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */
-  { 0x0acd, 0x25b7 }, /*           rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */
-  { 0x0ae9, 0x25bc }, /*         filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */
-  { 0x0ae4, 0x25bd }, /*           opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */
-  { 0x0adc, 0x25c0 }, /*         filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */
-  { 0x0acc, 0x25c1 }, /*            leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */
-  { 0x09e0, 0x25c6 }, /*                soliddiamond ◆ BLACK DIAMOND */
-  { 0x0ace, 0x25cb }, /*                emopencircle ○ WHITE CIRCLE */
-  { 0x0bcf, 0x25cb }, /*                      circle ○ WHITE CIRCLE */
-  { 0x0ade, 0x25cf }, /*              emfilledcircle ● BLACK CIRCLE */
-  { 0x0ae0, 0x25e6 }, /*            enopencircbullet ◦ WHITE BULLET */
-  { 0x0ae5, 0x2606 }, /*                    openstar ☆ WHITE STAR */
-  { 0x0af9, 0x260e }, /*                   telephone ☎ BLACK TELEPHONE */
-  { 0x0aca, 0x2613 }, /*               signaturemark ☓ SALTIRE */
-  { 0x0aea, 0x261c }, /*                 leftpointer ☜ WHITE LEFT POINTING INDEX */
-  { 0x0aeb, 0x261e }, /*                rightpointer ☞ WHITE RIGHT POINTING INDEX */
-  { 0x0af8, 0x2640 }, /*                femalesymbol ♀ FEMALE SIGN */
-  { 0x0af7, 0x2642 }, /*                  malesymbol ♂ MALE SIGN */
-  { 0x0aec, 0x2663 }, /*                        club ♣ BLACK CLUB SUIT */
-  { 0x0aee, 0x2665 }, /*                       heart ♥ BLACK HEART SUIT */
-  { 0x0aed, 0x2666 }, /*                     diamond ♦ BLACK DIAMOND SUIT */
-  { 0x0af6, 0x266d }, /*                 musicalflat ♭ MUSIC FLAT SIGN */
-  { 0x0af5, 0x266f }, /*                musicalsharp ♯ MUSIC SHARP SIGN */
-  { 0x0af3, 0x2713 }, /*                   checkmark ✓ CHECK MARK */
-  { 0x0af4, 0x2717 }, /*                 ballotcross ✗ BALLOT X */
-  { 0x0ad9, 0x271d }, /*                  latincross ✝ LATIN CROSS */
-  { 0x0af0, 0x2720 }, /*                maltesecross ✠ MALTESE CROSS */
-  { 0x04a4, 0x3001 }, /*                  kana_comma 、 IDEOGRAPHIC COMMA */
-  { 0x04a1, 0x3002 }, /*               kana_fullstop 。 IDEOGRAPHIC FULL STOP */
-  { 0x04a2, 0x300c }, /*         kana_openingbracket 「 LEFT CORNER BRACKET */
-  { 0x04a3, 0x300d }, /*         kana_closingbracket 」 RIGHT CORNER BRACKET */
-  { 0x04de, 0x309b }, /*                 voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */
-  { 0x04df, 0x309c }, /*             semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
-  { 0x04a7, 0x30a1 }, /*                      kana_a ァ KATAKANA LETTER SMALL A */
-  { 0x04b1, 0x30a2 }, /*                      kana_A ア KATAKANA LETTER A */
-  { 0x04a8, 0x30a3 }, /*                      kana_i ィ KATAKANA LETTER SMALL I */
-  { 0x04b2, 0x30a4 }, /*                      kana_I イ KATAKANA LETTER I */
-  { 0x04a9, 0x30a5 }, /*                      kana_u ゥ KATAKANA LETTER SMALL U */
-  { 0x04b3, 0x30a6 }, /*                      kana_U ウ KATAKANA LETTER U */
-  { 0x04aa, 0x30a7 }, /*                      kana_e ェ KATAKANA LETTER SMALL E */
-  { 0x04b4, 0x30a8 }, /*                      kana_E エ KATAKANA LETTER E */
-  { 0x04ab, 0x30a9 }, /*                      kana_o ォ KATAKANA LETTER SMALL O */
-  { 0x04b5, 0x30aa }, /*                      kana_O オ KATAKANA LETTER O */
-  { 0x04b6, 0x30ab }, /*                     kana_KA カ KATAKANA LETTER KA */
-  { 0x04b7, 0x30ad }, /*                     kana_KI キ KATAKANA LETTER KI */
-  { 0x04b8, 0x30af }, /*                     kana_KU ク KATAKANA LETTER KU */
-  { 0x04b9, 0x30b1 }, /*                     kana_KE ケ KATAKANA LETTER KE */
-  { 0x04ba, 0x30b3 }, /*                     kana_KO コ KATAKANA LETTER KO */
-  { 0x04bb, 0x30b5 }, /*                     kana_SA サ KATAKANA LETTER SA */
-  { 0x04bc, 0x30b7 }, /*                    kana_SHI シ KATAKANA LETTER SI */
-  { 0x04bd, 0x30b9 }, /*                     kana_SU ス KATAKANA LETTER SU */
-  { 0x04be, 0x30bb }, /*                     kana_SE セ KATAKANA LETTER SE */
-  { 0x04bf, 0x30bd }, /*                     kana_SO ソ KATAKANA LETTER SO */
-  { 0x04c0, 0x30bf }, /*                     kana_TA タ KATAKANA LETTER TA */
-  { 0x04c1, 0x30c1 }, /*                    kana_CHI チ KATAKANA LETTER TI */
-  { 0x04af, 0x30c3 }, /*                    kana_tsu ッ KATAKANA LETTER SMALL TU */
-  { 0x04c2, 0x30c4 }, /*                    kana_TSU ツ KATAKANA LETTER TU */
-  { 0x04c3, 0x30c6 }, /*                     kana_TE テ KATAKANA LETTER TE */
-  { 0x04c4, 0x30c8 }, /*                     kana_TO ト KATAKANA LETTER TO */
-  { 0x04c5, 0x30ca }, /*                     kana_NA ナ KATAKANA LETTER NA */
-  { 0x04c6, 0x30cb }, /*                     kana_NI ニ KATAKANA LETTER NI */
-  { 0x04c7, 0x30cc }, /*                     kana_NU ヌ KATAKANA LETTER NU */
-  { 0x04c8, 0x30cd }, /*                     kana_NE ネ KATAKANA LETTER NE */
-  { 0x04c9, 0x30ce }, /*                     kana_NO ノ KATAKANA LETTER NO */
-  { 0x04ca, 0x30cf }, /*                     kana_HA ハ KATAKANA LETTER HA */
-  { 0x04cb, 0x30d2 }, /*                     kana_HI ヒ KATAKANA LETTER HI */
-  { 0x04cc, 0x30d5 }, /*                     kana_FU フ KATAKANA LETTER HU */
-  { 0x04cd, 0x30d8 }, /*                     kana_HE ヘ KATAKANA LETTER HE */
-  { 0x04ce, 0x30db }, /*                     kana_HO ホ KATAKANA LETTER HO */
-  { 0x04cf, 0x30de }, /*                     kana_MA マ KATAKANA LETTER MA */
-  { 0x04d0, 0x30df }, /*                     kana_MI ミ KATAKANA LETTER MI */
-  { 0x04d1, 0x30e0 }, /*                     kana_MU ム KATAKANA LETTER MU */
-  { 0x04d2, 0x30e1 }, /*                     kana_ME メ KATAKANA LETTER ME */
-  { 0x04d3, 0x30e2 }, /*                     kana_MO モ KATAKANA LETTER MO */
-  { 0x04ac, 0x30e3 }, /*                     kana_ya ャ KATAKANA LETTER SMALL YA */
-  { 0x04d4, 0x30e4 }, /*                     kana_YA ヤ KATAKANA LETTER YA */
-  { 0x04ad, 0x30e5 }, /*                     kana_yu ュ KATAKANA LETTER SMALL YU */
-  { 0x04d5, 0x30e6 }, /*                     kana_YU ユ KATAKANA LETTER YU */
-  { 0x04ae, 0x30e7 }, /*                     kana_yo ョ KATAKANA LETTER SMALL YO */
-  { 0x04d6, 0x30e8 }, /*                     kana_YO ヨ KATAKANA LETTER YO */
-  { 0x04d7, 0x30e9 }, /*                     kana_RA ラ KATAKANA LETTER RA */
-  { 0x04d8, 0x30ea }, /*                     kana_RI リ KATAKANA LETTER RI */
-  { 0x04d9, 0x30eb }, /*                     kana_RU ル KATAKANA LETTER RU */
-  { 0x04da, 0x30ec }, /*                     kana_RE レ KATAKANA LETTER RE */
-  { 0x04db, 0x30ed }, /*                     kana_RO ロ KATAKANA LETTER RO */
-  { 0x04dc, 0x30ef }, /*                     kana_WA ワ KATAKANA LETTER WA */
-  { 0x04a6, 0x30f2 }, /*                     kana_WO ヲ KATAKANA LETTER WO */
-  { 0x04dd, 0x30f3 }, /*                      kana_N ン KATAKANA LETTER N */
-  { 0x04a5, 0x30fb }, /*            kana_conjunctive ・ KATAKANA MIDDLE DOT */
-  { 0x04b0, 0x30fc }, /*              prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */
-  { 0x0ea1, 0x3131 }, /*               Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */
-  { 0x0ea2, 0x3132 }, /*          Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */
-  { 0x0ea3, 0x3133 }, /*           Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */
-  { 0x0ea4, 0x3134 }, /*                Hangul_Nieun ㄴ HANGUL LETTER NIEUN */
-  { 0x0ea5, 0x3135 }, /*           Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */
-  { 0x0ea6, 0x3136 }, /*           Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */
-  { 0x0ea7, 0x3137 }, /*               Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */
-  { 0x0ea8, 0x3138 }, /*          Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */
-  { 0x0ea9, 0x3139 }, /*                Hangul_Rieul ㄹ HANGUL LETTER RIEUL */
-  { 0x0eaa, 0x313a }, /*          Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */
-  { 0x0eab, 0x313b }, /*           Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */
-  { 0x0eac, 0x313c }, /*           Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */
-  { 0x0ead, 0x313d }, /*            Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */
-  { 0x0eae, 0x313e }, /*           Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */
-  { 0x0eaf, 0x313f }, /*          Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */
-  { 0x0eb0, 0x3140 }, /*           Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */
-  { 0x0eb1, 0x3141 }, /*                Hangul_Mieum ㅁ HANGUL LETTER MIEUM */
-  { 0x0eb2, 0x3142 }, /*                Hangul_Pieub ㅂ HANGUL LETTER PIEUP */
-  { 0x0eb3, 0x3143 }, /*           Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */
-  { 0x0eb4, 0x3144 }, /*            Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */
-  { 0x0eb5, 0x3145 }, /*                 Hangul_Sios ㅅ HANGUL LETTER SIOS */
-  { 0x0eb6, 0x3146 }, /*            Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */
-  { 0x0eb7, 0x3147 }, /*                Hangul_Ieung ㅇ HANGUL LETTER IEUNG */
-  { 0x0eb8, 0x3148 }, /*                Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */
-  { 0x0eb9, 0x3149 }, /*           Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */
-  { 0x0eba, 0x314a }, /*                Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */
-  { 0x0ebb, 0x314b }, /*               Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */
-  { 0x0ebc, 0x314c }, /*                Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */
-  { 0x0ebd, 0x314d }, /*               Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */
-  { 0x0ebe, 0x314e }, /*                Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */
-  { 0x0ebf, 0x314f }, /*                    Hangul_A ㅏ HANGUL LETTER A */
-  { 0x0ec0, 0x3150 }, /*                   Hangul_AE ㅐ HANGUL LETTER AE */
-  { 0x0ec1, 0x3151 }, /*                   Hangul_YA ㅑ HANGUL LETTER YA */
-  { 0x0ec2, 0x3152 }, /*                  Hangul_YAE ㅒ HANGUL LETTER YAE */
-  { 0x0ec3, 0x3153 }, /*                   Hangul_EO ㅓ HANGUL LETTER EO */
-  { 0x0ec4, 0x3154 }, /*                    Hangul_E ㅔ HANGUL LETTER E */
-  { 0x0ec5, 0x3155 }, /*                  Hangul_YEO ㅕ HANGUL LETTER YEO */
-  { 0x0ec6, 0x3156 }, /*                   Hangul_YE ㅖ HANGUL LETTER YE */
-  { 0x0ec7, 0x3157 }, /*                    Hangul_O ㅗ HANGUL LETTER O */
-  { 0x0ec8, 0x3158 }, /*                   Hangul_WA ㅘ HANGUL LETTER WA */
-  { 0x0ec9, 0x3159 }, /*                  Hangul_WAE ㅙ HANGUL LETTER WAE */
-  { 0x0eca, 0x315a }, /*                   Hangul_OE ㅚ HANGUL LETTER OE */
-  { 0x0ecb, 0x315b }, /*                   Hangul_YO ㅛ HANGUL LETTER YO */
-  { 0x0ecc, 0x315c }, /*                    Hangul_U ㅜ HANGUL LETTER U */
-  { 0x0ecd, 0x315d }, /*                  Hangul_WEO ㅝ HANGUL LETTER WEO */
-  { 0x0ece, 0x315e }, /*                   Hangul_WE ㅞ HANGUL LETTER WE */
-  { 0x0ecf, 0x315f }, /*                   Hangul_WI ㅟ HANGUL LETTER WI */
-  { 0x0ed0, 0x3160 }, /*                   Hangul_YU ㅠ HANGUL LETTER YU */
-  { 0x0ed1, 0x3161 }, /*                   Hangul_EU ㅡ HANGUL LETTER EU */
-  { 0x0ed2, 0x3162 }, /*                   Hangul_YI ㅢ HANGUL LETTER YI */
-  { 0x0ed3, 0x3163 }, /*                    Hangul_I ㅣ HANGUL LETTER I */
-  { 0x0eef, 0x316d }, /*     Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */
-  { 0x0ef0, 0x3171 }, /*    Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */
-  { 0x0ef1, 0x3178 }, /*    Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */
-  { 0x0ef2, 0x317f }, /*              Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */
-  { 0x0ef4, 0x3184 }, /*   Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */
-  { 0x0ef5, 0x3186 }, /*          Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */
-  { 0x0ef6, 0x318d }, /*                Hangul_AraeA ㆍ HANGUL LETTER ARAEA */
-  { 0x0ef7, 0x318e }, /*               Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */
-};
-
-static guint
-unicode_to_keyval (wchar_t ucs)
-{
-  int min = 0;
-  int max = sizeof(u2ktab) / sizeof(u2ktab[0]) - 1;
-  int mid;
-
-  /* First check for Latin-1 characters (1:1 mapping) */
-  if ((ucs >= 0x0020 && ucs <= 0x007e) ||
-      (ucs >= 0x00a0 && ucs <= 0x00ff))
-    return ucs;
-
-  /* Binary search in table */
-  while (max >= min) {
-    mid = (min + max) / 2;
-    if (u2ktab[mid].ucs < ucs)
-      min = mid + 1;
-    else if (u2ktab[mid].ucs > ucs)
-      max = mid - 1;
-    else {
-      /* found it */
-      return u2ktab[mid].keysym;
-    }
-  }
-  
-  /*
-   * No matching keysym value found, return Unicode value plus 0x01000000
-   * (a convention introduced in the UTF-8 work on xterm).
-   */
-  return ucs | 0x01000000;
-}
-
-static void
-build_key_event_state (GdkEvent *event)
-{
-  event->key.state = 0;
-  if (GetKeyState (VK_SHIFT) < 0)
-    event->key.state |= GDK_SHIFT_MASK;
-  if (GetKeyState (VK_CAPITAL) & 0x1)
-    event->key.state |= GDK_LOCK_MASK;
-  if (!is_AltGr_key)
-    {
-      if (GetKeyState (VK_CONTROL) < 0)
-       {
-         event->key.state |= GDK_CONTROL_MASK;
-         if (event->key.keyval < ' ')
-           event->key.keyval += '@';
-       }
-      else if (event->key.keyval < ' ')
-       {
-         event->key.state |= GDK_CONTROL_MASK;
-         event->key.keyval += '@';
-       }
-      if (GetKeyState (VK_MENU) < 0)
-       event->key.state |= GDK_MOD1_MASK;
-    }
-}
-
-static gint
-build_pointer_event_state (MSG *xevent)
-{
-  gint state;
-  
-  state = 0;
-  if (xevent->wParam & MK_CONTROL)
-    state |= GDK_CONTROL_MASK;
-  if (xevent->wParam & MK_LBUTTON)
-    state |= GDK_BUTTON1_MASK;
-  if (xevent->wParam & MK_MBUTTON)
-    state |= GDK_BUTTON2_MASK;
-  if (xevent->wParam & MK_RBUTTON)
-    state |= GDK_BUTTON3_MASK;
-  if (xevent->wParam & MK_SHIFT)
-    state |= GDK_SHIFT_MASK;
-  if (GetKeyState (VK_MENU) < 0)
-    state |= GDK_MOD1_MASK;
-  if (GetKeyState (VK_CAPITAL) & 0x1)
-    state |= GDK_LOCK_MASK;
-
-  return state;
-}
-
-
-static void
-build_keypress_event (GdkWindowPrivate *window_private,
-                     GdkEvent         *event,
-                     MSG              *xevent)
-{
-  HIMC hIMC;
-  gint i, bytesleft, bytecount, ucount, ucleft, len;
-  guchar buf[100], *bp;
-  wchar_t wbuf[100], *wcp;
-
-  event->key.type = GDK_KEY_PRESS;
-  event->key.time = xevent->time;
-  
-  if (xevent->message == WM_IME_COMPOSITION)
-    {
-      hIMC = ImmGetContext (xevent->hwnd);
-
-      bytecount = ImmGetCompositionStringW (hIMC, GCS_RESULTSTR,
-                                           wbuf, sizeof (wbuf));
-      ucount = bytecount / 2;
-    }
-  else
-    {
-      if (xevent->message == WM_CHAR)
-       {
-         bytecount = MIN ((xevent->lParam & 0xFFFF), sizeof (buf));
-         for (i = 0; i < bytecount; i++)
-           buf[i] = xevent->wParam;
-       }
-      else /* WM_IME_CHAR */
-       {
-         event->key.keyval = GDK_VoidSymbol;
-         if (xevent->wParam & 0xFF00)
-           {
-             /* Contrary to some versions of the documentation,
-              * the lead byte is the most significant byte.
-              */
-             buf[0] = ((xevent->wParam >> 8) & 0xFF);
-             buf[1] = (xevent->wParam & 0xFF);
-             bytecount = 2;
-           }
-         else
-           {
-             buf[0] = (xevent->wParam & 0xFF);
-             bytecount = 1;
-           }
-       }
-
-      /* Convert from the window's current code page
-       * to Unicode. Then convert to UTF-8.
-       * We don't handle the surrogate stuff. Should we?
-       */
-      ucount = MultiByteToWideChar (window_private->charset_info.ciACP,
-                                   0, buf, bytecount,
-                                   wbuf, sizeof (wbuf) / sizeof (wbuf[0]));
-      
-    }
-  if (ucount == 0)
-    event->key.keyval = GDK_VoidSymbol;
-  else if (xevent->message == WM_CHAR)
-    if (xevent->wParam < ' ')
-      event->key.keyval = xevent->wParam + '@';
-    else
-      event->key.keyval = unicode_to_keyval (wbuf[0]);
-  else
-    event->key.keyval = GDK_VoidSymbol;
-
-  build_key_event_state (event);
-
-  ucleft = ucount;
-  len = 0;
-  wcp = wbuf;
-  while (ucleft-- > 0)
-    {
-      wchar_t c = *wcp++;
-
-      if (c < 0x80)
-       len += 1;
-      else if (c < 0x800)
-       len += 2;
-      else
-       len += 3;
-    }
-
-  event->key.string = g_malloc (len + 1);
-  event->key.length = len;
-  
-  ucleft = ucount;
-  wcp = wbuf;
-  bp = event->key.string;
-  while (ucleft-- > 0)
-    {
-      int first;
-      int i;
-      wchar_t c = *wcp++;
-
-      if (c < 0x80)
-       {
-         first = 0;
-         len = 1;
-       }
-      else if (c < 0x800)
-       {
-         first = 0xc0;
-         len = 2;
-       }
-      else
-       {
-         first = 0xe0;
-         len = 3;
-       }
-
-#if 1      
-      /* Woo-hoo! */
-      switch (len)
-       {
-       case 3: bp[2] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 2: bp[1] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 1: bp[0] = c | first;
-       }
-#else
-      for (i = len - 1; i > 0; --i)
-       {
-         bp[i] = (c & 0x3f) | 0x80;
-         c >>= 6;
-       }
-      bp[0] = c | first;
-#endif
-
-      bp += len;
-    }
-  *bp = 0;
-}
-
-static void
-build_keyrelease_event (GdkWindowPrivate *window_private,
-                       GdkEvent         *event,
-                       MSG              *xevent)
-{
-  guchar buf;
-  wchar_t wbuf;
-
-  event->key.type = GDK_KEY_RELEASE;
-  event->key.time = xevent->time;
-
-  if (xevent->message == WM_CHAR)
-    if (xevent->wParam < ' ')
-      event->key.keyval = xevent->wParam + '@';
-    else
-      {
-       buf = xevent->wParam;
-       MultiByteToWideChar (window_private->charset_info.ciACP,
-                            0, &buf, 1, &wbuf, 1);
-
-       event->key.keyval = unicode_to_keyval (wbuf);
-      }
-  else
-    event->key.keyval = GDK_VoidSymbol;
-  build_key_event_state (event);
-  event->key.string = NULL;
-  event->key.length = 0;
-}
-
-static void
-print_event_state (gint state)
-{
-  if (state & GDK_SHIFT_MASK)
-    g_print ("SHIFT ");
-  if (state & GDK_LOCK_MASK)
-    g_print ("LOCK ");
-  if (state & GDK_CONTROL_MASK)
-    g_print ("CONTROL ");
-  if (state & GDK_MOD1_MASK)
-    g_print ("MOD1 ");
-  if (state & GDK_BUTTON1_MASK)
-    g_print ("BUTTON1 ");
-  if (state & GDK_BUTTON2_MASK)
-    g_print ("BUTTON2 ");
-  if (state & GDK_BUTTON3_MASK)
-    g_print ("BUTTON3 ");
-}
-
-static void
-print_event (GdkEvent *event)
-{
-  gchar *escaped, *kvname;
-
-  switch (event->any.type)
-    {
-    case GDK_NOTHING: g_print ("GDK_NOTHING "); break;
-    case GDK_DELETE: g_print ("GDK_DELETE "); break;
-    case GDK_DESTROY: g_print ("GDK_DESTROY "); break;
-    case GDK_EXPOSE: g_print ("GDK_EXPOSE "); break;
-    case GDK_MOTION_NOTIFY: g_print ("GDK_MOTION_NOTIFY "); break;
-    case GDK_BUTTON_PRESS: g_print ("GDK_BUTTON_PRESS "); break;
-    case GDK_2BUTTON_PRESS: g_print ("GDK_2BUTTON_PRESS "); break;
-    case GDK_3BUTTON_PRESS: g_print ("GDK_3BUTTON_PRESS "); break;
-    case GDK_BUTTON_RELEASE: g_print ("GDK_BUTTON_RELEASE "); break;
-    case GDK_KEY_PRESS: g_print ("GDK_KEY_PRESS "); break;
-    case GDK_KEY_RELEASE: g_print ("GDK_KEY_RELEASE "); break;
-    case GDK_ENTER_NOTIFY: g_print ("GDK_ENTER_NOTIFY "); break;
-    case GDK_LEAVE_NOTIFY: g_print ("GDK_LEAVE_NOTIFY "); break;
-    case GDK_FOCUS_CHANGE: g_print ("GDK_FOCUS_CHANGE "); break;
-    case GDK_CONFIGURE: g_print ("GDK_CONFIGURE "); break;
-    case GDK_MAP: g_print ("GDK_MAP "); break;
-    case GDK_UNMAP: g_print ("GDK_UNMAP "); break;
-    case GDK_PROPERTY_NOTIFY: g_print ("GDK_PROPERTY_NOTIFY "); break;
-    case GDK_SELECTION_CLEAR: g_print ("GDK_SELECTION_CLEAR "); break;
-    case GDK_SELECTION_REQUEST: g_print ("GDK_SELECTION_REQUEST "); break;
-    case GDK_SELECTION_NOTIFY: g_print ("GDK_SELECTION_NOTIFY "); break;
-    case GDK_PROXIMITY_IN: g_print ("GDK_PROXIMITY_IN "); break;
-    case GDK_PROXIMITY_OUT: g_print ("GDK_PROXIMITY_OUT "); break;
-    case GDK_DRAG_ENTER: g_print ("GDK_DRAG_ENTER "); break;
-    case GDK_DRAG_LEAVE: g_print ("GDK_DRAG_LEAVE "); break;
-    case GDK_DRAG_MOTION: g_print ("GDK_DRAG_MOTION "); break;
-    case GDK_DRAG_STATUS: g_print ("GDK_DRAG_STATUS "); break;
-    case GDK_DROP_START: g_print ("GDK_DROP_START "); break;
-    case GDK_DROP_FINISHED: g_print ("GDK_DROP_FINISHED "); break;
-    case GDK_CLIENT_EVENT: g_print ("GDK_CLIENT_EVENT "); break;
-    case GDK_VISIBILITY_NOTIFY: g_print ("GDK_VISIBILITY_NOTIFY "); break;
-    case GDK_NO_EXPOSE: g_print ("GDK_NO_EXPOSE "); break;
-    }
-  g_print ("%#x ", GDK_DRAWABLE_XID (event->any.window));
-
-  switch (event->any.type)
-    {
-    case GDK_EXPOSE:
-      g_print ("%dx%d@+%d+%d %d",
-              event->expose.area.width,
-              event->expose.area.height,
-              event->expose.area.x,
-              event->expose.area.y,
-              event->expose.count);
-      break;
-    case GDK_MOTION_NOTIFY:
-      g_print ("(%.4g,%.4g) %s",
-              event->motion.x, event->motion.y,
-              event->motion.is_hint ? "HINT " : "");
-      print_event_state (event->motion.state);
-      break;
-    case GDK_BUTTON_PRESS:
-    case GDK_2BUTTON_PRESS:
-    case GDK_3BUTTON_PRESS:
-    case GDK_BUTTON_RELEASE:
-      g_print ("%d (%.4g,%.4g) ",
-              event->button.button,
-              event->button.x, event->button.y);
-      print_event_state (event->button.state);
-      break;
-    case GDK_KEY_PRESS: 
-    case GDK_KEY_RELEASE:
-      if (event->key.length == 0)
-       escaped = g_strdup ("");
-      else
-       escaped = g_strescape (event->key.string, NULL);
-      kvname = gdk_keyval_name (event->key.keyval);
-      g_print ("%s %d:\"%s\" ",
-              (kvname ? kvname : "??"),
-              event->key.length,
-              escaped);
-      g_free (escaped);
-      print_event_state (event->key.state);
-      break;
-    case GDK_ENTER_NOTIFY:
-    case GDK_LEAVE_NOTIFY:
-      g_print (" %s",
-              (event->crossing.detail == GDK_NOTIFY_INFERIOR ? "INFERIOR" :
-               (event->crossing.detail == GDK_NOTIFY_ANCESTOR ? "ANCESTOR" :
-                (event->crossing.detail == GDK_NOTIFY_NONLINEAR ? "NONLINEAR" :
-                 "???"))));
-      break;
-    }  
-  g_print ("\n");
-}
-
-static void
-synthesize_crossing_events (GdkWindow *window,
-                           MSG       *xevent)
-{
-  GdkEvent *event;
-  
-  /* If we are not using TrackMouseEvent, generate a leave notify
-   * event if necessary
-   */
-  if (p_TrackMouseEvent == NULL
-      && curWnd
-      && (WINDOW_PRIVATE(curWnd)->event_mask & GDK_LEAVE_NOTIFY_MASK))
-    {
-      GDK_NOTE (EVENTS, g_print ("synthesizing LEAVE_NOTIFY event\n"));
-
-      event = gdk_event_new ();
-      event->crossing.type = GDK_LEAVE_NOTIFY;
-      event->crossing.window = curWnd;
-      gdk_window_ref (event->crossing.window);
-      event->crossing.subwindow = NULL;
-      event->crossing.time = xevent->time;
-      event->crossing.x = curX;
-      event->crossing.y = curY;
-      event->crossing.x_root = curXroot;
-      event->crossing.y_root = curYroot;
-      event->crossing.mode = GDK_CROSSING_NORMAL;
-      if (IsChild (GDK_DRAWABLE_XID (curWnd), GDK_DRAWABLE_XID (window)))
-       event->crossing.detail = GDK_NOTIFY_INFERIOR;
-      else if (IsChild (GDK_DRAWABLE_XID (window), GDK_DRAWABLE_XID (curWnd)))
-       event->crossing.detail = GDK_NOTIFY_ANCESTOR;
-      else
-       event->crossing.detail = GDK_NOTIFY_NONLINEAR;
-
-      event->crossing.focus = TRUE; /* ??? */
-      event->crossing.state = 0; /* ??? */
-
-      gdk_event_queue_append (event);
-      GDK_NOTE (EVENTS, print_event (event));
-    }
-
-  if (WINDOW_PRIVATE(window)->event_mask & GDK_ENTER_NOTIFY_MASK)
-    {
-      GDK_NOTE (EVENTS, g_print ("synthesizing ENTER_NOTIFY event\n"));
-      
-      event = gdk_event_new ();
-      event->crossing.type = GDK_ENTER_NOTIFY;
-      event->crossing.window = window;
-      gdk_window_ref (event->crossing.window);
-      event->crossing.subwindow = NULL;
-      event->crossing.time = xevent->time;
-      event->crossing.x = LOWORD (xevent->lParam);
-      event->crossing.y = HIWORD (xevent->lParam);
-      event->crossing.x_root = (gfloat) xevent->pt.x;
-      event->crossing.y_root = (gfloat) xevent->pt.y;
-      event->crossing.mode = GDK_CROSSING_NORMAL;
-      if (curWnd
-         && IsChild (GDK_DRAWABLE_XID (curWnd), GDK_DRAWABLE_XID (window)))
-       event->crossing.detail = GDK_NOTIFY_ANCESTOR;
-      else if (curWnd
-              && IsChild (GDK_DRAWABLE_XID (window), GDK_DRAWABLE_XID (curWnd)))
-       event->crossing.detail = GDK_NOTIFY_INFERIOR;
-      else
-       event->crossing.detail = GDK_NOTIFY_NONLINEAR;
-      
-      event->crossing.focus = TRUE; /* ??? */
-      event->crossing.state = 0; /* ??? */
-      
-      gdk_event_queue_append (event);
-
-      GDK_NOTE (EVENTS, print_event (event));
-
-      if (WINDOW_PRIVATE(window)->extension_events != 0
-         && gdk_input_vtable.enter_event)
-       gdk_input_vtable.enter_event (&event->crossing, window);
-
-    }
-  
-  if (curWnd)
-    gdk_window_unref (curWnd);
-  curWnd = window;
-  gdk_window_ref (curWnd);
-#ifdef USE_TRACKMOUSEEVENT
-  if (p_TrackMouseEvent != NULL)
-    {
-      TRACKMOUSEEVENT tme;
-
-      tme.cbSize = sizeof (TRACKMOUSEEVENT);
-      tme.dwFlags = TME_LEAVE;
-      tme.hwndTrack = GDK_DRAWABLE_XID (curWnd);
-      tme.dwHoverTime = HOVER_DEFAULT;
-      
-      (*p_TrackMouseEvent) (&tme);
-    }
-#endif
-}
-
-#ifndef NEW_PROPAGATION_CODE
-
-static GdkWindow *
-key_propagate (GdkWindow *window,
-              MSG       *xevent)
-{
-  gdk_window_unref (window);
-  window = WINDOW_PRIVATE(window)->parent;
-  gdk_window_ref (window);
-
-  return window;
-}  
-
-static GdkWindow *
-pointer_propagate (GdkWindow *window,
-                  MSG       *xevent)
-{
-  POINT pt;
-
-  pt.x = LOWORD (xevent->lParam);
-  pt.y = HIWORD (xevent->lParam);
-  ClientToScreen (GDK_DRAWABLE_XID (window), &pt);
-  gdk_window_unref (window);
-  window = WINDOW_PRIVATE(window)->parent;
-  gdk_window_ref (window);
-  ScreenToClient (GDK_DRAWABLE_XID (window), &pt);
-  xevent->lParam = MAKELPARAM (pt.x, pt.y);
-
-  return window;
-}
-
-#endif /* !NEW_PROPAGATION_CODE */
-
-static void
-translate_mouse_coords (GdkWindow *window1,
-                       GdkWindow *window2,
-                       MSG       *xevent)
-{
-  POINT pt;
-
-  pt.x = LOWORD (xevent->lParam);
-  pt.y = HIWORD (xevent->lParam);
-  ClientToScreen (GDK_DRAWABLE_XID (window1), &pt);
-  ScreenToClient (GDK_DRAWABLE_XID (window2), &pt);
-  xevent->lParam = MAKELPARAM (pt.x, pt.y);
-  GDK_NOTE (EVENTS, g_print ("...new coords are (%d,%d)\n", pt.x, pt.y));
-}
-
-#ifdef NEW_PROPAGATION_CODE
-
-static gboolean
-propagate (GdkWindow  **window,
-          MSG         *xevent,
-          GdkWindow   *grab_window,
-          gboolean     grab_owner_events,
-          gint         grab_mask,
-          gboolean   (*doesnt_want_it) (gint mask,
-                                        MSG *xevent))
-{
-  if (grab_window != NULL && !grab_owner_events)
-    {
-      /* Event source is grabbed with owner_events FALSE */
-      GDK_NOTE (EVENTS, g_print ("...grabbed, owner_events FALSE, "));
-      if ((*doesnt_want_it) (grab_mask, xevent))
-       {
-         GDK_NOTE (EVENTS, g_print ("...grabber doesn't want it\n"));
-         return FALSE;
-       }
-      else
-       {
-         GDK_NOTE (EVENTS, g_print ("...sending to grabber %#x\n",
-                                    GDK_DRAWABLE_XID (grab_window)));
-         gdk_window_unref (*window);
-         *window = grab_window;
-         gdk_window_ref (*window);
-         return TRUE;
-       }
-    }
-  while (TRUE)
-    {
-     if ((*doesnt_want_it) (WINDOW_PRIVATE(*window)->event_mask, xevent))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(*window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (grab_window != NULL)
-               {
-                 /* Event source is grabbed with owner_events TRUE */
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 if ((*doesnt_want_it) (grab_mask, xevent))
-                   {
-                     /* Grabber doesn't want it either */
-                     GDK_NOTE (EVENTS, g_print ("...grabber doesn't want it\n"));
-                     return FALSE;
-                   }
-                 else
-                   {
-                     /* Grabbed! */
-                     GDK_NOTE (EVENTS, g_print ("...sending to grabber %#x\n",
-                                                GDK_DRAWABLE_XID (grab_window)));
-                     gdk_window_unref (*window);
-                     *window = grab_window;
-                     gdk_window_ref (*window);
-                     return TRUE;
-                   }
-               }
-             else
-               {
-                 GDK_NOTE (EVENTS, g_print ("...undelivered\n"));
-                 return FALSE;
-               }
-           }
-         else
-           {
-             gdk_window_unref (*window);
-             *window = WINDOW_PRIVATE(*window)->parent;
-             gdk_window_ref (*window);
-             GDK_NOTE (EVENTS, g_print ("...propagating to %#x\n",
-                                        GDK_DRAWABLE_XID (*window)));
-             /* The only branch where we actually continue the loop */
-           }
-       }
-      else
-       return TRUE;
-    }
-}
-
-static gboolean
-doesnt_want_key (gint mask,
-                MSG *xevent)
-{
-  return (((xevent->message == WM_KEYUP
-           || xevent->message == WM_SYSKEYUP)
-          && !(mask & GDK_KEY_RELEASE_MASK))
-         ||
-         ((xevent->message == WM_KEYDOWN
-           || xevent->message == WM_SYSKEYDOWN)
-          && !(mask & GDK_KEY_PRESS_MASK)));
-}
-
-static gboolean
-doesnt_want_char (gint mask,
-                 MSG *xevent)
-{
-  return !(mask & (GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK));
-}
-
-static gboolean
-doesnt_want_button_press (gint mask,
-                         MSG *xevent)
-{
-  return !(mask & GDK_BUTTON_PRESS_MASK);
-}
-
-static gboolean
-doesnt_want_button_release (gint mask,
-                           MSG *xevent)
-{
-  return !(mask & GDK_BUTTON_RELEASE_MASK);
-}
-
-static gboolean
-doesnt_want_button_motion (gint mask,
-                          MSG *xevent)
-{
-  return !((mask & GDK_POINTER_MOTION_MASK)
-          || ((xevent->wParam & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON))
-              && (mask & GDK_BUTTON_MOTION_MASK))
-          || ((xevent->wParam & MK_LBUTTON)
-              && (mask & GDK_BUTTON1_MOTION_MASK))
-          || ((xevent->wParam & MK_MBUTTON)
-              && (mask & GDK_BUTTON2_MOTION_MASK))
-          || ((xevent->wParam & MK_RBUTTON)
-              && (mask & GDK_BUTTON3_MOTION_MASK)));
-}
-
-#endif
-
-static gboolean
-gdk_event_translate (GdkEvent *event,
-                    MSG      *xevent,
-                    gboolean *ret_val_flagp,
-                    gint     *ret_valp)
-{
-  GdkWindow *window, *orig_window;
-  GdkColormapPrivate *colormap_private;
-  HWND owner;
-  DWORD pidActWin;
-  DWORD pidThis;
-  DWORD dwStyle;
-  PAINTSTRUCT paintstruct;
-  HDC hdc;
-  HBRUSH hbr;
-  RECT rect;
-  POINT pt;
-  MINMAXINFO *lpmmi;
-  GdkEventMask mask;
-  GdkDrawablePrivate *pixmap_private;
-  HDC bgdc;
-  HGDIOBJ oldbitmap;
-  int button;
-  int i, j, n, k;
-  gchar buf[256];
-  gchar *msgname;
-  gboolean return_val;
-  gboolean flag;
-  
-  return_val = FALSE;
-  
-  if (ret_val_flagp)
-    *ret_val_flagp = FALSE;
-
-#ifndef USE_DISPATCHMESSAGE
-  if (xevent->message == gdk_ping_msg)
-    {
-      /* Messages we post ourselves just to wakeup WaitMessage.  */
-      GDK_NOTE (EVENTS, g_print ("gdk_ping_msg\n"));
-
-      return FALSE;
-    }
-  else if (xevent->message == g_pipe_readable_msg)
-    {
-      GDK_NOTE (EVENTS, g_print ("g_pipe_readable_msg: %d %d\n",
-                                xevent->wParam, xevent->lParam));
-
-      g_io_channel_win32_pipe_readable (xevent->wParam, xevent->lParam);
-      return FALSE;
-    }
-#endif
-
-  window = gdk_window_lookup (xevent->hwnd);
-  orig_window = window;
-  
-  if (window != NULL)
-    gdk_window_ref (window);
-  else
-    {
-      /* Handle WM_QUIT here ? */
-      if (xevent->message == WM_QUIT)
-       {
-         GDK_NOTE (EVENTS, g_print ("WM_QUIT: %d\n", xevent->wParam));
-         exit (xevent->wParam);
-       }
-      else if (xevent->message == WM_MOVE
-              || xevent->message == WM_SIZE)
-       {
-         /* It's quite normal to get these messages before we have
-          * had time to register the window in our lookup table, or
-          * when the window is being destroyed and we already have
-          * removed it. Repost the same message to our queue so that
-          * we will get it later when we are prepared.
-          */
-         PostMessage (xevent->hwnd, xevent->message,
-                      xevent->wParam, xevent->lParam);
-       }
-      return FALSE;
-    }
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      /* Check for filters for this window */
-      GdkFilterReturn result;
-      result = gdk_event_apply_filters
-       (xevent, event, WINDOW_PRIVATE(window)->filters);
-      
-      if (result != GDK_FILTER_CONTINUE)
-       {
-         return (result == GDK_FILTER_TRANSLATE) ? TRUE : FALSE;
-       }
-    }
-
-  if (xevent->message == gdk_selection_notify_msg)
-    {
-      GDK_NOTE (SELECTION, g_print ("gdk_selection_notify_msg: %#x\n",
-                                   xevent->hwnd));
-
-      event->selection.type = GDK_SELECTION_NOTIFY;
-      event->selection.window = window;
-      event->selection.selection = xevent->wParam;
-      event->selection.target = xevent->lParam;
-      event->selection.property = gdk_selection_property;
-      event->selection.time = xevent->time;
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-
-      /* Will pass through switch below without match */
-    }
-  else if (xevent->message == gdk_selection_request_msg)
-    {
-      GDK_NOTE (SELECTION, g_print ("gdk_selection_request_msg: %#x\n",
-                                   xevent->hwnd));
-
-      event->selection.type = GDK_SELECTION_REQUEST;
-      event->selection.window = window;
-      event->selection.selection = gdk_clipboard_atom;
-      event->selection.target = GDK_TARGET_STRING;
-      event->selection.property = gdk_selection_property;
-      event->selection.requestor = (guint32) xevent->hwnd;
-      event->selection.time = xevent->time;
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-
-      /* Again, will pass through switch below without match */
-    }
-  else if (xevent->message == gdk_selection_clear_msg)
-    {
-      GDK_NOTE (SELECTION, g_print ("gdk_selection_clear_msg: %#x\n",
-                                   xevent->hwnd));
-
-      event->selection.type = GDK_SELECTION_CLEAR;
-      event->selection.window = window;
-      event->selection.selection = xevent->wParam;
-      event->selection.time = xevent->time;
-
-      return_val = GDK_DRAWABLE_DESTROYED (window);
-
-      /* Once again, we will pass through switch below without match */
-    }
-  else
-    {
-      GList *tmp_list;
-      GdkFilterReturn result = GDK_FILTER_CONTINUE;
-
-      tmp_list = client_filters;
-      while (tmp_list)
-       {
-         GdkClientFilter *filter = tmp_list->data;
-         if (filter->type == xevent->message)
-           {
-             GDK_NOTE (EVENTS, g_print ("client filter matched\n"));
-             result = (*filter->function) (xevent, event, filter->data);
-             switch (result)
-               {
-               case GDK_FILTER_REMOVE:
-                 return_val = FALSE;
-                 break;
-
-               case GDK_FILTER_TRANSLATE:
-                 return_val = TRUE;
-                 break;
-
-               case GDK_FILTER_CONTINUE:
-                 return_val = TRUE;
-                 event->client.type = GDK_CLIENT_EVENT;
-                 event->client.window = window;
-                 event->client.message_type = xevent->message;
-                 event->client.data_format = 0;
-                 event->client.data.l[0] = xevent->wParam;
-                 event->client.data.l[1] = xevent->lParam;
-                 break;
-               }
-             goto bypass_switch; /* Ouch */
-           }
-         tmp_list = tmp_list->next;
-       }
-    }
-
-  switch (xevent->message)
-    {
-    case WM_INPUTLANGCHANGE:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_INPUTLANGCHANGE: %#x charset %d locale %x\n",
-                        xevent->hwnd, xevent->wParam, xevent->lParam));
-      WINDOW_PRIVATE(window)->input_locale = (HKL) xevent->lParam;
-      TranslateCharsetInfo ((DWORD FAR *) xevent->wParam,
-                           &WINDOW_PRIVATE(window)->charset_info,
-                           TCI_SRCCHARSET);
-      break;
-
-    case WM_SYSKEYUP:
-    case WM_SYSKEYDOWN:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_SYSKEY%s: %#x  key: %s  %#x %#.08x\n",
-                        (xevent->message == WM_SYSKEYUP ? "UP" : "DOWN"),
-                        xevent->hwnd,
-                        (GetKeyNameText (xevent->lParam, buf,
-                                         sizeof (buf)) > 0 ?
-                         buf : ""),
-                        xevent->wParam,
-                        xevent->lParam));
-
-      /* Let the system handle Alt-Tab and Alt-Enter */
-      if (xevent->wParam == VK_TAB
-         || xevent->wParam == VK_RETURN
-         || xevent->wParam == VK_F4)
-       break;
-      /* If posted without us having keyboard focus, ignore */
-      if (!(xevent->lParam & 0x20000000))
-       break;
-#if 0
-      /* don't generate events for just the Alt key */
-      if (xevent->wParam == VK_MENU)
-       break;
-#endif
-      /* Jump to code in common with WM_KEYUP and WM_KEYDOWN */
-      goto keyup_or_down;
-
-    case WM_KEYUP:
-    case WM_KEYDOWN:
-      GDK_NOTE (EVENTS, 
-               g_print ("WM_KEY%s: %#x  key: %s  %#x %#.08x\n",
-                        (xevent->message == WM_KEYUP ? "UP" : "DOWN"),
-                        xevent->hwnd,
-                        (GetKeyNameText (xevent->lParam, buf,
-                                         sizeof (buf)) > 0 ?
-                         buf : ""),
-                        xevent->wParam,
-                        xevent->lParam));
-
-      ignore_WM_CHAR = TRUE;
-    keyup_or_down:
-
-#ifdef NEW_PROPAGATION_CODE
-      if (!propagate (&window, xevent,
-                     k_grab_window, k_grab_owner_events, GDK_ALL_EVENTS_MASK,
-                     doesnt_want_key))
-         break;
-      event->key.window = window;
-#else
-      if (k_grab_window != NULL && !k_grab_owner_events)
-       {
-         /* Keyboard is grabbed with owner_events FALSE */
-         GDK_NOTE (EVENTS, g_print ("...grabbed, owner_events FALSE, "
-                                    "sending to %#x\n",
-                                    GDK_DRAWABLE_XID (k_grab_window)));
-         event->key.window = k_grab_window;
-         /* Continue with switch statement below */
-       }
-      else if (((xevent->message == WM_KEYUP
-                    || xevent->message == WM_SYSKEYUP)
-                   && !(WINDOW_PRIVATE(window)->event_mask & GDK_KEY_RELEASE_MASK))
-                  || ((xevent->message == WM_KEYDOWN
-                       || xevent->message == WM_SYSKEYDOWN)
-                      && !(WINDOW_PRIVATE(window)->event_mask & GDK_KEY_PRESS_MASK)))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (k_grab_window != NULL)
-               {
-                 /* Keyboard is grabbed with owner_events TRUE */
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 event->key.window = k_grab_window;
-                 /* Continue with switch statement below */
-               }
-             else
-               break;
-           }
-         else
-           {
-             window = key_propagate (window, xevent);
-             /* Jump back up */
-             goto keyup_or_down;
-           }
-       }
-      else
-       event->key.window = window;
-
-      g_assert (event->key.window == window);
-#endif       
-      switch (xevent->wParam)
-       {
-       case VK_LBUTTON:
-         event->key.keyval = GDK_Pointer_Button1; break;
-       case VK_RBUTTON:
-         event->key.keyval = GDK_Pointer_Button3; break;
-       case VK_MBUTTON:
-         event->key.keyval = GDK_Pointer_Button2; break;
-       case VK_CANCEL:
-         event->key.keyval = GDK_Cancel; break;
-       case VK_BACK:
-         event->key.keyval = GDK_BackSpace; break;
-       case VK_TAB:
-         event->key.keyval = (GetKeyState(VK_SHIFT) < 0 ? 
-           GDK_ISO_Left_Tab : GDK_Tab);
-         break;
-       case VK_CLEAR:
-         event->key.keyval = GDK_Clear; break;
-       case VK_RETURN:
-         event->key.keyval = GDK_Return; break;
-       case VK_SHIFT:
-         event->key.keyval = GDK_Shift_L; break;
-       case VK_CONTROL:
-         if (xevent->lParam & 0x01000000)
-           event->key.keyval = GDK_Control_R;
-         else
-           event->key.keyval = GDK_Control_L;
-         break;
-       case VK_MENU:
-         if (xevent->lParam & 0x01000000)
-           {
-             /* AltGr key comes in as Control+Right Alt */
-             if (GetKeyState (VK_CONTROL) < 0)
-               {
-                 ignore_WM_CHAR = FALSE;
-                 is_AltGr_key = TRUE;
-               }
-             event->key.keyval = GDK_Alt_R;
-           }
-         else
-           event->key.keyval = GDK_Alt_L;
-         break;
-       case VK_PAUSE:
-         event->key.keyval = GDK_Pause; break;
-       case VK_CAPITAL:
-         event->key.keyval = GDK_Caps_Lock; break;
-       case VK_ESCAPE:
-         event->key.keyval = GDK_Escape; break;
-       case VK_PRIOR:
-         event->key.keyval = GDK_Prior; break;
-       case VK_NEXT:
-         event->key.keyval = GDK_Next; break;
-       case VK_END:
-         event->key.keyval = GDK_End; break;
-       case VK_HOME:
-         event->key.keyval = GDK_Home; break;
-       case VK_LEFT:
-         event->key.keyval = GDK_Left; break;
-       case VK_UP:
-         event->key.keyval = GDK_Up; break;
-       case VK_RIGHT:
-         event->key.keyval = GDK_Right; break;
-       case VK_DOWN:
-         event->key.keyval = GDK_Down; break;
-       case VK_SELECT:
-         event->key.keyval = GDK_Select; break;
-       case VK_PRINT:
-         event->key.keyval = GDK_Print; break;
-       case VK_EXECUTE:
-         event->key.keyval = GDK_Execute; break;
-       case VK_INSERT:
-         event->key.keyval = GDK_Insert; break;
-       case VK_DELETE:
-         event->key.keyval = GDK_Delete; break;
-       case VK_HELP:
-         event->key.keyval = GDK_Help; break;
-       case VK_NUMPAD0:
-       case VK_NUMPAD1:
-       case VK_NUMPAD2:
-       case VK_NUMPAD3:
-       case VK_NUMPAD4:
-       case VK_NUMPAD5:
-       case VK_NUMPAD6:
-       case VK_NUMPAD7:
-       case VK_NUMPAD8:
-       case VK_NUMPAD9:
-         /* Apparently applications work better if we just pass numpad digits
-          * on as real digits? So wait for the WM_CHAR instead.
-          */
-         ignore_WM_CHAR = FALSE;
-         break;
-       case VK_MULTIPLY:
-         event->key.keyval = GDK_KP_Multiply; break;
-       case VK_ADD:
-         /* Pass it on as an ASCII plus in WM_CHAR. */
-         ignore_WM_CHAR = FALSE;
-         break;
-       case VK_SEPARATOR:
-         event->key.keyval = GDK_KP_Separator; break;
-       case VK_SUBTRACT:
-         /* Pass it on as an ASCII minus in WM_CHAR. */
-         ignore_WM_CHAR = FALSE;
-         break;
-       case VK_DECIMAL:
-         /* The keypad decimal key should also be passed on as the decimal
-          * sign ('.' or ',' depending on the Windows locale settings,
-          * apparently). So wait for the WM_CHAR here, also.
-          */
-         ignore_WM_CHAR = FALSE;
-         break;
-       case VK_DIVIDE:
-         event->key.keyval = GDK_KP_Divide; break;
-       case VK_F1:
-         event->key.keyval = GDK_F1; break;
-       case VK_F2:
-         event->key.keyval = GDK_F2; break;
-       case VK_F3:
-         event->key.keyval = GDK_F3; break;
-       case VK_F4:
-         event->key.keyval = GDK_F4; break;
-       case VK_F5:
-         event->key.keyval = GDK_F5; break;
-       case VK_F6:
-         event->key.keyval = GDK_F6; break;
-       case VK_F7:
-         event->key.keyval = GDK_F7; break;
-       case VK_F8:
-         event->key.keyval = GDK_F8; break;
-       case VK_F9:
-         event->key.keyval = GDK_F9; break;
-       case VK_F10:
-         event->key.keyval = GDK_F10; break;
-       case VK_F11:
-         event->key.keyval = GDK_F11; break;
-       case VK_F12:
-         event->key.keyval = GDK_F12; break;
-       case VK_F13:
-         event->key.keyval = GDK_F13; break;
-       case VK_F14:
-         event->key.keyval = GDK_F14; break;
-       case VK_F15:
-         event->key.keyval = GDK_F15; break;
-       case VK_F16:
-         event->key.keyval = GDK_F16; break;
-       case '0':
-       case '1':
-       case '2':
-       case '3':
-       case '4':
-       case '5':
-       case '6':
-       case '7':
-       case '8':
-       case '9':
-         if (!is_AltGr_key && (GetKeyState (VK_CONTROL) < 0
-                               || GetKeyState (VK_MENU) < 0))
-           /* Control- or Alt-digits won't come in as a WM_CHAR,
-            * but beware of AltGr-digits, which are used for instance
-            * on Finnish keyboards.
-            */
-           event->key.keyval = GDK_0 + (xevent->wParam - '0');
-         else
-           ignore_WM_CHAR = FALSE;
-         break;
-       case VK_OEM_PLUS:       /* On my Win98, the '+' key comes in
-                                * as VK_OEM_PLUS
-                                */
-         if (!is_AltGr_key && (GetKeyState (VK_CONTROL) < 0
-                               || GetKeyState (VK_MENU) < 0))
-           /* Control- or Alt-plus won't come in as WM_CHAR,
-            * but beware of AltGr-plus which is backslash on
-            * Finnish keyboards
-            */
-           event->key.keyval = '+';
-         else
-           ignore_WM_CHAR = FALSE;
-         break;
-       default:
-         if (xevent->message == WM_SYSKEYDOWN || xevent->message == WM_SYSKEYUP)
-           event->key.keyval = xevent->wParam;
-         else
-           ignore_WM_CHAR = FALSE;
-         break;
-       }
-
-      if (!ignore_WM_CHAR)
-       break;
-
-      is_AltGr_key = FALSE;
-      event->key.type = ((xevent->message == WM_KEYDOWN
-                         || xevent->message == WM_SYSKEYDOWN) ?
-                        GDK_KEY_PRESS : GDK_KEY_RELEASE);
-      event->key.time = xevent->time;
-      event->key.state = 0;
-      if (GetKeyState (VK_SHIFT) < 0)
-       event->key.state |= GDK_SHIFT_MASK;
-      if (GetKeyState (VK_CAPITAL) & 0x1)
-       event->key.state |= GDK_LOCK_MASK;
-      if (GetKeyState (VK_CONTROL) < 0)
-       event->key.state |= GDK_CONTROL_MASK;
-      if (xevent->wParam != VK_MENU && GetKeyState (VK_MENU) < 0)
-       event->key.state |= GDK_MOD1_MASK;
-      event->key.string = NULL;
-      event->key.length = 0;
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-    case WM_IME_COMPOSITION:
-      if (!use_IME_COMPOSITION)
-       break;
-      GDK_NOTE (EVENTS, g_print ("WM_IME_COMPOSITION: %#x  %#x\n",
-                                xevent->hwnd, xevent->lParam));
-      if (xevent->lParam & GCS_RESULTSTR)
-       goto wm_char;
-      break;
-
-    case WM_IME_CHAR:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_IME_CHAR: %#x  bytes: %#.04x\n",
-                        xevent->hwnd, xevent->wParam));
-      goto wm_char;
-      
-    case WM_CHAR:
-      GDK_NOTE (EVENTS, 
-               g_print ("WM_CHAR: %#x  char: %#x %#.08x  %s\n",
-                        xevent->hwnd, xevent->wParam, xevent->lParam,
-                        (ignore_WM_CHAR ? "ignored" : "")));
-
-      if (ignore_WM_CHAR)
-       {
-         ignore_WM_CHAR = FALSE;
-         break;
-       }
-
-    wm_char:
-#ifdef NEW_PROPAGATION_CODE
-      if (!propagate (&window, xevent,
-                     k_grab_window, k_grab_owner_events, GDK_ALL_EVENTS_MASK,
-                     doesnt_want_char))
-         break;
-      event->key.window = window;
-#else
-      /* This doesn't handle the rather theorethical case that a window
-       * wants key presses but still wants releases to be propagated,
-       * for instance. Or is that so theorethical?
-       */
-      if (k_grab_window != NULL && !k_grab_owner_events)
-       {
-         /* Keyboard is grabbed with owner_events FALSE */
-         GDK_NOTE (EVENTS,
-                   g_print ("...grabbed, owner_events FALSE, "
-                            "sending to %#x\n",
-                            GDK_DRAWABLE_XID (k_grab_window)));
-         event->key.window = k_grab_window;
-       }
-      else if (!(WINDOW_PRIVATE(window)->event_mask & (GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK)))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (k_grab_window != NULL)
-               {
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 event->key.window = k_grab_window;
-               }
-             else
-               break;
-           }
-         else
-           {
-             window = key_propagate (window, xevent);
-             /* Jump back up */
-             goto wm_char;
-           }
-       }
-      else
-       event->key.window = window;
-
-      g_assert (event->key.window == window);
-#endif
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      if (return_val && (event->key.window == k_grab_window
-                        || (WINDOW_PRIVATE(window)->event_mask & GDK_KEY_RELEASE_MASK)))
-       {
-         if (window == k_grab_window
-             || (WINDOW_PRIVATE(window)->event_mask & GDK_KEY_PRESS_MASK))
-           {
-             /* Append a GDK_KEY_PRESS event to the pushback list
-              * (from which it will be fetched before the release
-              * event).
-              */
-             GdkEvent *event2 = gdk_event_new ();
-             build_keypress_event (WINDOW_PRIVATE(window), event2, xevent);
-             event2->key.window = window;
-             gdk_window_ref (window);
-             gdk_event_queue_append (event2);
-             GDK_NOTE (EVENTS, print_event (event2));
-           }
-         /* Return the key release event.  */
-         build_keyrelease_event (WINDOW_PRIVATE(window), event, xevent);
-       }
-      else if (return_val
-              && (WINDOW_PRIVATE(window)->event_mask & GDK_KEY_PRESS_MASK))
-       {
-         /* Return just the key press event. */
-         build_keypress_event (WINDOW_PRIVATE(window), event, xevent);
-       }
-      else
-       return_val = FALSE;
-
-#if 0 /* Don't reset is_AltGr_key here. Othewise we can't type several
-       * AltGr-accessed chars while keeping the AltGr pressed down
-       * all the time.
-       */
-      is_AltGr_key = FALSE;
-#endif
-      break;
-
-    case WM_LBUTTONDOWN:
-      button = 1;
-      goto buttondown0;
-    case WM_MBUTTONDOWN:
-      button = 2;
-      goto buttondown0;
-    case WM_RBUTTONDOWN:
-      button = 3;
-
-    buttondown0:
-      GDK_NOTE (EVENTS, 
-               g_print ("WM_%cBUTTONDOWN: %#x  (%d,%d)\n",
-                        " LMR"[button],
-                        xevent->hwnd,
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      if (WINDOW_PRIVATE(window)->extension_events != 0
-         && gdk_input_ignore_core)
-       {
-         GDK_NOTE (EVENTS, g_print ("...ignored\n"));
-         break;
-       }
-
-      if (window != curWnd)
-       synthesize_crossing_events (window, xevent);
-
-      event->button.type = GDK_BUTTON_PRESS;
-#ifdef NEW_PROPAGATION_CODE
-      if (!propagate (&window, xevent,
-                     p_grab_window, p_grab_owner_events, p_grab_mask,
-                     doesnt_want_button_press))
-         break;
-      event->button.window = window;
-#else
-    buttondown:
-      mask = WINDOW_PRIVATE(window)->event_mask;
-
-      if (p_grab_window != NULL && !p_grab_owner_events)
-       {
-         /* Pointer is grabbed with owner_events FALSE */
-         GDK_NOTE (EVENTS, g_print ("...grabbed, owner_events FALSE\n"));
-
-         mask = p_grab_mask;
-         if (!(mask & GDK_BUTTON_PRESS_MASK))
-           /* Grabber doesn't want it */
-           break;
-         else
-           event->button.window = p_grab_window;
-         GDK_NOTE (EVENTS, g_print ("...sending to %#x\n",
-                                    GDK_DRAWABLE_XID (p_grab_window)));
-       }
-      else if (!(mask & GDK_BUTTON_PRESS_MASK))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (p_grab_window != NULL)
-               {
-                 /* Pointer is grabbed wíth owner_events TRUE */
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 mask = p_grab_mask;
-                 if (!(mask & GDK_BUTTON_PRESS_MASK))
-                   {
-                     /* Grabber doesn't want it either */
-                     GDK_NOTE (EVENTS, g_print ("...grabber uninterested\n"));
-                     break;
-                   }
-                 else
-                   event->button.window = p_grab_window;
-                 GDK_NOTE (EVENTS, g_print ("...sending to %#x\n",
-                                            GDK_DRAWABLE_XID (p_grab_window)));
-               }
-             else
-               break;
-           }
-         else
-           {
-             window = pointer_propagate (window, xevent);
-             /* Jump back up */
-             goto buttondown; /* What did Dijkstra say? */
-           }
-       }
-      else
-       event->button.window = window;
-
-      g_assert (event->button.window == window);
-#endif
-      /* Emulate X11's automatic active grab */
-      if (!p_grab_window)
-       {
-         /* No explicit active grab, let's start one automatically */
-         gint owner_events =
-           WINDOW_PRIVATE(window)->event_mask
-           & (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK);
-         
-         GDK_NOTE (EVENTS, g_print ("...automatic grab started\n"));
-         gdk_pointer_grab (window,
-                           owner_events,
-                           WINDOW_PRIVATE(window)->event_mask,
-                           NULL, NULL, 0);
-         p_grab_automatic = TRUE;
-       }
-
-      event->button.time = xevent->time;
-      if (window != orig_window)
-       translate_mouse_coords (orig_window, window, xevent);
-      event->button.x = curX = LOWORD (xevent->lParam);
-      event->button.y = curY = HIWORD (xevent->lParam);
-      event->button.x_root = xevent->pt.x;
-      event->button.y_root = xevent->pt.y;
-      event->button.pressure = 0.5;
-      event->button.xtilt = 0;
-      event->button.ytilt = 0;
-      event->button.state = build_pointer_event_state (xevent);
-      event->button.button = 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;
-       }
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-    case WM_LBUTTONUP:
-      button = 1;
-      goto buttonup0;
-    case WM_MBUTTONUP:
-      button = 2;
-      goto buttonup0;
-    case WM_RBUTTONUP:
-      button = 3;
-
-    buttonup0:
-      GDK_NOTE (EVENTS, 
-               g_print ("WM_%cBUTTONUP: %#x  (%d,%d)\n",
-                        " LMR"[button],
-                        xevent->hwnd,
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      if (WINDOW_PRIVATE(window)->extension_events != 0
-         && gdk_input_ignore_core)
-       {
-         GDK_NOTE (EVENTS, g_print ("...ignored\n"));
-         break;
-       }
-
-      if (window != curWnd)
-       synthesize_crossing_events (window, xevent);
-
-      event->button.type = GDK_BUTTON_RELEASE;
-#ifdef NEW_PROPAGATION_CODE
-      if (!propagate (&window, xevent,
-                     p_grab_window, p_grab_owner_events, p_grab_mask,
-                     doesnt_want_button_release))
-         goto maybe_ungrab;
-      event->button.window = window;
-#else
-    buttonup:
-      mask = WINDOW_PRIVATE(window)->event_mask;
-
-      if (p_grab_window != NULL && !p_grab_owner_events)
-       {
-         /* Pointer is grabbed with owner_events FALSE */
-         GDK_NOTE (EVENTS, g_print ("...grabbed, owner_events FALSE\n"));
-
-         mask = p_grab_mask;
-         if (!(mask & GDK_BUTTON_RELEASE_MASK))
-           /* Grabber doesn't want it */
-           goto maybe_ungrab;
-         else
-           event->button.window = p_grab_window;
-         GDK_NOTE (EVENTS, g_print ("...sending to %#x\n",
-                                    GDK_DRAWABLE_XID (p_grab_window)));
-       }
-      else if (!(mask & GDK_BUTTON_RELEASE_MASK))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (p_grab_window != NULL)
-               {
-                 /* Pointer is grabbed wíth owner_events TRUE */
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 mask = p_grab_mask;
-                 if (!(mask & GDK_BUTTON_RELEASE_MASK))
-                   {
-                     /* Grabber doesn't want it either */
-                     GDK_NOTE (EVENTS, g_print ("...grabber uninterested\n"));
-                     goto maybe_ungrab;
-                   }
-                 else
-                   event->button.window = p_grab_window;
-                 GDK_NOTE (EVENTS,
-                           g_print ("...sending to %#x\n",
-                                    GDK_DRAWABLE_XID (p_grab_window)));
-               }
-             else
-               break;
-           }
-         else
-           {
-             window = pointer_propagate (window, xevent);
-             /* Jump back up */
-             goto buttonup;
-           }
-       }
-      else
-       event->button.window = window;
-
-      g_assert (event->button.window == window);
-#endif
-      event->button.time = xevent->time;
-      if (window != orig_window)
-       translate_mouse_coords (orig_window, window, xevent);
-      event->button.x = LOWORD (xevent->lParam);
-      event->button.y = HIWORD (xevent->lParam);
-      event->button.x_root = xevent->pt.x;
-      event->button.y_root = xevent->pt.y;
-      event->button.pressure = 0.5;
-      event->button.xtilt = 0;
-      event->button.ytilt = 0;
-      event->button.state = build_pointer_event_state (xevent);
-      event->button.button = button;
-      event->button.source = GDK_SOURCE_MOUSE;
-      event->button.deviceid = GDK_CORE_POINTER;
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-
-    maybe_ungrab:
-      if (p_grab_window != NULL
-         && p_grab_automatic
-         && (event->button.state & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK)) == 0)
-       gdk_pointer_ungrab (0);
-      break;
-
-    case WM_MOUSEMOVE:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_MOUSEMOVE: %#x  %#x (%d,%d)\n",
-                        xevent->hwnd, xevent->wParam,
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      /* If we haven't moved, don't create any event.
-       * Windows sends WM_MOUSEMOVE messages after button presses
-       * even if the mouse doesn't move. This disturbs gtk.
-       */
-      if (window == curWnd
-         && LOWORD (xevent->lParam) == curX
-         && HIWORD (xevent->lParam) == curY)
-       break;
-
-      /* HB: only process mouse move messages if we own the active window. */
-      GetWindowThreadProcessId(GetActiveWindow(), &pidActWin);
-      GetWindowThreadProcessId(xevent->hwnd, &pidThis);
-      if (pidActWin != pidThis)
-       break;
-
-      if (window != curWnd)
-       synthesize_crossing_events (window, xevent);
-
-      if (WINDOW_PRIVATE(window)->extension_events != 0
-         && gdk_input_ignore_core)
-       {
-         GDK_NOTE (EVENTS, g_print ("...ignored\n"));
-         break;
-       }
-
-      event->motion.type = GDK_MOTION_NOTIFY;
-#ifdef NEW_PROPAGATION_CODE
-      if (!propagate (&window, xevent,
-                     p_grab_window, p_grab_owner_events, p_grab_mask,
-                     doesnt_want_button_motion))
-         break;
-      event->motion.window = window;
-#else
-    mousemotion:
-      mask = WINDOW_PRIVATE(window)->event_mask;
-
-      if (p_grab_window != NULL && !p_grab_owner_events)
-       {
-         /* Pointer is grabbed with owner_events FALSE */
-         GDK_NOTE (EVENTS, g_print ("...grabbed, owner_events FALSE\n"));
-
-         mask = p_grab_mask;
-         if (!((mask & GDK_POINTER_MOTION_MASK)
-               || ((xevent->wParam & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON))
-                   && (mask & GDK_BUTTON_MOTION_MASK))
-               || ((xevent->wParam & MK_LBUTTON)
-                   && (mask & GDK_BUTTON1_MOTION_MASK))
-               || ((xevent->wParam & MK_MBUTTON)
-                   && (mask & GDK_BUTTON2_MOTION_MASK))
-               || ((xevent->wParam & MK_RBUTTON)
-                   && (mask & GDK_BUTTON3_MOTION_MASK))))
-           /* Grabber doesn't want it */
-           break;
-         else
-           event->motion.window = p_grab_window;
-         GDK_NOTE (EVENTS, g_print ("...sending to %#x\n",
-                                    GDK_DRAWABLE_XID (p_grab_window)));
-       }
-      else if (!((mask & GDK_POINTER_MOTION_MASK)
-                || ((xevent->wParam & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON))
-                    && (mask & GDK_BUTTON_MOTION_MASK))
-                || ((xevent->wParam & MK_LBUTTON)
-                    && (mask & GDK_BUTTON1_MOTION_MASK))
-                || ((xevent->wParam & MK_MBUTTON)
-                    && (mask & GDK_BUTTON2_MOTION_MASK))
-                || ((xevent->wParam & MK_RBUTTON)
-                    && (mask & GDK_BUTTON3_MOTION_MASK))))
-       {
-         /* Owner doesn't want it, propagate to parent. */
-         if (WINDOW_PRIVATE(window)->parent == (GdkWindow *) gdk_root_parent)
-           {
-             /* No parent; check if grabbed */
-             if (p_grab_window != NULL)
-               {
-                 /* Pointer is grabbed wíth owner_events TRUE */
-                 GDK_NOTE (EVENTS, g_print ("...undelivered, but grabbed\n"));
-                 mask = p_grab_mask;
-                 if (!((p_grab_mask & GDK_POINTER_MOTION_MASK)
-                       || ((xevent->wParam & (MK_LBUTTON|MK_MBUTTON|MK_RBUTTON))
-                           && (mask & GDK_BUTTON_MOTION_MASK))
-                       || ((xevent->wParam & MK_LBUTTON)
-                           && (mask & GDK_BUTTON1_MOTION_MASK))
-                       || ((xevent->wParam & MK_MBUTTON)
-                           && (mask & GDK_BUTTON2_MOTION_MASK))
-                       || ((xevent->wParam & MK_RBUTTON)
-                           && (mask & GDK_BUTTON3_MOTION_MASK))))
-                   {
-                     /* Grabber doesn't want it either */
-                     GDK_NOTE (EVENTS, g_print ("...grabber uninterested\n"));
-                     break;
-                   }
-                 else
-                   event->motion.window = p_grab_window;
-                 GDK_NOTE (EVENTS,
-                           g_print ("...sending to %#x\n",
-                                    GDK_DRAWABLE_XID (p_grab_window)));
-               }
-             else
-               break;
-           }
-         else
-           {
-             window = pointer_propagate (window, xevent);
-             /* Jump back up */
-             goto mousemotion;
-           }
-       }
-      else
-       event->motion.window = window;
-#endif
-      event->motion.time = xevent->time;
-      if (window != orig_window)
-       translate_mouse_coords (orig_window, window, xevent);
-      event->motion.x = curX = LOWORD (xevent->lParam);
-      event->motion.y = curY = HIWORD (xevent->lParam);
-      event->motion.x_root = xevent->pt.x;
-      event->motion.y_root = xevent->pt.y;
-      curXroot = event->motion.x_root;
-      curYroot = event->motion.y_root;
-      event->motion.pressure = 0.5;
-      event->motion.xtilt = 0;
-      event->motion.ytilt = 0;
-      event->motion.state = build_pointer_event_state (xevent);
-      event->motion.is_hint = FALSE;
-      event->motion.source = GDK_SOURCE_MOUSE;
-      event->motion.deviceid = GDK_CORE_POINTER;
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-    case WM_NCMOUSEMOVE:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_NCMOUSEMOVE: %#x  x,y: %d %d\n",
-                        xevent->hwnd,
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-      if (p_TrackMouseEvent == NULL
-         && curWnd != NULL
-         && (WINDOW_PRIVATE(curWnd)->event_mask & GDK_LEAVE_NOTIFY_MASK))
-       {
-         GDK_NOTE (EVENTS, g_print ("...synthesizing LEAVE_NOTIFY event\n"));
-
-         event->crossing.type = GDK_LEAVE_NOTIFY;
-         event->crossing.window = curWnd;
-         event->crossing.subwindow = NULL;
-         event->crossing.time = xevent->time;
-         event->crossing.x = curX;
-         event->crossing.y = curY;
-         event->crossing.x_root = curXroot;
-         event->crossing.y_root = curYroot;
-         event->crossing.mode = GDK_CROSSING_NORMAL;
-         event->crossing.detail = GDK_NOTIFY_NONLINEAR;
-
-         event->crossing.focus = TRUE; /* ??? */
-         event->crossing.state = 0; /* ??? */
-         return_val = TRUE;
-       }
-
-      if (curWnd)
-       {
-         gdk_window_unref (curWnd);
-         curWnd = NULL;
-       }
-
-      break;
-
-#ifdef USE_TRACKMOUSEEVENT
-    case WM_MOUSELEAVE:
-      GDK_NOTE (EVENTS, g_print ("WM_MOUSELEAVE: %#x\n", xevent->hwnd));
-
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_LEAVE_NOTIFY_MASK))
-       break;
-
-      event->crossing.type = GDK_LEAVE_NOTIFY;
-      event->crossing.window = window;
-      event->crossing.subwindow = NULL;
-      event->crossing.time = xevent->time;
-      event->crossing.x = curX;
-      event->crossing.y = curY;
-      event->crossing.x_root = curXroot;
-      event->crossing.y_root = curYroot;
-      event->crossing.mode = GDK_CROSSING_NORMAL;
-      if (curWnd
-         && IsChild (GDK_DRAWABLE_XID (curWnd), GDK_DRAWABLE_XID (window)))
-       event->crossing.detail = GDK_NOTIFY_INFERIOR;
-      else if (curWnd
-              && IsChild (GDK_DRAWABLE_XID (window), GDK_DRAWABLE_XID (curWnd)))
-       event->crossing.detail = GDK_NOTIFY_ANCESTOR;
-      else
-       event->crossing.detail = GDK_NOTIFY_NONLINEAR;
-
-      event->crossing.focus = TRUE; /* ??? */
-      event->crossing.state = 0; /* ??? */
-
-      if (curWnd)
-       {
-         gdk_window_unref (curWnd);
-         curWnd = NULL;
-       }
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-#endif
-       
-    case WM_SETFOCUS:
-    case WM_KILLFOCUS:
-      GDK_NOTE (EVENTS, g_print ("WM_%sFOCUS: %#x\n",
-                                (xevent->message == WM_SETFOCUS ?
-                                 "SET" : "KILL"),
-                                xevent->hwnd));
-      
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_FOCUS_CHANGE_MASK))
-       break;
-
-      event->focus_change.type = GDK_FOCUS_CHANGE;
-      event->focus_change.window = window;
-      event->focus_change.in = (xevent->message == WM_SETFOCUS);
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-    case WM_ERASEBKGND:
-      GDK_NOTE (EVENTS, g_print ("WM_ERASEBKGND: %#x  dc %#x\n",
-                                xevent->hwnd, xevent->wParam));
-      
-      if (GDK_DRAWABLE_DESTROYED (window))
-       break;
-
-      colormap_private = (GdkColormapPrivate *) WINDOW_PRIVATE(window)->drawable.colormap;
-      hdc = (HDC) xevent->wParam;
-      if (colormap_private
-         && colormap_private->xcolormap->rc_palette)
-       {
-         int k;
-
-         if (SelectPalette (hdc,  colormap_private->xcolormap->palette,
-                            FALSE) == NULL)
-           g_warning ("WM_ERASEBKGND: SelectPalette failed");
-         if ((k = RealizePalette (hdc)) == GDI_ERROR)
-           g_warning ("WM_ERASEBKGND: RealizePalette failed");
-#if 0
-         g_print ("WM_ERASEBKGND: selected %#x, realized %d colors\n",
-                  colormap_private->xcolormap->palette, k);
-#endif
-       }
-      *ret_val_flagp = TRUE;
-      *ret_valp = 1;
-
-      if (WINDOW_PRIVATE(window)->bg_type == GDK_WIN32_BG_TRANSPARENT)
-       break;
-
-      if (WINDOW_PRIVATE(window)->bg_type == GDK_WIN32_BG_PARENT_RELATIVE)
-       {
-         /* If this window should have the same background as the
-          * parent, fetch the parent. (And if the same goes for
-          * the parent, fetch the grandparent, etc.)
-          */
-         while (window
-                && WINDOW_PRIVATE(window)->bg_type == GDK_WIN32_BG_PARENT_RELATIVE)
-           {
-             gdk_window_unref (window);
-             window = WINDOW_PRIVATE(window)->parent;
-             gdk_window_ref (window);
-           }
-       }
-
-      if (WINDOW_PRIVATE(window)->bg_type == GDK_WIN32_BG_PIXEL)
-       {
-         COLORREF bg;
-         GetClipBox (hdc, &rect);
-         GDK_NOTE (EVENTS,
-                   g_print ("...%dx%d@+%d+%d BG_PIXEL %s\n",
-                            rect.right - rect.left,
-                            rect.bottom - rect.top,
-                            rect.left, rect.top,
-                            gdk_color_to_string (&WINDOW_PRIVATE(window)->bg_pixel)));
-         bg = GetNearestColor
-           (hdc, RGB (WINDOW_PRIVATE(window)->bg_pixel.red >> 8,
-                      WINDOW_PRIVATE(window)->bg_pixel.green >> 8,
-                      WINDOW_PRIVATE(window)->bg_pixel.blue >> 8));
-         hbr = CreateSolidBrush (bg);
-#if 0
-         g_print ("...CreateSolidBrush (%.08x) = %.08x\n", bg, hbr);
-#endif
-         if (!FillRect (hdc, &rect, hbr))
-           g_warning ("WM_ERASEBKGND: FillRect failed");
-         DeleteObject (hbr);
-       }
-      else if (WINDOW_PRIVATE(window)->bg_type == GDK_WIN32_BG_PIXMAP)
-       {
-         pixmap_private =
-           (GdkDrawablePrivate*) WINDOW_PRIVATE(window)->bg_pixmap;
-         GetClipBox (hdc, &rect);
-
-         if (pixmap_private->width <= 8
-             && pixmap_private->height <= 8)
-           {
-             GDK_NOTE (EVENTS, g_print ("...small pixmap, using brush\n"));
-             hbr = CreatePatternBrush (pixmap_private->xwindow);
-             if (!FillRect (hdc, &rect, hbr))
-               g_warning ("WM_ERASEBKGND: FillRect failed");
-             DeleteObject (hbr);
-           }
-         else
-           {
-             GDK_NOTE (EVENTS,
-                       g_print ("...blitting pixmap %#x (%dx%d) "
-                                "all over the place,\n"
-                                "...clip box = %dx%d@+%d+%d\n",
-                                pixmap_private->xwindow,
-                                pixmap_private->width, pixmap_private->height,
-                                rect.right - rect.left, rect.bottom - rect.top,
-                                rect.left, rect.top));
-
-             if (!(bgdc = CreateCompatibleDC (hdc)))
-               {
-                 g_warning ("WM_ERASEBKGND: CreateCompatibleDC failed");
-                 break;
-               }
-             if (!(oldbitmap = SelectObject (bgdc, pixmap_private->xwindow)))
-               {
-                 g_warning ("WM_ERASEBKGND: SelectObject failed");
-                 DeleteDC (bgdc);
-                 break;
-               }
-             i = 0;
-             while (i < rect.right)
-               {
-                 j = 0;
-                 while (j < rect.bottom)
-                   {
-                     if (i + pixmap_private->width >= rect.left
-                         && j + pixmap_private->height >= rect.top)
-                       {
-                         if (!BitBlt (hdc, i, j,
-                                      pixmap_private->width, pixmap_private->height,
-                                      bgdc, 0, 0, SRCCOPY))
-                           {
-                             g_warning ("WM_ERASEBKGND: BitBlt failed");
-                             goto loopexit;
-                           }
-                       }
-                     j += pixmap_private->height;
-                   }
-                 i += pixmap_private->width;
-               }
-           loopexit:
-             SelectObject (bgdc, oldbitmap);
-             DeleteDC (bgdc);
-           }
-       }
-      else
-       {
-         GDK_NOTE (EVENTS, g_print ("...BLACK_BRUSH (?)\n"));
-         hbr = GetStockObject (BLACK_BRUSH);
-         GetClipBox (hdc, &rect);
-         if (!FillRect (hdc, &rect, hbr))
-           g_warning ("WM_ERASEBKGND: FillRect failed");
-       }
-      break;
-
-    case WM_PAINT:
-      hdc = BeginPaint (xevent->hwnd, &paintstruct);
-
-      GDK_NOTE (EVENTS,
-               g_print ("WM_PAINT: %#x  %dx%d@+%d+%d %s dc %#x\n",
-                        xevent->hwnd,
-                        paintstruct.rcPaint.right - paintstruct.rcPaint.left,
-                        paintstruct.rcPaint.bottom - paintstruct.rcPaint.top,
-                        paintstruct.rcPaint.left, paintstruct.rcPaint.top,
-                        (paintstruct.fErase ? "erase" : ""),
-                        hdc));
-
-      EndPaint (xevent->hwnd, &paintstruct);
-
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_EXPOSURE_MASK))
-       break;
-
-      event->expose.type = GDK_EXPOSE;
-      event->expose.window = window;
-      event->expose.area.x = paintstruct.rcPaint.left;
-      event->expose.area.y = paintstruct.rcPaint.top;
-      event->expose.area.width = paintstruct.rcPaint.right - paintstruct.rcPaint.left;
-      event->expose.area.height = paintstruct.rcPaint.bottom - paintstruct.rcPaint.top;
-      event->expose.count = 0;
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      if (return_val)
-       {
-         GList *list = queued_events;
-         while (list != NULL )
-           {
-             if ((((GdkEvent *)list->data)->any.type == GDK_EXPOSE) &&
-                 (((GdkEvent *)list->data)->any.window == window) &&
-                 !(((GdkEventPrivate *)list->data)->flags & GDK_EVENT_PENDING))
-               ((GdkEvent *)list->data)->expose.count++;
-             
-             list = list->next;
-           }
-       }
-      break;
-
-    case WM_SETCURSOR:
-      GDK_NOTE (EVENTS, g_print ("WM_SETCURSOR: %#x %#x %#x\n",
-                                xevent->hwnd,
-                                LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      if (LOWORD (xevent->lParam) != HTCLIENT)
-       break;
-      if (p_grab_window != NULL && p_grab_cursor != NULL)
-       {
-         GDK_NOTE (EVENTS, g_print ("...SetCursor(%#x)\n", p_grab_cursor));
-         SetCursor (p_grab_cursor);
-       }
-      else if (!GDK_DRAWABLE_DESTROYED (window)
-              && WINDOW_PRIVATE(window)->xcursor)
-       {
-         GDK_NOTE (EVENTS, g_print ("...SetCursor(%#x)\n",
-                                    WINDOW_PRIVATE(window)->xcursor));
-         SetCursor (WINDOW_PRIVATE(window)->xcursor);
-       }
-
-      if (window != curWnd)
-       synthesize_crossing_events (window, xevent);
-
-      *ret_val_flagp = TRUE;
-      *ret_valp = FALSE;
-      break;
-
-    case WM_SHOWWINDOW:
-      GDK_NOTE (EVENTS, g_print ("WM_SHOWWINDOW: %#x  %d\n",
-                                xevent->hwnd,
-                                xevent->wParam));
-
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_STRUCTURE_MASK))
-       break;
-
-      event->any.type = (xevent->wParam ? GDK_MAP : GDK_UNMAP);
-      event->any.window = window;
-
-      if (event->any.type == GDK_UNMAP
-         && p_grab_window == window)
-       gdk_pointer_ungrab (xevent->time);
-
-      if (event->any.type == GDK_UNMAP
-         && k_grab_window == window)
-       gdk_keyboard_ungrab (xevent->time);
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-    case WM_SIZE:
-      GDK_NOTE (EVENTS,
-               g_print ("WM_SIZE: %#x  %s %dx%d\n",
-                        xevent->hwnd,
-                        (xevent->wParam == SIZE_MAXHIDE ? "MAXHIDE" :
-                         (xevent->wParam == SIZE_MAXIMIZED ? "MAXIMIZED" :
-                          (xevent->wParam == SIZE_MAXSHOW ? "MAXSHOW" :
-                           (xevent->wParam == SIZE_MINIMIZED ? "MINIMIZED" :
-                            (xevent->wParam == SIZE_RESTORED ? "RESTORED" : "?"))))),
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_STRUCTURE_MASK))
-       break;
-
-      if (xevent->wParam == SIZE_MINIMIZED)
-       {
-         event->any.type = GDK_UNMAP;
-         event->any.window = window;
-
-         if (p_grab_window == window)
-           gdk_pointer_ungrab (xevent->time);
-
-         if (k_grab_window == window)
-           gdk_keyboard_ungrab (xevent->time);
-
-         return_val = !GDK_DRAWABLE_DESTROYED (window);
-       }
-      else if ((xevent->wParam == SIZE_RESTORED
-               || xevent->wParam == SIZE_MAXIMIZED)
-#if 1
-              && GDK_DRAWABLE_TYPE (window) != GDK_WINDOW_CHILD
-#endif
-                                                                )
-       {
-         if (LOWORD (xevent->lParam) == 0)
-           break;
-
-         event->configure.type = GDK_CONFIGURE;
-         event->configure.window = window;
-         pt.x = 0;
-         pt.y = 0;
-         ClientToScreen (xevent->hwnd, &pt);
-         event->configure.x = pt.x;
-         event->configure.y = pt.y;
-         event->configure.width = LOWORD (xevent->lParam);
-         event->configure.height = HIWORD (xevent->lParam);
-         WINDOW_PRIVATE(window)->x = event->configure.x;
-         WINDOW_PRIVATE(window)->y = event->configure.y;
-         WINDOW_PRIVATE(window)->drawable.width = event->configure.width;
-         WINDOW_PRIVATE(window)->drawable.height = event->configure.height;
-         if (WINDOW_PRIVATE(window)->resize_count > 1)
-           WINDOW_PRIVATE(window)->resize_count -= 1;
-         
-         return_val = !GDK_DRAWABLE_DESTROYED (window);
-         if (return_val
-             && WINDOW_PRIVATE(window)->extension_events != 0
-             && gdk_input_vtable.configure_event)
-           gdk_input_vtable.configure_event (&event->configure, window);
-       }
-      break;
-
-    case WM_GETMINMAXINFO:
-      GDK_NOTE (EVENTS, g_print ("WM_GETMINMAXINFO: %#x\n", xevent->hwnd));
-
-      lpmmi = (MINMAXINFO*) xevent->lParam;
-      if (WINDOW_PRIVATE(window)->hint_flags & GDK_HINT_MIN_SIZE)
-       {
-         lpmmi->ptMinTrackSize.x = WINDOW_PRIVATE(window)->hint_min_width;
-         lpmmi->ptMinTrackSize.y = WINDOW_PRIVATE(window)->hint_min_height;
-       }
-      if (WINDOW_PRIVATE(window)->hint_flags & GDK_HINT_MAX_SIZE)
-       {
-         lpmmi->ptMaxTrackSize.x = WINDOW_PRIVATE(window)->hint_max_width;
-         lpmmi->ptMaxTrackSize.y = WINDOW_PRIVATE(window)->hint_max_height;
-           
-         lpmmi->ptMaxSize.x = WINDOW_PRIVATE(window)->hint_max_width;
-         lpmmi->ptMaxSize.y = WINDOW_PRIVATE(window)->hint_max_height;
-       }
-      break;
-
-    case WM_MOVE:
-      GDK_NOTE (EVENTS, g_print ("WM_MOVE: %#x  (%d,%d)\n",
-                                xevent->hwnd,
-                                LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-
-      if (!(WINDOW_PRIVATE(window)->event_mask & GDK_STRUCTURE_MASK))
-       break;
-
-      if (GDK_DRAWABLE_TYPE (window) != GDK_WINDOW_CHILD)
-       {
-         event->configure.type = GDK_CONFIGURE;
-         event->configure.window = window;
-         event->configure.x = LOWORD (xevent->lParam);
-         event->configure.y = HIWORD (xevent->lParam);
-         GetClientRect (xevent->hwnd, &rect);
-         event->configure.width = rect.right;
-         event->configure.height = rect.bottom;
-         WINDOW_PRIVATE(window)->x = event->configure.x;
-         WINDOW_PRIVATE(window)->y = event->configure.y;
-         WINDOW_PRIVATE(window)->drawable.width = event->configure.width;
-         WINDOW_PRIVATE(window)->drawable.height = event->configure.height;
-         
-         return_val = !GDK_DRAWABLE_DESTROYED (window);
-       }
-      break;
-
-    case WM_CLOSE:
-      GDK_NOTE (EVENTS, g_print ("WM_CLOSE: %#x\n", xevent->hwnd));
-
-      event->any.type = GDK_DELETE;
-      event->any.window = window;
-      
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-#if 0
-    /* No, don't use delayed rendering after all. It works only if the
-     * delayed SetClipboardData is called from the WindowProc, it
-     * seems. (The #else part below is test code for that. It succeeds
-     * in setting the clipboard data. But if I call SetClipboardData
-     * in gdk_property_change (as a consequence of the
-     * GDK_SELECTION_REQUEST event), it fails.  I deduce that this is
-     * because delayed rendering requires that SetClipboardData is
-     * called in the window procedure.)
-     */
-    case WM_RENDERFORMAT:
-    case WM_RENDERALLFORMATS:
-      flag = FALSE;
-      GDK_NOTE (EVENTS, flag = TRUE);
-      GDK_NOTE (SELECTION, flag = TRUE);
-      if (flag)
-       g_print ("WM_%s: %#x %#x (%s)\n",
-                (xevent->message == WM_RENDERFORMAT ? "RENDERFORMAT" :
-                 "RENDERALLFORMATS"),
-                xevent->hwnd,
-                xevent->wParam,
-                (xevent->wParam == CF_TEXT ? "CF_TEXT" :
-                 (xevent->wParam == CF_DIB ? "CF_DIB" :
-                  (xevent->wParam == CF_UNICODETEXT ? "CF_UNICODETEXT" :
-                   (GetClipboardFormatName (xevent->wParam, buf, sizeof (buf)), buf)))));
-
-#if 0
-      event->selection.type = GDK_SELECTION_REQUEST;
-      event->selection.window = window;
-      event->selection.selection = gdk_clipboard_atom;
-      if (xevent->wParam == CF_TEXT)
-       event->selection.target = GDK_TARGET_STRING;
-      else
-       {
-         GetClipboardFormatName (xevent->wParam, buf, sizeof (buf));
-         event->selection.target = gdk_atom_intern (buf, FALSE);
-       }
-      event->selection.property = gdk_selection_property;
-      event->selection.requestor = (guint32) xevent->hwnd;
-      event->selection.time = xevent->time;
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-#else
-      /* Test code, to see if SetClipboardData works when called from
-       * the window procedure.
-       */
-      {
-       HGLOBAL hdata = GlobalAlloc (GMEM_MOVEABLE|GMEM_DDESHARE, 10);
-       char *ptr = GlobalLock (hdata);
-       strcpy (ptr, "Huhhaa");
-       GlobalUnlock (hdata);
-       if (!SetClipboardData (CF_TEXT, hdata))
-         g_print ("SetClipboardData failed: %d\n", GetLastError ());
-      }
-      *ret_valp = 0;
-      *ret_val_flagp = TRUE;
-      return_val = FALSE;
-#endif
-      break;
-#endif /* No delayed rendering */
-
-    case WM_DESTROY:
-      GDK_NOTE (EVENTS, g_print ("WM_DESTROY: %#x\n", xevent->hwnd));
-
-      event->any.type = GDK_DESTROY;
-      event->any.window = window;
-      if (window != NULL && window == curWnd)
-       {
-         gdk_window_unref (curWnd);
-         curWnd = NULL;
-       }
-
-      if (p_grab_window == window)
-       gdk_pointer_ungrab (xevent->time);
-
-      if (k_grab_window == window)
-       gdk_keyboard_ungrab (xevent->time);
-
-      return_val = !GDK_DRAWABLE_DESTROYED (window);
-      break;
-
-#ifdef HAVE_WINTAB
-      /* Handle WINTAB events here, as we know that gdkinput.c will
-       * use the fixed WT_DEFBASE as lcMsgBase, and we thus can use the
-       * constants as case labels.
-       */
-    case WT_PACKET:
-      GDK_NOTE (EVENTS, g_print ("WT_PACKET: %d %#x\n",
-                                xevent->wParam, xevent->lParam));
-      goto wintab;
-      
-    case WT_CSRCHANGE:
-      GDK_NOTE (EVENTS, g_print ("WT_CSRCHANGE: %d %#x\n",
-                                xevent->wParam, xevent->lParam));
-      goto wintab;
-      
-    case WT_PROXIMITY:
-      GDK_NOTE (EVENTS,
-               g_print ("WT_PROXIMITY: %#x %d %d\n",
-                        xevent->wParam,
-                        LOWORD (xevent->lParam), HIWORD (xevent->lParam)));
-      /* Fall through */
-    wintab:
-      return_val = gdk_input_vtable.other_event(event, xevent);
-      break;
-#endif
-    }
-
-bypass_switch:
-
-  if (return_val)
-    {
-      if (event->any.window)
-       gdk_window_ref (event->any.window);
-      if (((event->any.type == GDK_ENTER_NOTIFY) ||
-          (event->any.type == GDK_LEAVE_NOTIFY)) &&
-         (event->crossing.subwindow != NULL))
-       gdk_window_ref (event->crossing.subwindow);
-
-      GDK_NOTE (EVENTS, print_event (event));
-    }
-  else
-    {
-      /* Mark this event as having no resources to be freed */
-      event->any.window = NULL;
-      event->any.type = GDK_NOTHING;
-    }
-
-  if (window)
-    gdk_window_unref (window);
-  
-  return return_val;
-}
-
-static void
-gdk_events_queue (void)
-{
-  GList *node;
-  GdkEvent *event;
-  MSG msg;
-  LRESULT lres;
-
-  while (!gdk_event_queue_find_first()
-        && PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
-    {
-      GDK_NOTE (EVENTS, g_print ("PeekMessage: %#x %#x\n",
-                                msg.hwnd, msg.message));
-
-      if (paimmmpo == NULL
-         || (paimmmpo->lpVtbl->OnTranslateMessage) (paimmmpo, &msg) != S_OK)
-       TranslateMessage (&msg);
-
-#ifdef USE_DISPATCHMESSAGE
-      if (msg.message == g_pipe_readable_msg)
-       {
-         GDK_NOTE (EVENTS, g_print ("g_pipe_readable_msg: %d %d\n",
-                                    msg.wParam, msg.lParam));
-
-         g_io_channel_win32_pipe_readable (msg.wParam, msg.lParam);
-
-         continue;
-       }
-      
-      DispatchMessage (&msg);
-#else
-      event = gdk_event_new ();
-      
-      event->any.type = GDK_NOTHING;
-      event->any.window = NULL;
-      event->any.send_event = FALSE;
-
-      ((GdkEventPrivate *)event)->flags |= GDK_EVENT_PENDING;
-
-      gdk_event_queue_append (event);
-      node = queued_tail;
-
-      if (gdk_event_translate (event, &msg, NULL, NULL))
-       ((GdkEventPrivate *)event)->flags &= ~GDK_EVENT_PENDING;
-      else
-       {
-         if (paimmapp == NULL
-             || (paimmapp->lpVtbl->OnDefWindowProc) (paimmapp, msg.hwnd,
-                                                     msg.message,
-                                                     msg.wParam, msg.lParam,
-                                                     &lres) == S_FALSE)
-           DefWindowProc (msg.hwnd, msg.message, msg.wParam, msg.lParam);
-         gdk_event_queue_remove_link (node);
-         g_list_free_1 (node);
-         gdk_event_free (event);
-       }
-#endif
-    }
-}
-
-static gboolean  
-gdk_event_prepare (gpointer  source_data, 
-                  GTimeVal *current_time,
-                  gint     *timeout)
-{
-  MSG msg;
-  gboolean retval;
-  
-  GDK_THREADS_ENTER ();
-
-  *timeout = -1;
-
-  retval = (gdk_event_queue_find_first () != NULL)
-             || PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE);
-
-  GDK_THREADS_LEAVE ();
-
-  return retval;
-}
-
-static gboolean  
-gdk_event_check (gpointer  source_data,
-                GTimeVal *current_time)
-{
-  MSG msg;
-  gboolean retval;
-  
-  GDK_THREADS_ENTER ();
-
-  if (event_poll_fd.revents & G_IO_IN)
-    retval = (gdk_event_queue_find_first () != NULL)
-             || PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE);
-  else
-    retval = FALSE;
-
-  GDK_THREADS_LEAVE ();
-
-  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,
-                   gpointer  user_data)
-{
-  GdkEvent *event;
-  GDK_THREADS_ENTER ();
-
-  gdk_events_queue();
-  event = gdk_event_unqueue();
-
-  if (event)
-    {
-      if (event_func)
-       (*event_func) (event, event_data);
-      
-      gdk_event_free (event);
-    }
-  
-  GDK_THREADS_LEAVE ();
-
-  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);
-}
-
-void
-gdk_event_button_generate (GdkEvent *event)
-{
-  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;
-    }
-}
-
-/* Sends a ClientMessage to all toplevel client windows */
-gboolean
-gdk_event_send_client_message (GdkEvent *event, guint32 xid)
-{
-  /* XXX */
-  return FALSE;
-}
-
-void
-gdk_event_send_clientmessage_toall (GdkEvent *event)
-{
-  /* XXX */
-}
-
diff --git a/gdk/win32/gdkfont-win32.c b/gdk/win32/gdkfont-win32.c
deleted file mode 100644 (file)
index 3cee42d..0000000
+++ /dev/null
@@ -1,1501 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <ctype.h>
-
-#include "gdkfont.h"
-#include "gdkx.h"
-
-static GHashTable *font_name_hash = NULL;
-static GHashTable *fontset_name_hash = NULL;
-
-static void
-gdk_font_hash_insert (GdkFontType  type,
-                     GdkFont     *font,
-                     const gchar *font_name)
-{
-  GdkFontPrivate *private = (GdkFontPrivate *) font;
-  GHashTable **hashp = (type == GDK_FONT_FONT) ?
-    &font_name_hash : &fontset_name_hash;
-
-  if (!*hashp)
-    *hashp = g_hash_table_new (g_str_hash, g_str_equal);
-
-  private->names = g_slist_prepend (private->names, g_strdup (font_name));
-  g_hash_table_insert (*hashp, private->names->data, font);
-}
-
-static void
-gdk_font_hash_remove (GdkFontType type,
-                     GdkFont    *font)
-{
-  GdkFontPrivate *private = (GdkFontPrivate *) font;
-  GSList *tmp_list;
-  GHashTable *hash = (type == GDK_FONT_FONT) ?
-    font_name_hash : fontset_name_hash;
-
-  tmp_list = private->names;
-  while (tmp_list)
-    {
-      g_hash_table_remove (hash, tmp_list->data);
-      g_free (tmp_list->data);
-      
-      tmp_list = tmp_list->next;
-    }
-
-  g_slist_free (private->names);
-  private->names = NULL;
-}
-
-static GdkFont *
-gdk_font_hash_lookup (GdkFontType  type,
-                     const gchar *font_name)
-{
-  GdkFont *result;
-  GHashTable *hash = (type == GDK_FONT_FONT) ?
-    font_name_hash : fontset_name_hash;
-
-  if (!hash)
-    return NULL;
-  else
-    {
-      result = g_hash_table_lookup (hash, font_name);
-      if (result)
-       gdk_font_ref (result);
-      
-      return result;
-    }
-}
-
-static const char *
-charset_name (DWORD charset)
-{
-  switch (charset)
-    {
-    case ANSI_CHARSET: return "ansi";
-    case DEFAULT_CHARSET: return "default";
-    case SYMBOL_CHARSET: return "symbol";
-    case SHIFTJIS_CHARSET: return "shiftjis";
-    case HANGEUL_CHARSET: return "hangeul";
-    case GB2312_CHARSET: return "gb2312";
-    case CHINESEBIG5_CHARSET: return "big5";
-    case JOHAB_CHARSET: return "johab";
-    case HEBREW_CHARSET: return "hebrew";
-    case ARABIC_CHARSET: return "arabic";
-    case GREEK_CHARSET: return "greek";
-    case TURKISH_CHARSET: return "turkish";
-    case VIETNAMESE_CHARSET: return "vietnamese";
-    case THAI_CHARSET: return "thai";
-    case EASTEUROPE_CHARSET: return "easteurope";
-    case RUSSIAN_CHARSET: return "russian";
-    case MAC_CHARSET: return "mac";
-    case BALTIC_CHARSET: return "baltic";
-    }
-  return "unknown";
-}
-
-static gint num_fonts;
-static gint font_names_size;
-static gchar **xfontnames;
-
-static gchar *
-logfont_to_xlfd (const LOGFONT *lfp,
-                int            size,
-                int            res,
-                int            avg_width)
-{
-  const gchar *weight;
-  const gchar *registry, *encoding;
-  int point_size;
-  static int logpixelsy = 0;
-  gchar facename[LF_FACESIZE*3];
-  gchar *p;
-  const gchar *q;
-
-  if (logpixelsy == 0)
-    {
-      logpixelsy = GetDeviceCaps (gdk_DC, LOGPIXELSY);
-    }
-
-  if (lfp->lfWeight >= FW_HEAVY)
-    weight = "heavy";
-  else if (lfp->lfWeight >= FW_EXTRABOLD)
-    weight = "extrabold";
-  else if (lfp->lfWeight >= FW_BOLD)
-    weight = "bold";
-#ifdef FW_DEMIBOLD
-  else if (lfp->lfWeight >= FW_DEMIBOLD)
-    weight = "demibold";
-#endif
-  else if (lfp->lfWeight >= FW_MEDIUM)
-    weight = "medium";
-  else if (lfp->lfWeight >= FW_NORMAL)
-    weight = "normal";
-  else if (lfp->lfWeight >= FW_LIGHT)
-    weight = "light";
-  else if (lfp->lfWeight >= FW_EXTRALIGHT)
-    weight = "extralight";
-  else if (lfp->lfWeight >= FW_THIN)
-    weight = "thin";
-  else
-    weight = "regular";
-
-  switch (lfp->lfCharSet)
-    {
-    case ANSI_CHARSET:
-      registry = "iso8859";
-      encoding = "1";
-      break;
-    case SHIFTJIS_CHARSET:
-      registry = "jisx0208.1983";
-      encoding = "0";
-      break;
-    case HANGEUL_CHARSET:
-      registry = "ksc5601.1987";
-      encoding = "0";
-      break;
-    case GB2312_CHARSET:
-      registry = "gb2312.1980";
-      encoding = "0";
-      break;
-    case CHINESEBIG5_CHARSET:
-      registry = "big5";
-      encoding = "0";
-      break;
-    case GREEK_CHARSET:
-      registry = "iso8859";
-      encoding = "7";
-      break;
-    case TURKISH_CHARSET:
-      registry = "iso8859";
-      encoding = "9";
-      break;
-#if 0 /* Not a good idea, I think, to use ISO8859-8 and -6 for the Windows
-       * hebrew and arabic codepages, they differ too much.
-       */
-    case HEBREW_CHARSET:
-      registry = "iso8859";
-      encoding = "8";
-      break;
-    case ARABIC_CHARSET:
-      registry = "iso8859";
-      encoding = "6";
-      break;
-#endif
-    default:
-      registry = "microsoft";
-      encoding = charset_name (lfp->lfCharSet);
-    }
-  
-  point_size = (int) (((double) size/logpixelsy) * 720.);
-
-  if (res == -1)
-    res = logpixelsy;
-
-  /* Replace illegal characters with hex escapes. */
-  p = facename;
-  q = lfp->lfFaceName;
-  while (*q)
-    {
-      if (*q == '-' || *q == '*' || *q == '?' || *q == '%')
-       p += sprintf (p, "%%%.02x", *q);
-      else
-       *p++ = *q;
-      q++;
-    }
-  *p = '\0';
-
-  return  g_strdup_printf
-    ("-%s-%s-%s-%s-%s-%s-%d-%d-%d-%d-%s-%d-%s-%s",
-     "unknown", 
-     facename,
-     weight,
-     (lfp->lfItalic ?
-      ((lfp->lfPitchAndFamily & 0xF0) == FF_ROMAN
-       || (lfp->lfPitchAndFamily & 0xF0) == FF_SCRIPT ?
-       "i" : "o") : "r"),
-     "normal",
-     "",
-     size,
-     point_size,
-     res,
-     res,
-     ((lfp->lfPitchAndFamily & 0x03) == FIXED_PITCH ? "m" : "p"),
-     avg_width,
-     registry, encoding);
-}
-
-gchar *
-gdk_font_xlfd_create (GdkFont *font)
-{
-  GdkFontPrivate *private;
-  GdkWin32SingleFont *singlefont;
-  GSList *list;
-  GString *string;
-  gchar *result;
-  LOGFONT logfont;
-
-  g_return_val_if_fail (font != NULL, NULL);
-
-  private = (GdkFontPrivate *) font;
-
-  list = private->fonts;
-  string = g_string_new ("");
-
-  while (list)
-    {
-      singlefont = (GdkWin32SingleFont *) list->data;
-
-      if (GetObject (singlefont->xfont, sizeof (LOGFONT), &logfont) == 0)
-       {
-         g_warning ("gdk_win32_font_xlfd: GetObject failed");
-         return NULL;
-       }
-
-      string =
-       g_string_append (string,
-                        logfont_to_xlfd (&logfont, logfont.lfHeight, -1, 0));
-      list = list->next;
-      if (list)
-       string = g_string_append_c (string, ',');
-    }
-  result = string->str;
-  g_string_free (string, FALSE);
-  return result;
-}
-
-void
-gdk_font_xlfd_free (gchar *xlfd)
-{
-  g_free (xlfd);
-}
-
-static gboolean
-pattern_match (const gchar *pattern,
-              const gchar *string)
-{
-  const gchar *p = pattern, *n = string;
-  gchar c, c1;
-
-  /* Common case first */
-  if ((pattern[0] == '*'
-       && pattern[1] == '\0')
-      || (pattern[0] == '-'
-         && pattern[1] == '*'
-         && pattern[2] == '\0'))
-    return TRUE;
-
-  while ((c = *p++) != '\0')
-    {
-      c = tolower (c);
-
-      switch (c)
-       {
-       case '?':
-         if (*n == '\0')
-           return FALSE;
-         break;
-
-       case '*':
-         for (c = *p++; c == '?' || c == '*'; c = *p++, ++n)
-           if (c == '?' && *n == '\0')
-           return FALSE;
-
-         if (c == '\0')
-           return TRUE;
-
-         c1 = tolower (c);
-         for (--p; *n != '\0'; ++n)
-           if (tolower (*n) == c1
-               && pattern_match (p, n))
-             return TRUE;
-         return FALSE;
-
-       default:
-         if (c != tolower (*n))
-           return FALSE;
-       }
-
-      ++n;
-    }
-
-  if (*n == '\0')
-    return TRUE;
-
-  return FALSE;
-}
-
-int CALLBACK
-InnerEnumFontFamExProc (const LOGFONT    *lfp,
-                       const TEXTMETRIC *metrics,
-                       DWORD             fontType,
-                       LPARAM            lParam)
-{
-  int size;
-  gchar *xlfd;
-
-  if (fontType == TRUETYPE_FONTTYPE)
-    {
-      size = 0;
-    }
-  else
-    {
-      size = lfp->lfHeight;
-    }
-
-  xlfd = logfont_to_xlfd (lfp, size, 0, 0);
-
-  if (!pattern_match ((gchar *) lParam, xlfd))
-    {
-      g_free (xlfd);
-      return 1;
-    }
-
-  num_fonts++;
-  if (num_fonts == font_names_size)
-    {
-      font_names_size *= 2;
-      xfontnames = g_realloc (xfontnames, font_names_size * sizeof (gchar *));
-    }
-  xfontnames[num_fonts-1] = xlfd;
-    
-  return 1;
-}
-
-int CALLBACK
-EnumFontFamExProc (const LOGFONT    *lfp,
-                  const TEXTMETRIC *metrics,
-                  DWORD             fontType,
-                  LPARAM            lParam)
-{
-  if (fontType == TRUETYPE_FONTTYPE)
-    {
-      LOGFONT lf;
-
-      lf = *lfp;
-
-      EnumFontFamiliesEx (gdk_DC, &lf, InnerEnumFontFamExProc, lParam, 0);
-    }
-  else
-    InnerEnumFontFamExProc (lfp, metrics, fontType, lParam);
-
-  return 1;
-}
-
-gchar **
-gdk_font_list_new (const gchar *font_pattern,
-                  gint        *n_returned)
-{
-  LOGFONT logfont;
-  gchar **result;
-
-  num_fonts = 0;
-  font_names_size = 100;
-  xfontnames = g_new (gchar *, font_names_size);
-  memset (&logfont, 0, sizeof (logfont));
-  logfont.lfCharSet = DEFAULT_CHARSET;
-  EnumFontFamiliesEx (gdk_DC, &logfont, EnumFontFamExProc,
-                     (LPARAM) font_pattern, 0);
-
-  result = g_new (gchar *, num_fonts + 1);
-  memmove (result, xfontnames, num_fonts * sizeof (gchar *));
-  result[num_fonts] = NULL;
-  g_free (xfontnames);
-
-  *n_returned = num_fonts;
-  return result;
-}
-
-void
-gdk_font_list_free (gchar **font_list)
-{
-  g_strfreev (font_list);
-}
-
-GdkWin32SingleFont*
-gdk_font_load_internal (const gchar *font_name)
-{
-  GdkWin32SingleFont *singlefont;
-  HFONT hfont;
-  LOGFONT logfont;
-  CHARSETINFO csi;
-  DWORD fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet,
-    fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily;
-  const char *lpszFace;
-
-  int numfields, n1, n2, tries;
-  char foundry[32], family[100], weight[32], slant[32], set_width[32],
-    spacing[32], registry[32], encoding[32];
-  char pixel_size[10], point_size[10], res_x[10], res_y[10], avg_width[10];
-  int c;
-  char *p;
-  int nHeight, nWidth, nEscapement, nOrientation, fnWeight;
-  int logpixelsy;
-
-  g_return_val_if_fail (font_name != NULL, NULL);
-
-  GDK_NOTE (MISC, g_print ("gdk_font_load_internal: %s\n", font_name));
-
-  numfields = sscanf (font_name,
-                     "-%30[^-]-%100[^-]-%30[^-]-%30[^-]-%30[^-]-%n",
-                     foundry,
-                     family,
-                     weight,
-                     slant,
-                     set_width,
-                     &n1);
-  if (numfields == 0)
-    {
-      /* Probably a plain Windows font name */
-      nHeight = 0;
-      nWidth = 0;
-      nEscapement = 0;
-      nOrientation = 0;
-      fnWeight = FW_DONTCARE;
-      fdwItalic = FALSE;
-      fdwUnderline = FALSE;
-      fdwStrikeOut = FALSE;
-      fdwCharSet = ANSI_CHARSET;
-      fdwOutputPrecision = OUT_TT_PRECIS;
-      fdwClipPrecision = CLIP_DEFAULT_PRECIS;
-      fdwQuality = PROOF_QUALITY;
-      fdwPitchAndFamily = DEFAULT_PITCH;
-      lpszFace = font_name;
-    }
-  else if (numfields != 5)
-    {
-      g_warning ("gdk_font_load: font name %s illegal", font_name);
-      return NULL;
-    }
-  else
-    {
-      /* It must be a XLFD name */
-
-      /* Check for hex escapes in the font family,
-       * put in there by gtkfontsel.
-       */
-      p = family;
-      while (*p)
-       {
-         if (*p == '%' && isxdigit (p[1]) && isxdigit (p[2]))
-           {
-             sscanf (p+1, "%2x", &c);
-             *p = c;
-             strcpy (p+1, p+3);
-           }
-         p++;
-       }
-
-      /* Skip add_style which often is empty in the requested font name */
-      while (font_name[n1] && font_name[n1] != '-')
-       n1++;
-      numfields++;
-
-      numfields += sscanf (font_name + n1,
-                          "-%8[^-]-%8[^-]-%8[^-]-%8[^-]-%30[^-]-%8[^-]-%30[^-]-%30[^-]%n",
-                          pixel_size,
-                          point_size,
-                          res_x,
-                          res_y,
-                          spacing,
-                          avg_width,
-                          registry,
-                          encoding,
-                          &n2);
-
-      if (numfields != 14 || font_name[n1 + n2] != '\0')
-       {
-         g_warning ("gdk_font_load: font name %s illegal", font_name);
-         return NULL;
-       }
-
-      logpixelsy = GetDeviceCaps (gdk_DC, LOGPIXELSY);
-
-      if (strcmp (pixel_size, "*") == 0)
-       if (strcmp (point_size, "*") == 0)
-         nHeight = 0;
-       else
-         nHeight = (int) (((double) atoi (point_size))/720.*logpixelsy);
-      else
-       nHeight = atoi (pixel_size);
-
-      nWidth = 0;
-      nEscapement = 0;
-      nOrientation = 0;
-
-      if (g_strcasecmp (weight, "thin") == 0)
-       fnWeight = FW_THIN;
-      else if (g_strcasecmp (weight, "extralight") == 0)
-       fnWeight = FW_EXTRALIGHT;
-      else if (g_strcasecmp (weight, "ultralight") == 0)
-#ifdef FW_ULTRALIGHT
-       fnWeight = FW_ULTRALIGHT;
-#else
-       fnWeight = FW_EXTRALIGHT; /* In fact, FW_ULTRALIGHT really is 
-                                  * defined as FW_EXTRALIGHT anyway.
-                                  */
-#endif
-      else if (g_strcasecmp (weight, "light") == 0)
-       fnWeight = FW_LIGHT;
-      else if (g_strcasecmp (weight, "normal") == 0)
-       fnWeight = FW_NORMAL;
-      else if (g_strcasecmp (weight, "regular") == 0)
-       fnWeight = FW_REGULAR;
-      else if (g_strcasecmp (weight, "medium") == 0)
-       fnWeight = FW_MEDIUM;
-      else if (g_strcasecmp (weight, "semibold") == 0)
-       fnWeight = FW_SEMIBOLD;
-      else if (g_strcasecmp (weight, "demibold") == 0)
-#ifdef FW_DEMIBOLD
-       fnWeight = FW_DEMIBOLD;
-#else
-       fnWeight = FW_SEMIBOLD; /* As above */
-#endif
-      else if (g_strcasecmp (weight, "bold") == 0)
-       fnWeight = FW_BOLD;
-      else if (g_strcasecmp (weight, "extrabold") == 0)
-       fnWeight = FW_EXTRABOLD;
-      else if (g_strcasecmp (weight, "ultrabold") == 0)
-#ifdef FW_ULTRABOLD
-       fnWeight = FW_ULTRABOLD;
-#else
-       fnWeight = FW_EXTRABOLD; /* As above */
-#endif
-      else if (g_strcasecmp (weight, "heavy") == 0)
-       fnWeight = FW_HEAVY;
-      else if (g_strcasecmp (weight, "black") == 0)
-#ifdef FW_BLACK
-       fnWeight = FW_BLACK;
-#else
-       fnWeight = FW_HEAVY;    /* As above */
-#endif
-      else
-       fnWeight = FW_DONTCARE;
-
-      if (g_strcasecmp (slant, "italic") == 0
-         || g_strcasecmp (slant, "oblique") == 0
-         || g_strcasecmp (slant, "i") == 0
-         || g_strcasecmp (slant, "o") == 0)
-       fdwItalic = TRUE;
-      else
-       fdwItalic = FALSE;
-      fdwUnderline = FALSE;
-      fdwStrikeOut = FALSE;
-      if (g_strcasecmp (registry, "iso8859") == 0)
-       if (strcmp (encoding, "1") == 0)
-         fdwCharSet = ANSI_CHARSET;
-       else if (strcmp (encoding, "2") == 0)
-         fdwCharSet = EASTEUROPE_CHARSET;
-       else if (strcmp (encoding, "7") == 0)
-         fdwCharSet = GREEK_CHARSET;
-       else if (strcmp (encoding, "8") == 0)
-         fdwCharSet = HEBREW_CHARSET;
-       else if (strcmp (encoding, "9") == 0)
-         fdwCharSet = TURKISH_CHARSET;
-       else
-         fdwCharSet = ANSI_CHARSET; /* XXX ??? */
-      else if (g_strcasecmp (registry, "jisx0208.1983") == 0)
-       fdwCharSet = SHIFTJIS_CHARSET;
-      else if (g_strcasecmp (registry, "ksc5601.1987") == 0)
-       fdwCharSet = HANGEUL_CHARSET;
-      else if (g_strcasecmp (registry, "gb2312.1980") == 0)
-       fdwCharSet = GB2312_CHARSET;
-      else if (g_strcasecmp (registry, "big5") == 0)
-       fdwCharSet = CHINESEBIG5_CHARSET;
-      else if (g_strcasecmp (registry, "windows") == 0
-              || g_strcasecmp (registry, "microsoft") == 0)
-       if (g_strcasecmp (encoding, "symbol") == 0)
-         fdwCharSet = SYMBOL_CHARSET;
-       else if (g_strcasecmp (encoding, "shiftjis") == 0)
-         fdwCharSet = SHIFTJIS_CHARSET;
-       else if (g_strcasecmp (encoding, "gb2312") == 0)
-         fdwCharSet = GB2312_CHARSET;
-       else if (g_strcasecmp (encoding, "hangeul") == 0)
-         fdwCharSet = HANGEUL_CHARSET;
-       else if (g_strcasecmp (encoding, "big5") == 0)
-         fdwCharSet = CHINESEBIG5_CHARSET;
-       else if (g_strcasecmp (encoding, "johab") == 0)
-         fdwCharSet = JOHAB_CHARSET;
-       else if (g_strcasecmp (encoding, "hebrew") == 0)
-         fdwCharSet = HEBREW_CHARSET;
-       else if (g_strcasecmp (encoding, "arabic") == 0)
-         fdwCharSet = ARABIC_CHARSET;
-       else if (g_strcasecmp (encoding, "greek") == 0)
-         fdwCharSet = GREEK_CHARSET;
-       else if (g_strcasecmp (encoding, "turkish") == 0)
-         fdwCharSet = TURKISH_CHARSET;
-       else if (g_strcasecmp (encoding, "easteurope") == 0)
-         fdwCharSet = EASTEUROPE_CHARSET;
-       else if (g_strcasecmp (encoding, "russian") == 0)
-         fdwCharSet = RUSSIAN_CHARSET;
-       else if (g_strcasecmp (encoding, "mac") == 0)
-         fdwCharSet = MAC_CHARSET;
-       else if (g_strcasecmp (encoding, "baltic") == 0)
-         fdwCharSet = BALTIC_CHARSET;
-       else if (g_strcasecmp (encoding, "cp1251") == 0)
-         fdwCharSet = RUSSIAN_CHARSET;
-       else
-         fdwCharSet = ANSI_CHARSET; /* XXX ??? */
-      else
-       fdwCharSet = ANSI_CHARSET; /* XXX ??? */
-      fdwOutputPrecision = OUT_TT_PRECIS;
-      fdwClipPrecision = CLIP_DEFAULT_PRECIS;
-      fdwQuality = PROOF_QUALITY;
-      if (g_strcasecmp (spacing, "m") == 0)
-       fdwPitchAndFamily = FIXED_PITCH;
-      else if (g_strcasecmp (spacing, "p") == 0)
-       fdwPitchAndFamily = VARIABLE_PITCH;
-      else 
-       fdwPitchAndFamily = DEFAULT_PITCH;
-      lpszFace = family;
-    }
-
-  for (tries = 0; ; tries++)
-    {
-      GDK_NOTE (MISC, g_print ("...trying CreateFont(%d,%d,%d,%d,"
-                              "%d,%d,%d,%d,"
-                              "%d,%d,%d,"
-                              "%d,%#.02x,\"%s\")\n",
-                              nHeight, nWidth, nEscapement, nOrientation,
-                              fnWeight, fdwItalic, fdwUnderline, fdwStrikeOut,
-                              fdwCharSet, fdwOutputPrecision, fdwClipPrecision,
-                              fdwQuality, fdwPitchAndFamily, lpszFace));
-      if ((hfont =
-          CreateFont (nHeight, nWidth, nEscapement, nOrientation,
-                      fnWeight, fdwItalic, fdwUnderline, fdwStrikeOut,
-                      fdwCharSet, fdwOutputPrecision, fdwClipPrecision,
-                      fdwQuality, fdwPitchAndFamily, lpszFace)) != NULL)
-       break;
-
-      /* If we fail, try some similar fonts often found on Windows. */
-
-      if (tries == 0)
-       {
-         if (g_strcasecmp (family, "helvetica") == 0)
-           lpszFace = "arial";
-         else if (g_strcasecmp (family, "new century schoolbook") == 0)
-           lpszFace = "century schoolbook";
-         else if (g_strcasecmp (family, "courier") == 0)
-           lpszFace = "courier new";
-         else if (g_strcasecmp (family, "lucida") == 0)
-           lpszFace = "lucida sans unicode";
-         else if (g_strcasecmp (family, "lucidatypewriter") == 0)
-           lpszFace = "lucida console";
-         else if (g_strcasecmp (family, "times") == 0)
-           lpszFace = "times new roman";
-       }
-      else if (tries == 1)
-       {
-         if (g_strcasecmp (family, "courier") == 0)
-           {
-             lpszFace = "";
-             fdwPitchAndFamily |= FF_MODERN;
-           }
-         else if (g_strcasecmp (family, "times new roman") == 0)
-           {
-             lpszFace = "";
-             fdwPitchAndFamily |= FF_ROMAN;
-           }
-         else if (g_strcasecmp (family, "helvetica") == 0
-                  || g_strcasecmp (family, "lucida") == 0)
-           {
-             lpszFace = "";
-             fdwPitchAndFamily |= FF_SWISS;
-           }
-         else
-           {
-             lpszFace = "";
-             fdwPitchAndFamily = (fdwPitchAndFamily & 0x0F) | FF_DONTCARE;
-           }
-       }
-      else
-       break;
-      tries++;
-    }
-  
-  if (!hfont)
-    return NULL;
-      
-  singlefont = g_new (GdkWin32SingleFont, 1);
-  singlefont->xfont = hfont;
-  GetObject (singlefont->xfont, sizeof (logfont), &logfont);
-  TranslateCharsetInfo ((DWORD *) singlefont->charset, &csi, TCI_SRCCHARSET);
-  singlefont->codepage = csi.ciACP;
-  GetCPInfo (singlefont->codepage, &singlefont->cpinfo);
-
-  return singlefont;
-}
-
-GdkFont*
-gdk_font_load (const gchar *font_name)
-{
-  GdkFont *font;
-  GdkFontPrivate *private;
-  GdkWin32SingleFont *singlefont;
-  HGDIOBJ oldfont;
-  HANDLE *f;
-  TEXTMETRIC textmetric;
-
-  g_return_val_if_fail (font_name != NULL, NULL);
-
-  font = gdk_font_hash_lookup (GDK_FONT_FONTSET, font_name);
-  if (font)
-    return font;
-
-  singlefont = gdk_font_load_internal (font_name);
-
-  private = g_new (GdkFontPrivate, 1);
-  font = (GdkFont*) private;
-
-  private->ref_count = 1;
-  private->names = NULL;
-  private->fonts = g_slist_append (NULL, singlefont);
-
-  /* Pretend all fonts are fontsets... Gtktext and gtkentry work better
-   * that way, they use wide chars, which is necessary for non-ASCII
-   * chars to work. (Yes, even Latin-1, as we use Unicode internally.)
-   */
-  font->type = GDK_FONT_FONTSET;
-  oldfont = SelectObject (gdk_DC, singlefont->xfont);
-  GetTextMetrics (gdk_DC, &textmetric);
-  singlefont->charset = GetTextCharsetInfo (gdk_DC, &singlefont->fs, 0);
-  SelectObject (gdk_DC, oldfont);
-  font->ascent = textmetric.tmAscent;
-  font->descent = textmetric.tmDescent;
-
-  GDK_NOTE (MISC, g_print ("... = %#x charset %s codepage %d "
-                          "asc %d desc %d\n",
-                          singlefont->xfont,
-                          charset_name (singlefont->charset),
-                          singlefont->codepage,
-                          font->ascent, font->descent));
-
-  gdk_font_hash_insert (GDK_FONT_FONTSET, font, font_name);
-
-  return font;
-}
-
-GdkFont*
-gdk_fontset_load (gchar *fontset_name)
-{
-  GdkFont *font;
-  GdkFontPrivate *private;
-  GdkWin32SingleFont *singlefont;
-  HGDIOBJ oldfont;
-  HANDLE *f;
-  TEXTMETRIC textmetric;
-  GSList *base_font_list = NULL;
-  gchar *fs;
-  gchar *b, *p, *s;
-
-  g_return_val_if_fail (fontset_name != NULL, NULL);
-
-  font = gdk_font_hash_lookup (GDK_FONT_FONTSET, fontset_name);
-  if (font)
-    return font;
-
-  s = fs = g_strdup (fontset_name);
-  while (*s && isspace (*s))
-    s++;
-
-  g_return_val_if_fail (*s, NULL);
-
-  private = g_new (GdkFontPrivate, 1);
-  font = (GdkFont*) private;
-
-  private->ref_count = 1;
-  private->names = NULL;
-  private->fonts = NULL;
-
-  font->type = GDK_FONT_FONTSET;
-  font->ascent = 0;
-  font->descent = 0;
-
-  while (TRUE)
-    {
-      if ((p = strchr (s, ',')) != NULL)
-       b = p;
-      else
-       b = s + strlen (s);
-
-      while (isspace (b[-1]))
-       b--;
-      *b = '\0';
-      singlefont = gdk_font_load_internal (s);
-      if (singlefont)
-       {
-         GDK_NOTE
-           (MISC, g_print ("... = %#x charset %s codepage %d\n",
-                           singlefont->xfont,
-                           charset_name (singlefont->charset),
-                           singlefont->codepage));
-         private->fonts = g_slist_append (private->fonts, singlefont);
-         oldfont = SelectObject (gdk_DC, singlefont->xfont);
-         GetTextMetrics (gdk_DC, &textmetric);
-         singlefont->charset =
-           GetTextCharsetInfo (gdk_DC, &singlefont->fs, 0);
-         SelectObject (gdk_DC, oldfont);
-         font->ascent = MAX (font->ascent, textmetric.tmAscent);
-         font->descent = MAX (font->descent, textmetric.tmDescent);
-       }
-      if (p)
-       {
-         s = p + 1;
-         while (*s && isspace (*s))
-           s++;
-       }
-      else
-       break;
-      if (!*s)
-       break;
-    }
-  
-  g_free (fs);
-
-  gdk_font_hash_insert (GDK_FONT_FONTSET, font, fontset_name);
-
-  return font;
-}
-
-GdkFont*
-gdk_font_ref (GdkFont *font)
-{
-  GdkFontPrivate *private;
-
-  g_return_val_if_fail (font != NULL, NULL);
-
-  private = (GdkFontPrivate*) font;
-  private->ref_count += 1;
-
-  GDK_NOTE (MISC,
-           g_print ("gdk_font_ref %#x %d\n",
-                    ((GdkWin32SingleFont *) private->fonts->data)->xfont,
-                    private->ref_count));
-  return font;
-}
-
-void
-gdk_font_unref (GdkFont *font)
-{
-  GdkFontPrivate *private;
-  GdkWin32SingleFont *singlefont;
-  GSList *list;
-  private = (GdkFontPrivate*) font;
-
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (private->ref_count > 0);
-
-  private->ref_count -= 1;
-
-  singlefont = (GdkWin32SingleFont *) private->fonts->data;
-  GDK_NOTE (MISC, g_print ("gdk_font_unref %#x %d%s\n",
-                          singlefont->xfont, private->ref_count,
-                          (private->ref_count == 0 ? " freeing" : "")));
-
-  if (private->ref_count == 0)
-    {
-      gdk_font_hash_remove (font->type, font);
-      
-      switch (font->type)
-       {
-       case GDK_FONT_FONT:
-         DeleteObject (singlefont->xfont);
-         break;
-
-       case GDK_FONT_FONTSET:
-         list = private->fonts;
-         while (list)
-           {
-             singlefont = (GdkWin32SingleFont *) list->data;
-             DeleteObject (singlefont->xfont);
-
-             list = list->next;
-           }
-         g_slist_free (private->fonts);
-         break;
-
-       default:
-         g_assert_not_reached ();
-       }
-      g_free (font);
-    }
-}
-
-gint
-gdk_font_id (const GdkFont *font)
-{
-  const GdkFontPrivate *font_private;
-
-  g_return_val_if_fail (font != NULL, 0);
-
-  font_private = (const GdkFontPrivate*) font;
-
-  if (font->type == GDK_FONT_FONT)
-    return (gint) ((GdkWin32SingleFont *) font_private->fonts->data)->xfont;
-  else
-    return 0;
-}
-
-gint
-gdk_font_equal (const GdkFont *fonta,
-                const GdkFont *fontb)
-{
-  const GdkFontPrivate *privatea;
-  const GdkFontPrivate *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;
-
-  if (fonta->type == GDK_FONT_FONT && fontb->type == GDK_FONT_FONT)
-    return (((GdkWin32SingleFont *) privatea->fonts->data)->xfont
-           == ((GdkWin32SingleFont *) privateb->fonts->data)->xfont);
-  else if (fonta->type == GDK_FONT_FONTSET && fontb->type == GDK_FONT_FONTSET)
-    {
-      GSList *lista = privatea->fonts;
-      GSList *listb = privateb->fonts;
-
-      while (lista && listb)
-       {
-         if (((GdkWin32SingleFont *) lista->data)->xfont
-             != ((GdkWin32SingleFont *) listb->data)->xfont)
-           return 0;
-         lista = lista->next;
-         listb = listb->next;
-       }
-      if (lista || listb)
-       return 0;
-      else
-       return 1;
-    }
-  else
-    return 0;
-}
-
-gint
-gdk_string_width (GdkFont     *font,
-                 const gchar *string)
-{
-  return gdk_text_width (font, string, strlen (string));
-}
-
-/* This table classifies Unicode characters according to the Microsoft
- * Unicode subset numbering. This is from the table in "Developing
- * International Software for Windows 95 and Windows NT". This is almost,
- * but not quite, the same as the official Unicode block table in
- * Blocks.txt from ftp.unicode.org. The bit number field is the bitfield
- * number as in the FONTSIGNATURE struct's fsUsb field.
- */
-static struct {
-  wchar_t low, high;
-  guint bit; 
-  gchar *name;
-} utab[] =
-{
-  { 0x0000, 0x007E, 0, "Basic Latin" },
-  { 0x00A0, 0x00FF, 1, "Latin-1 Supplement" },
-  { 0x0100, 0x017F, 2, "Latin Extended-A" },
-  { 0x0180, 0x024F, 3, "Latin Extended-B" },
-  { 0x0250, 0x02AF, 4, "IPA Extensions" },
-  { 0x02B0, 0x02FF, 5, "Spacing Modifier Letters" },
-  { 0x0300, 0x036F, 6, "Combining Diacritical Marks" },
-  { 0x0370, 0x03CF, 7, "Basic Greek" },
-  { 0x03D0, 0x03FF, 8, "Greek Symbols and Coptic" },
-  { 0x0400, 0x04FF, 9, "Cyrillic" },
-  { 0x0530, 0x058F, 10, "Armenian" },
-  { 0x0590, 0x05CF, 12, "Hebrew Extended" },
-  { 0x05D0, 0x05FF, 11, "Basic Hebrew" },
-  { 0x0600, 0x0652, 13, "Basic Arabic" },
-  { 0x0653, 0x06FF, 14, "Arabic Extended" },
-  { 0x0900, 0x097F, 15, "Devanagari" },
-  { 0x0980, 0x09FF, 16, "Bengali" },
-  { 0x0A00, 0x0A7F, 17, "Gurmukhi" },
-  { 0x0A80, 0x0AFF, 18, "Gujarati" },
-  { 0x0B00, 0x0B7F, 19, "Oriya" },
-  { 0x0B80, 0x0BFF, 20, "Tamil" },
-  { 0x0C00, 0x0C7F, 21, "Telugu" },
-  { 0x0C80, 0x0CFF, 22, "Kannada" },
-  { 0x0D00, 0x0D7F, 23, "Malayalam" },
-  { 0x0E00, 0x0E7F, 24, "Thai" },
-  { 0x0E80, 0x0EFF, 25, "Lao" },
-  { 0x10A0, 0x10CF, 27, "Georgian Extended" },
-  { 0x10D0, 0x10FF, 26, "Basic Georgian" },
-  { 0x1100, 0x11FF, 28, "Hangul Jamo" },
-  { 0x1E00, 0x1EFF, 29, "Latin Extended Additional" },
-  { 0x1F00, 0x1FFF, 30, "Greek Extended" },
-  { 0x2000, 0x206F, 31, "General Punctuation" },
-  { 0x2070, 0x209F, 32, "Superscripts and Subscripts" },
-  { 0x20A0, 0x20CF, 33, "Currency Symbols" },
-  { 0x20D0, 0x20FF, 34, "Combining Diacritical Marks for Symbols" },
-  { 0x2100, 0x214F, 35, "Letterlike Symbols" },
-  { 0x2150, 0x218F, 36, "Number Forms" },
-  { 0x2190, 0x21FF, 37, "Arrows" },
-  { 0x2200, 0x22FF, 38, "Mathematical Operators" },
-  { 0x2300, 0x23FF, 39, "Miscellaneous Technical" },
-  { 0x2400, 0x243F, 40, "Control Pictures" },
-  { 0x2440, 0x245F, 41, "Optical Character Recognition" },
-  { 0x2460, 0x24FF, 42, "Enclosed Alphanumerics" },
-  { 0x2500, 0x257F, 43, "Box Drawing" },
-  { 0x2580, 0x259F, 44, "Block Elements" },
-  { 0x25A0, 0x25FF, 45, "Geometric Shapes" },
-  { 0x2600, 0x26FF, 46, "Miscellaneous Symbols" },
-  { 0x2700, 0x27BF, 47, "Dingbats" },
-  { 0x3000, 0x303F, 48, "CJK Symbols and Punctuation" },
-  { 0x3040, 0x309F, 49, "Hiragana" },
-  { 0x30A0, 0x30FF, 50, "Katakana" },
-  { 0x3100, 0x312F, 51, "Bopomofo" },
-  { 0x3130, 0x318F, 52, "Hangul Compatibility Jamo" },
-  { 0x3190, 0x319F, 53, "CJK Miscellaneous" },
-  { 0x3200, 0x32FF, 54, "Enclosed CJK" },
-  { 0x3300, 0x33FF, 55, "CJK Compatibility" },
-  { 0x3400, 0x3D2D, 56, "Hangul" },
-  { 0x3D2E, 0x44B7, 57, "Hangul Supplementary-A" },
-  { 0x44B8, 0x4DFF, 58, "Hangul Supplementary-B" },
-  { 0x4E00, 0x9FFF, 59, "CJK Unified Ideographs" },
-  { 0xE000, 0xF8FF, 60, "Private Use Area" },
-  { 0xF900, 0xFAFF, 61, "CJK Compatibility Ideographs" },
-  { 0xFB00, 0xFB4F, 62, "Alphabetic Presentation Forms" },
-  { 0xFB50, 0xFDFF, 63, "Arabic Presentation Forms-A" },
-  { 0xFE20, 0xFE2F, 64, "Combining Half Marks" },
-  { 0xFE30, 0xFE4F, 65, "CJK Compatibility Forms" },
-  { 0xFE50, 0xFE6F, 66, "Small Form Variants" },
-  { 0xFE70, 0xFEFE, 67, "Arabic Presentation Forms-B" },
-  { 0xFEFF, 0xFEFF, 69, "Specials" },
-  { 0xFF00, 0xFFEF, 68, "Halfwidth and Fullwidth Forms" },
-  { 0xFFF0, 0xFFFD, 69, "Specials" }
-};
-
-/* Return the Unicode Subset bitfield number for a Unicode character */
-
-static int
-unicode_classify (wchar_t wc)
-{
-  int min = 0;
-  int max = sizeof (utab) / sizeof (utab[0]) - 1;
-  int mid;
-
-  while (max >= min)
-    {
-      mid = (min + max) / 2;
-      if (utab[mid].high < wc)
-       min = mid + 1;
-      else if (wc < utab[mid].low)
-       max = mid - 1;
-      else if (utab[mid].low <= wc && wc <= utab[mid].high)
-       return utab[mid].bit;
-      else
-       return -1;
-    }
-}
-
-void
-gdk_wchar_text_handle (GdkFont       *font,
-                      const wchar_t *wcstr,
-                      int            wclen,
-                      void         (*handler)(GdkWin32SingleFont *,
-                                              const wchar_t *,
-                                              int,
-                                              void *),
-                      void          *arg)
-{
-  GdkFontPrivate *private;
-  GdkWin32SingleFont *singlefont;
-  GSList *list;
-  int i, block;
-  const wchar_t *start, *end, *wcp;
-
-  wcp = wcstr;
-  end = wcp + wclen;
-  private = (GdkFontPrivate *) font;
-
-  g_assert (private->ref_count > 0);
-
-  while (wcp < end)
-    {
-      /* Split Unicode string into pieces of the same class */
-      start = wcp;
-      block = unicode_classify (*wcp);
-      while (wcp + 1 < end && unicode_classify (wcp[1]) == block)
-       wcp++;
-
-      /* Find a font in the fontset that can handle this class */
-      list = private->fonts;
-      while (list)
-       {
-         singlefont = (GdkWin32SingleFont *) list->data;
-         
-         if (singlefont->fs.fsUsb[block/32] & (1 << (block % 32)))
-           break;
-
-         list = list->next;
-       }
-
-      if (!list)
-       singlefont = NULL;
-
-      /* Call the callback function */
-      (*handler) (singlefont, start, wcp+1 - start, arg);
-      wcp++;
-    }
-}
-
-typedef struct
-{
-  SIZE total;
-  SIZE max;
-} gdk_text_size_arg;
-
-static void
-gdk_text_size_handler (GdkWin32SingleFont *singlefont,
-                      const wchar_t      *wcstr,
-                      int                 wclen,
-                      void               *argp)
-{
-  SIZE this_size;
-  HGDIOBJ oldfont;
-  gdk_text_size_arg *arg = (gdk_text_size_arg *) argp;
-
-  if (!singlefont)
-    return;
-
-  if ((oldfont = SelectObject (gdk_DC, singlefont->xfont)) == NULL)
-    {
-      g_warning ("gdk_text_size_handler: SelectObject failed");
-      return;
-    }
-  GetTextExtentPoint32W (gdk_DC, wcstr, wclen, &this_size);
-  SelectObject (gdk_DC, oldfont);
-
-  arg->total.cx += this_size.cx;
-  arg->total.cy += this_size.cy;
-  arg->max.cx = MAX (this_size.cx, arg->max.cx);
-  arg->max.cy = MAX (this_size.cy, arg->max.cy);
-}
-
-static gboolean
-gdk_text_size (GdkFont           *font,
-              const gchar       *text,
-              gint               text_length,
-              gdk_text_size_arg *arg)
-{
-  gint wlen;
-  wchar_t *wcstr;
-
-  g_return_val_if_fail (font != NULL, FALSE);
-  g_return_val_if_fail (text != NULL, FALSE);
-
-  if (text_length == 0)
-    return 0;
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  wcstr = g_new (wchar_t, text_length);
-  if ((wlen = gdk_nmbstowchar_ts (wcstr, text, text_length, text_length)) == -1)
-    g_warning ("gdk_text_size: gdk_nmbstowchar_ts failed");
-  else
-    gdk_wchar_text_handle (font, wcstr, wlen, gdk_text_size_handler, arg);
-
-  g_free (wcstr);
-
-  return TRUE;
-}
-
-gint
-gdk_text_width (GdkFont      *font,
-               const gchar  *text,
-               gint          text_length)
-{
-  gdk_text_size_arg arg;
-
-  arg.total.cx = arg.total.cy = 0;
-  arg.max.cx = arg.max.cy = 0;
-
-  if (!gdk_text_size (font, text, text_length, &arg))
-    return -1;
-
-  return arg.total.cx;
-}
-
-gint
-gdk_text_width_wc (GdkFont       *font,
-                  const GdkWChar *text,
-                  gint            text_length)
-{
-  gdk_text_size_arg arg;
-  wchar_t *wcstr;
-  gint i;
-
-  g_return_val_if_fail (font != NULL, -1);
-  g_return_val_if_fail (text != NULL, -1);
-
-  if (text_length == 0)
-    return 0;
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    {
-      wcstr = g_new (wchar_t, text_length);
-      for (i = 0; i < text_length; i++)
-       wcstr[i] = text[i];
-    }
-  else
-    wcstr = (wchar_t *) text;
-
-  arg.total.cx = arg.total.cy = 0;
-  arg.max.cx = arg.max.cy = 0;
-
-  gdk_wchar_text_handle (font, wcstr, text_length,
-                        gdk_text_size_handler, &arg);
-
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    g_free (wcstr);
-
-  return arg.total.cx;
-}
-
-gint
-gdk_char_width (GdkFont *font,
-               gchar    character)
-{
-  if (((guchar) character) >= 128)
-    {
-      /* gtktext calls us with non-ASCII characters, sigh */
-      GdkWChar wc = (guchar) character;
-      return gdk_text_width_wc (font, &wc, 1);
-    }
-  return gdk_text_width (font, &character, 1);
-}
-
-gint
-gdk_char_width_wc (GdkFont *font,
-                  GdkWChar character)
-{
-  return gdk_text_width_wc (font, &character, 1);
-}
-
-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,
-                  gint         text_length,
-                 gint        *lbearing,
-                 gint        *rbearing,
-                 gint        *width,
-                 gint        *ascent,
-                 gint        *descent)
-{
-  gdk_text_size_arg arg;
-  gint wlen;
-  wchar_t *wcstr;
-
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (text != NULL);
-
-  if (text_length == 0)
-    {
-      if (lbearing)
-       *lbearing = 0;
-      if (rbearing)
-       *rbearing = 0;
-      if (width)
-       *width = 0;
-      if (ascent)
-       *ascent = 0;
-      if (descent)
-       *descent = 0;
-      return;
-    }
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  arg.total.cx = arg.total.cy = 0;
-  arg.max.cx = arg.max.cy = 0;
-
-  wcstr = g_new (wchar_t, text_length);
-  if ((wlen = gdk_nmbstowchar_ts (wcstr, text, text_length, text_length)) == -1)
-    g_warning ("gdk_text_extents: gdk_nmbstowchar_ts failed");
-  else
-    gdk_wchar_text_handle (font, wcstr, wlen, gdk_text_size_handler, &arg);
-
-  g_free (wcstr);
-
-  /* XXX This is quite bogus */
-  if (lbearing)
-    *lbearing = 0;
-  if (rbearing)
-    *rbearing = 0;
-  if (width)
-    *width = arg.total.cx;
-  if (ascent)
-    *ascent = arg.max.cy + 1;
-  if (descent)
-    *descent = font->descent + 1;
-}
-
-void
-gdk_text_extents_wc (GdkFont        *font,
-                    const GdkWChar *text,
-                    gint            text_length,
-                    gint           *lbearing,
-                    gint           *rbearing,
-                    gint           *width,
-                    gint           *ascent,
-                    gint           *descent)
-{
-  gdk_text_size_arg arg;
-  wchar_t *wcstr;
-  gint i;
-
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (text != NULL);
-
-  if (text_length == 0)
-    {
-      if (lbearing)
-       *lbearing = 0;
-      if (rbearing)
-       *rbearing = 0;
-      if (width)
-       *width = 0;
-      if (ascent)
-       *ascent = 0;
-      if (descent)
-       *descent = 0;
-      return;
-    }
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    {
-      wcstr = g_new (wchar_t, text_length);
-      for (i = 0; i < text_length; i++)
-       wcstr[i] = text[i];
-    }
-  else
-    wcstr = (wchar_t *) text;
-
-  arg.total.cx = arg.total.cy = 0;
-  arg.max.cx = arg.max.cy = 0;
-
-  gdk_wchar_text_handle (font, wcstr, text_length,
-                        gdk_text_size_handler, &arg);
-
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    g_free (wcstr);
-
-  /* XXX This is quite bogus */
-  if (lbearing)
-    *lbearing = 0;
-  if (rbearing)
-    *rbearing = 0;
-  if (width)
-    *width = arg.total.cx;
-  if (ascent)
-    *ascent = arg.max.cy + 1;
-  if (descent)
-    *descent = font->descent + 1;
-}
-
-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)
-{
-  return gdk_text_width (font, text, text_length); /* ??? */
-}
-
-gint
-gdk_char_measure (GdkFont *font,
-                  gchar    character)
-{
-  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)
-{
-  gdk_text_size_arg arg;
-
-  arg.total.cx = arg.total.cy = 0;
-  arg.max.cx = arg.max.cy = 0;
-
-  if (!gdk_text_size (font, text, text_length, &arg))
-    return -1;
-
-  return arg.max.cy;
-}
-
-gint
-gdk_char_height (GdkFont *font,
-                gchar    character)
-{
-  return gdk_text_height (font, &character, 1);
-}
diff --git a/gdk/win32/gdkfont.c b/gdk/win32/gdkfont.c
deleted file mode 100644 (file)
index 3cee42d..0000000
+++ /dev/null
@@ -1,1501 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <ctype.h>
-
-#include "gdkfont.h"
-#include "gdkx.h"
-
-static GHashTable *font_name_hash = NULL;
-static GHashTable *fontset_name_hash = NULL;
-
-static void
-gdk_font_hash_insert (GdkFontType  type,
-                     GdkFont     *font,
-                     const gchar *font_name)
-{
-  GdkFontPrivate *private = (GdkFontPrivate *) font;
-  GHashTable **hashp = (type == GDK_FONT_FONT) ?
-    &font_name_hash : &fontset_name_hash;
-
-  if (!*hashp)
-    *hashp = g_hash_table_new (g_str_hash, g_str_equal);
-
-  private->names = g_slist_prepend (private->names, g_strdup (font_name));
-  g_hash_table_insert (*hashp, private->names->data, font);
-}
-
-static void
-gdk_font_hash_remove (GdkFontType type,
-                     GdkFont    *font)
-{
-  GdkFontPrivate *private = (GdkFontPrivate *) font;
-  GSList *tmp_list;
-  GHashTable *hash = (type == GDK_FONT_FONT) ?
-    font_name_hash : fontset_name_hash;
-
-  tmp_list = private->names;
-  while (tmp_list)
-    {
-      g_hash_table_remove (hash, tmp_list->data);
-      g_free (tmp_list->data);
-      
-      tmp_list = tmp_list->next;
-    }
-
-  g_slist_free (private->names);
-  private->names = NULL;
-}
-
-static GdkFont *
-gdk_font_hash_lookup (GdkFontType  type,
-                     const gchar *font_name)
-{
-  GdkFont *result;
-  GHashTable *hash = (type == GDK_FONT_FONT) ?
-    font_name_hash : fontset_name_hash;
-
-  if (!hash)
-    return NULL;
-  else
-    {
-      result = g_hash_table_lookup (hash, font_name);
-      if (result)
-       gdk_font_ref (result);
-      
-      return result;
-    }
-}
-
-static const char *
-charset_name (DWORD charset)
-{
-  switch (charset)
-    {
-    case ANSI_CHARSET: return "ansi";
-    case DEFAULT_CHARSET: return "default";
-    case SYMBOL_CHARSET: return "symbol";
-    case SHIFTJIS_CHARSET: return "shiftjis";
-    case HANGEUL_CHARSET: return "hangeul";
-    case GB2312_CHARSET: return "gb2312";
-    case CHINESEBIG5_CHARSET: return "big5";
-    case JOHAB_CHARSET: return "johab";
-    case HEBREW_CHARSET: return "hebrew";
-    case ARABIC_CHARSET: return "arabic";
-    case GREEK_CHARSET: return "greek";
-    case TURKISH_CHARSET: return "turkish";
-    case VIETNAMESE_CHARSET: return "vietnamese";
-    case THAI_CHARSET: return "thai";
-    case EASTEUROPE_CHARSET: return "easteurope";
-    case RUSSIAN_CHARSET: return "russian";
-    case MAC_CHARSET: return "mac";
-    case BALTIC_CHARSET: return "baltic";
-    }
-  return "unknown";
-}
-
-static gint num_fonts;
-static gint font_names_size;
-static gchar **xfontnames;
-
-static gchar *
-logfont_to_xlfd (const LOGFONT *lfp,
-                int            size,
-                int            res,
-                int            avg_width)
-{
-  const gchar *weight;
-  const gchar *registry, *encoding;
-  int point_size;
-  static int logpixelsy = 0;
-  gchar facename[LF_FACESIZE*3];
-  gchar *p;
-  const gchar *q;
-
-  if (logpixelsy == 0)
-    {
-      logpixelsy = GetDeviceCaps (gdk_DC, LOGPIXELSY);
-    }
-
-  if (lfp->lfWeight >= FW_HEAVY)
-    weight = "heavy";
-  else if (lfp->lfWeight >= FW_EXTRABOLD)
-    weight = "extrabold";
-  else if (lfp->lfWeight >= FW_BOLD)
-    weight = "bold";
-#ifdef FW_DEMIBOLD
-  else if (lfp->lfWeight >= FW_DEMIBOLD)
-    weight = "demibold";
-#endif
-  else if (lfp->lfWeight >= FW_MEDIUM)
-    weight = "medium";
-  else if (lfp->lfWeight >= FW_NORMAL)
-    weight = "normal";
-  else if (lfp->lfWeight >= FW_LIGHT)
-    weight = "light";
-  else if (lfp->lfWeight >= FW_EXTRALIGHT)
-    weight = "extralight";
-  else if (lfp->lfWeight >= FW_THIN)
-    weight = "thin";
-  else
-    weight = "regular";
-
-  switch (lfp->lfCharSet)
-    {
-    case ANSI_CHARSET:
-      registry = "iso8859";
-      encoding = "1";
-      break;
-    case SHIFTJIS_CHARSET:
-      registry = "jisx0208.1983";
-      encoding = "0";
-      break;
-    case HANGEUL_CHARSET:
-      registry = "ksc5601.1987";
-      encoding = "0";
-      break;
-    case GB2312_CHARSET:
-      registry = "gb2312.1980";
-      encoding = "0";
-      break;
-    case CHINESEBIG5_CHARSET:
-      registry = "big5";
-      encoding = "0";
-      break;
-    case GREEK_CHARSET:
-      registry = "iso8859";
-      encoding = "7";
-      break;
-    case TURKISH_CHARSET:
-      registry = "iso8859";
-      encoding = "9";
-      break;
-#if 0 /* Not a good idea, I think, to use ISO8859-8 and -6 for the Windows
-       * hebrew and arabic codepages, they differ too much.
-       */
-    case HEBREW_CHARSET:
-      registry = "iso8859";
-      encoding = "8";
-      break;
-    case ARABIC_CHARSET:
-      registry = "iso8859";
-      encoding = "6";
-      break;
-#endif
-    default:
-      registry = "microsoft";
-      encoding = charset_name (lfp->lfCharSet);
-    }
-  
-  point_size = (int) (((double) size/logpixelsy) * 720.);
-
-  if (res == -1)
-    res = logpixelsy;
-
-  /* Replace illegal characters with hex escapes. */
-  p = facename;
-  q = lfp->lfFaceName;
-  while (*q)
-    {
-      if (*q == '-' || *q == '*' || *q == '?' || *q == '%')
-       p += sprintf (p, "%%%.02x", *q);
-      else
-       *p++ = *q;
-      q++;
-    }
-  *p = '\0';
-
-  return  g_strdup_printf
-    ("-%s-%s-%s-%s-%s-%s-%d-%d-%d-%d-%s-%d-%s-%s",
-     "unknown", 
-     facename,
-     weight,
-     (lfp->lfItalic ?
-      ((lfp->lfPitchAndFamily & 0xF0) == FF_ROMAN
-       || (lfp->lfPitchAndFamily & 0xF0) == FF_SCRIPT ?
-       "i" : "o") : "r"),
-     "normal",
-     "",
-     size,
-     point_size,
-     res,
-     res,
-     ((lfp->lfPitchAndFamily & 0x03) == FIXED_PITCH ? "m" : "p"),
-     avg_width,
-     registry, encoding);
-}
-
-gchar *
-gdk_font_xlfd_create (GdkFont *font)
-{
-  GdkFontPrivate *private;
-  GdkWin32SingleFont *singlefont;
-  GSList *list;
-  GString *string;
-  gchar *result;
-  LOGFONT logfont;
-
-  g_return_val_if_fail (font != NULL, NULL);
-
-  private = (GdkFontPrivate *) font;
-
-  list = private->fonts;
-  string = g_string_new ("");
-
-  while (list)
-    {
-      singlefont = (GdkWin32SingleFont *) list->data;
-
-      if (GetObject (singlefont->xfont, sizeof (LOGFONT), &logfont) == 0)
-       {
-         g_warning ("gdk_win32_font_xlfd: GetObject failed");
-         return NULL;
-       }
-
-      string =
-       g_string_append (string,
-                        logfont_to_xlfd (&logfont, logfont.lfHeight, -1, 0));
-      list = list->next;
-      if (list)
-       string = g_string_append_c (string, ',');
-    }
-  result = string->str;
-  g_string_free (string, FALSE);
-  return result;
-}
-
-void
-gdk_font_xlfd_free (gchar *xlfd)
-{
-  g_free (xlfd);
-}
-
-static gboolean
-pattern_match (const gchar *pattern,
-              const gchar *string)
-{
-  const gchar *p = pattern, *n = string;
-  gchar c, c1;
-
-  /* Common case first */
-  if ((pattern[0] == '*'
-       && pattern[1] == '\0')
-      || (pattern[0] == '-'
-         && pattern[1] == '*'
-         && pattern[2] == '\0'))
-    return TRUE;
-
-  while ((c = *p++) != '\0')
-    {
-      c = tolower (c);
-
-      switch (c)
-       {
-       case '?':
-         if (*n == '\0')
-           return FALSE;
-         break;
-
-       case '*':
-         for (c = *p++; c == '?' || c == '*'; c = *p++, ++n)
-           if (c == '?' && *n == '\0')
-           return FALSE;
-
-         if (c == '\0')
-           return TRUE;
-
-         c1 = tolower (c);
-         for (--p; *n != '\0'; ++n)
-           if (tolower (*n) == c1
-               && pattern_match (p, n))
-             return TRUE;
-         return FALSE;
-
-       default:
-         if (c != tolower (*n))
-           return FALSE;
-       }
-
-      ++n;
-    }
-
-  if (*n == '\0')
-    return TRUE;
-
-  return FALSE;
-}
-
-int CALLBACK
-InnerEnumFontFamExProc (const LOGFONT    *lfp,
-                       const TEXTMETRIC *metrics,
-                       DWORD             fontType,
-                       LPARAM            lParam)
-{
-  int size;
-  gchar *xlfd;
-
-  if (fontType == TRUETYPE_FONTTYPE)
-    {
-      size = 0;
-    }
-  else
-    {
-      size = lfp->lfHeight;
-    }
-
-  xlfd = logfont_to_xlfd (lfp, size, 0, 0);
-
-  if (!pattern_match ((gchar *) lParam, xlfd))
-    {
-      g_free (xlfd);
-      return 1;
-    }
-
-  num_fonts++;
-  if (num_fonts == font_names_size)
-    {
-      font_names_size *= 2;
-      xfontnames = g_realloc (xfontnames, font_names_size * sizeof (gchar *));
-    }
-  xfontnames[num_fonts-1] = xlfd;
-    
-  return 1;
-}
-
-int CALLBACK
-EnumFontFamExProc (const LOGFONT    *lfp,
-                  const TEXTMETRIC *metrics,
-                  DWORD             fontType,
-                  LPARAM            lParam)
-{
-  if (fontType == TRUETYPE_FONTTYPE)
-    {
-      LOGFONT lf;
-
-      lf = *lfp;
-
-      EnumFontFamiliesEx (gdk_DC, &lf, InnerEnumFontFamExProc, lParam, 0);
-    }
-  else
-    InnerEnumFontFamExProc (lfp, metrics, fontType, lParam);
-
-  return 1;
-}
-
-gchar **
-gdk_font_list_new (const gchar *font_pattern,
-                  gint        *n_returned)
-{
-  LOGFONT logfont;
-  gchar **result;
-
-  num_fonts = 0;
-  font_names_size = 100;
-  xfontnames = g_new (gchar *, font_names_size);
-  memset (&logfont, 0, sizeof (logfont));
-  logfont.lfCharSet = DEFAULT_CHARSET;
-  EnumFontFamiliesEx (gdk_DC, &logfont, EnumFontFamExProc,
-                     (LPARAM) font_pattern, 0);
-
-  result = g_new (gchar *, num_fonts + 1);
-  memmove (result, xfontnames, num_fonts * sizeof (gchar *));
-  result[num_fonts] = NULL;
-  g_free (xfontnames);
-
-  *n_returned = num_fonts;
-  return result;
-}
-
-void
-gdk_font_list_free (gchar **font_list)
-{
-  g_strfreev (font_list);
-}
-
-GdkWin32SingleFont*
-gdk_font_load_internal (const gchar *font_name)
-{
-  GdkWin32SingleFont *singlefont;
-  HFONT hfont;
-  LOGFONT logfont;
-  CHARSETINFO csi;
-  DWORD fdwItalic, fdwUnderline, fdwStrikeOut, fdwCharSet,
-    fdwOutputPrecision, fdwClipPrecision, fdwQuality, fdwPitchAndFamily;
-  const char *lpszFace;
-
-  int numfields, n1, n2, tries;
-  char foundry[32], family[100], weight[32], slant[32], set_width[32],
-    spacing[32], registry[32], encoding[32];
-  char pixel_size[10], point_size[10], res_x[10], res_y[10], avg_width[10];
-  int c;
-  char *p;
-  int nHeight, nWidth, nEscapement, nOrientation, fnWeight;
-  int logpixelsy;
-
-  g_return_val_if_fail (font_name != NULL, NULL);
-
-  GDK_NOTE (MISC, g_print ("gdk_font_load_internal: %s\n", font_name));
-
-  numfields = sscanf (font_name,
-                     "-%30[^-]-%100[^-]-%30[^-]-%30[^-]-%30[^-]-%n",
-                     foundry,
-                     family,
-                     weight,
-                     slant,
-                     set_width,
-                     &n1);
-  if (numfields == 0)
-    {
-      /* Probably a plain Windows font name */
-      nHeight = 0;
-      nWidth = 0;
-      nEscapement = 0;
-      nOrientation = 0;
-      fnWeight = FW_DONTCARE;
-      fdwItalic = FALSE;
-      fdwUnderline = FALSE;
-      fdwStrikeOut = FALSE;
-      fdwCharSet = ANSI_CHARSET;
-      fdwOutputPrecision = OUT_TT_PRECIS;
-      fdwClipPrecision = CLIP_DEFAULT_PRECIS;
-      fdwQuality = PROOF_QUALITY;
-      fdwPitchAndFamily = DEFAULT_PITCH;
-      lpszFace = font_name;
-    }
-  else if (numfields != 5)
-    {
-      g_warning ("gdk_font_load: font name %s illegal", font_name);
-      return NULL;
-    }
-  else
-    {
-      /* It must be a XLFD name */
-
-      /* Check for hex escapes in the font family,
-       * put in there by gtkfontsel.
-       */
-      p = family;
-      while (*p)
-       {
-         if (*p == '%' && isxdigit (p[1]) && isxdigit (p[2]))
-           {
-             sscanf (p+1, "%2x", &c);
-             *p = c;
-             strcpy (p+1, p+3);
-           }
-         p++;
-       }
-
-      /* Skip add_style which often is empty in the requested font name */
-      while (font_name[n1] && font_name[n1] != '-')
-       n1++;
-      numfields++;
-
-      numfields += sscanf (font_name + n1,
-                          "-%8[^-]-%8[^-]-%8[^-]-%8[^-]-%30[^-]-%8[^-]-%30[^-]-%30[^-]%n",
-                          pixel_size,
-                          point_size,
-                          res_x,
-                          res_y,
-                          spacing,
-                          avg_width,
-                          registry,
-                          encoding,
-                          &n2);
-
-      if (numfields != 14 || font_name[n1 + n2] != '\0')
-       {
-         g_warning ("gdk_font_load: font name %s illegal", font_name);
-         return NULL;
-       }
-
-      logpixelsy = GetDeviceCaps (gdk_DC, LOGPIXELSY);
-
-      if (strcmp (pixel_size, "*") == 0)
-       if (strcmp (point_size, "*") == 0)
-         nHeight = 0;
-       else
-         nHeight = (int) (((double) atoi (point_size))/720.*logpixelsy);
-      else
-       nHeight = atoi (pixel_size);
-
-      nWidth = 0;
-      nEscapement = 0;
-      nOrientation = 0;
-
-      if (g_strcasecmp (weight, "thin") == 0)
-       fnWeight = FW_THIN;
-      else if (g_strcasecmp (weight, "extralight") == 0)
-       fnWeight = FW_EXTRALIGHT;
-      else if (g_strcasecmp (weight, "ultralight") == 0)
-#ifdef FW_ULTRALIGHT
-       fnWeight = FW_ULTRALIGHT;
-#else
-       fnWeight = FW_EXTRALIGHT; /* In fact, FW_ULTRALIGHT really is 
-                                  * defined as FW_EXTRALIGHT anyway.
-                                  */
-#endif
-      else if (g_strcasecmp (weight, "light") == 0)
-       fnWeight = FW_LIGHT;
-      else if (g_strcasecmp (weight, "normal") == 0)
-       fnWeight = FW_NORMAL;
-      else if (g_strcasecmp (weight, "regular") == 0)
-       fnWeight = FW_REGULAR;
-      else if (g_strcasecmp (weight, "medium") == 0)
-       fnWeight = FW_MEDIUM;
-      else if (g_strcasecmp (weight, "semibold") == 0)
-       fnWeight = FW_SEMIBOLD;
-      else if (g_strcasecmp (weight, "demibold") == 0)
-#ifdef FW_DEMIBOLD
-       fnWeight = FW_DEMIBOLD;
-#else
-       fnWeight = FW_SEMIBOLD; /* As above */
-#endif
-      else if (g_strcasecmp (weight, "bold") == 0)
-       fnWeight = FW_BOLD;
-      else if (g_strcasecmp (weight, "extrabold") == 0)
-       fnWeight = FW_EXTRABOLD;
-      else if (g_strcasecmp (weight, "ultrabold") == 0)
-#ifdef FW_ULTRABOLD
-       fnWeight = FW_ULTRABOLD;
-#else
-       fnWeight = FW_EXTRABOLD; /* As above */
-#endif
-      else if (g_strcasecmp (weight, "heavy") == 0)
-       fnWeight = FW_HEAVY;
-      else if (g_strcasecmp (weight, "black") == 0)
-#ifdef FW_BLACK
-       fnWeight = FW_BLACK;
-#else
-       fnWeight = FW_HEAVY;    /* As above */
-#endif
-      else
-       fnWeight = FW_DONTCARE;
-
-      if (g_strcasecmp (slant, "italic") == 0
-         || g_strcasecmp (slant, "oblique") == 0
-         || g_strcasecmp (slant, "i") == 0
-         || g_strcasecmp (slant, "o") == 0)
-       fdwItalic = TRUE;
-      else
-       fdwItalic = FALSE;
-      fdwUnderline = FALSE;
-      fdwStrikeOut = FALSE;
-      if (g_strcasecmp (registry, "iso8859") == 0)
-       if (strcmp (encoding, "1") == 0)
-         fdwCharSet = ANSI_CHARSET;
-       else if (strcmp (encoding, "2") == 0)
-         fdwCharSet = EASTEUROPE_CHARSET;
-       else if (strcmp (encoding, "7") == 0)
-         fdwCharSet = GREEK_CHARSET;
-       else if (strcmp (encoding, "8") == 0)
-         fdwCharSet = HEBREW_CHARSET;
-       else if (strcmp (encoding, "9") == 0)
-         fdwCharSet = TURKISH_CHARSET;
-       else
-         fdwCharSet = ANSI_CHARSET; /* XXX ??? */
-      else if (g_strcasecmp (registry, "jisx0208.1983") == 0)
-       fdwCharSet = SHIFTJIS_CHARSET;
-      else if (g_strcasecmp (registry, "ksc5601.1987") == 0)
-       fdwCharSet = HANGEUL_CHARSET;
-      else if (g_strcasecmp (registry, "gb2312.1980") == 0)
-       fdwCharSet = GB2312_CHARSET;
-      else if (g_strcasecmp (registry, "big5") == 0)
-       fdwCharSet = CHINESEBIG5_CHARSET;
-      else if (g_strcasecmp (registry, "windows") == 0
-              || g_strcasecmp (registry, "microsoft") == 0)
-       if (g_strcasecmp (encoding, "symbol") == 0)
-         fdwCharSet = SYMBOL_CHARSET;
-       else if (g_strcasecmp (encoding, "shiftjis") == 0)
-         fdwCharSet = SHIFTJIS_CHARSET;
-       else if (g_strcasecmp (encoding, "gb2312") == 0)
-         fdwCharSet = GB2312_CHARSET;
-       else if (g_strcasecmp (encoding, "hangeul") == 0)
-         fdwCharSet = HANGEUL_CHARSET;
-       else if (g_strcasecmp (encoding, "big5") == 0)
-         fdwCharSet = CHINESEBIG5_CHARSET;
-       else if (g_strcasecmp (encoding, "johab") == 0)
-         fdwCharSet = JOHAB_CHARSET;
-       else if (g_strcasecmp (encoding, "hebrew") == 0)
-         fdwCharSet = HEBREW_CHARSET;
-       else if (g_strcasecmp (encoding, "arabic") == 0)
-         fdwCharSet = ARABIC_CHARSET;
-       else if (g_strcasecmp (encoding, "greek") == 0)
-         fdwCharSet = GREEK_CHARSET;
-       else if (g_strcasecmp (encoding, "turkish") == 0)
-         fdwCharSet = TURKISH_CHARSET;
-       else if (g_strcasecmp (encoding, "easteurope") == 0)
-         fdwCharSet = EASTEUROPE_CHARSET;
-       else if (g_strcasecmp (encoding, "russian") == 0)
-         fdwCharSet = RUSSIAN_CHARSET;
-       else if (g_strcasecmp (encoding, "mac") == 0)
-         fdwCharSet = MAC_CHARSET;
-       else if (g_strcasecmp (encoding, "baltic") == 0)
-         fdwCharSet = BALTIC_CHARSET;
-       else if (g_strcasecmp (encoding, "cp1251") == 0)
-         fdwCharSet = RUSSIAN_CHARSET;
-       else
-         fdwCharSet = ANSI_CHARSET; /* XXX ??? */
-      else
-       fdwCharSet = ANSI_CHARSET; /* XXX ??? */
-      fdwOutputPrecision = OUT_TT_PRECIS;
-      fdwClipPrecision = CLIP_DEFAULT_PRECIS;
-      fdwQuality = PROOF_QUALITY;
-      if (g_strcasecmp (spacing, "m") == 0)
-       fdwPitchAndFamily = FIXED_PITCH;
-      else if (g_strcasecmp (spacing, "p") == 0)
-       fdwPitchAndFamily = VARIABLE_PITCH;
-      else 
-       fdwPitchAndFamily = DEFAULT_PITCH;
-      lpszFace = family;
-    }
-
-  for (tries = 0; ; tries++)
-    {
-      GDK_NOTE (MISC, g_print ("...trying CreateFont(%d,%d,%d,%d,"
-                              "%d,%d,%d,%d,"
-                              "%d,%d,%d,"
-                              "%d,%#.02x,\"%s\")\n",
-                              nHeight, nWidth, nEscapement, nOrientation,
-                              fnWeight, fdwItalic, fdwUnderline, fdwStrikeOut,
-                              fdwCharSet, fdwOutputPrecision, fdwClipPrecision,
-                              fdwQuality, fdwPitchAndFamily, lpszFace));
-      if ((hfont =
-          CreateFont (nHeight, nWidth, nEscapement, nOrientation,
-                      fnWeight, fdwItalic, fdwUnderline, fdwStrikeOut,
-                      fdwCharSet, fdwOutputPrecision, fdwClipPrecision,
-                      fdwQuality, fdwPitchAndFamily, lpszFace)) != NULL)
-       break;
-
-      /* If we fail, try some similar fonts often found on Windows. */
-
-      if (tries == 0)
-       {
-         if (g_strcasecmp (family, "helvetica") == 0)
-           lpszFace = "arial";
-         else if (g_strcasecmp (family, "new century schoolbook") == 0)
-           lpszFace = "century schoolbook";
-         else if (g_strcasecmp (family, "courier") == 0)
-           lpszFace = "courier new";
-         else if (g_strcasecmp (family, "lucida") == 0)
-           lpszFace = "lucida sans unicode";
-         else if (g_strcasecmp (family, "lucidatypewriter") == 0)
-           lpszFace = "lucida console";
-         else if (g_strcasecmp (family, "times") == 0)
-           lpszFace = "times new roman";
-       }
-      else if (tries == 1)
-       {
-         if (g_strcasecmp (family, "courier") == 0)
-           {
-             lpszFace = "";
-             fdwPitchAndFamily |= FF_MODERN;
-           }
-         else if (g_strcasecmp (family, "times new roman") == 0)
-           {
-             lpszFace = "";
-             fdwPitchAndFamily |= FF_ROMAN;
-           }
-         else if (g_strcasecmp (family, "helvetica") == 0
-                  || g_strcasecmp (family, "lucida") == 0)
-           {
-             lpszFace = "";
-             fdwPitchAndFamily |= FF_SWISS;
-           }
-         else
-           {
-             lpszFace = "";
-             fdwPitchAndFamily = (fdwPitchAndFamily & 0x0F) | FF_DONTCARE;
-           }
-       }
-      else
-       break;
-      tries++;
-    }
-  
-  if (!hfont)
-    return NULL;
-      
-  singlefont = g_new (GdkWin32SingleFont, 1);
-  singlefont->xfont = hfont;
-  GetObject (singlefont->xfont, sizeof (logfont), &logfont);
-  TranslateCharsetInfo ((DWORD *) singlefont->charset, &csi, TCI_SRCCHARSET);
-  singlefont->codepage = csi.ciACP;
-  GetCPInfo (singlefont->codepage, &singlefont->cpinfo);
-
-  return singlefont;
-}
-
-GdkFont*
-gdk_font_load (const gchar *font_name)
-{
-  GdkFont *font;
-  GdkFontPrivate *private;
-  GdkWin32SingleFont *singlefont;
-  HGDIOBJ oldfont;
-  HANDLE *f;
-  TEXTMETRIC textmetric;
-
-  g_return_val_if_fail (font_name != NULL, NULL);
-
-  font = gdk_font_hash_lookup (GDK_FONT_FONTSET, font_name);
-  if (font)
-    return font;
-
-  singlefont = gdk_font_load_internal (font_name);
-
-  private = g_new (GdkFontPrivate, 1);
-  font = (GdkFont*) private;
-
-  private->ref_count = 1;
-  private->names = NULL;
-  private->fonts = g_slist_append (NULL, singlefont);
-
-  /* Pretend all fonts are fontsets... Gtktext and gtkentry work better
-   * that way, they use wide chars, which is necessary for non-ASCII
-   * chars to work. (Yes, even Latin-1, as we use Unicode internally.)
-   */
-  font->type = GDK_FONT_FONTSET;
-  oldfont = SelectObject (gdk_DC, singlefont->xfont);
-  GetTextMetrics (gdk_DC, &textmetric);
-  singlefont->charset = GetTextCharsetInfo (gdk_DC, &singlefont->fs, 0);
-  SelectObject (gdk_DC, oldfont);
-  font->ascent = textmetric.tmAscent;
-  font->descent = textmetric.tmDescent;
-
-  GDK_NOTE (MISC, g_print ("... = %#x charset %s codepage %d "
-                          "asc %d desc %d\n",
-                          singlefont->xfont,
-                          charset_name (singlefont->charset),
-                          singlefont->codepage,
-                          font->ascent, font->descent));
-
-  gdk_font_hash_insert (GDK_FONT_FONTSET, font, font_name);
-
-  return font;
-}
-
-GdkFont*
-gdk_fontset_load (gchar *fontset_name)
-{
-  GdkFont *font;
-  GdkFontPrivate *private;
-  GdkWin32SingleFont *singlefont;
-  HGDIOBJ oldfont;
-  HANDLE *f;
-  TEXTMETRIC textmetric;
-  GSList *base_font_list = NULL;
-  gchar *fs;
-  gchar *b, *p, *s;
-
-  g_return_val_if_fail (fontset_name != NULL, NULL);
-
-  font = gdk_font_hash_lookup (GDK_FONT_FONTSET, fontset_name);
-  if (font)
-    return font;
-
-  s = fs = g_strdup (fontset_name);
-  while (*s && isspace (*s))
-    s++;
-
-  g_return_val_if_fail (*s, NULL);
-
-  private = g_new (GdkFontPrivate, 1);
-  font = (GdkFont*) private;
-
-  private->ref_count = 1;
-  private->names = NULL;
-  private->fonts = NULL;
-
-  font->type = GDK_FONT_FONTSET;
-  font->ascent = 0;
-  font->descent = 0;
-
-  while (TRUE)
-    {
-      if ((p = strchr (s, ',')) != NULL)
-       b = p;
-      else
-       b = s + strlen (s);
-
-      while (isspace (b[-1]))
-       b--;
-      *b = '\0';
-      singlefont = gdk_font_load_internal (s);
-      if (singlefont)
-       {
-         GDK_NOTE
-           (MISC, g_print ("... = %#x charset %s codepage %d\n",
-                           singlefont->xfont,
-                           charset_name (singlefont->charset),
-                           singlefont->codepage));
-         private->fonts = g_slist_append (private->fonts, singlefont);
-         oldfont = SelectObject (gdk_DC, singlefont->xfont);
-         GetTextMetrics (gdk_DC, &textmetric);
-         singlefont->charset =
-           GetTextCharsetInfo (gdk_DC, &singlefont->fs, 0);
-         SelectObject (gdk_DC, oldfont);
-         font->ascent = MAX (font->ascent, textmetric.tmAscent);
-         font->descent = MAX (font->descent, textmetric.tmDescent);
-       }
-      if (p)
-       {
-         s = p + 1;
-         while (*s && isspace (*s))
-           s++;
-       }
-      else
-       break;
-      if (!*s)
-       break;
-    }
-  
-  g_free (fs);
-
-  gdk_font_hash_insert (GDK_FONT_FONTSET, font, fontset_name);
-
-  return font;
-}
-
-GdkFont*
-gdk_font_ref (GdkFont *font)
-{
-  GdkFontPrivate *private;
-
-  g_return_val_if_fail (font != NULL, NULL);
-
-  private = (GdkFontPrivate*) font;
-  private->ref_count += 1;
-
-  GDK_NOTE (MISC,
-           g_print ("gdk_font_ref %#x %d\n",
-                    ((GdkWin32SingleFont *) private->fonts->data)->xfont,
-                    private->ref_count));
-  return font;
-}
-
-void
-gdk_font_unref (GdkFont *font)
-{
-  GdkFontPrivate *private;
-  GdkWin32SingleFont *singlefont;
-  GSList *list;
-  private = (GdkFontPrivate*) font;
-
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (private->ref_count > 0);
-
-  private->ref_count -= 1;
-
-  singlefont = (GdkWin32SingleFont *) private->fonts->data;
-  GDK_NOTE (MISC, g_print ("gdk_font_unref %#x %d%s\n",
-                          singlefont->xfont, private->ref_count,
-                          (private->ref_count == 0 ? " freeing" : "")));
-
-  if (private->ref_count == 0)
-    {
-      gdk_font_hash_remove (font->type, font);
-      
-      switch (font->type)
-       {
-       case GDK_FONT_FONT:
-         DeleteObject (singlefont->xfont);
-         break;
-
-       case GDK_FONT_FONTSET:
-         list = private->fonts;
-         while (list)
-           {
-             singlefont = (GdkWin32SingleFont *) list->data;
-             DeleteObject (singlefont->xfont);
-
-             list = list->next;
-           }
-         g_slist_free (private->fonts);
-         break;
-
-       default:
-         g_assert_not_reached ();
-       }
-      g_free (font);
-    }
-}
-
-gint
-gdk_font_id (const GdkFont *font)
-{
-  const GdkFontPrivate *font_private;
-
-  g_return_val_if_fail (font != NULL, 0);
-
-  font_private = (const GdkFontPrivate*) font;
-
-  if (font->type == GDK_FONT_FONT)
-    return (gint) ((GdkWin32SingleFont *) font_private->fonts->data)->xfont;
-  else
-    return 0;
-}
-
-gint
-gdk_font_equal (const GdkFont *fonta,
-                const GdkFont *fontb)
-{
-  const GdkFontPrivate *privatea;
-  const GdkFontPrivate *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;
-
-  if (fonta->type == GDK_FONT_FONT && fontb->type == GDK_FONT_FONT)
-    return (((GdkWin32SingleFont *) privatea->fonts->data)->xfont
-           == ((GdkWin32SingleFont *) privateb->fonts->data)->xfont);
-  else if (fonta->type == GDK_FONT_FONTSET && fontb->type == GDK_FONT_FONTSET)
-    {
-      GSList *lista = privatea->fonts;
-      GSList *listb = privateb->fonts;
-
-      while (lista && listb)
-       {
-         if (((GdkWin32SingleFont *) lista->data)->xfont
-             != ((GdkWin32SingleFont *) listb->data)->xfont)
-           return 0;
-         lista = lista->next;
-         listb = listb->next;
-       }
-      if (lista || listb)
-       return 0;
-      else
-       return 1;
-    }
-  else
-    return 0;
-}
-
-gint
-gdk_string_width (GdkFont     *font,
-                 const gchar *string)
-{
-  return gdk_text_width (font, string, strlen (string));
-}
-
-/* This table classifies Unicode characters according to the Microsoft
- * Unicode subset numbering. This is from the table in "Developing
- * International Software for Windows 95 and Windows NT". This is almost,
- * but not quite, the same as the official Unicode block table in
- * Blocks.txt from ftp.unicode.org. The bit number field is the bitfield
- * number as in the FONTSIGNATURE struct's fsUsb field.
- */
-static struct {
-  wchar_t low, high;
-  guint bit; 
-  gchar *name;
-} utab[] =
-{
-  { 0x0000, 0x007E, 0, "Basic Latin" },
-  { 0x00A0, 0x00FF, 1, "Latin-1 Supplement" },
-  { 0x0100, 0x017F, 2, "Latin Extended-A" },
-  { 0x0180, 0x024F, 3, "Latin Extended-B" },
-  { 0x0250, 0x02AF, 4, "IPA Extensions" },
-  { 0x02B0, 0x02FF, 5, "Spacing Modifier Letters" },
-  { 0x0300, 0x036F, 6, "Combining Diacritical Marks" },
-  { 0x0370, 0x03CF, 7, "Basic Greek" },
-  { 0x03D0, 0x03FF, 8, "Greek Symbols and Coptic" },
-  { 0x0400, 0x04FF, 9, "Cyrillic" },
-  { 0x0530, 0x058F, 10, "Armenian" },
-  { 0x0590, 0x05CF, 12, "Hebrew Extended" },
-  { 0x05D0, 0x05FF, 11, "Basic Hebrew" },
-  { 0x0600, 0x0652, 13, "Basic Arabic" },
-  { 0x0653, 0x06FF, 14, "Arabic Extended" },
-  { 0x0900, 0x097F, 15, "Devanagari" },
-  { 0x0980, 0x09FF, 16, "Bengali" },
-  { 0x0A00, 0x0A7F, 17, "Gurmukhi" },
-  { 0x0A80, 0x0AFF, 18, "Gujarati" },
-  { 0x0B00, 0x0B7F, 19, "Oriya" },
-  { 0x0B80, 0x0BFF, 20, "Tamil" },
-  { 0x0C00, 0x0C7F, 21, "Telugu" },
-  { 0x0C80, 0x0CFF, 22, "Kannada" },
-  { 0x0D00, 0x0D7F, 23, "Malayalam" },
-  { 0x0E00, 0x0E7F, 24, "Thai" },
-  { 0x0E80, 0x0EFF, 25, "Lao" },
-  { 0x10A0, 0x10CF, 27, "Georgian Extended" },
-  { 0x10D0, 0x10FF, 26, "Basic Georgian" },
-  { 0x1100, 0x11FF, 28, "Hangul Jamo" },
-  { 0x1E00, 0x1EFF, 29, "Latin Extended Additional" },
-  { 0x1F00, 0x1FFF, 30, "Greek Extended" },
-  { 0x2000, 0x206F, 31, "General Punctuation" },
-  { 0x2070, 0x209F, 32, "Superscripts and Subscripts" },
-  { 0x20A0, 0x20CF, 33, "Currency Symbols" },
-  { 0x20D0, 0x20FF, 34, "Combining Diacritical Marks for Symbols" },
-  { 0x2100, 0x214F, 35, "Letterlike Symbols" },
-  { 0x2150, 0x218F, 36, "Number Forms" },
-  { 0x2190, 0x21FF, 37, "Arrows" },
-  { 0x2200, 0x22FF, 38, "Mathematical Operators" },
-  { 0x2300, 0x23FF, 39, "Miscellaneous Technical" },
-  { 0x2400, 0x243F, 40, "Control Pictures" },
-  { 0x2440, 0x245F, 41, "Optical Character Recognition" },
-  { 0x2460, 0x24FF, 42, "Enclosed Alphanumerics" },
-  { 0x2500, 0x257F, 43, "Box Drawing" },
-  { 0x2580, 0x259F, 44, "Block Elements" },
-  { 0x25A0, 0x25FF, 45, "Geometric Shapes" },
-  { 0x2600, 0x26FF, 46, "Miscellaneous Symbols" },
-  { 0x2700, 0x27BF, 47, "Dingbats" },
-  { 0x3000, 0x303F, 48, "CJK Symbols and Punctuation" },
-  { 0x3040, 0x309F, 49, "Hiragana" },
-  { 0x30A0, 0x30FF, 50, "Katakana" },
-  { 0x3100, 0x312F, 51, "Bopomofo" },
-  { 0x3130, 0x318F, 52, "Hangul Compatibility Jamo" },
-  { 0x3190, 0x319F, 53, "CJK Miscellaneous" },
-  { 0x3200, 0x32FF, 54, "Enclosed CJK" },
-  { 0x3300, 0x33FF, 55, "CJK Compatibility" },
-  { 0x3400, 0x3D2D, 56, "Hangul" },
-  { 0x3D2E, 0x44B7, 57, "Hangul Supplementary-A" },
-  { 0x44B8, 0x4DFF, 58, "Hangul Supplementary-B" },
-  { 0x4E00, 0x9FFF, 59, "CJK Unified Ideographs" },
-  { 0xE000, 0xF8FF, 60, "Private Use Area" },
-  { 0xF900, 0xFAFF, 61, "CJK Compatibility Ideographs" },
-  { 0xFB00, 0xFB4F, 62, "Alphabetic Presentation Forms" },
-  { 0xFB50, 0xFDFF, 63, "Arabic Presentation Forms-A" },
-  { 0xFE20, 0xFE2F, 64, "Combining Half Marks" },
-  { 0xFE30, 0xFE4F, 65, "CJK Compatibility Forms" },
-  { 0xFE50, 0xFE6F, 66, "Small Form Variants" },
-  { 0xFE70, 0xFEFE, 67, "Arabic Presentation Forms-B" },
-  { 0xFEFF, 0xFEFF, 69, "Specials" },
-  { 0xFF00, 0xFFEF, 68, "Halfwidth and Fullwidth Forms" },
-  { 0xFFF0, 0xFFFD, 69, "Specials" }
-};
-
-/* Return the Unicode Subset bitfield number for a Unicode character */
-
-static int
-unicode_classify (wchar_t wc)
-{
-  int min = 0;
-  int max = sizeof (utab) / sizeof (utab[0]) - 1;
-  int mid;
-
-  while (max >= min)
-    {
-      mid = (min + max) / 2;
-      if (utab[mid].high < wc)
-       min = mid + 1;
-      else if (wc < utab[mid].low)
-       max = mid - 1;
-      else if (utab[mid].low <= wc && wc <= utab[mid].high)
-       return utab[mid].bit;
-      else
-       return -1;
-    }
-}
-
-void
-gdk_wchar_text_handle (GdkFont       *font,
-                      const wchar_t *wcstr,
-                      int            wclen,
-                      void         (*handler)(GdkWin32SingleFont *,
-                                              const wchar_t *,
-                                              int,
-                                              void *),
-                      void          *arg)
-{
-  GdkFontPrivate *private;
-  GdkWin32SingleFont *singlefont;
-  GSList *list;
-  int i, block;
-  const wchar_t *start, *end, *wcp;
-
-  wcp = wcstr;
-  end = wcp + wclen;
-  private = (GdkFontPrivate *) font;
-
-  g_assert (private->ref_count > 0);
-
-  while (wcp < end)
-    {
-      /* Split Unicode string into pieces of the same class */
-      start = wcp;
-      block = unicode_classify (*wcp);
-      while (wcp + 1 < end && unicode_classify (wcp[1]) == block)
-       wcp++;
-
-      /* Find a font in the fontset that can handle this class */
-      list = private->fonts;
-      while (list)
-       {
-         singlefont = (GdkWin32SingleFont *) list->data;
-         
-         if (singlefont->fs.fsUsb[block/32] & (1 << (block % 32)))
-           break;
-
-         list = list->next;
-       }
-
-      if (!list)
-       singlefont = NULL;
-
-      /* Call the callback function */
-      (*handler) (singlefont, start, wcp+1 - start, arg);
-      wcp++;
-    }
-}
-
-typedef struct
-{
-  SIZE total;
-  SIZE max;
-} gdk_text_size_arg;
-
-static void
-gdk_text_size_handler (GdkWin32SingleFont *singlefont,
-                      const wchar_t      *wcstr,
-                      int                 wclen,
-                      void               *argp)
-{
-  SIZE this_size;
-  HGDIOBJ oldfont;
-  gdk_text_size_arg *arg = (gdk_text_size_arg *) argp;
-
-  if (!singlefont)
-    return;
-
-  if ((oldfont = SelectObject (gdk_DC, singlefont->xfont)) == NULL)
-    {
-      g_warning ("gdk_text_size_handler: SelectObject failed");
-      return;
-    }
-  GetTextExtentPoint32W (gdk_DC, wcstr, wclen, &this_size);
-  SelectObject (gdk_DC, oldfont);
-
-  arg->total.cx += this_size.cx;
-  arg->total.cy += this_size.cy;
-  arg->max.cx = MAX (this_size.cx, arg->max.cx);
-  arg->max.cy = MAX (this_size.cy, arg->max.cy);
-}
-
-static gboolean
-gdk_text_size (GdkFont           *font,
-              const gchar       *text,
-              gint               text_length,
-              gdk_text_size_arg *arg)
-{
-  gint wlen;
-  wchar_t *wcstr;
-
-  g_return_val_if_fail (font != NULL, FALSE);
-  g_return_val_if_fail (text != NULL, FALSE);
-
-  if (text_length == 0)
-    return 0;
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  wcstr = g_new (wchar_t, text_length);
-  if ((wlen = gdk_nmbstowchar_ts (wcstr, text, text_length, text_length)) == -1)
-    g_warning ("gdk_text_size: gdk_nmbstowchar_ts failed");
-  else
-    gdk_wchar_text_handle (font, wcstr, wlen, gdk_text_size_handler, arg);
-
-  g_free (wcstr);
-
-  return TRUE;
-}
-
-gint
-gdk_text_width (GdkFont      *font,
-               const gchar  *text,
-               gint          text_length)
-{
-  gdk_text_size_arg arg;
-
-  arg.total.cx = arg.total.cy = 0;
-  arg.max.cx = arg.max.cy = 0;
-
-  if (!gdk_text_size (font, text, text_length, &arg))
-    return -1;
-
-  return arg.total.cx;
-}
-
-gint
-gdk_text_width_wc (GdkFont       *font,
-                  const GdkWChar *text,
-                  gint            text_length)
-{
-  gdk_text_size_arg arg;
-  wchar_t *wcstr;
-  gint i;
-
-  g_return_val_if_fail (font != NULL, -1);
-  g_return_val_if_fail (text != NULL, -1);
-
-  if (text_length == 0)
-    return 0;
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    {
-      wcstr = g_new (wchar_t, text_length);
-      for (i = 0; i < text_length; i++)
-       wcstr[i] = text[i];
-    }
-  else
-    wcstr = (wchar_t *) text;
-
-  arg.total.cx = arg.total.cy = 0;
-  arg.max.cx = arg.max.cy = 0;
-
-  gdk_wchar_text_handle (font, wcstr, text_length,
-                        gdk_text_size_handler, &arg);
-
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    g_free (wcstr);
-
-  return arg.total.cx;
-}
-
-gint
-gdk_char_width (GdkFont *font,
-               gchar    character)
-{
-  if (((guchar) character) >= 128)
-    {
-      /* gtktext calls us with non-ASCII characters, sigh */
-      GdkWChar wc = (guchar) character;
-      return gdk_text_width_wc (font, &wc, 1);
-    }
-  return gdk_text_width (font, &character, 1);
-}
-
-gint
-gdk_char_width_wc (GdkFont *font,
-                  GdkWChar character)
-{
-  return gdk_text_width_wc (font, &character, 1);
-}
-
-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,
-                  gint         text_length,
-                 gint        *lbearing,
-                 gint        *rbearing,
-                 gint        *width,
-                 gint        *ascent,
-                 gint        *descent)
-{
-  gdk_text_size_arg arg;
-  gint wlen;
-  wchar_t *wcstr;
-
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (text != NULL);
-
-  if (text_length == 0)
-    {
-      if (lbearing)
-       *lbearing = 0;
-      if (rbearing)
-       *rbearing = 0;
-      if (width)
-       *width = 0;
-      if (ascent)
-       *ascent = 0;
-      if (descent)
-       *descent = 0;
-      return;
-    }
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  arg.total.cx = arg.total.cy = 0;
-  arg.max.cx = arg.max.cy = 0;
-
-  wcstr = g_new (wchar_t, text_length);
-  if ((wlen = gdk_nmbstowchar_ts (wcstr, text, text_length, text_length)) == -1)
-    g_warning ("gdk_text_extents: gdk_nmbstowchar_ts failed");
-  else
-    gdk_wchar_text_handle (font, wcstr, wlen, gdk_text_size_handler, &arg);
-
-  g_free (wcstr);
-
-  /* XXX This is quite bogus */
-  if (lbearing)
-    *lbearing = 0;
-  if (rbearing)
-    *rbearing = 0;
-  if (width)
-    *width = arg.total.cx;
-  if (ascent)
-    *ascent = arg.max.cy + 1;
-  if (descent)
-    *descent = font->descent + 1;
-}
-
-void
-gdk_text_extents_wc (GdkFont        *font,
-                    const GdkWChar *text,
-                    gint            text_length,
-                    gint           *lbearing,
-                    gint           *rbearing,
-                    gint           *width,
-                    gint           *ascent,
-                    gint           *descent)
-{
-  gdk_text_size_arg arg;
-  wchar_t *wcstr;
-  gint i;
-
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (text != NULL);
-
-  if (text_length == 0)
-    {
-      if (lbearing)
-       *lbearing = 0;
-      if (rbearing)
-       *rbearing = 0;
-      if (width)
-       *width = 0;
-      if (ascent)
-       *ascent = 0;
-      if (descent)
-       *descent = 0;
-      return;
-    }
-
-  g_assert (font->type == GDK_FONT_FONT || font->type == GDK_FONT_FONTSET);
-
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    {
-      wcstr = g_new (wchar_t, text_length);
-      for (i = 0; i < text_length; i++)
-       wcstr[i] = text[i];
-    }
-  else
-    wcstr = (wchar_t *) text;
-
-  arg.total.cx = arg.total.cy = 0;
-  arg.max.cx = arg.max.cy = 0;
-
-  gdk_wchar_text_handle (font, wcstr, text_length,
-                        gdk_text_size_handler, &arg);
-
-  if (sizeof (wchar_t) != sizeof (GdkWChar))
-    g_free (wcstr);
-
-  /* XXX This is quite bogus */
-  if (lbearing)
-    *lbearing = 0;
-  if (rbearing)
-    *rbearing = 0;
-  if (width)
-    *width = arg.total.cx;
-  if (ascent)
-    *ascent = arg.max.cy + 1;
-  if (descent)
-    *descent = font->descent + 1;
-}
-
-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)
-{
-  return gdk_text_width (font, text, text_length); /* ??? */
-}
-
-gint
-gdk_char_measure (GdkFont *font,
-                  gchar    character)
-{
-  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)
-{
-  gdk_text_size_arg arg;
-
-  arg.total.cx = arg.total.cy = 0;
-  arg.max.cx = arg.max.cy = 0;
-
-  if (!gdk_text_size (font, text, text_length, &arg))
-    return -1;
-
-  return arg.max.cy;
-}
-
-gint
-gdk_char_height (GdkFont *font,
-                gchar    character)
-{
-  return gdk_text_height (font, &character, 1);
-}
diff --git a/gdk/win32/gdkgc-win32.c b/gdk/win32/gdkgc-win32.c
deleted file mode 100644 (file)
index 407335a..0000000
+++ /dev/null
@@ -1,1392 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <string.h>
-
-#include "gdkgc.h"
-#include "gdkfont.h"
-#include "gdkpixmap.h"
-#include "gdkprivate.h"
-#include "gdkx.h"
-
-GdkGC*
-gdk_gc_new (GdkWindow *window)
-{
-  return gdk_gc_new_with_values (window, NULL, 0);
-}
-
-GdkGC*
-gdk_gc_new_with_values (GdkWindow      *window,
-                       GdkGCValues     *values,
-                       GdkGCValuesMask  values_mask)
-{
-  GdkGC *gc;
-  GdkGCPrivate *private;
-  static GdkColor black;
-  static GdkColor white;
-  static gboolean beenhere = FALSE;
-
-  if (!beenhere)
-    {
-      gdk_color_black (gdk_colormap_get_system (), &black);
-      gdk_color_white (gdk_colormap_get_system (), &white);
-      beenhere = TRUE;
-    }
-
-  g_return_val_if_fail (window != NULL, NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-
-  private = g_new (GdkGCPrivate, 1);
-  gc = (GdkGC*) private;
-
-  private->ref_count = 1;
-  private->rop2 = R2_COPYPEN;
-  private->fill_style = GDK_SOLID;
-  private->values_mask = values_mask;
-  private->values_mask |= GDK_GC_FUNCTION | GDK_GC_FILL;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_new: {"));
-
-  if (values_mask & GDK_GC_FOREGROUND)
-    {
-      private->foreground = values->foreground;
-    }
-  else
-    private->foreground = black;
-  
-  if (values_mask & GDK_GC_BACKGROUND)
-    {
-      private->background = values->background;
-    }
-  else
-    private->background = white;
-
-  if ((values_mask & GDK_GC_FONT) && (values->font->type == GDK_FONT_FONT
-                                     || values->font->type == GDK_FONT_FONTSET))
-    {
-      private->font = values->font;
-      gdk_font_ref (private->font);
-      GDK_NOTE (MISC, g_print (" font"));
-    }
-  else
-    private->font = NULL;
-
-  if (values_mask & GDK_GC_FUNCTION)
-    {
-      switch (values->function)
-       {
-       case GDK_COPY:
-         private->rop2 = R2_COPYPEN; break;
-       case GDK_INVERT:
-         private->rop2 = R2_NOT; break;
-       case GDK_XOR:
-         private->rop2 = R2_XORPEN; break;
-       case GDK_CLEAR:
-         private->rop2 = R2_BLACK; break;
-       case GDK_AND:
-         private->rop2 = R2_MASKPEN; break;
-       case GDK_AND_REVERSE:
-         private->rop2 = R2_MASKPENNOT; break;
-       case GDK_AND_INVERT:
-         private->rop2 = R2_MASKNOTPEN; break;
-       case GDK_NOOP:
-         private->rop2 = R2_NOP; break;
-       case GDK_OR:
-         private->rop2 = R2_MERGEPEN; break;
-       case GDK_EQUIV:
-         private->rop2 = R2_NOTXORPEN; break;
-       case GDK_OR_REVERSE:
-         private->rop2 = R2_MERGEPENNOT; break;
-       case GDK_COPY_INVERT:
-         private->rop2 = R2_NOTCOPYPEN; break;
-       case GDK_OR_INVERT:
-         private->rop2 = R2_MERGENOTPEN; break;
-       case GDK_NAND:
-         private->rop2 = R2_NOTMASKPEN; break;
-       case GDK_SET:
-         private->rop2 = R2_WHITE; break;
-       }
-      GDK_NOTE (MISC, g_print (" function=%d", private->rop2));
-    }
-
-  if (values_mask & GDK_GC_FILL)
-    {
-      private->fill_style = values->fill;
-      GDK_NOTE (MISC, g_print (" fill=%d", private->fill_style));
-    }
-
-  if (values_mask & GDK_GC_TILE)
-    {
-      private->tile = values->tile;
-      gdk_pixmap_ref (private->tile);
-      GDK_NOTE (MISC, g_print (" tile=%#x", GDK_DRAWABLE_XID (private->tile)));
-    }
-  else
-    private->tile = NULL;
-
-  if (values_mask & GDK_GC_STIPPLE)
-    {
-      private->stipple = values->stipple;
-      gdk_pixmap_ref (private->stipple);
-      GDK_NOTE (MISC, g_print (" stipple=%#x", GDK_DRAWABLE_XID (private->stipple)));
-    }
-  else
-    private->stipple = NULL;
-
-  if (values_mask & GDK_GC_CLIP_MASK)
-    {
-      private->clip_region =
-       BitmapToRegion ((HBITMAP) GDK_DRAWABLE_XID (values->clip_mask));
-      GDK_NOTE (MISC, g_print (" clip=%#x", private->clip_region));
-    }
-  else
-    private->clip_region = NULL;
-
-  if (values_mask & GDK_GC_SUBWINDOW)
-    {
-      private->subwindow_mode = values->subwindow_mode;
-      GDK_NOTE (MISC, g_print (" subw=%d", private->subwindow_mode));
-    }
-
-  if (values_mask & GDK_GC_TS_X_ORIGIN)
-    {
-      private->ts_x_origin = values->ts_x_origin;
-      GDK_NOTE (MISC, g_print (" ts_x=%d", private->ts_x_origin));
-    }
-
-  if (values_mask & GDK_GC_TS_Y_ORIGIN)
-    {
-      private->ts_y_origin = values->ts_y_origin;
-      GDK_NOTE (MISC, g_print (" ts_y=%d", private->ts_y_origin));
-    }
-
-  if (values_mask & GDK_GC_CLIP_X_ORIGIN)
-    {
-      private->clip_x_origin = values->clip_x_origin;
-      GDK_NOTE (MISC, g_print (" clip_x=%d", private->clip_x_origin));
-    }
-
-  if (values_mask & GDK_GC_CLIP_Y_ORIGIN)
-    {
-      private->clip_y_origin = values->clip_y_origin; 
-      GDK_NOTE (MISC, g_print (" clip_y=%d", private->clip_y_origin));
-   }
-  if (values_mask & GDK_GC_EXPOSURES)
-    {
-      private->graphics_exposures = values->graphics_exposures;
-      GDK_NOTE (MISC, g_print (" exp=%d", private->graphics_exposures));
-    }
-
-  private->pen_style = PS_GEOMETRIC;
-  private->pen_width = 1;
-
-  if (values_mask & (GDK_GC_LINE_WIDTH | GDK_GC_LINE_STYLE))
-    {
-      if (values_mask & GDK_GC_LINE_WIDTH)
-       {
-         private->pen_width = values->line_width;
-         GDK_NOTE (MISC, g_print (" pw=%d", private->pen_width));
-       }
-      if (values_mask & GDK_GC_LINE_STYLE)
-       {
-         switch (values->line_style)
-           {
-           case GDK_LINE_SOLID:
-             private->pen_style |= PS_SOLID; break;
-           case GDK_LINE_ON_OFF_DASH:
-           case GDK_LINE_DOUBLE_DASH: /* ??? */
-             private->pen_style |= PS_DASH; break;
-           }
-         GDK_NOTE (MISC, g_print (" ps=%#x", private->pen_style));
-       }
-    }
-
-  if (values_mask & GDK_GC_CAP_STYLE)
-    {
-      switch (values->cap_style)
-       {
-       case GDK_CAP_NOT_LAST:  /* ??? */
-       case GDK_CAP_BUTT:
-         private->pen_style |= PS_ENDCAP_FLAT; break;
-       case GDK_CAP_ROUND:
-         private->pen_style |= PS_ENDCAP_ROUND; break;
-       case GDK_CAP_PROJECTING:
-         private->pen_style |= PS_ENDCAP_SQUARE; break;
-       }
-      GDK_NOTE (MISC, g_print (" ps=%#x", private->pen_style));
-    }
-
-  if (values_mask & GDK_GC_JOIN_STYLE)
-    {
-      switch (values->join_style)
-       {
-       case GDK_JOIN_MITER:
-         private->pen_style |= PS_JOIN_MITER;
-         break;
-       case GDK_JOIN_ROUND:
-         private->pen_style |= PS_JOIN_ROUND;
-         break;
-       case GDK_JOIN_BEVEL:
-         private->pen_style |= PS_JOIN_BEVEL;
-         break;
-       }
-      GDK_NOTE (MISC, g_print (" ps=%#x", private->pen_style));
-    }
-
-  private->hwnd = NULL;
-  private->xgc = NULL;
-
-  GDK_NOTE (MISC, g_print ("} = %p\n", private));
-
-  return gc;
-}
-
-void
-gdk_gc_destroy (GdkGC *gc)
-{
-  gdk_gc_unref (gc);
-}
-
-GdkGC *
-gdk_gc_ref (GdkGC *gc)
-{
-  GdkGCPrivate *private = (GdkGCPrivate*) gc;
-
-  g_return_val_if_fail (gc != NULL, NULL);
-  private->ref_count += 1;
-
-  return gc;
-}
-
-void
-gdk_gc_unref (GdkGC *gc)
-{
-  GdkGCPrivate *private = (GdkGCPrivate*) gc;
-  
-  g_return_if_fail (gc != NULL);
-  
-  if (private->ref_count > 1)
-    private->ref_count -= 1;
-  else
-    {
-      if (private->values_mask & GDK_GC_FONT)
-       gdk_font_unref (private->font);
-
-      if (private->values_mask & GDK_GC_TILE)
-       gdk_pixmap_unref (private->tile);
-      
-      if (private->values_mask & GDK_GC_STIPPLE)
-       gdk_pixmap_unref (private->stipple);
-      
-      if (private->values_mask & GDK_GC_CLIP_MASK)
-       DeleteObject (private->clip_region);
-
-      g_free (gc);
-    }
-}
-
-void
-gdk_gc_get_values (GdkGC       *gc,
-                  GdkGCValues *values)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (values != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  values->foreground = private->foreground;
-  values->background = private->background;
-  values->font = private->font;
-
-  switch (private->rop2)
-    {
-    case R2_COPYPEN:
-      values->function = GDK_COPY; break;
-    case R2_NOT:
-      values->function = GDK_INVERT; break;
-    case R2_XORPEN:
-      values->function = GDK_XOR; break;
-    case R2_BLACK:
-      values->function = GDK_CLEAR; break;
-    case R2_MASKPEN:
-      values->function = GDK_AND; break;
-    case R2_MASKPENNOT:
-      values->function = GDK_AND_REVERSE; break;
-    case R2_MASKNOTPEN:
-      values->function = GDK_AND_INVERT; break;
-    case R2_NOP:
-      values->function = GDK_NOOP; break;
-    case R2_MERGEPEN:
-      values->function = GDK_OR; break;
-    case R2_NOTXORPEN:
-      values->function = GDK_EQUIV; break;
-    case R2_MERGEPENNOT:
-      values->function = GDK_OR_REVERSE; break;
-    case R2_NOTCOPYPEN:
-      values->function = GDK_COPY_INVERT; break;
-    case R2_MERGENOTPEN:
-      values->function = GDK_OR_INVERT; break;
-    case R2_NOTMASKPEN:
-      values->function = GDK_NAND; break;
-    case R2_WHITE:
-      values->function = GDK_SET; break;
-    }
-
-  values->fill = private->fill_style;
-
-  values->tile = private->tile;
-  values->stipple = private->stipple;
-  if (private->clip_region != NULL)
-    {
-      RECT rect;
-      HBRUSH hbr;
-      HDC hdc;
-      HGDIOBJ oldbitmap;
-      GdkPixmap *pixmap;
-
-      GetRgnBox (private->clip_region, &rect);
-      pixmap =
-       gdk_pixmap_new (NULL, rect.right - rect.left, rect.bottom - rect.top,
-                       1);
-      hbr = GetStockObject (WHITE_BRUSH);
-      if ((hdc = CreateCompatibleDC (NULL)) == NULL)
-       g_warning ("gdk_gc_get_values: CreateCompatibleDC failed");
-      if ((oldbitmap =
-          SelectObject (hdc, GDK_DRAWABLE_XID (pixmap))) == NULL)
-       g_warning ("gdk_gc_get_values: SelectObject #1 failed");
-      hbr = GetStockObject (BLACK_BRUSH);
-      if (!FillRect (hdc, &rect, hbr))
-       g_warning ("gdk_gc_get_values: FillRect failed");
-      hbr = GetStockObject (WHITE_BRUSH);
-      if (!FillRgn (hdc, private->clip_region, hbr))
-       g_warning ("gdk_gc_get_values: FillRgn failed");
-      if (SelectObject (hdc, oldbitmap) == NULL)
-       g_warning ("gdk_gc_get_values: SelectObject #2 failed");
-      DeleteDC (hdc);
-      values->clip_mask = pixmap;
-    }
-  else
-    values->clip_mask = NULL;
-  values->subwindow_mode = private->subwindow_mode;
-  values->ts_x_origin = private->ts_x_origin;
-  values->ts_y_origin = private->ts_y_origin;
-  values->clip_x_origin = private->clip_x_origin;
-  values->clip_y_origin = private->clip_y_origin;
-  values->graphics_exposures = private->graphics_exposures;
-  values->line_width = private->pen_width;
-  
-  if (private->pen_style & PS_SOLID)
-    values->line_style = GDK_LINE_SOLID;
-  else if (private->pen_style & PS_DASH)
-    values->line_style = GDK_LINE_ON_OFF_DASH;
-  else
-    values->line_style = GDK_LINE_SOLID;
-
-  /* PS_ENDCAP_ROUND is zero */
-  if (private->pen_style & PS_ENDCAP_FLAT)
-    values->cap_style = GDK_CAP_BUTT;
-  else if (private->pen_style & PS_ENDCAP_SQUARE)
-    values->cap_style = GDK_CAP_PROJECTING;
-  else
-    values->cap_style = GDK_CAP_ROUND;
-    
-  /* PS_JOIN_ROUND is zero */
-  if (private->pen_style & PS_JOIN_MITER)
-    values->join_style = GDK_JOIN_MITER;
-  else if (private->pen_style & PS_JOIN_BEVEL)
-    values->join_style = GDK_JOIN_BEVEL;
-  else
-    values->join_style = GDK_JOIN_ROUND;
-}
-
-void
-gdk_gc_set_foreground (GdkGC   *gc,
-                      GdkColor *color)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (color != NULL);
-
-  private = (GdkGCPrivate*) gc;
-  {
-    GDK_NOTE (MISC, g_print ("gdk_gc_set_foreground: (%d) %s\n",
-                            private, gdk_color_to_string (color)));
-    private->foreground = *color;
-    private->values_mask |= GDK_GC_FOREGROUND;
-  }
-}
-
-void
-gdk_gc_set_background (GdkGC   *gc,
-                      GdkColor *color)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (color != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_set_backround: (%d) %s\n",
-                          private, gdk_color_to_string(color)));
-  private->background = *color;
-  private->values_mask |= GDK_GC_BACKGROUND;
-}
-
-void
-gdk_gc_set_font (GdkGC  *gc,
-                GdkFont *font)
-{
-  GdkGCPrivate *gc_private;
-  GdkFontPrivate *font_private;
-  gchar *xlfd;
-
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (font != NULL);
-
-  if (font->type == GDK_FONT_FONT
-      || font->type == GDK_FONT_FONTSET)
-    {
-      gc_private = (GdkGCPrivate*) gc;
-      
-      GDK_NOTE (MISC, (xlfd = gdk_font_xlfd_create (font),
-                      g_print ("gdk_gc_set_font: (%d) %s\n",
-                               gc_private, xlfd),
-                      gdk_font_xlfd_free (xlfd)));
-
-      if (gc_private->font != NULL)
-       gdk_font_unref (gc_private->font);
-      gc_private->font = font;
-      gdk_font_ref (gc_private->font);
-      gc_private->values_mask |= GDK_GC_FONT;
-    }
-}
-
-void
-gdk_gc_set_function (GdkGC      *gc,
-                    GdkFunction  function)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_set_function: (%d) %d\n", private, function));
-
-  switch (function)
-    {
-    case GDK_COPY:
-      private->rop2 = R2_COPYPEN; break;
-    case GDK_INVERT:
-      private->rop2 = R2_NOT; break;
-    case GDK_XOR:
-      private->rop2 = R2_XORPEN; break;
-    case GDK_CLEAR:
-      private->rop2 = R2_BLACK; break;
-    case GDK_AND:
-      private->rop2 = R2_MASKPEN; break;
-    case GDK_AND_REVERSE:
-      private->rop2 = R2_MASKPENNOT; break;
-    case GDK_AND_INVERT:
-      private->rop2 = R2_MASKNOTPEN; break;
-    case GDK_NOOP:
-      private->rop2 = R2_NOP; break;
-    case GDK_OR:
-      private->rop2 = R2_MERGEPEN; break;
-    case GDK_EQUIV:
-      private->rop2 = R2_NOTXORPEN; break;
-    case GDK_OR_REVERSE:
-      private->rop2 = R2_MERGEPENNOT; break;
-    case GDK_COPY_INVERT:
-      private->rop2 = R2_NOTCOPYPEN; break;
-    case GDK_OR_INVERT:
-      private->rop2 = R2_MERGENOTPEN; break;
-    case GDK_NAND:
-      private->rop2 = R2_NOTMASKPEN; break;
-    case GDK_SET:
-      private->rop2 = R2_WHITE; break;
-    }
-  private->values_mask |= GDK_GC_FUNCTION;
-}
-
-void
-gdk_gc_set_fill (GdkGC  *gc,
-                GdkFill  fill)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  private->fill_style = fill;
-  private->values_mask |= GDK_GC_FILL;
-}
-
-void
-gdk_gc_set_tile (GdkGC    *gc,
-                GdkPixmap *tile)
-{
-  GdkGCPrivate *private;
-  HBITMAP pixmap;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  pixmap = NULL;
-
-  if (tile)
-    pixmap = GDK_DRAWABLE_XID (tile);
-
-  if (private->tile != NULL)
-    gdk_pixmap_unref (private->tile);
-  private->tile = tile;
-  if (tile)
-    gdk_pixmap_ref (tile);
-  if (pixmap != NULL)
-    private->values_mask |= GDK_GC_TILE;
-  else
-    private->values_mask &= ~GDK_GC_TILE;
-}
-
-void
-gdk_gc_set_stipple (GdkGC     *gc,
-                   GdkPixmap *stipple)
-{
-  GdkGCPrivate *private;
-  HBITMAP pixmap;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  pixmap = NULL;
-
-  if (stipple)
-    pixmap = GDK_DRAWABLE_XID (stipple);
-
-  if (private->stipple != NULL)
-    gdk_pixmap_unref (private->stipple);
-  private->stipple = stipple;
-  if (stipple)
-    gdk_pixmap_ref (stipple);
-  if (pixmap != NULL)
-    private->values_mask |= GDK_GC_STIPPLE;
-  else
-    private->values_mask &= ~GDK_GC_STIPPLE;
-}
-
-void
-gdk_gc_set_ts_origin (GdkGC *gc,
-                     gint   x,
-                     gint   y)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  private->ts_x_origin = x;
-  private->ts_y_origin = y;
-  private->values_mask |= GDK_GC_TS_X_ORIGIN |GDK_GC_TS_Y_ORIGIN;
-}
-
-void
-gdk_gc_set_clip_origin (GdkGC *gc,
-                       gint   x,
-                       gint   y)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_origin: (%d) +%d+%d\n",
-                          private, x, y));
-
-  private->clip_x_origin = x;
-  private->clip_y_origin = y;
-  private->values_mask |= GDK_GC_CLIP_X_ORIGIN |GDK_GC_CLIP_Y_ORIGIN;
-}
-
-void
-gdk_gc_set_clip_mask (GdkGC    *gc,
-                     GdkBitmap *mask)
-{
-  GdkGCPrivate *private;
-  HBITMAP xmask;
-  
-  g_return_if_fail (gc != NULL);
-  
-  if (mask)
-    {
-      if (GDK_DRAWABLE_DESTROYED (mask))
-       return;
-      xmask = GDK_DRAWABLE_XID (mask);
-    }
-  else
-    xmask = NULL;
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_mask: (%d) %#x\n", private, xmask));
-
-  if (private->clip_region != NULL)
-    if (!DeleteObject (private->clip_region))
-      g_warning ("gdk_gc_set_clip_mask: DeleteObject failed");
-  if (xmask != NULL)
-    {
-      private->clip_region = BitmapToRegion (xmask);
-      {
-       RECT rect;
-       GetRgnBox (private->clip_region, &rect);
-       GDK_NOTE (MISC, g_print ("...box = %dx%d@+%d+%d\n",
-                                rect.right - rect.left, rect.bottom - rect.top,
-                                rect.left, rect.top));
-      }
-#if 0
-      /* Test code that sets clip region to whole of mask */
-      {
-       BITMAP bm;
-       GetObject (xmask, sizeof (bm), &bm);
-       private->clip_region = CreateRectRgn (0, 0, bm.bmWidth, bm.bmHeight);
-      }
-#endif
-      private->values_mask |= GDK_GC_CLIP_MASK;
-    }
-  else
-    {
-      private->values_mask &= ~GDK_GC_CLIP_MASK;
-      private->clip_region = NULL;
-    }
-}
-
-void
-gdk_gc_set_clip_rectangle (GdkGC       *gc,
-                          GdkRectangle *rectangle)
-{
-  GdkGCPrivate *private;
-   
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  if (private->clip_region != NULL)
-    if (!DeleteObject (private->clip_region))
-      g_warning ("gdk_gc_set_clip_rectangle: DeleteObject failed");
-  if (rectangle)
-    {
-      GDK_NOTE (MISC,
-               g_print ("gdk_gc_set_clip_rectangle: (%d) %dx%d@+%d+%d\n",
-                        private,
-                        rectangle->width, rectangle->height,
-                        rectangle->x, rectangle->y));
-      if ((private->clip_region =
-          CreateRectRgn (rectangle->x, rectangle->y,
-                         rectangle->x + rectangle->width,
-                         rectangle->y + rectangle->height)) == NULL)
-       g_warning ("gdk_gc_set_clip_rectangle: CreateRectRgn failed");
-
-      private->values_mask |= GDK_GC_CLIP_MASK;
-    }
-  else
-    {
-      GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_rectangle: (%d) None\n",
-                              private));
-      private->clip_region = NULL;
-      private->values_mask &= ~GDK_GC_CLIP_MASK;
-    }
-    private->values_mask &= ~(GDK_GC_CLIP_X_ORIGIN |GDK_GC_CLIP_Y_ORIGIN);
-} 
-
-void
-gdk_gc_set_clip_region (GdkGC           *gc,
-                       GdkRegion        *region)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_region: (%d) %s\n",
-                          private, (region != NULL ? "xxx" : "None")));
-
-  if (private->clip_region != NULL)
-    if (!DeleteObject (private->clip_region))
-      g_warning ("gdk_gc_set_clip_region: DeleteObject failed");
-  if (region)
-    {
-      GdkRegionPrivate *region_private;
-
-      region_private = (GdkRegionPrivate*) region;
-      private->clip_region = CreateRectRgn (1, 1, 0, 0);
-      CombineRgn (private->clip_region, region_private->xregion, NULL, RGN_COPY);
-      private->values_mask |= GDK_GC_CLIP_MASK;
-    }
-  else
-    {
-      private->clip_region = NULL;
-      private->values_mask &= ~GDK_GC_CLIP_MASK;
-    }
-}
-
-void
-gdk_gc_set_subwindow (GdkGC           *gc,
-                     GdkSubwindowMode  mode)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  private->subwindow_mode = mode;
-  private->values_mask |= GDK_GC_SUBWINDOW;
-}
-
-void
-gdk_gc_set_exposures (GdkGC *gc,
-                     gint   exposures)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  private->graphics_exposures = exposures;
-  private->values_mask |= GDK_GC_EXPOSURES;;
-}
-
-void
-gdk_gc_set_line_attributes (GdkGC      *gc,
-                           gint         line_width,
-                           GdkLineStyle line_style,
-                           GdkCapStyle  cap_style,
-                           GdkJoinStyle join_style)
-{
-  GdkGCPrivate *private;
-  int xline_style;
-  int xcap_style;
-  int xjoin_style;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC,
-           g_print ("gdk_gc_set_line_attributes: (%d) %d %s %s %s\n",
-                    private, line_width,
-                    (line_style == GDK_LINE_SOLID ? "SOLID" :
-                     (line_style == GDK_LINE_ON_OFF_DASH ? "ON_OFF_DASH" :
-                      (line_style == GDK_LINE_DOUBLE_DASH ? "DOUBLE_DASH" :
-                       "???"))),
-                    (cap_style == GDK_CAP_BUTT ? "BUTT" :
-                     (cap_style == GDK_CAP_ROUND ? "ROUND" :
-                      (cap_style == GDK_CAP_PROJECTING ? "PROJECTING" :
-                       "???"))),
-                    (join_style == GDK_JOIN_MITER ? "MITER" :
-                     (join_style == GDK_JOIN_ROUND ? "ROUND" :
-                      (join_style == GDK_JOIN_BEVEL ? "BEVEL" :
-                       "???")))));
-
-  private->pen_width = line_width;
-
-  /* Mask old style bits away */
-  private->pen_style &= ~(PS_STYLE_MASK|PS_ENDCAP_MASK|PS_JOIN_MASK);
-
-  /* Add new bits */
-  switch (line_style)
-    {
-    case GDK_LINE_SOLID:
-      private->pen_style |= PS_SOLID; break;
-    case GDK_LINE_ON_OFF_DASH:
-    case GDK_LINE_DOUBLE_DASH: /* ??? */
-      private->pen_style |= PS_DASH; break;
-    }
-
-  switch (cap_style)
-    {
-    case GDK_CAP_NOT_LAST:
-      /* ??? */
-      break;
-    case GDK_CAP_BUTT:
-      private->pen_style |= PS_ENDCAP_FLAT; break;
-    case GDK_CAP_ROUND:
-      private->pen_style |= PS_ENDCAP_ROUND; break;
-    case GDK_CAP_PROJECTING:
-      private->pen_style |= PS_ENDCAP_SQUARE; break;
-    }
-
-  switch (join_style)
-    {
-    case GDK_JOIN_MITER:
-      private->pen_style |= PS_JOIN_MITER;
-      break;
-    case GDK_JOIN_ROUND:
-      private->pen_style |= PS_JOIN_ROUND;
-      break;
-    case GDK_JOIN_BEVEL:
-      private->pen_style |= PS_JOIN_BEVEL;
-      break;
-    }
-}
-
-void
-gdk_gc_set_dashes (GdkGC *gc,
-                  gint   dash_offset,
-                  gchar  dash_list[],
-                  gint   n)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (dash_list != NULL);
-
-  /* XXX ??? */
-
-  private = (GdkGCPrivate *) gc;
-
-  private->pen_style &= ~(PS_STYLE_MASK);
-  private->pen_style |= PS_DASH;
-}
-
-void
-gdk_gc_copy (GdkGC *dst_gc, GdkGC *src_gc)
-{
-  GdkGCPrivate *dst_private, *src_private;
-
-  src_private = (GdkGCPrivate *) src_gc;
-  dst_private = (GdkGCPrivate *) dst_gc;
-
-  *dst_private = *src_private;
-}
-
-HDC
-gdk_gc_predraw (GdkDrawablePrivate *drawable_private,
-               GdkGCPrivate       *gc_private)
-{
-  GdkColormapPrivate *colormap_private =
-    (GdkColormapPrivate *) drawable_private->colormap;
-  COLORREF bg;
-  COLORREF fg;
-  LOGBRUSH logbrush;
-  HPEN hpen;
-  HBRUSH hbr;
-
-  g_assert (gc_private->xgc == NULL);
-
-  if (drawable_private->window_type == GDK_DRAWABLE_PIXMAP)
-    {
-      if ((gc_private->xgc = CreateCompatibleDC (NULL)) == NULL)
-       g_warning ("gdk_gc_predraw: CreateCompatibleDC failed");
-
-      if ((gc_private->saved_dc = SaveDC (gc_private->xgc)) == 0)
-       g_warning ("gdk_gc_predraw: SaveDC #1 failed");
-      
-      if (SelectObject (gc_private->xgc, drawable_private->xwindow) == NULL)
-       g_warning ("gdk_gc_predraw: SelectObject #1 failed");
-    }
-  else
-    {
-      if ((gc_private->xgc = GetDC (drawable_private->xwindow)) == NULL)
-       g_warning ("gdk_gc_predraw: GetDC failed");
-      
-      if ((gc_private->saved_dc = SaveDC (gc_private->xgc)) == 0)
-       g_warning ("gdk_gc_predraw: SaveDC #2 failed");
-    }
-  
-  gc_private->hwnd = drawable_private->xwindow;
-  
-  if (colormap_private == NULL)
-    {
-      /* A 1 bit deep bitmap */
-      struct
-      {
-       WORD palVersion;
-       WORD palNumEntries;
-       PALETTEENTRY palPalEntry[2];
-      } logpal;
-      static HPALETTE hpal = NULL;
-
-      if (hpal == NULL)
-       {
-         /* Create a b&w palette */
-         logpal.palVersion = 0x300;
-         logpal.palNumEntries = 2;
-         logpal.palPalEntry[0].peRed = 
-           logpal.palPalEntry[0].peGreen = 
-           logpal.palPalEntry[0].peBlue = 0x00;
-         logpal.palPalEntry[0].peFlags = 0x00;
-         logpal.palPalEntry[1].peRed = 
-           logpal.palPalEntry[1].peGreen = 
-           logpal.palPalEntry[1].peBlue = 0xFF;
-         logpal.palPalEntry[1].peFlags = 0x00;
-         if ((hpal = CreatePalette ((LOGPALETTE *) &logpal)) == NULL)
-           g_warning ("gdk_gc_predraw: CreatePalette failed");
-       }
-      SelectPalette (gc_private->xgc, hpal, FALSE);
-      RealizePalette (gc_private->xgc);
-      fg = PALETTEINDEX (gc_private->foreground.pixel);
-    }
-  else if (colormap_private != NULL
-          && colormap_private->xcolormap->rc_palette)
-    {
-      int k;
-      if (SelectPalette (gc_private->xgc,
-                        colormap_private->xcolormap->palette, FALSE) == NULL)
-       g_warning ("gdk_gc_predraw: SelectPalette failed");
-      if (TRUE || colormap_private->xcolormap->stale)
-       {
-         if ((k = RealizePalette (gc_private->xgc)) == GDI_ERROR)
-           g_warning ("gdk_gc_predraw: RealizePalette failed");
-         colormap_private->xcolormap->stale = FALSE;
-       }
-#if 0
-      g_print ("Selected palette %#x for gc %#x, realized %d colors\n",
-              colormap_private->xcolormap->palette, gc_private->xgc, k);
-#endif
-      fg = PALETTEINDEX (gc_private->foreground.pixel);
-    }
-  else
-    {
-      COLORREF foreground = RGB (gc_private->foreground.red >> 8,
-                                gc_private->foreground.green >> 8,
-                                gc_private->foreground.blue >> 8);
-      fg = GetNearestColor (gc_private->xgc, foreground);
-    }
-  logbrush.lbStyle = BS_SOLID;
-  logbrush.lbColor = fg;
-  if ((hpen = ExtCreatePen (gc_private->pen_style, gc_private->pen_width,
-                           &logbrush, 0, NULL)) == NULL)
-    g_warning ("gdk_gc_predraw: CreatePen failed");
-  
-  if (SelectObject (gc_private->xgc, hpen) == NULL)
-    g_warning ("gdk_gc_predraw: SelectObject #2 failed");
-
-  if (SetTextColor (gc_private->xgc, fg) == CLR_INVALID)
-    g_warning ("gdk_gc_predraw: SetTextColor failed");
-
-#if 0
-  switch (gc_private->fill_style)
-    {
-    case GDK_STIPPLED:
-      {
-       GdkPixmap *stipple = gc_private->stipple;
-       GdkPixmapPrivate *stipple_private = (GdkPixmapPrivate *) stipple;
-       HBITMAP hbm = stipple_private->xwindow;
-       if (NULL == (hbr = CreatePatternBrush (hbm)))
-         g_warning ("gdk_gc_predraw: CreatePatternBrush failed");
-       
-#ifdef NATIVE_WIN16
-       SetBrushOrg  (gc_private->xgc, gc_private->ts_x_origin,
-                     gc_private->ts_y_origin);
-#else
-       SetBrushOrgEx(gc_private->xgc, gc_private->ts_x_origin,
-                     gc_private->ts_y_origin, NULL);
-#endif
-      }
-      break;
-    case GDK_SOLID:
-    default:
-      if ((hbr = CreateSolidBrush (fg)) == NULL)
-       g_warning ("gdk_gc_predraw: CreateSolidBrush failed");
-      break;
-  }
-#else
-  if ((hbr = CreateSolidBrush (fg)) == NULL)
-    g_warning ("gdk_gc_predraw: CreateSolidBrush failed");
-#endif
-  if (SelectObject (gc_private->xgc, hbr) == NULL)
-    g_warning ("gdk_gc_predraw: SelectObject #3 failed");
-
-  if (gc_private->values_mask & GDK_GC_BACKGROUND)
-    {
-      if (colormap_private == NULL)
-       {
-         /* a bitmap */
-         bg = PALETTEINDEX (gc_private->background.pixel);
-       }
-      else if (colormap_private != NULL
-         && colormap_private->xcolormap->rc_palette)
-       {
-         bg = PALETTEINDEX (gc_private->background.pixel);
-       }
-      else
-       {
-         COLORREF background = RGB (gc_private->background.red >> 8,
-                                    gc_private->background.green >> 8,
-                                    gc_private->background.blue >> 8);
-         bg = GetNearestColor (gc_private->xgc, background);
-       }
-      if (SetBkColor (gc_private->xgc, bg) == CLR_INVALID)
-       g_warning ("gdk_gc_predraw: SetBkColor failed");
-    }
-  
-  if (SetBkMode (gc_private->xgc, TRANSPARENT) == 0)
-    g_warning ("gdk_gc_predraw: SetBkMode failed");
-  
-  if (SetTextAlign (gc_private->xgc, TA_BASELINE) == GDI_ERROR)
-    g_warning ("gdk_gc_predraw: SetTextAlign failed");
-  
-  if (gc_private->values_mask & GDK_GC_FUNCTION)
-    if (SetROP2 (gc_private->xgc, gc_private->rop2) == 0)
-      g_warning ("gdk_gc_predraw: SetROP2 failed");
-
-  if (gc_private->values_mask & GDK_GC_CLIP_MASK
-      && gc_private->clip_region != NULL)
-    {
-      if (gc_private->values_mask & (GDK_GC_CLIP_X_ORIGIN | GDK_GC_CLIP_Y_ORIGIN))
-       OffsetRgn (gc_private->clip_region,
-                  gc_private->clip_x_origin, gc_private->clip_y_origin);
-      SelectClipRgn (gc_private->xgc, gc_private->clip_region);
-    }
-
-  return gc_private->xgc;
-}
-
-void
-gdk_gc_postdraw (GdkDrawablePrivate *drawable_private,
-                GdkGCPrivate       *gc_private)
-{
-  HGDIOBJ hpen;
-  HGDIOBJ hbr;
-  GdkColormapPrivate *colormap_private =
-    (GdkColormapPrivate *) drawable_private->colormap;
-
-  if ((hpen = GetCurrentObject (gc_private->xgc, OBJ_PEN)) == NULL)
-    g_warning ("gdk_gc_postdraw: GetCurrentObject #1 failed");
-
-  if ((hbr = GetCurrentObject (gc_private->xgc, OBJ_BRUSH)) == NULL)
-    g_warning ("gdk_gc_postdraw: GetCurrentObject #2 failed");
-
-  if (!RestoreDC (gc_private->xgc, gc_private->saved_dc))
-    g_warning ("gdk_gc_postdraw: RestoreDC failed");
-#if 0
-  if (colormap_private != NULL
-      && colormap_private->xcolormap->rc_palette
-      && colormap_private->xcolormap->stale)
-    {
-      SelectPalette (gc_private->xgc, GetStockObject (DEFAULT_PALETTE), FALSE);
-      if (!UnrealizeObject (colormap_private->xcolormap->palette))
-       g_warning ("gdk_gc_postraw: UnrealizeObject failed");
-    }
-#endif
-  if (drawable_private->window_type == GDK_DRAWABLE_PIXMAP)
-    {
-      if (!DeleteDC (gc_private->xgc))
-       g_warning ("gdk_gc_postdraw: DeleteDC failed");
-    }
-  else
-    {
-      ReleaseDC (gc_private->hwnd, gc_private->xgc);
-    }
-
-  if (hpen != NULL)
-    if (!DeleteObject (hpen))
-      g_warning ("gdk_gc_postdraw: DeleteObject #1 failed");
-  
-  if (hbr != NULL)
-    if (!DeleteObject (hbr))
-      g_warning ("gdk_gc_postdraw: DeleteObject #2 failed");
-
-  gc_private->xgc = NULL;
-}
-
-/* This function originally from Jean-Edouard Lachand-Robert, and
- * available at www.codeguru.com. Simplified for our needs, now
- * handles just one-bit deep bitmaps (in Window parlance, ie those
- * that GDK calls bitmaps (and not pixmaps), with zero pixels being
- * transparent.
- */
-
-/*
- *  BitmapToRegion :  Create a region from the "non-transparent" pixels of
- *  a bitmap
- *  Author :      Jean-Edouard Lachand-Robert
- *  (http://www.geocities.com/Paris/LeftBank/1160/resume.htm), June 1998.
- */
-
-HRGN
-BitmapToRegion (HBITMAP hBmp)
-{
-  HRGN hRgn = NULL;
-  HDC hMemDC;
-  BITMAP bm;
-
-  struct
-  {
-    BITMAPINFOHEADER bmiHeader;
-#if 1
-    WORD bmiColors[2];
-#else
-    RGBQUAD bmiColors[2];
-#endif
-  } bmi;
-  VOID *pbits8; 
-  HBITMAP hbm8;
-  struct
-  {
-    WORD palVersion;
-    WORD palNumEntries;
-    PALETTEENTRY palPalEntry[2];
-  } logpal;
-  static HPALETTE bwPalette = NULL;
-
-  HBITMAP holdBmp;
-  HDC hDC;
-
-  BITMAP bm8;
-  HBITMAP holdBmp2;
-  DWORD maxRects;
-  RGNDATA *pData;
-  BYTE *p8;
-  int x, y;
-  HRGN h;
-
-  /* Create a B&W palette */
-  if (bwPalette == NULL)
-    {
-      /* Create a b&w palette */
-      logpal.palVersion = 0x300;
-      logpal.palNumEntries = 2;
-      logpal.palPalEntry[0].peRed = 
-       logpal.palPalEntry[0].peGreen = 
-       logpal.palPalEntry[0].peBlue = 0;
-      logpal.palPalEntry[0].peFlags = 0;
-      logpal.palPalEntry[1].peRed = 
-       logpal.palPalEntry[1].peGreen = 
-       logpal.palPalEntry[1].peBlue = 0xFF;
-      logpal.palPalEntry[1].peFlags = 0;
-      if ((bwPalette = CreatePalette ((LOGPALETTE *) &logpal)) == NULL)
-       g_warning ("BitmapToRegion: CreatePalette failed");
-    }
-
-  /* Create a memory DC inside which we will scan the bitmap content */
-  hMemDC = CreateCompatibleDC (NULL);
-  if (!hMemDC)
-    {
-      g_warning ("BitmapToRegion: CreateCompatibleDC #1 failed");
-      return NULL;
-    }
-
-  SelectPalette (hMemDC, bwPalette, FALSE);
-  RealizePalette (hMemDC);
-
-  /* Get bitmap size */
-  GetObject(hBmp, sizeof(bm), &bm);
-  
-  /* Create a 8 bits depth bitmap and select it into the memory DC */
-  bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-  bmi.bmiHeader.biWidth = bm.bmWidth;
-  bmi.bmiHeader.biHeight = bm.bmHeight;
-  bmi.bmiHeader.biPlanes = 1;
-  bmi.bmiHeader.biBitCount = 8;
-  bmi.bmiHeader.biCompression = BI_RGB;
-  bmi.bmiHeader.biSizeImage = 0;
-  bmi.bmiHeader.biXPelsPerMeter = 0;
-  bmi.bmiHeader.biYPelsPerMeter = 0;
-  bmi.bmiHeader.biClrUsed = 2;
-  bmi.bmiHeader.biClrImportant = 2;
-#if 1
-  bmi.bmiColors[0] = 0;
-  bmi.bmiColors[1] = 1;
-  hbm8 = CreateDIBSection (hMemDC, (BITMAPINFO *)&bmi,
-                           DIB_PAL_COLORS, &pbits8, NULL, 0);
-#else
-  bmi.bmiColors[0].rgbBlue =
-    bmi.bmiColors[0].rgbGreen =
-    bmi.bmiColors[0].rgbRed = 0x00;
-  bmi.bmiColors[0].rgbReserved = 0x00;
-
-  bmi.bmiColors[1].rgbBlue =
-    bmi.bmiColors[1].rgbGreen =
-    bmi.bmiColors[1].rgbRed = 0xFF;
-  bmi.bmiColors[0].rgbReserved = 0x00;
-
-  hbm8 = CreateDIBSection (hMemDC, (BITMAPINFO *)&bmi,
-                           DIB_RGB_COLORS, &pbits8, NULL, 0);
-#endif
-  if (!hbm8)
-    {
-      g_warning ("BitmapToRegion: CreateDIBSection failed");
-      DeleteDC (hMemDC);
-      return NULL;
-    }
-
-  holdBmp = (HBITMAP) SelectObject (hMemDC, hbm8);
-
-  /* Create a DC just to copy the bitmap into the memory DC*/
-  hDC = CreateCompatibleDC (hMemDC);
-  if (!hDC)
-    {
-      g_warning ("BitmapToRegion: CreateCompatibleDC #2 failed");
-      SelectObject (hMemDC, holdBmp);
-      DeleteObject (hbm8);
-      DeleteDC (hMemDC);
-      return NULL;
-    }
-
-  /* Get how many bytes per row we have for the bitmap bits */
-  GetObject (hbm8, sizeof (bm8), &bm8);
-
-  /* Hans Breuer found a fix to the long-standing erroneous behaviour
-   * on NT 4.0: There seems to be a bug in Win NT 4.0 GDI: scanlines
-   * in bitmaps are dword aligned on both Win95 and NT. In the case of
-   * a bitmap with 22 bytes worth of width, GetObject above returns
-   * with bmWidth == 22. On Win95 bmWidthBytes == 24, as it should be,
-   * but on NT is it 22. We need to correct this here.
-   */
-  bm8.bmWidthBytes = (((bm8.bmWidthBytes-1)/4)+1)*4; /* dword aligned!! */
-
-  /* Copy the bitmap into the memory DC*/
-  holdBmp2 = (HBITMAP) SelectObject (hDC, hBmp);
-
-  if (!BitBlt (hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, hDC, 0, 0, SRCCOPY))
-    {
-      g_warning ("BitmapToRegion: BitBlt failed");
-      SelectObject (hDC, holdBmp2);
-      SelectObject (hMemDC, holdBmp);
-      DeleteObject (hbm8);
-      DeleteDC (hMemDC);
-      return NULL;
-    }
-  SelectObject (hDC, holdBmp2);
-  DeleteDC (hDC);
-
-  /* For better performances, we will use the ExtCreateRegion()
-   * function to create the region. This function take a RGNDATA
-   * structure on entry. We will add rectangles by amount of
-   * ALLOC_UNIT number in this structure.
-   */
-  #define ALLOC_UNIT  100
-  maxRects = ALLOC_UNIT;
-
-  pData = g_malloc (sizeof (RGNDATAHEADER) + (sizeof (RECT) * maxRects));
-  pData->rdh.dwSize = sizeof (RGNDATAHEADER);
-  pData->rdh.iType = RDH_RECTANGLES;
-  pData->rdh.nCount = pData->rdh.nRgnSize = 0;
-  SetRect (&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
-
-  /* Scan each bitmap from bottom to top (the bitmap is inverted vertically)*/
-  p8 = (BYTE *) pbits8 + (bm8.bmHeight - 1) * bm8.bmWidthBytes;
-  for (y = 0; y < bm.bmHeight; y++)
-    {
-      /* Scan each bitmap row from left to right*/
-      for (x = 0; x < bm.bmWidth; x++)
-       {
-         /* Search for a continuous range of "non transparent pixels"*/
-         int x0 = x;
-         BYTE *p = p8 + x;
-         while (x < bm.bmWidth)
-           {
-             if (*p == 0)
-               /* This pixel is "transparent"*/
-               break;
-             p++;
-             x++;
-           }
-         
-         if (x > x0)
-           {
-             RECT *pr;
-             /* Add the pixels (x0, y) to (x, y+1) as a new rectangle
-              * in the region
-              */
-             if (pData->rdh.nCount >= maxRects)
-               {
-                 maxRects += ALLOC_UNIT;
-                 pData = g_realloc (pData, sizeof(RGNDATAHEADER)
-                                    + (sizeof(RECT) * maxRects));
-               }
-             pr = (RECT *) &pData->Buffer;
-             SetRect (&pr[pData->rdh.nCount], x0, y, x, y+1);
-             if (x0 < pData->rdh.rcBound.left)
-               pData->rdh.rcBound.left = x0;
-             if (y < pData->rdh.rcBound.top)
-               pData->rdh.rcBound.top = y;
-             if (x > pData->rdh.rcBound.right)
-               pData->rdh.rcBound.right = x;
-             if (y+1 > pData->rdh.rcBound.bottom)
-               pData->rdh.rcBound.bottom = y+1;
-             pData->rdh.nCount++;
-             
-             /* On Windows98, ExtCreateRegion() may fail if the
-              * number of rectangles is too large (ie: >
-              * 4000). Therefore, we have to create the region by
-              * multiple steps.
-              */
-             if (pData->rdh.nCount == 2000)
-               {
-                 HRGN h = ExtCreateRegion (NULL, sizeof(RGNDATAHEADER) + (sizeof(RECT) * maxRects), pData);
-                 if (hRgn)
-                   {
-                     CombineRgn(hRgn, hRgn, h, RGN_OR);
-                     DeleteObject(h);
-                   }
-                 else
-                   hRgn = h;
-                 pData->rdh.nCount = 0;
-                 SetRect (&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
-               }
-           }
-       }
-      
-      /* Go to next row (remember, the bitmap is inverted vertically)*/
-      p8 -= bm8.bmWidthBytes;
-    }
-  
-  /* Create or extend the region with the remaining rectangles*/
-  h = ExtCreateRegion (NULL, sizeof (RGNDATAHEADER)
-                      + (sizeof (RECT) * maxRects), pData);
-  if (hRgn)
-    {
-      CombineRgn (hRgn, hRgn, h, RGN_OR);
-      DeleteObject (h);
-    }
-  else
-    hRgn = h;
-
-  /* Clean up*/
-  SelectObject(hMemDC, holdBmp);
-  DeleteObject (hbm8);
-  DeleteDC (hMemDC);
-
-  return hRgn;
-}
diff --git a/gdk/win32/gdkgc.c b/gdk/win32/gdkgc.c
deleted file mode 100644 (file)
index 407335a..0000000
+++ /dev/null
@@ -1,1392 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <string.h>
-
-#include "gdkgc.h"
-#include "gdkfont.h"
-#include "gdkpixmap.h"
-#include "gdkprivate.h"
-#include "gdkx.h"
-
-GdkGC*
-gdk_gc_new (GdkWindow *window)
-{
-  return gdk_gc_new_with_values (window, NULL, 0);
-}
-
-GdkGC*
-gdk_gc_new_with_values (GdkWindow      *window,
-                       GdkGCValues     *values,
-                       GdkGCValuesMask  values_mask)
-{
-  GdkGC *gc;
-  GdkGCPrivate *private;
-  static GdkColor black;
-  static GdkColor white;
-  static gboolean beenhere = FALSE;
-
-  if (!beenhere)
-    {
-      gdk_color_black (gdk_colormap_get_system (), &black);
-      gdk_color_white (gdk_colormap_get_system (), &white);
-      beenhere = TRUE;
-    }
-
-  g_return_val_if_fail (window != NULL, NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-
-  private = g_new (GdkGCPrivate, 1);
-  gc = (GdkGC*) private;
-
-  private->ref_count = 1;
-  private->rop2 = R2_COPYPEN;
-  private->fill_style = GDK_SOLID;
-  private->values_mask = values_mask;
-  private->values_mask |= GDK_GC_FUNCTION | GDK_GC_FILL;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_new: {"));
-
-  if (values_mask & GDK_GC_FOREGROUND)
-    {
-      private->foreground = values->foreground;
-    }
-  else
-    private->foreground = black;
-  
-  if (values_mask & GDK_GC_BACKGROUND)
-    {
-      private->background = values->background;
-    }
-  else
-    private->background = white;
-
-  if ((values_mask & GDK_GC_FONT) && (values->font->type == GDK_FONT_FONT
-                                     || values->font->type == GDK_FONT_FONTSET))
-    {
-      private->font = values->font;
-      gdk_font_ref (private->font);
-      GDK_NOTE (MISC, g_print (" font"));
-    }
-  else
-    private->font = NULL;
-
-  if (values_mask & GDK_GC_FUNCTION)
-    {
-      switch (values->function)
-       {
-       case GDK_COPY:
-         private->rop2 = R2_COPYPEN; break;
-       case GDK_INVERT:
-         private->rop2 = R2_NOT; break;
-       case GDK_XOR:
-         private->rop2 = R2_XORPEN; break;
-       case GDK_CLEAR:
-         private->rop2 = R2_BLACK; break;
-       case GDK_AND:
-         private->rop2 = R2_MASKPEN; break;
-       case GDK_AND_REVERSE:
-         private->rop2 = R2_MASKPENNOT; break;
-       case GDK_AND_INVERT:
-         private->rop2 = R2_MASKNOTPEN; break;
-       case GDK_NOOP:
-         private->rop2 = R2_NOP; break;
-       case GDK_OR:
-         private->rop2 = R2_MERGEPEN; break;
-       case GDK_EQUIV:
-         private->rop2 = R2_NOTXORPEN; break;
-       case GDK_OR_REVERSE:
-         private->rop2 = R2_MERGEPENNOT; break;
-       case GDK_COPY_INVERT:
-         private->rop2 = R2_NOTCOPYPEN; break;
-       case GDK_OR_INVERT:
-         private->rop2 = R2_MERGENOTPEN; break;
-       case GDK_NAND:
-         private->rop2 = R2_NOTMASKPEN; break;
-       case GDK_SET:
-         private->rop2 = R2_WHITE; break;
-       }
-      GDK_NOTE (MISC, g_print (" function=%d", private->rop2));
-    }
-
-  if (values_mask & GDK_GC_FILL)
-    {
-      private->fill_style = values->fill;
-      GDK_NOTE (MISC, g_print (" fill=%d", private->fill_style));
-    }
-
-  if (values_mask & GDK_GC_TILE)
-    {
-      private->tile = values->tile;
-      gdk_pixmap_ref (private->tile);
-      GDK_NOTE (MISC, g_print (" tile=%#x", GDK_DRAWABLE_XID (private->tile)));
-    }
-  else
-    private->tile = NULL;
-
-  if (values_mask & GDK_GC_STIPPLE)
-    {
-      private->stipple = values->stipple;
-      gdk_pixmap_ref (private->stipple);
-      GDK_NOTE (MISC, g_print (" stipple=%#x", GDK_DRAWABLE_XID (private->stipple)));
-    }
-  else
-    private->stipple = NULL;
-
-  if (values_mask & GDK_GC_CLIP_MASK)
-    {
-      private->clip_region =
-       BitmapToRegion ((HBITMAP) GDK_DRAWABLE_XID (values->clip_mask));
-      GDK_NOTE (MISC, g_print (" clip=%#x", private->clip_region));
-    }
-  else
-    private->clip_region = NULL;
-
-  if (values_mask & GDK_GC_SUBWINDOW)
-    {
-      private->subwindow_mode = values->subwindow_mode;
-      GDK_NOTE (MISC, g_print (" subw=%d", private->subwindow_mode));
-    }
-
-  if (values_mask & GDK_GC_TS_X_ORIGIN)
-    {
-      private->ts_x_origin = values->ts_x_origin;
-      GDK_NOTE (MISC, g_print (" ts_x=%d", private->ts_x_origin));
-    }
-
-  if (values_mask & GDK_GC_TS_Y_ORIGIN)
-    {
-      private->ts_y_origin = values->ts_y_origin;
-      GDK_NOTE (MISC, g_print (" ts_y=%d", private->ts_y_origin));
-    }
-
-  if (values_mask & GDK_GC_CLIP_X_ORIGIN)
-    {
-      private->clip_x_origin = values->clip_x_origin;
-      GDK_NOTE (MISC, g_print (" clip_x=%d", private->clip_x_origin));
-    }
-
-  if (values_mask & GDK_GC_CLIP_Y_ORIGIN)
-    {
-      private->clip_y_origin = values->clip_y_origin; 
-      GDK_NOTE (MISC, g_print (" clip_y=%d", private->clip_y_origin));
-   }
-  if (values_mask & GDK_GC_EXPOSURES)
-    {
-      private->graphics_exposures = values->graphics_exposures;
-      GDK_NOTE (MISC, g_print (" exp=%d", private->graphics_exposures));
-    }
-
-  private->pen_style = PS_GEOMETRIC;
-  private->pen_width = 1;
-
-  if (values_mask & (GDK_GC_LINE_WIDTH | GDK_GC_LINE_STYLE))
-    {
-      if (values_mask & GDK_GC_LINE_WIDTH)
-       {
-         private->pen_width = values->line_width;
-         GDK_NOTE (MISC, g_print (" pw=%d", private->pen_width));
-       }
-      if (values_mask & GDK_GC_LINE_STYLE)
-       {
-         switch (values->line_style)
-           {
-           case GDK_LINE_SOLID:
-             private->pen_style |= PS_SOLID; break;
-           case GDK_LINE_ON_OFF_DASH:
-           case GDK_LINE_DOUBLE_DASH: /* ??? */
-             private->pen_style |= PS_DASH; break;
-           }
-         GDK_NOTE (MISC, g_print (" ps=%#x", private->pen_style));
-       }
-    }
-
-  if (values_mask & GDK_GC_CAP_STYLE)
-    {
-      switch (values->cap_style)
-       {
-       case GDK_CAP_NOT_LAST:  /* ??? */
-       case GDK_CAP_BUTT:
-         private->pen_style |= PS_ENDCAP_FLAT; break;
-       case GDK_CAP_ROUND:
-         private->pen_style |= PS_ENDCAP_ROUND; break;
-       case GDK_CAP_PROJECTING:
-         private->pen_style |= PS_ENDCAP_SQUARE; break;
-       }
-      GDK_NOTE (MISC, g_print (" ps=%#x", private->pen_style));
-    }
-
-  if (values_mask & GDK_GC_JOIN_STYLE)
-    {
-      switch (values->join_style)
-       {
-       case GDK_JOIN_MITER:
-         private->pen_style |= PS_JOIN_MITER;
-         break;
-       case GDK_JOIN_ROUND:
-         private->pen_style |= PS_JOIN_ROUND;
-         break;
-       case GDK_JOIN_BEVEL:
-         private->pen_style |= PS_JOIN_BEVEL;
-         break;
-       }
-      GDK_NOTE (MISC, g_print (" ps=%#x", private->pen_style));
-    }
-
-  private->hwnd = NULL;
-  private->xgc = NULL;
-
-  GDK_NOTE (MISC, g_print ("} = %p\n", private));
-
-  return gc;
-}
-
-void
-gdk_gc_destroy (GdkGC *gc)
-{
-  gdk_gc_unref (gc);
-}
-
-GdkGC *
-gdk_gc_ref (GdkGC *gc)
-{
-  GdkGCPrivate *private = (GdkGCPrivate*) gc;
-
-  g_return_val_if_fail (gc != NULL, NULL);
-  private->ref_count += 1;
-
-  return gc;
-}
-
-void
-gdk_gc_unref (GdkGC *gc)
-{
-  GdkGCPrivate *private = (GdkGCPrivate*) gc;
-  
-  g_return_if_fail (gc != NULL);
-  
-  if (private->ref_count > 1)
-    private->ref_count -= 1;
-  else
-    {
-      if (private->values_mask & GDK_GC_FONT)
-       gdk_font_unref (private->font);
-
-      if (private->values_mask & GDK_GC_TILE)
-       gdk_pixmap_unref (private->tile);
-      
-      if (private->values_mask & GDK_GC_STIPPLE)
-       gdk_pixmap_unref (private->stipple);
-      
-      if (private->values_mask & GDK_GC_CLIP_MASK)
-       DeleteObject (private->clip_region);
-
-      g_free (gc);
-    }
-}
-
-void
-gdk_gc_get_values (GdkGC       *gc,
-                  GdkGCValues *values)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (values != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  values->foreground = private->foreground;
-  values->background = private->background;
-  values->font = private->font;
-
-  switch (private->rop2)
-    {
-    case R2_COPYPEN:
-      values->function = GDK_COPY; break;
-    case R2_NOT:
-      values->function = GDK_INVERT; break;
-    case R2_XORPEN:
-      values->function = GDK_XOR; break;
-    case R2_BLACK:
-      values->function = GDK_CLEAR; break;
-    case R2_MASKPEN:
-      values->function = GDK_AND; break;
-    case R2_MASKPENNOT:
-      values->function = GDK_AND_REVERSE; break;
-    case R2_MASKNOTPEN:
-      values->function = GDK_AND_INVERT; break;
-    case R2_NOP:
-      values->function = GDK_NOOP; break;
-    case R2_MERGEPEN:
-      values->function = GDK_OR; break;
-    case R2_NOTXORPEN:
-      values->function = GDK_EQUIV; break;
-    case R2_MERGEPENNOT:
-      values->function = GDK_OR_REVERSE; break;
-    case R2_NOTCOPYPEN:
-      values->function = GDK_COPY_INVERT; break;
-    case R2_MERGENOTPEN:
-      values->function = GDK_OR_INVERT; break;
-    case R2_NOTMASKPEN:
-      values->function = GDK_NAND; break;
-    case R2_WHITE:
-      values->function = GDK_SET; break;
-    }
-
-  values->fill = private->fill_style;
-
-  values->tile = private->tile;
-  values->stipple = private->stipple;
-  if (private->clip_region != NULL)
-    {
-      RECT rect;
-      HBRUSH hbr;
-      HDC hdc;
-      HGDIOBJ oldbitmap;
-      GdkPixmap *pixmap;
-
-      GetRgnBox (private->clip_region, &rect);
-      pixmap =
-       gdk_pixmap_new (NULL, rect.right - rect.left, rect.bottom - rect.top,
-                       1);
-      hbr = GetStockObject (WHITE_BRUSH);
-      if ((hdc = CreateCompatibleDC (NULL)) == NULL)
-       g_warning ("gdk_gc_get_values: CreateCompatibleDC failed");
-      if ((oldbitmap =
-          SelectObject (hdc, GDK_DRAWABLE_XID (pixmap))) == NULL)
-       g_warning ("gdk_gc_get_values: SelectObject #1 failed");
-      hbr = GetStockObject (BLACK_BRUSH);
-      if (!FillRect (hdc, &rect, hbr))
-       g_warning ("gdk_gc_get_values: FillRect failed");
-      hbr = GetStockObject (WHITE_BRUSH);
-      if (!FillRgn (hdc, private->clip_region, hbr))
-       g_warning ("gdk_gc_get_values: FillRgn failed");
-      if (SelectObject (hdc, oldbitmap) == NULL)
-       g_warning ("gdk_gc_get_values: SelectObject #2 failed");
-      DeleteDC (hdc);
-      values->clip_mask = pixmap;
-    }
-  else
-    values->clip_mask = NULL;
-  values->subwindow_mode = private->subwindow_mode;
-  values->ts_x_origin = private->ts_x_origin;
-  values->ts_y_origin = private->ts_y_origin;
-  values->clip_x_origin = private->clip_x_origin;
-  values->clip_y_origin = private->clip_y_origin;
-  values->graphics_exposures = private->graphics_exposures;
-  values->line_width = private->pen_width;
-  
-  if (private->pen_style & PS_SOLID)
-    values->line_style = GDK_LINE_SOLID;
-  else if (private->pen_style & PS_DASH)
-    values->line_style = GDK_LINE_ON_OFF_DASH;
-  else
-    values->line_style = GDK_LINE_SOLID;
-
-  /* PS_ENDCAP_ROUND is zero */
-  if (private->pen_style & PS_ENDCAP_FLAT)
-    values->cap_style = GDK_CAP_BUTT;
-  else if (private->pen_style & PS_ENDCAP_SQUARE)
-    values->cap_style = GDK_CAP_PROJECTING;
-  else
-    values->cap_style = GDK_CAP_ROUND;
-    
-  /* PS_JOIN_ROUND is zero */
-  if (private->pen_style & PS_JOIN_MITER)
-    values->join_style = GDK_JOIN_MITER;
-  else if (private->pen_style & PS_JOIN_BEVEL)
-    values->join_style = GDK_JOIN_BEVEL;
-  else
-    values->join_style = GDK_JOIN_ROUND;
-}
-
-void
-gdk_gc_set_foreground (GdkGC   *gc,
-                      GdkColor *color)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (color != NULL);
-
-  private = (GdkGCPrivate*) gc;
-  {
-    GDK_NOTE (MISC, g_print ("gdk_gc_set_foreground: (%d) %s\n",
-                            private, gdk_color_to_string (color)));
-    private->foreground = *color;
-    private->values_mask |= GDK_GC_FOREGROUND;
-  }
-}
-
-void
-gdk_gc_set_background (GdkGC   *gc,
-                      GdkColor *color)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (color != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_set_backround: (%d) %s\n",
-                          private, gdk_color_to_string(color)));
-  private->background = *color;
-  private->values_mask |= GDK_GC_BACKGROUND;
-}
-
-void
-gdk_gc_set_font (GdkGC  *gc,
-                GdkFont *font)
-{
-  GdkGCPrivate *gc_private;
-  GdkFontPrivate *font_private;
-  gchar *xlfd;
-
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (font != NULL);
-
-  if (font->type == GDK_FONT_FONT
-      || font->type == GDK_FONT_FONTSET)
-    {
-      gc_private = (GdkGCPrivate*) gc;
-      
-      GDK_NOTE (MISC, (xlfd = gdk_font_xlfd_create (font),
-                      g_print ("gdk_gc_set_font: (%d) %s\n",
-                               gc_private, xlfd),
-                      gdk_font_xlfd_free (xlfd)));
-
-      if (gc_private->font != NULL)
-       gdk_font_unref (gc_private->font);
-      gc_private->font = font;
-      gdk_font_ref (gc_private->font);
-      gc_private->values_mask |= GDK_GC_FONT;
-    }
-}
-
-void
-gdk_gc_set_function (GdkGC      *gc,
-                    GdkFunction  function)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_set_function: (%d) %d\n", private, function));
-
-  switch (function)
-    {
-    case GDK_COPY:
-      private->rop2 = R2_COPYPEN; break;
-    case GDK_INVERT:
-      private->rop2 = R2_NOT; break;
-    case GDK_XOR:
-      private->rop2 = R2_XORPEN; break;
-    case GDK_CLEAR:
-      private->rop2 = R2_BLACK; break;
-    case GDK_AND:
-      private->rop2 = R2_MASKPEN; break;
-    case GDK_AND_REVERSE:
-      private->rop2 = R2_MASKPENNOT; break;
-    case GDK_AND_INVERT:
-      private->rop2 = R2_MASKNOTPEN; break;
-    case GDK_NOOP:
-      private->rop2 = R2_NOP; break;
-    case GDK_OR:
-      private->rop2 = R2_MERGEPEN; break;
-    case GDK_EQUIV:
-      private->rop2 = R2_NOTXORPEN; break;
-    case GDK_OR_REVERSE:
-      private->rop2 = R2_MERGEPENNOT; break;
-    case GDK_COPY_INVERT:
-      private->rop2 = R2_NOTCOPYPEN; break;
-    case GDK_OR_INVERT:
-      private->rop2 = R2_MERGENOTPEN; break;
-    case GDK_NAND:
-      private->rop2 = R2_NOTMASKPEN; break;
-    case GDK_SET:
-      private->rop2 = R2_WHITE; break;
-    }
-  private->values_mask |= GDK_GC_FUNCTION;
-}
-
-void
-gdk_gc_set_fill (GdkGC  *gc,
-                GdkFill  fill)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  private->fill_style = fill;
-  private->values_mask |= GDK_GC_FILL;
-}
-
-void
-gdk_gc_set_tile (GdkGC    *gc,
-                GdkPixmap *tile)
-{
-  GdkGCPrivate *private;
-  HBITMAP pixmap;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  pixmap = NULL;
-
-  if (tile)
-    pixmap = GDK_DRAWABLE_XID (tile);
-
-  if (private->tile != NULL)
-    gdk_pixmap_unref (private->tile);
-  private->tile = tile;
-  if (tile)
-    gdk_pixmap_ref (tile);
-  if (pixmap != NULL)
-    private->values_mask |= GDK_GC_TILE;
-  else
-    private->values_mask &= ~GDK_GC_TILE;
-}
-
-void
-gdk_gc_set_stipple (GdkGC     *gc,
-                   GdkPixmap *stipple)
-{
-  GdkGCPrivate *private;
-  HBITMAP pixmap;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  pixmap = NULL;
-
-  if (stipple)
-    pixmap = GDK_DRAWABLE_XID (stipple);
-
-  if (private->stipple != NULL)
-    gdk_pixmap_unref (private->stipple);
-  private->stipple = stipple;
-  if (stipple)
-    gdk_pixmap_ref (stipple);
-  if (pixmap != NULL)
-    private->values_mask |= GDK_GC_STIPPLE;
-  else
-    private->values_mask &= ~GDK_GC_STIPPLE;
-}
-
-void
-gdk_gc_set_ts_origin (GdkGC *gc,
-                     gint   x,
-                     gint   y)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  private->ts_x_origin = x;
-  private->ts_y_origin = y;
-  private->values_mask |= GDK_GC_TS_X_ORIGIN |GDK_GC_TS_Y_ORIGIN;
-}
-
-void
-gdk_gc_set_clip_origin (GdkGC *gc,
-                       gint   x,
-                       gint   y)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_origin: (%d) +%d+%d\n",
-                          private, x, y));
-
-  private->clip_x_origin = x;
-  private->clip_y_origin = y;
-  private->values_mask |= GDK_GC_CLIP_X_ORIGIN |GDK_GC_CLIP_Y_ORIGIN;
-}
-
-void
-gdk_gc_set_clip_mask (GdkGC    *gc,
-                     GdkBitmap *mask)
-{
-  GdkGCPrivate *private;
-  HBITMAP xmask;
-  
-  g_return_if_fail (gc != NULL);
-  
-  if (mask)
-    {
-      if (GDK_DRAWABLE_DESTROYED (mask))
-       return;
-      xmask = GDK_DRAWABLE_XID (mask);
-    }
-  else
-    xmask = NULL;
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_mask: (%d) %#x\n", private, xmask));
-
-  if (private->clip_region != NULL)
-    if (!DeleteObject (private->clip_region))
-      g_warning ("gdk_gc_set_clip_mask: DeleteObject failed");
-  if (xmask != NULL)
-    {
-      private->clip_region = BitmapToRegion (xmask);
-      {
-       RECT rect;
-       GetRgnBox (private->clip_region, &rect);
-       GDK_NOTE (MISC, g_print ("...box = %dx%d@+%d+%d\n",
-                                rect.right - rect.left, rect.bottom - rect.top,
-                                rect.left, rect.top));
-      }
-#if 0
-      /* Test code that sets clip region to whole of mask */
-      {
-       BITMAP bm;
-       GetObject (xmask, sizeof (bm), &bm);
-       private->clip_region = CreateRectRgn (0, 0, bm.bmWidth, bm.bmHeight);
-      }
-#endif
-      private->values_mask |= GDK_GC_CLIP_MASK;
-    }
-  else
-    {
-      private->values_mask &= ~GDK_GC_CLIP_MASK;
-      private->clip_region = NULL;
-    }
-}
-
-void
-gdk_gc_set_clip_rectangle (GdkGC       *gc,
-                          GdkRectangle *rectangle)
-{
-  GdkGCPrivate *private;
-   
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  if (private->clip_region != NULL)
-    if (!DeleteObject (private->clip_region))
-      g_warning ("gdk_gc_set_clip_rectangle: DeleteObject failed");
-  if (rectangle)
-    {
-      GDK_NOTE (MISC,
-               g_print ("gdk_gc_set_clip_rectangle: (%d) %dx%d@+%d+%d\n",
-                        private,
-                        rectangle->width, rectangle->height,
-                        rectangle->x, rectangle->y));
-      if ((private->clip_region =
-          CreateRectRgn (rectangle->x, rectangle->y,
-                         rectangle->x + rectangle->width,
-                         rectangle->y + rectangle->height)) == NULL)
-       g_warning ("gdk_gc_set_clip_rectangle: CreateRectRgn failed");
-
-      private->values_mask |= GDK_GC_CLIP_MASK;
-    }
-  else
-    {
-      GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_rectangle: (%d) None\n",
-                              private));
-      private->clip_region = NULL;
-      private->values_mask &= ~GDK_GC_CLIP_MASK;
-    }
-    private->values_mask &= ~(GDK_GC_CLIP_X_ORIGIN |GDK_GC_CLIP_Y_ORIGIN);
-} 
-
-void
-gdk_gc_set_clip_region (GdkGC           *gc,
-                       GdkRegion        *region)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC, g_print ("gdk_gc_set_clip_region: (%d) %s\n",
-                          private, (region != NULL ? "xxx" : "None")));
-
-  if (private->clip_region != NULL)
-    if (!DeleteObject (private->clip_region))
-      g_warning ("gdk_gc_set_clip_region: DeleteObject failed");
-  if (region)
-    {
-      GdkRegionPrivate *region_private;
-
-      region_private = (GdkRegionPrivate*) region;
-      private->clip_region = CreateRectRgn (1, 1, 0, 0);
-      CombineRgn (private->clip_region, region_private->xregion, NULL, RGN_COPY);
-      private->values_mask |= GDK_GC_CLIP_MASK;
-    }
-  else
-    {
-      private->clip_region = NULL;
-      private->values_mask &= ~GDK_GC_CLIP_MASK;
-    }
-}
-
-void
-gdk_gc_set_subwindow (GdkGC           *gc,
-                     GdkSubwindowMode  mode)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  private->subwindow_mode = mode;
-  private->values_mask |= GDK_GC_SUBWINDOW;
-}
-
-void
-gdk_gc_set_exposures (GdkGC *gc,
-                     gint   exposures)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  private->graphics_exposures = exposures;
-  private->values_mask |= GDK_GC_EXPOSURES;;
-}
-
-void
-gdk_gc_set_line_attributes (GdkGC      *gc,
-                           gint         line_width,
-                           GdkLineStyle line_style,
-                           GdkCapStyle  cap_style,
-                           GdkJoinStyle join_style)
-{
-  GdkGCPrivate *private;
-  int xline_style;
-  int xcap_style;
-  int xjoin_style;
-
-  g_return_if_fail (gc != NULL);
-
-  private = (GdkGCPrivate*) gc;
-
-  GDK_NOTE (MISC,
-           g_print ("gdk_gc_set_line_attributes: (%d) %d %s %s %s\n",
-                    private, line_width,
-                    (line_style == GDK_LINE_SOLID ? "SOLID" :
-                     (line_style == GDK_LINE_ON_OFF_DASH ? "ON_OFF_DASH" :
-                      (line_style == GDK_LINE_DOUBLE_DASH ? "DOUBLE_DASH" :
-                       "???"))),
-                    (cap_style == GDK_CAP_BUTT ? "BUTT" :
-                     (cap_style == GDK_CAP_ROUND ? "ROUND" :
-                      (cap_style == GDK_CAP_PROJECTING ? "PROJECTING" :
-                       "???"))),
-                    (join_style == GDK_JOIN_MITER ? "MITER" :
-                     (join_style == GDK_JOIN_ROUND ? "ROUND" :
-                      (join_style == GDK_JOIN_BEVEL ? "BEVEL" :
-                       "???")))));
-
-  private->pen_width = line_width;
-
-  /* Mask old style bits away */
-  private->pen_style &= ~(PS_STYLE_MASK|PS_ENDCAP_MASK|PS_JOIN_MASK);
-
-  /* Add new bits */
-  switch (line_style)
-    {
-    case GDK_LINE_SOLID:
-      private->pen_style |= PS_SOLID; break;
-    case GDK_LINE_ON_OFF_DASH:
-    case GDK_LINE_DOUBLE_DASH: /* ??? */
-      private->pen_style |= PS_DASH; break;
-    }
-
-  switch (cap_style)
-    {
-    case GDK_CAP_NOT_LAST:
-      /* ??? */
-      break;
-    case GDK_CAP_BUTT:
-      private->pen_style |= PS_ENDCAP_FLAT; break;
-    case GDK_CAP_ROUND:
-      private->pen_style |= PS_ENDCAP_ROUND; break;
-    case GDK_CAP_PROJECTING:
-      private->pen_style |= PS_ENDCAP_SQUARE; break;
-    }
-
-  switch (join_style)
-    {
-    case GDK_JOIN_MITER:
-      private->pen_style |= PS_JOIN_MITER;
-      break;
-    case GDK_JOIN_ROUND:
-      private->pen_style |= PS_JOIN_ROUND;
-      break;
-    case GDK_JOIN_BEVEL:
-      private->pen_style |= PS_JOIN_BEVEL;
-      break;
-    }
-}
-
-void
-gdk_gc_set_dashes (GdkGC *gc,
-                  gint   dash_offset,
-                  gchar  dash_list[],
-                  gint   n)
-{
-  GdkGCPrivate *private;
-
-  g_return_if_fail (gc != NULL);
-  g_return_if_fail (dash_list != NULL);
-
-  /* XXX ??? */
-
-  private = (GdkGCPrivate *) gc;
-
-  private->pen_style &= ~(PS_STYLE_MASK);
-  private->pen_style |= PS_DASH;
-}
-
-void
-gdk_gc_copy (GdkGC *dst_gc, GdkGC *src_gc)
-{
-  GdkGCPrivate *dst_private, *src_private;
-
-  src_private = (GdkGCPrivate *) src_gc;
-  dst_private = (GdkGCPrivate *) dst_gc;
-
-  *dst_private = *src_private;
-}
-
-HDC
-gdk_gc_predraw (GdkDrawablePrivate *drawable_private,
-               GdkGCPrivate       *gc_private)
-{
-  GdkColormapPrivate *colormap_private =
-    (GdkColormapPrivate *) drawable_private->colormap;
-  COLORREF bg;
-  COLORREF fg;
-  LOGBRUSH logbrush;
-  HPEN hpen;
-  HBRUSH hbr;
-
-  g_assert (gc_private->xgc == NULL);
-
-  if (drawable_private->window_type == GDK_DRAWABLE_PIXMAP)
-    {
-      if ((gc_private->xgc = CreateCompatibleDC (NULL)) == NULL)
-       g_warning ("gdk_gc_predraw: CreateCompatibleDC failed");
-
-      if ((gc_private->saved_dc = SaveDC (gc_private->xgc)) == 0)
-       g_warning ("gdk_gc_predraw: SaveDC #1 failed");
-      
-      if (SelectObject (gc_private->xgc, drawable_private->xwindow) == NULL)
-       g_warning ("gdk_gc_predraw: SelectObject #1 failed");
-    }
-  else
-    {
-      if ((gc_private->xgc = GetDC (drawable_private->xwindow)) == NULL)
-       g_warning ("gdk_gc_predraw: GetDC failed");
-      
-      if ((gc_private->saved_dc = SaveDC (gc_private->xgc)) == 0)
-       g_warning ("gdk_gc_predraw: SaveDC #2 failed");
-    }
-  
-  gc_private->hwnd = drawable_private->xwindow;
-  
-  if (colormap_private == NULL)
-    {
-      /* A 1 bit deep bitmap */
-      struct
-      {
-       WORD palVersion;
-       WORD palNumEntries;
-       PALETTEENTRY palPalEntry[2];
-      } logpal;
-      static HPALETTE hpal = NULL;
-
-      if (hpal == NULL)
-       {
-         /* Create a b&w palette */
-         logpal.palVersion = 0x300;
-         logpal.palNumEntries = 2;
-         logpal.palPalEntry[0].peRed = 
-           logpal.palPalEntry[0].peGreen = 
-           logpal.palPalEntry[0].peBlue = 0x00;
-         logpal.palPalEntry[0].peFlags = 0x00;
-         logpal.palPalEntry[1].peRed = 
-           logpal.palPalEntry[1].peGreen = 
-           logpal.palPalEntry[1].peBlue = 0xFF;
-         logpal.palPalEntry[1].peFlags = 0x00;
-         if ((hpal = CreatePalette ((LOGPALETTE *) &logpal)) == NULL)
-           g_warning ("gdk_gc_predraw: CreatePalette failed");
-       }
-      SelectPalette (gc_private->xgc, hpal, FALSE);
-      RealizePalette (gc_private->xgc);
-      fg = PALETTEINDEX (gc_private->foreground.pixel);
-    }
-  else if (colormap_private != NULL
-          && colormap_private->xcolormap->rc_palette)
-    {
-      int k;
-      if (SelectPalette (gc_private->xgc,
-                        colormap_private->xcolormap->palette, FALSE) == NULL)
-       g_warning ("gdk_gc_predraw: SelectPalette failed");
-      if (TRUE || colormap_private->xcolormap->stale)
-       {
-         if ((k = RealizePalette (gc_private->xgc)) == GDI_ERROR)
-           g_warning ("gdk_gc_predraw: RealizePalette failed");
-         colormap_private->xcolormap->stale = FALSE;
-       }
-#if 0
-      g_print ("Selected palette %#x for gc %#x, realized %d colors\n",
-              colormap_private->xcolormap->palette, gc_private->xgc, k);
-#endif
-      fg = PALETTEINDEX (gc_private->foreground.pixel);
-    }
-  else
-    {
-      COLORREF foreground = RGB (gc_private->foreground.red >> 8,
-                                gc_private->foreground.green >> 8,
-                                gc_private->foreground.blue >> 8);
-      fg = GetNearestColor (gc_private->xgc, foreground);
-    }
-  logbrush.lbStyle = BS_SOLID;
-  logbrush.lbColor = fg;
-  if ((hpen = ExtCreatePen (gc_private->pen_style, gc_private->pen_width,
-                           &logbrush, 0, NULL)) == NULL)
-    g_warning ("gdk_gc_predraw: CreatePen failed");
-  
-  if (SelectObject (gc_private->xgc, hpen) == NULL)
-    g_warning ("gdk_gc_predraw: SelectObject #2 failed");
-
-  if (SetTextColor (gc_private->xgc, fg) == CLR_INVALID)
-    g_warning ("gdk_gc_predraw: SetTextColor failed");
-
-#if 0
-  switch (gc_private->fill_style)
-    {
-    case GDK_STIPPLED:
-      {
-       GdkPixmap *stipple = gc_private->stipple;
-       GdkPixmapPrivate *stipple_private = (GdkPixmapPrivate *) stipple;
-       HBITMAP hbm = stipple_private->xwindow;
-       if (NULL == (hbr = CreatePatternBrush (hbm)))
-         g_warning ("gdk_gc_predraw: CreatePatternBrush failed");
-       
-#ifdef NATIVE_WIN16
-       SetBrushOrg  (gc_private->xgc, gc_private->ts_x_origin,
-                     gc_private->ts_y_origin);
-#else
-       SetBrushOrgEx(gc_private->xgc, gc_private->ts_x_origin,
-                     gc_private->ts_y_origin, NULL);
-#endif
-      }
-      break;
-    case GDK_SOLID:
-    default:
-      if ((hbr = CreateSolidBrush (fg)) == NULL)
-       g_warning ("gdk_gc_predraw: CreateSolidBrush failed");
-      break;
-  }
-#else
-  if ((hbr = CreateSolidBrush (fg)) == NULL)
-    g_warning ("gdk_gc_predraw: CreateSolidBrush failed");
-#endif
-  if (SelectObject (gc_private->xgc, hbr) == NULL)
-    g_warning ("gdk_gc_predraw: SelectObject #3 failed");
-
-  if (gc_private->values_mask & GDK_GC_BACKGROUND)
-    {
-      if (colormap_private == NULL)
-       {
-         /* a bitmap */
-         bg = PALETTEINDEX (gc_private->background.pixel);
-       }
-      else if (colormap_private != NULL
-         && colormap_private->xcolormap->rc_palette)
-       {
-         bg = PALETTEINDEX (gc_private->background.pixel);
-       }
-      else
-       {
-         COLORREF background = RGB (gc_private->background.red >> 8,
-                                    gc_private->background.green >> 8,
-                                    gc_private->background.blue >> 8);
-         bg = GetNearestColor (gc_private->xgc, background);
-       }
-      if (SetBkColor (gc_private->xgc, bg) == CLR_INVALID)
-       g_warning ("gdk_gc_predraw: SetBkColor failed");
-    }
-  
-  if (SetBkMode (gc_private->xgc, TRANSPARENT) == 0)
-    g_warning ("gdk_gc_predraw: SetBkMode failed");
-  
-  if (SetTextAlign (gc_private->xgc, TA_BASELINE) == GDI_ERROR)
-    g_warning ("gdk_gc_predraw: SetTextAlign failed");
-  
-  if (gc_private->values_mask & GDK_GC_FUNCTION)
-    if (SetROP2 (gc_private->xgc, gc_private->rop2) == 0)
-      g_warning ("gdk_gc_predraw: SetROP2 failed");
-
-  if (gc_private->values_mask & GDK_GC_CLIP_MASK
-      && gc_private->clip_region != NULL)
-    {
-      if (gc_private->values_mask & (GDK_GC_CLIP_X_ORIGIN | GDK_GC_CLIP_Y_ORIGIN))
-       OffsetRgn (gc_private->clip_region,
-                  gc_private->clip_x_origin, gc_private->clip_y_origin);
-      SelectClipRgn (gc_private->xgc, gc_private->clip_region);
-    }
-
-  return gc_private->xgc;
-}
-
-void
-gdk_gc_postdraw (GdkDrawablePrivate *drawable_private,
-                GdkGCPrivate       *gc_private)
-{
-  HGDIOBJ hpen;
-  HGDIOBJ hbr;
-  GdkColormapPrivate *colormap_private =
-    (GdkColormapPrivate *) drawable_private->colormap;
-
-  if ((hpen = GetCurrentObject (gc_private->xgc, OBJ_PEN)) == NULL)
-    g_warning ("gdk_gc_postdraw: GetCurrentObject #1 failed");
-
-  if ((hbr = GetCurrentObject (gc_private->xgc, OBJ_BRUSH)) == NULL)
-    g_warning ("gdk_gc_postdraw: GetCurrentObject #2 failed");
-
-  if (!RestoreDC (gc_private->xgc, gc_private->saved_dc))
-    g_warning ("gdk_gc_postdraw: RestoreDC failed");
-#if 0
-  if (colormap_private != NULL
-      && colormap_private->xcolormap->rc_palette
-      && colormap_private->xcolormap->stale)
-    {
-      SelectPalette (gc_private->xgc, GetStockObject (DEFAULT_PALETTE), FALSE);
-      if (!UnrealizeObject (colormap_private->xcolormap->palette))
-       g_warning ("gdk_gc_postraw: UnrealizeObject failed");
-    }
-#endif
-  if (drawable_private->window_type == GDK_DRAWABLE_PIXMAP)
-    {
-      if (!DeleteDC (gc_private->xgc))
-       g_warning ("gdk_gc_postdraw: DeleteDC failed");
-    }
-  else
-    {
-      ReleaseDC (gc_private->hwnd, gc_private->xgc);
-    }
-
-  if (hpen != NULL)
-    if (!DeleteObject (hpen))
-      g_warning ("gdk_gc_postdraw: DeleteObject #1 failed");
-  
-  if (hbr != NULL)
-    if (!DeleteObject (hbr))
-      g_warning ("gdk_gc_postdraw: DeleteObject #2 failed");
-
-  gc_private->xgc = NULL;
-}
-
-/* This function originally from Jean-Edouard Lachand-Robert, and
- * available at www.codeguru.com. Simplified for our needs, now
- * handles just one-bit deep bitmaps (in Window parlance, ie those
- * that GDK calls bitmaps (and not pixmaps), with zero pixels being
- * transparent.
- */
-
-/*
- *  BitmapToRegion :  Create a region from the "non-transparent" pixels of
- *  a bitmap
- *  Author :      Jean-Edouard Lachand-Robert
- *  (http://www.geocities.com/Paris/LeftBank/1160/resume.htm), June 1998.
- */
-
-HRGN
-BitmapToRegion (HBITMAP hBmp)
-{
-  HRGN hRgn = NULL;
-  HDC hMemDC;
-  BITMAP bm;
-
-  struct
-  {
-    BITMAPINFOHEADER bmiHeader;
-#if 1
-    WORD bmiColors[2];
-#else
-    RGBQUAD bmiColors[2];
-#endif
-  } bmi;
-  VOID *pbits8; 
-  HBITMAP hbm8;
-  struct
-  {
-    WORD palVersion;
-    WORD palNumEntries;
-    PALETTEENTRY palPalEntry[2];
-  } logpal;
-  static HPALETTE bwPalette = NULL;
-
-  HBITMAP holdBmp;
-  HDC hDC;
-
-  BITMAP bm8;
-  HBITMAP holdBmp2;
-  DWORD maxRects;
-  RGNDATA *pData;
-  BYTE *p8;
-  int x, y;
-  HRGN h;
-
-  /* Create a B&W palette */
-  if (bwPalette == NULL)
-    {
-      /* Create a b&w palette */
-      logpal.palVersion = 0x300;
-      logpal.palNumEntries = 2;
-      logpal.palPalEntry[0].peRed = 
-       logpal.palPalEntry[0].peGreen = 
-       logpal.palPalEntry[0].peBlue = 0;
-      logpal.palPalEntry[0].peFlags = 0;
-      logpal.palPalEntry[1].peRed = 
-       logpal.palPalEntry[1].peGreen = 
-       logpal.palPalEntry[1].peBlue = 0xFF;
-      logpal.palPalEntry[1].peFlags = 0;
-      if ((bwPalette = CreatePalette ((LOGPALETTE *) &logpal)) == NULL)
-       g_warning ("BitmapToRegion: CreatePalette failed");
-    }
-
-  /* Create a memory DC inside which we will scan the bitmap content */
-  hMemDC = CreateCompatibleDC (NULL);
-  if (!hMemDC)
-    {
-      g_warning ("BitmapToRegion: CreateCompatibleDC #1 failed");
-      return NULL;
-    }
-
-  SelectPalette (hMemDC, bwPalette, FALSE);
-  RealizePalette (hMemDC);
-
-  /* Get bitmap size */
-  GetObject(hBmp, sizeof(bm), &bm);
-  
-  /* Create a 8 bits depth bitmap and select it into the memory DC */
-  bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-  bmi.bmiHeader.biWidth = bm.bmWidth;
-  bmi.bmiHeader.biHeight = bm.bmHeight;
-  bmi.bmiHeader.biPlanes = 1;
-  bmi.bmiHeader.biBitCount = 8;
-  bmi.bmiHeader.biCompression = BI_RGB;
-  bmi.bmiHeader.biSizeImage = 0;
-  bmi.bmiHeader.biXPelsPerMeter = 0;
-  bmi.bmiHeader.biYPelsPerMeter = 0;
-  bmi.bmiHeader.biClrUsed = 2;
-  bmi.bmiHeader.biClrImportant = 2;
-#if 1
-  bmi.bmiColors[0] = 0;
-  bmi.bmiColors[1] = 1;
-  hbm8 = CreateDIBSection (hMemDC, (BITMAPINFO *)&bmi,
-                           DIB_PAL_COLORS, &pbits8, NULL, 0);
-#else
-  bmi.bmiColors[0].rgbBlue =
-    bmi.bmiColors[0].rgbGreen =
-    bmi.bmiColors[0].rgbRed = 0x00;
-  bmi.bmiColors[0].rgbReserved = 0x00;
-
-  bmi.bmiColors[1].rgbBlue =
-    bmi.bmiColors[1].rgbGreen =
-    bmi.bmiColors[1].rgbRed = 0xFF;
-  bmi.bmiColors[0].rgbReserved = 0x00;
-
-  hbm8 = CreateDIBSection (hMemDC, (BITMAPINFO *)&bmi,
-                           DIB_RGB_COLORS, &pbits8, NULL, 0);
-#endif
-  if (!hbm8)
-    {
-      g_warning ("BitmapToRegion: CreateDIBSection failed");
-      DeleteDC (hMemDC);
-      return NULL;
-    }
-
-  holdBmp = (HBITMAP) SelectObject (hMemDC, hbm8);
-
-  /* Create a DC just to copy the bitmap into the memory DC*/
-  hDC = CreateCompatibleDC (hMemDC);
-  if (!hDC)
-    {
-      g_warning ("BitmapToRegion: CreateCompatibleDC #2 failed");
-      SelectObject (hMemDC, holdBmp);
-      DeleteObject (hbm8);
-      DeleteDC (hMemDC);
-      return NULL;
-    }
-
-  /* Get how many bytes per row we have for the bitmap bits */
-  GetObject (hbm8, sizeof (bm8), &bm8);
-
-  /* Hans Breuer found a fix to the long-standing erroneous behaviour
-   * on NT 4.0: There seems to be a bug in Win NT 4.0 GDI: scanlines
-   * in bitmaps are dword aligned on both Win95 and NT. In the case of
-   * a bitmap with 22 bytes worth of width, GetObject above returns
-   * with bmWidth == 22. On Win95 bmWidthBytes == 24, as it should be,
-   * but on NT is it 22. We need to correct this here.
-   */
-  bm8.bmWidthBytes = (((bm8.bmWidthBytes-1)/4)+1)*4; /* dword aligned!! */
-
-  /* Copy the bitmap into the memory DC*/
-  holdBmp2 = (HBITMAP) SelectObject (hDC, hBmp);
-
-  if (!BitBlt (hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, hDC, 0, 0, SRCCOPY))
-    {
-      g_warning ("BitmapToRegion: BitBlt failed");
-      SelectObject (hDC, holdBmp2);
-      SelectObject (hMemDC, holdBmp);
-      DeleteObject (hbm8);
-      DeleteDC (hMemDC);
-      return NULL;
-    }
-  SelectObject (hDC, holdBmp2);
-  DeleteDC (hDC);
-
-  /* For better performances, we will use the ExtCreateRegion()
-   * function to create the region. This function take a RGNDATA
-   * structure on entry. We will add rectangles by amount of
-   * ALLOC_UNIT number in this structure.
-   */
-  #define ALLOC_UNIT  100
-  maxRects = ALLOC_UNIT;
-
-  pData = g_malloc (sizeof (RGNDATAHEADER) + (sizeof (RECT) * maxRects));
-  pData->rdh.dwSize = sizeof (RGNDATAHEADER);
-  pData->rdh.iType = RDH_RECTANGLES;
-  pData->rdh.nCount = pData->rdh.nRgnSize = 0;
-  SetRect (&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
-
-  /* Scan each bitmap from bottom to top (the bitmap is inverted vertically)*/
-  p8 = (BYTE *) pbits8 + (bm8.bmHeight - 1) * bm8.bmWidthBytes;
-  for (y = 0; y < bm.bmHeight; y++)
-    {
-      /* Scan each bitmap row from left to right*/
-      for (x = 0; x < bm.bmWidth; x++)
-       {
-         /* Search for a continuous range of "non transparent pixels"*/
-         int x0 = x;
-         BYTE *p = p8 + x;
-         while (x < bm.bmWidth)
-           {
-             if (*p == 0)
-               /* This pixel is "transparent"*/
-               break;
-             p++;
-             x++;
-           }
-         
-         if (x > x0)
-           {
-             RECT *pr;
-             /* Add the pixels (x0, y) to (x, y+1) as a new rectangle
-              * in the region
-              */
-             if (pData->rdh.nCount >= maxRects)
-               {
-                 maxRects += ALLOC_UNIT;
-                 pData = g_realloc (pData, sizeof(RGNDATAHEADER)
-                                    + (sizeof(RECT) * maxRects));
-               }
-             pr = (RECT *) &pData->Buffer;
-             SetRect (&pr[pData->rdh.nCount], x0, y, x, y+1);
-             if (x0 < pData->rdh.rcBound.left)
-               pData->rdh.rcBound.left = x0;
-             if (y < pData->rdh.rcBound.top)
-               pData->rdh.rcBound.top = y;
-             if (x > pData->rdh.rcBound.right)
-               pData->rdh.rcBound.right = x;
-             if (y+1 > pData->rdh.rcBound.bottom)
-               pData->rdh.rcBound.bottom = y+1;
-             pData->rdh.nCount++;
-             
-             /* On Windows98, ExtCreateRegion() may fail if the
-              * number of rectangles is too large (ie: >
-              * 4000). Therefore, we have to create the region by
-              * multiple steps.
-              */
-             if (pData->rdh.nCount == 2000)
-               {
-                 HRGN h = ExtCreateRegion (NULL, sizeof(RGNDATAHEADER) + (sizeof(RECT) * maxRects), pData);
-                 if (hRgn)
-                   {
-                     CombineRgn(hRgn, hRgn, h, RGN_OR);
-                     DeleteObject(h);
-                   }
-                 else
-                   hRgn = h;
-                 pData->rdh.nCount = 0;
-                 SetRect (&pData->rdh.rcBound, MAXLONG, MAXLONG, 0, 0);
-               }
-           }
-       }
-      
-      /* Go to next row (remember, the bitmap is inverted vertically)*/
-      p8 -= bm8.bmWidthBytes;
-    }
-  
-  /* Create or extend the region with the remaining rectangles*/
-  h = ExtCreateRegion (NULL, sizeof (RGNDATAHEADER)
-                      + (sizeof (RECT) * maxRects), pData);
-  if (hRgn)
-    {
-      CombineRgn (hRgn, hRgn, h, RGN_OR);
-      DeleteObject (h);
-    }
-  else
-    hRgn = h;
-
-  /* Clean up*/
-  SelectObject(hMemDC, holdBmp);
-  DeleteObject (hbm8);
-  DeleteDC (hMemDC);
-
-  return hRgn;
-}
diff --git a/gdk/win32/gdkglobals-win32.c b/gdk/win32/gdkglobals-win32.c
deleted file mode 100644 (file)
index 4f9f498..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "gdktypes.h"
-#include "gdkprivate.h"
-
-guint             gdk_debug_flags = 0;
-HWND              gdk_root_window = NULL;
-HWND              gdk_leader_window;
-GDKVAR GdkWindowPrivate *gdk_root_parent = NULL;
-HDC              gdk_DC;
-HINSTANCE        gdk_DLLInstance;
-HINSTANCE        gdk_ProgInstance;
-UINT             gdk_selection_notify_msg;
-UINT             gdk_selection_request_msg;
-UINT             gdk_selection_clear_msg;
-GdkAtom                  gdk_clipboard_atom;
-GdkAtom                  gdk_win32_dropfiles_atom;
-GdkAtom                  gdk_ole2_dnd_atom;
-Atom              gdk_selection_property;
-gchar            *gdk_progclass = NULL;
-gint              gdk_error_code;
-gint              gdk_error_warnings = TRUE;
-gint              gdk_null_window_warnings = TRUE;
-
-GMutex           *gdk_threads_mutex = NULL;
-
-DWORD            windows_version = 0;
diff --git a/gdk/win32/gdkglobals.c b/gdk/win32/gdkglobals.c
deleted file mode 100644 (file)
index 4f9f498..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "gdktypes.h"
-#include "gdkprivate.h"
-
-guint             gdk_debug_flags = 0;
-HWND              gdk_root_window = NULL;
-HWND              gdk_leader_window;
-GDKVAR GdkWindowPrivate *gdk_root_parent = NULL;
-HDC              gdk_DC;
-HINSTANCE        gdk_DLLInstance;
-HINSTANCE        gdk_ProgInstance;
-UINT             gdk_selection_notify_msg;
-UINT             gdk_selection_request_msg;
-UINT             gdk_selection_clear_msg;
-GdkAtom                  gdk_clipboard_atom;
-GdkAtom                  gdk_win32_dropfiles_atom;
-GdkAtom                  gdk_ole2_dnd_atom;
-Atom              gdk_selection_property;
-gchar            *gdk_progclass = NULL;
-gint              gdk_error_code;
-gint              gdk_error_warnings = TRUE;
-gint              gdk_null_window_warnings = TRUE;
-
-GMutex           *gdk_threads_mutex = NULL;
-
-DWORD            windows_version = 0;
diff --git a/gdk/win32/gdkim-win32.c b/gdk/win32/gdkim-win32.c
deleted file mode 100644 (file)
index a9083b9..0000000
+++ /dev/null
@@ -1,394 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#if HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "gdkim.h"
-#include "gdkpixmap.h"
-#include "gdkprivate.h"
-#include "gdki18n.h"
-#include "gdkx.h"
-
-/*
- *--------------------------------------------------------------
- * gdk_set_locale
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gchar*
-gdk_set_locale (void)
-{
-  gchar *current_locale;
-
-  if (!setlocale (LC_ALL,""))
-    g_warning ("locale not supported by C library");
-  
-  current_locale = setlocale (LC_ALL, NULL);
-
-  return current_locale;
-}
-
-void 
-gdk_im_begin (GdkIC *ic, GdkWindow* window)
-{
-}
-
-void 
-gdk_im_end (void)
-{
-}
-
-GdkIMStyle
-gdk_im_decide_style (GdkIMStyle supported_style)
-{
-  return GDK_IM_PREEDIT_NONE | GDK_IM_STATUS_NONE;
-}
-
-GdkIMStyle
-gdk_im_set_best_style (GdkIMStyle style)
-{
-  return GDK_IM_PREEDIT_NONE | GDK_IM_STATUS_NONE;
-}
-
-gint 
-gdk_im_ready (void)
-{
-  return FALSE;
-}
-
-GdkIC * 
-gdk_ic_new (GdkICAttr *attr, GdkICAttributesType mask)
-{
-  return NULL;
-}
-
-void 
-gdk_ic_destroy (GdkIC *ic)
-{
-}
-
-GdkIMStyle
-gdk_ic_get_style (GdkIC *ic)
-{
-  return GDK_IM_PREEDIT_NONE | GDK_IM_STATUS_NONE;
-}
-
-void 
-gdk_ic_set_values (GdkIC *ic, ...)
-{
-}
-
-void 
-gdk_ic_get_values (GdkIC *ic, ...)
-{
-}
-
-GdkICAttributesType 
-gdk_ic_set_attr (GdkIC *ic, GdkICAttr *attr, GdkICAttributesType mask)
-{
-  return 0;
-}
-
-GdkICAttributesType 
-gdk_ic_get_attr (GdkIC *ic, GdkICAttr *attr, GdkICAttributesType mask)
-{
-  return 0;
-}
-
-GdkEventMask 
-gdk_ic_get_events (GdkIC *ic)
-{
-  return 0;
-}
-
-/*
- * gdk_wcstombs 
- *
- * Returns a multi-byte string converted from the specified array
- * of wide characters. The string is newly allocated. The array of
- * wide characters must be null-terminated. If the conversion is
- * failed, it returns NULL.
- *
- * On Win32, we always use UTF-8.
- */
-gchar *
-gdk_wcstombs (const GdkWChar *src)
-{
-  gint len;
-  const GdkWChar *wcp;
-  guchar *mbstr, *bp;
-
-  wcp = src;
-  len = 0;
-  while (*wcp)
-    {
-      const GdkWChar c = *wcp++;
-
-      if (c < 0x80)
-       len += 1;
-      else if (c < 0x800)
-       len += 2;
-      else if (c < 0x10000)
-       len += 3;
-      else if (c < 0x200000)
-       len += 4;
-      else if (c < 0x4000000)
-       len += 5;
-      else
-       len += 6;
-    }
-
-  mbstr = g_malloc (len + 1);
-  
-  wcp = src;
-  bp = mbstr;
-  while (*wcp)
-    {
-      int first;
-      int i;
-      GdkWChar c = *wcp++;
-
-      if (c < 0x80)
-       {
-         first = 0;
-         len = 1;
-       }
-      else if (c < 0x800)
-       {
-         first = 0xc0;
-         len = 2;
-       }
-      else if (c < 0x10000)
-       {
-         first = 0xe0;
-         len = 3;
-       }
-      else if (c < 0x200000)
-       {
-         first = 0xf0;
-         len = 4;
-       }
-      else if (c < 0x4000000)
-       {
-         first = 0xf8;
-         len = 5;
-       }
-      else
-       {
-         first = 0xfc;
-         len = 6;
-       }
-      
-      /* Woo-hoo! */
-      switch (len)
-       {
-       case 6: bp[5] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 5: bp[4] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 4: bp[3] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 3: bp[2] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 2: bp[1] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 1: bp[0] = c | first;
-       }
-
-      bp += len;
-    }
-  *bp = 0;
-  return mbstr;
-}
-
-  
-/*
- * gdk_mbstowcs
- *
- * Converts the specified string into GDK wide characters, and,
- * returns the number of wide characters written. The string 'src'
- * must be null-terminated. If the conversion is failed, it returns
- * -1.
- *
- * On Win32, thr string is assumed to be in UTF-8.  Also note that
- * GdkWChar is 32 bits, while wchar_t, and the wide characters the
- * Windows API uses, are 16 bits!
- */
-
-/* First a helper function for not zero-terminated strings */
-gint
-gdk_nmbstowcs (GdkWChar    *dest,
-              const gchar *src,
-              gint         src_len,
-              gint         dest_max)
-{
-  guchar *cp, *end;
-  gint n;
-  
-  cp = (guchar *) src;
-  end = cp + src_len;
-  n = 0;
-  while (cp != end && dest != dest + dest_max)
-    {
-      gint i, mask = 0, len;
-      guchar c = *cp;
-
-      if (c < 0x80)
-       {
-         len = 1;
-         mask = 0x7f;
-       }
-      else if ((c & 0xe0) == 0xc0)
-       {
-         len = 2;
-         mask = 0x1f;
-       }
-      else if ((c & 0xf0) == 0xe0)
-       {
-         len = 3;
-         mask = 0x0f;
-       }
-      else if ((c & 0xf8) == 0xf0)
-       {
-         len = 4;
-         mask = 0x07;
-       }
-      else if ((c & 0xfc) == 0xf8)
-       {
-         len = 5;
-         mask = 0x03;
-       }
-      else if ((c & 0xfc) == 0xfc)
-       {
-         len = 6;
-         mask = 0x01;
-       }
-      else
-       return -1;
-
-      if (cp + len > end)
-       return -1;
-
-      *dest = (cp[0] & mask);
-      for (i = 1; i < len; i++)
-       {
-         if ((cp[i] & 0xc0) != 0x80)
-           return -1;
-         *dest <<= 6;
-         *dest |= (cp[i] & 0x3f);
-       }
-      if (*dest == -1)
-       return -1;
-
-      cp += len;
-      dest++;
-      n++;
-    }
-  if (cp != end)
-    return -1;
-
-  return n;
-}
-
-gint
-gdk_mbstowcs (GdkWChar    *dest,
-             const gchar *src,
-             gint         dest_max)
-{
-  return gdk_nmbstowcs (dest, src, strlen (src), dest_max);
-}
-
-
-/* A version that converts to wchar_t wide chars */
-
-gint
-gdk_nmbstowchar_ts (wchar_t     *dest,
-                   const gchar *src,
-                   gint         src_len,
-                   gint         dest_max)
-{
-  wchar_t *wcp;
-  guchar *cp, *end;
-  gint n;
-  
-  wcp = dest;
-  cp = (guchar *) src;
-  end = cp + src_len;
-  n = 0;
-  while (cp != end && wcp != dest + dest_max)
-    {
-      gint i, mask = 0, len;
-      guchar c = *cp;
-
-      if (c < 0x80)
-       {
-         len = 1;
-         mask = 0x7f;
-       }
-      else if ((c & 0xe0) == 0xc0)
-       {
-         len = 2;
-         mask = 0x1f;
-       }
-      else if ((c & 0xf0) == 0xe0)
-       {
-         len = 3;
-         mask = 0x0f;
-       }
-      else /* Other lengths are not possible with 16-bit wchar_t! */
-       return -1;
-
-      if (cp + len > end)
-       return -1;
-
-      *wcp = (cp[0] & mask);
-      for (i = 1; i < len; i++)
-       {
-         if ((cp[i] & 0xc0) != 0x80)
-           return -1;
-         *wcp <<= 6;
-         *wcp |= (cp[i] & 0x3f);
-       }
-      if (*wcp == 0xFFFF)
-       return -1;
-
-      cp += len;
-      wcp++;
-      n++;
-    }
-  if (cp != end)
-    return -1;
-
-  return n;
-}
-
diff --git a/gdk/win32/gdkim.c b/gdk/win32/gdkim.c
deleted file mode 100644 (file)
index a9083b9..0000000
+++ /dev/null
@@ -1,394 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#if HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "gdkim.h"
-#include "gdkpixmap.h"
-#include "gdkprivate.h"
-#include "gdki18n.h"
-#include "gdkx.h"
-
-/*
- *--------------------------------------------------------------
- * gdk_set_locale
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gchar*
-gdk_set_locale (void)
-{
-  gchar *current_locale;
-
-  if (!setlocale (LC_ALL,""))
-    g_warning ("locale not supported by C library");
-  
-  current_locale = setlocale (LC_ALL, NULL);
-
-  return current_locale;
-}
-
-void 
-gdk_im_begin (GdkIC *ic, GdkWindow* window)
-{
-}
-
-void 
-gdk_im_end (void)
-{
-}
-
-GdkIMStyle
-gdk_im_decide_style (GdkIMStyle supported_style)
-{
-  return GDK_IM_PREEDIT_NONE | GDK_IM_STATUS_NONE;
-}
-
-GdkIMStyle
-gdk_im_set_best_style (GdkIMStyle style)
-{
-  return GDK_IM_PREEDIT_NONE | GDK_IM_STATUS_NONE;
-}
-
-gint 
-gdk_im_ready (void)
-{
-  return FALSE;
-}
-
-GdkIC * 
-gdk_ic_new (GdkICAttr *attr, GdkICAttributesType mask)
-{
-  return NULL;
-}
-
-void 
-gdk_ic_destroy (GdkIC *ic)
-{
-}
-
-GdkIMStyle
-gdk_ic_get_style (GdkIC *ic)
-{
-  return GDK_IM_PREEDIT_NONE | GDK_IM_STATUS_NONE;
-}
-
-void 
-gdk_ic_set_values (GdkIC *ic, ...)
-{
-}
-
-void 
-gdk_ic_get_values (GdkIC *ic, ...)
-{
-}
-
-GdkICAttributesType 
-gdk_ic_set_attr (GdkIC *ic, GdkICAttr *attr, GdkICAttributesType mask)
-{
-  return 0;
-}
-
-GdkICAttributesType 
-gdk_ic_get_attr (GdkIC *ic, GdkICAttr *attr, GdkICAttributesType mask)
-{
-  return 0;
-}
-
-GdkEventMask 
-gdk_ic_get_events (GdkIC *ic)
-{
-  return 0;
-}
-
-/*
- * gdk_wcstombs 
- *
- * Returns a multi-byte string converted from the specified array
- * of wide characters. The string is newly allocated. The array of
- * wide characters must be null-terminated. If the conversion is
- * failed, it returns NULL.
- *
- * On Win32, we always use UTF-8.
- */
-gchar *
-gdk_wcstombs (const GdkWChar *src)
-{
-  gint len;
-  const GdkWChar *wcp;
-  guchar *mbstr, *bp;
-
-  wcp = src;
-  len = 0;
-  while (*wcp)
-    {
-      const GdkWChar c = *wcp++;
-
-      if (c < 0x80)
-       len += 1;
-      else if (c < 0x800)
-       len += 2;
-      else if (c < 0x10000)
-       len += 3;
-      else if (c < 0x200000)
-       len += 4;
-      else if (c < 0x4000000)
-       len += 5;
-      else
-       len += 6;
-    }
-
-  mbstr = g_malloc (len + 1);
-  
-  wcp = src;
-  bp = mbstr;
-  while (*wcp)
-    {
-      int first;
-      int i;
-      GdkWChar c = *wcp++;
-
-      if (c < 0x80)
-       {
-         first = 0;
-         len = 1;
-       }
-      else if (c < 0x800)
-       {
-         first = 0xc0;
-         len = 2;
-       }
-      else if (c < 0x10000)
-       {
-         first = 0xe0;
-         len = 3;
-       }
-      else if (c < 0x200000)
-       {
-         first = 0xf0;
-         len = 4;
-       }
-      else if (c < 0x4000000)
-       {
-         first = 0xf8;
-         len = 5;
-       }
-      else
-       {
-         first = 0xfc;
-         len = 6;
-       }
-      
-      /* Woo-hoo! */
-      switch (len)
-       {
-       case 6: bp[5] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 5: bp[4] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 4: bp[3] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 3: bp[2] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 2: bp[1] = (c & 0x3f) | 0x80; c >>= 6; /* Fall through */
-       case 1: bp[0] = c | first;
-       }
-
-      bp += len;
-    }
-  *bp = 0;
-  return mbstr;
-}
-
-  
-/*
- * gdk_mbstowcs
- *
- * Converts the specified string into GDK wide characters, and,
- * returns the number of wide characters written. The string 'src'
- * must be null-terminated. If the conversion is failed, it returns
- * -1.
- *
- * On Win32, thr string is assumed to be in UTF-8.  Also note that
- * GdkWChar is 32 bits, while wchar_t, and the wide characters the
- * Windows API uses, are 16 bits!
- */
-
-/* First a helper function for not zero-terminated strings */
-gint
-gdk_nmbstowcs (GdkWChar    *dest,
-              const gchar *src,
-              gint         src_len,
-              gint         dest_max)
-{
-  guchar *cp, *end;
-  gint n;
-  
-  cp = (guchar *) src;
-  end = cp + src_len;
-  n = 0;
-  while (cp != end && dest != dest + dest_max)
-    {
-      gint i, mask = 0, len;
-      guchar c = *cp;
-
-      if (c < 0x80)
-       {
-         len = 1;
-         mask = 0x7f;
-       }
-      else if ((c & 0xe0) == 0xc0)
-       {
-         len = 2;
-         mask = 0x1f;
-       }
-      else if ((c & 0xf0) == 0xe0)
-       {
-         len = 3;
-         mask = 0x0f;
-       }
-      else if ((c & 0xf8) == 0xf0)
-       {
-         len = 4;
-         mask = 0x07;
-       }
-      else if ((c & 0xfc) == 0xf8)
-       {
-         len = 5;
-         mask = 0x03;
-       }
-      else if ((c & 0xfc) == 0xfc)
-       {
-         len = 6;
-         mask = 0x01;
-       }
-      else
-       return -1;
-
-      if (cp + len > end)
-       return -1;
-
-      *dest = (cp[0] & mask);
-      for (i = 1; i < len; i++)
-       {
-         if ((cp[i] & 0xc0) != 0x80)
-           return -1;
-         *dest <<= 6;
-         *dest |= (cp[i] & 0x3f);
-       }
-      if (*dest == -1)
-       return -1;
-
-      cp += len;
-      dest++;
-      n++;
-    }
-  if (cp != end)
-    return -1;
-
-  return n;
-}
-
-gint
-gdk_mbstowcs (GdkWChar    *dest,
-             const gchar *src,
-             gint         dest_max)
-{
-  return gdk_nmbstowcs (dest, src, strlen (src), dest_max);
-}
-
-
-/* A version that converts to wchar_t wide chars */
-
-gint
-gdk_nmbstowchar_ts (wchar_t     *dest,
-                   const gchar *src,
-                   gint         src_len,
-                   gint         dest_max)
-{
-  wchar_t *wcp;
-  guchar *cp, *end;
-  gint n;
-  
-  wcp = dest;
-  cp = (guchar *) src;
-  end = cp + src_len;
-  n = 0;
-  while (cp != end && wcp != dest + dest_max)
-    {
-      gint i, mask = 0, len;
-      guchar c = *cp;
-
-      if (c < 0x80)
-       {
-         len = 1;
-         mask = 0x7f;
-       }
-      else if ((c & 0xe0) == 0xc0)
-       {
-         len = 2;
-         mask = 0x1f;
-       }
-      else if ((c & 0xf0) == 0xe0)
-       {
-         len = 3;
-         mask = 0x0f;
-       }
-      else /* Other lengths are not possible with 16-bit wchar_t! */
-       return -1;
-
-      if (cp + len > end)
-       return -1;
-
-      *wcp = (cp[0] & mask);
-      for (i = 1; i < len; i++)
-       {
-         if ((cp[i] & 0xc0) != 0x80)
-           return -1;
-         *wcp <<= 6;
-         *wcp |= (cp[i] & 0x3f);
-       }
-      if (*wcp == 0xFFFF)
-       return -1;
-
-      cp += len;
-      wcp++;
-      n++;
-    }
-  if (cp != end)
-    return -1;
-
-  return n;
-}
-
diff --git a/gdk/win32/gdkimage-win32.c b/gdk/win32/gdkimage-win32.c
deleted file mode 100644 (file)
index 0f2825e..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include "gdk.h"               /* For gdk_error_trap_* / gdk_flush_* */
-#include "gdkimage.h"
-#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 GList *image_list = NULL;
-
-void
-gdk_image_exit (void)
-{
-  GdkImage *image;
-
-  while (image_list)
-    {
-      image = image_list->data;
-      gdk_image_destroy (image);
-    }
-}
-
-GdkImage *
-gdk_image_new_bitmap (GdkVisual *visual, gpointer data, gint w, gint h)
-/*
- * Desc: create a new bitmap image
- */
-{
-  Visual *xvisual;
-  GdkImage *image;
-  GdkImagePrivate *private;
-  struct {
-    BITMAPINFOHEADER bmiHeader;
-    union {
-      WORD bmiIndices[2];
-      RGBQUAD bmiColors[2];
-    } u;
-  } bmi;
-  char *bits;
-  int bpl = (w-1)/8 + 1;
-  int bpl32 = ((w-1)/32 + 1)*4;
-
-  private = g_new(GdkImagePrivate, 1);
-  image = (GdkImage *) private;
-  private->image_put = gdk_image_put_normal;
-  image->type = GDK_IMAGE_SHARED;
-  image->visual = visual;
-  image->width = w;
-  image->height = h;
-  image->depth = 1;
-  xvisual = ((GdkVisualPrivate*) visual)->xvisual;
-
-  GDK_NOTE (MISC, g_print ("gdk_image_new_bitmap: %dx%d\n", w, h));
-  
-  bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-  bmi.bmiHeader.biWidth = w;
-  bmi.bmiHeader.biHeight = -h;
-  bmi.bmiHeader.biPlanes = 1;
-  bmi.bmiHeader.biBitCount = 1;
-  bmi.bmiHeader.biCompression = BI_RGB;
-  bmi.bmiHeader.biSizeImage = 0;
-  bmi.bmiHeader.biXPelsPerMeter =
-    bmi.bmiHeader.biYPelsPerMeter = 0;
-  bmi.bmiHeader.biClrUsed = 0;
-  bmi.bmiHeader.biClrImportant = 0;
-  
-  bmi.u.bmiColors[0].rgbBlue = 
-    bmi.u.bmiColors[0].rgbGreen = 
-    bmi.u.bmiColors[0].rgbRed = 0x00;
-  bmi.u.bmiColors[0].rgbReserved = 0x00;
-
-  bmi.u.bmiColors[1].rgbBlue = 
-    bmi.u.bmiColors[1].rgbGreen = 
-    bmi.u.bmiColors[1].rgbRed = 0xFF;
-  bmi.u.bmiColors[1].rgbReserved = 0x00;
-  
-  private->ximage = CreateDIBSection (gdk_DC, (BITMAPINFO *) &bmi,
-                                     DIB_RGB_COLORS, &bits, NULL, 0);
-  if (bpl != bpl32)
-    {
-      /* Win32 expects scanlines in DIBs to be 32 bit aligned */
-      int i;
-      for (i = 0; i < h; i++)
-       memmove (bits + i*bpl32, ((char *) data) + i*bpl, bpl);
-    }
-  else
-    memmove (bits, data, bpl*h);
-  image->mem = bits;
-  image->bpl = bpl32;
-  image->byte_order = GDK_MSB_FIRST;
-
-  image->bpp = 1;
-  return(image);
-} /* gdk_image_new_bitmap() */
-
-void
-gdk_image_init (void)
-{
-}
-
-static GdkImage*
-gdk_image_new_with_depth (GdkImageType  type,
-                         GdkVisual    *visual,
-                         gint          width,
-                         gint          height,
-                         gint          depth)
-{
-  GdkImage *image;
-  GdkImagePrivate *private;
-  Visual *xvisual;
-  struct {
-    BITMAPINFOHEADER bmiHeader;
-    union {
-      WORD bmiIndices[256];
-      DWORD bmiMasks[3];
-      RGBQUAD bmiColors[256];
-    } u;
-  } bmi;
-  UINT iUsage;
-  int i;
-
-  if (type == GDK_IMAGE_FASTEST || type == GDK_IMAGE_NORMAL)
-    type = GDK_IMAGE_SHARED;
-
-  GDK_NOTE (MISC, g_print ("gdk_image_new_with_depth: %dx%dx%d %s\n",
-                          width, height, depth,
-                          (type == GDK_IMAGE_SHARED ? "shared" :
-                           (type == GDK_IMAGE_SHARED_PIXMAP ? "shared_pixmap" :
-                            "???"))));
-
-  private = g_new (GdkImagePrivate, 1);
-  image = (GdkImage*) private;
-
-  private->image_put = NULL;
-
-  image->type = type;
-  image->visual = visual;
-  image->width = width;
-  image->height = height;
-  image->depth = depth;
-  
-  xvisual = ((GdkVisualPrivate*) visual)->xvisual;
-  
-  private->image_put = gdk_image_put_normal;
-      
-  bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-  bmi.bmiHeader.biWidth = width;
-  bmi.bmiHeader.biHeight = -height;
-  bmi.bmiHeader.biPlanes = 1;
-  if (depth == 15)
-    bmi.bmiHeader.biBitCount = 16;
-  else
-    bmi.bmiHeader.biBitCount = depth;
-#if 1
-  if (depth == 16)
-    bmi.bmiHeader.biCompression = BI_BITFIELDS;
-  else
-#endif
-    bmi.bmiHeader.biCompression = BI_RGB;
-  bmi.bmiHeader.biSizeImage = 0;
-  bmi.bmiHeader.biXPelsPerMeter =
-    bmi.bmiHeader.biYPelsPerMeter = 0;
-  bmi.bmiHeader.biClrUsed = 0;
-  bmi.bmiHeader.biClrImportant = 0;
-
-  if (image->visual->type == GDK_VISUAL_PSEUDO_COLOR)
-    {
-      iUsage = DIB_PAL_COLORS;
-      for (i = 0; i < 256; i++)
-       bmi.u.bmiIndices[i] = i;
-    }
-  else
-    {
-      if (depth == 1)
-       {
-         bmi.u.bmiColors[0].rgbBlue = 
-           bmi.u.bmiColors[0].rgbGreen =
-           bmi.u.bmiColors[0].rgbRed = 0x00;
-         bmi.u.bmiColors[0].rgbReserved = 0x00;
-
-         bmi.u.bmiColors[1].rgbBlue = 
-           bmi.u.bmiColors[1].rgbGreen =
-           bmi.u.bmiColors[1].rgbRed = 0xFF;
-         bmi.u.bmiColors[1].rgbReserved = 0x00;
-
-       }
-#if 1
-      else if (depth == 16)
-       {
-         bmi.u.bmiMasks[0] = visual->red_mask;
-         bmi.u.bmiMasks[1] = visual->green_mask;
-         bmi.u.bmiMasks[2] = visual->blue_mask;
-       }
-#endif
-      iUsage = DIB_RGB_COLORS;
-    }
-
-  private->ximage =
-    CreateDIBSection (gdk_DC, (BITMAPINFO *) &bmi, iUsage,
-                     &image->mem, NULL, 0);
-
-  if (private->ximage == NULL)
-    {
-      g_warning ("gdk_image_new_with_depth: CreateDIBSection failed");
-      g_free (image);
-      return NULL;
-    }
-
-  switch (depth)
-    {
-    case 1:
-    case 8:
-      image->bpp = 1;
-      break;
-    case 15:
-    case 16:
-      image->bpp = 2;
-      break;
-    case 24:
-      image->bpp = 3;
-      break;
-    case 32:
-      image->bpp = 4;
-      break;
-    default:
-      g_warning ("gdk_image_new_with_depth: depth = %d", depth);
-      g_assert_not_reached ();
-    }
-  image->byte_order = GDK_LSB_FIRST;
-  if (depth == 1)
-    image->bpl = ((width-1)/32 + 1)*4;
-  else
-    image->bpl = ((width*image->bpp - 1)/4 + 1)*4;
-
-  GDK_NOTE (MISC, g_print ("... = %#x mem = %#x, bpl = %d\n",
-                          private->ximage, image->mem, image->bpl));
-
-  return image;
-}
-
-GdkImage*
-gdk_image_new (GdkImageType  type,
-              GdkVisual    *visual,
-              gint          width,
-              gint          height)
-{
-  GdkVisualPrivate *visual_private = (GdkVisualPrivate *) visual;
-  return gdk_image_new_with_depth (type, visual, width, height,
-                                  visual_private->xvisual->bitspixel);
-}
-
-GdkImage*
-gdk_image_bitmap_new (GdkImageType  type,
-                     GdkVisual    *visual,
-                     gint          width,
-                     gint          height)
-{
-  return gdk_image_new_with_depth (type, visual, width, height, 1);
-}
-
-GdkImage*
-gdk_image_get (GdkWindow *window,
-              gint       x,
-              gint       y,
-              gint       width,
-              gint       height)
-{
-  GdkImage *image;
-  GdkImagePrivate *private;
-  HDC hdc, memdc;
-  struct {
-    BITMAPINFOHEADER bmiHeader;
-    union {
-      WORD bmiIndices[256];
-      DWORD bmiMasks[3];
-      RGBQUAD bmiColors[256];
-    } u;
-  } bmi;
-  HGDIOBJ oldbitmap1, oldbitmap2;
-  UINT iUsage;
-  BITMAP bm;
-  int i;
-
-  g_return_val_if_fail (window != NULL, NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-
-  GDK_NOTE (MISC, g_print ("gdk_image_get: %#x %dx%d@+%d+%d\n",
-                          GDK_DRAWABLE_XID (window), width, height, x, y));
-
-  private = g_new (GdkImagePrivate, 1);
-  image = (GdkImage*) private;
-
-  private->image_put = gdk_image_put_normal;
-
-  image->type = GDK_IMAGE_SHARED;
-  image->visual = gdk_window_get_visual (window);
-  image->width = width;
-  image->height = height;
-
-  /* This function is called both to blit from a window and from
-   * a pixmap.
-   */
-  if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-    {
-      if ((hdc = CreateCompatibleDC (NULL)) == NULL)
-       {
-         g_warning ("gdk_image_get: CreateCompatibleDC #1 failed");
-         g_free (image);
-         return NULL;
-       }
-      if ((oldbitmap1 = SelectObject (hdc, GDK_DRAWABLE_XID (window))) == NULL)
-       {
-         g_warning ("gdk_image_get: SelectObject #1 failed");
-         DeleteDC (hdc);
-         g_free (image);
-         return NULL;
-       }
-      GetObject (GDK_DRAWABLE_XID (window), sizeof (BITMAP), &bm);
-      GDK_NOTE (MISC,
-               g_print ("gdk_image_get: bmWidth = %d, bmHeight = %d, bmWidthBytes = %d, bmBitsPixel = %d\n",
-                        bm.bmWidth, bm.bmHeight, bm.bmWidthBytes, bm.bmBitsPixel));
-      image->depth = bm.bmBitsPixel;
-      if (image->depth <= 8)
-       {
-         iUsage = DIB_PAL_COLORS;
-         for (i = 0; i < 256; i++)
-           bmi.u.bmiIndices[i] = i;
-       }
-      else
-       iUsage = DIB_RGB_COLORS;
-    }
-  else
-    {
-      if ((hdc = GetDC (GDK_DRAWABLE_XID (window))) == NULL)
-       {
-         g_warning ("gdk_image_get: GetDC failed");
-         g_free (image);
-         return NULL;
-       }
-      image->depth = gdk_visual_get_system ()->depth;
-      if (image->visual->type == GDK_VISUAL_PSEUDO_COLOR)
-       {
-         iUsage = DIB_PAL_COLORS;
-         for (i = 0; i < 256; i++)
-           bmi.u.bmiIndices[i] = i;
-       }
-      else
-       iUsage = DIB_RGB_COLORS;
-    }
-
-  if ((memdc = CreateCompatibleDC (hdc)) == NULL)
-    {
-      g_warning ("gdk_image_get: CreateCompatibleDC #2 failed");
-      if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-       {
-         SelectObject (hdc, oldbitmap1);
-         DeleteDC (hdc);
-       }
-      else
-       {
-         ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-       }
-      g_free (image);
-      return NULL;
-    }
-
-  bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-  bmi.bmiHeader.biWidth = width;
-  bmi.bmiHeader.biHeight = -height;
-  bmi.bmiHeader.biPlanes = 1;
-  bmi.bmiHeader.biBitCount = image->depth;
-  if (image->depth == 16)
-    {
-      bmi.bmiHeader.biCompression = BI_BITFIELDS;
-      if (image->visual == NULL)
-       {
-         /* XXX ??? Is it always this if depth==16 and a pixmap? Guess so. */
-         bmi.u.bmiMasks[0] = 0xf800;
-         bmi.u.bmiMasks[1] = 0x07e0;
-         bmi.u.bmiMasks[2] = 0x001f;
-       }
-      else
-       {
-         bmi.u.bmiMasks[0] = image->visual->red_mask;
-         bmi.u.bmiMasks[1] = image->visual->green_mask;
-         bmi.u.bmiMasks[2] = image->visual->blue_mask;
-       }
-    }
-  else
-    bmi.bmiHeader.biCompression = BI_RGB;
-  bmi.bmiHeader.biSizeImage = 0;
-  bmi.bmiHeader.biXPelsPerMeter =
-    bmi.bmiHeader.biYPelsPerMeter = 0;
-  bmi.bmiHeader.biClrUsed = 0;
-  bmi.bmiHeader.biClrImportant = 0;
-
-  if ((private->ximage =
-       CreateDIBSection (hdc, (BITMAPINFO *) &bmi, iUsage,
-                        &image->mem, NULL, 0)) == NULL)
-    {
-      g_warning ("gdk_image_get: CreateDIBSection failed");
-      DeleteDC (memdc);
-      if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-       {
-         SelectObject (hdc, oldbitmap1);
-         DeleteDC (hdc);
-       }
-      else
-       {
-         ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-       }
-      g_free (image);
-      return NULL;
-    }
-
-  if ((oldbitmap2 = SelectObject (memdc, private->ximage)) == NULL)
-    {
-      g_warning ("gdk_image_get: SelectObject #2 failed");
-      DeleteObject (private->ximage);
-      DeleteDC (memdc);
-      if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-       {
-         SelectObject (hdc, oldbitmap1);
-         DeleteDC (hdc);
-       }
-      else
-       {
-         ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-       }
-      g_free (image);
-      return NULL;
-    }
-
-  if (!BitBlt (memdc, 0, 0, width, height, hdc, x, y, SRCCOPY))
-    {
-      g_warning ("gdk_image_get: BitBlt failed");
-      SelectObject (memdc, oldbitmap2);
-      DeleteObject (private->ximage);
-      DeleteDC (memdc);
-      if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-       {
-         SelectObject (hdc, oldbitmap1);
-         DeleteDC (hdc);
-       }
-      else
-       {
-         ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-       }
-      g_free (image);
-      return NULL;
-    }
-
-  if (SelectObject (memdc, oldbitmap2) == NULL)
-    g_warning ("gdk_image_get: SelectObject #3 failed");
-
-  if (!DeleteDC (memdc))
-    g_warning ("gdk_image_get: DeleteDC failed");
-
-  if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-    {
-      SelectObject (hdc, oldbitmap1);
-      DeleteDC (hdc);
-    }
-  else
-    {
-      ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-    }
-
-  switch (image->depth)
-    {
-    case 1:
-    case 8:
-      image->bpp = 1;
-      break;
-    case 15:
-    case 16:
-      image->bpp = 2;
-      break;
-    case 24:
-      image->bpp = 3;
-      break;
-    case 32:
-      image->bpp = 4;
-      break;
-    default:
-      g_warning ("gdk_image_get: image->depth = %d", image->depth);
-      g_assert_not_reached ();
-    }
-  image->byte_order = GDK_LSB_FIRST;
-  if (image->depth == 1)
-    image->bpl = ((width - 1)/32 + 1)*4;
-  else
-    image->bpl = ((width*image->bpp - 1)/4 + 1)*4;
-
-  GDK_NOTE (MISC, g_print ("... = %#x mem = %#x, bpl = %d\n",
-                          private->ximage, image->mem, image->bpl));
-
-  return image;
-}
-
-guint32
-gdk_image_get_pixel (GdkImage *image,
-                    gint x,
-                    gint y)
-{
-  guint32 pixel;
-  GdkImagePrivate *private;
-
-  g_return_val_if_fail (image != NULL, 0);
-
-  private = (GdkImagePrivate *) image;
-
-  g_return_val_if_fail (x >= 0 && x < image->width
-                       && y >= 0 && y < image->height, 0);
-
-  if (image->depth == 1)
-    pixel = (((char *) image->mem)[y * image->bpl + (x >> 3)] & (1 << (7 - (x & 0x7)))) != 0;
-  else
-    {
-      guchar *pixelp = (guchar *) image->mem + y * image->bpl + x * image->bpp;
-      
-      switch (image->bpp)
-       {
-       case 1:
-         pixel = *pixelp;
-         break;
-
-       /* Windows is always LSB, no need to check image->byte_order. */
-       case 2:
-         pixel = pixelp[0] | (pixelp[1] << 8);
-         break;
-
-       case 3:
-         pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16);
-         break;
-
-       case 4:
-         pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16);
-         break;
-       }
-    }
-
-  return pixel;
-}
-
-void
-gdk_image_put_pixel (GdkImage *image,
-                    gint x,
-                    gint y,
-                    guint32 pixel)
-{
-  GdkImagePrivate *private;
-
-  g_return_if_fail (image != NULL);
-
-  private = (GdkImagePrivate *) image;
-
-  g_return_if_fail (x >= 0 && x < image->width && y >= 0 && y < image->height);
-
-  if (image->depth == 1)
-    if (pixel & 1)
-      ((guchar *) image->mem)[y * image->bpl + (x >> 3)] |= (1 << (7 - (x & 0x7)));
-    else
-      ((guchar *) image->mem)[y * image->bpl + (x >> 3)] &= ~(1 << (7 - (x & 0x7)));
-  else
-    {
-      guchar *pixelp = (guchar *) image->mem + y * image->bpl + x * image->bpp;
-      
-      /* Windows is always LSB, no need to check image->byte_order. */
-      switch (image->bpp)
-       {
-       case 4:
-         pixelp[3] = 0;
-       case 3:
-         pixelp[2] = ((pixel >> 16) & 0xFF);
-       case 2:
-         pixelp[1] = ((pixel >> 8) & 0xFF);
-       case 1:
-         pixelp[0] = (pixel & 0xFF);
-       }
-    }
-}
-
-void
-gdk_image_destroy (GdkImage *image)
-{
-  GdkImagePrivate *private;
-
-  g_return_if_fail (image != NULL);
-
-  private = (GdkImagePrivate*) image;
-
-  GDK_NOTE (MISC, g_print ("gdk_image_destroy: %#x%s\n",
-                          private->ximage,
-                          (image->type == GDK_IMAGE_SHARED_PIXMAP ?
-                           " (shared pixmap)" : "")));
-  
-  switch (image->type)
-    {
-    case GDK_IMAGE_SHARED_PIXMAP:
-      break;                   /* The Windows bitmap has already been
-                                * (or will be) deleted when freeing
-                                * the corresponding pixmap.
-                                */
-
-    case GDK_IMAGE_SHARED:
-      if (!DeleteObject (private->ximage))
-       g_warning ("gdk_image_destroy: DeleteObject failed");
-      break;
-
-    default:
-      g_assert_not_reached ();
-    }
-
-  g_free (image);
-}
-
-static void
-gdk_image_put_normal (GdkDrawable *drawable,
-                     GdkGC       *gc,
-                     GdkImage    *image,
-                     gint         xsrc,
-                     gint         ysrc,
-                     gint         xdest,
-                     gint         ydest,
-                     gint         width,
-                     gint         height)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkImagePrivate *image_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  GdkColormapPrivate *colormap_private;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (image != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  image_private = (GdkImagePrivate*) image;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  /* The image can in fact be "shared", so don't test */
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-  colormap_private = (GdkColormapPrivate *) drawable_private->colormap;
-  if (colormap_private && colormap_private->xcolormap->rc_palette)
-    {
-      DIBSECTION ds;
-      static struct {
-       BITMAPINFOHEADER bmiHeader;
-       WORD bmiIndices[256];
-      } bmi;
-      static gboolean bmi_inited = FALSE;
-      int i;
-
-      if (!bmi_inited)
-       {
-         for (i = 0; i < 256; i++)
-           bmi.bmiIndices[i] = i;
-         bmi_inited = TRUE;
-       }
-
-      if (GetObject (image_private->ximage, sizeof (DIBSECTION),
-                    &ds) != sizeof (DIBSECTION))
-       {
-         g_warning ("gdk_image_put_normal: GetObject failed");
-       }
-#if 0
-      g_print("xdest = %d, ydest = %d, xsrc = %d, ysrc = %d, width = %d, height = %d\n",
-             xdest, ydest, xsrc, ysrc, width, height);
-      g_print("bmWidth = %d, bmHeight = %d, bmBitsPixel = %d, bmBits = %p\n",
-             ds.dsBm.bmWidth, ds.dsBm.bmHeight, ds.dsBm.bmBitsPixel, ds.dsBm.bmBits);
-      g_print("biWidth = %d, biHeight = %d, biBitCount = %d, biClrUsed = %d\n",
-             ds.dsBmih.biWidth, ds.dsBmih.biHeight, ds.dsBmih.biBitCount, ds.dsBmih.biClrUsed);
-#endif
-      bmi.bmiHeader = ds.dsBmih;
-      /* I have spent hours on getting the parameters to
-       * SetDIBitsToDevice right. I wonder what drugs the guys in
-       * Redmond were on when they designed this API.
-       */
-      if (SetDIBitsToDevice (hdc,
-                            xdest, ydest,
-                            width, height,
-                            xsrc, (-ds.dsBmih.biHeight)-height-ysrc,
-                            0, -ds.dsBmih.biHeight,
-                            ds.dsBm.bmBits,
-                            (CONST BITMAPINFO *) &bmi,
-                            DIB_PAL_COLORS) == 0)
-       g_warning ("SetDIBitsToDevice failed");
-    }
-  else
-    {
-      HDC memdc;
-      HGDIOBJ oldbitmap;
-
-      if ((memdc = CreateCompatibleDC (hdc)) == NULL)
-       {
-         g_warning ("gdk_image_put_normal: CreateCompatibleDC failed");
-         gdk_gc_postdraw (drawable_private, gc_private);
-         return;
-       }
-
-      if ((oldbitmap = SelectObject (memdc, image_private->ximage)) == NULL)
-       {
-         g_warning ("gdk_image_put_normal: SelectObject #1 failed");
-         gdk_gc_postdraw (drawable_private, gc_private);
-         return;
-       }
-      if (!BitBlt (hdc, xdest, ydest, width, height,
-                  memdc, xsrc, ysrc, SRCCOPY))
-       g_warning ("gdk_image_put_normal: BitBlt failed");
-
-      if (SelectObject (memdc, oldbitmap) == NULL)
-       g_warning ("gdk_image_put_normal: SelectObject #2 failed");
-
-      if (!DeleteDC (memdc))
-       g_warning ("gdk_image_put_normal: DeleteDC failed");
-    }
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
diff --git a/gdk/win32/gdkimage.c b/gdk/win32/gdkimage.c
deleted file mode 100644 (file)
index 0f2825e..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include "gdk.h"               /* For gdk_error_trap_* / gdk_flush_* */
-#include "gdkimage.h"
-#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 GList *image_list = NULL;
-
-void
-gdk_image_exit (void)
-{
-  GdkImage *image;
-
-  while (image_list)
-    {
-      image = image_list->data;
-      gdk_image_destroy (image);
-    }
-}
-
-GdkImage *
-gdk_image_new_bitmap (GdkVisual *visual, gpointer data, gint w, gint h)
-/*
- * Desc: create a new bitmap image
- */
-{
-  Visual *xvisual;
-  GdkImage *image;
-  GdkImagePrivate *private;
-  struct {
-    BITMAPINFOHEADER bmiHeader;
-    union {
-      WORD bmiIndices[2];
-      RGBQUAD bmiColors[2];
-    } u;
-  } bmi;
-  char *bits;
-  int bpl = (w-1)/8 + 1;
-  int bpl32 = ((w-1)/32 + 1)*4;
-
-  private = g_new(GdkImagePrivate, 1);
-  image = (GdkImage *) private;
-  private->image_put = gdk_image_put_normal;
-  image->type = GDK_IMAGE_SHARED;
-  image->visual = visual;
-  image->width = w;
-  image->height = h;
-  image->depth = 1;
-  xvisual = ((GdkVisualPrivate*) visual)->xvisual;
-
-  GDK_NOTE (MISC, g_print ("gdk_image_new_bitmap: %dx%d\n", w, h));
-  
-  bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-  bmi.bmiHeader.biWidth = w;
-  bmi.bmiHeader.biHeight = -h;
-  bmi.bmiHeader.biPlanes = 1;
-  bmi.bmiHeader.biBitCount = 1;
-  bmi.bmiHeader.biCompression = BI_RGB;
-  bmi.bmiHeader.biSizeImage = 0;
-  bmi.bmiHeader.biXPelsPerMeter =
-    bmi.bmiHeader.biYPelsPerMeter = 0;
-  bmi.bmiHeader.biClrUsed = 0;
-  bmi.bmiHeader.biClrImportant = 0;
-  
-  bmi.u.bmiColors[0].rgbBlue = 
-    bmi.u.bmiColors[0].rgbGreen = 
-    bmi.u.bmiColors[0].rgbRed = 0x00;
-  bmi.u.bmiColors[0].rgbReserved = 0x00;
-
-  bmi.u.bmiColors[1].rgbBlue = 
-    bmi.u.bmiColors[1].rgbGreen = 
-    bmi.u.bmiColors[1].rgbRed = 0xFF;
-  bmi.u.bmiColors[1].rgbReserved = 0x00;
-  
-  private->ximage = CreateDIBSection (gdk_DC, (BITMAPINFO *) &bmi,
-                                     DIB_RGB_COLORS, &bits, NULL, 0);
-  if (bpl != bpl32)
-    {
-      /* Win32 expects scanlines in DIBs to be 32 bit aligned */
-      int i;
-      for (i = 0; i < h; i++)
-       memmove (bits + i*bpl32, ((char *) data) + i*bpl, bpl);
-    }
-  else
-    memmove (bits, data, bpl*h);
-  image->mem = bits;
-  image->bpl = bpl32;
-  image->byte_order = GDK_MSB_FIRST;
-
-  image->bpp = 1;
-  return(image);
-} /* gdk_image_new_bitmap() */
-
-void
-gdk_image_init (void)
-{
-}
-
-static GdkImage*
-gdk_image_new_with_depth (GdkImageType  type,
-                         GdkVisual    *visual,
-                         gint          width,
-                         gint          height,
-                         gint          depth)
-{
-  GdkImage *image;
-  GdkImagePrivate *private;
-  Visual *xvisual;
-  struct {
-    BITMAPINFOHEADER bmiHeader;
-    union {
-      WORD bmiIndices[256];
-      DWORD bmiMasks[3];
-      RGBQUAD bmiColors[256];
-    } u;
-  } bmi;
-  UINT iUsage;
-  int i;
-
-  if (type == GDK_IMAGE_FASTEST || type == GDK_IMAGE_NORMAL)
-    type = GDK_IMAGE_SHARED;
-
-  GDK_NOTE (MISC, g_print ("gdk_image_new_with_depth: %dx%dx%d %s\n",
-                          width, height, depth,
-                          (type == GDK_IMAGE_SHARED ? "shared" :
-                           (type == GDK_IMAGE_SHARED_PIXMAP ? "shared_pixmap" :
-                            "???"))));
-
-  private = g_new (GdkImagePrivate, 1);
-  image = (GdkImage*) private;
-
-  private->image_put = NULL;
-
-  image->type = type;
-  image->visual = visual;
-  image->width = width;
-  image->height = height;
-  image->depth = depth;
-  
-  xvisual = ((GdkVisualPrivate*) visual)->xvisual;
-  
-  private->image_put = gdk_image_put_normal;
-      
-  bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-  bmi.bmiHeader.biWidth = width;
-  bmi.bmiHeader.biHeight = -height;
-  bmi.bmiHeader.biPlanes = 1;
-  if (depth == 15)
-    bmi.bmiHeader.biBitCount = 16;
-  else
-    bmi.bmiHeader.biBitCount = depth;
-#if 1
-  if (depth == 16)
-    bmi.bmiHeader.biCompression = BI_BITFIELDS;
-  else
-#endif
-    bmi.bmiHeader.biCompression = BI_RGB;
-  bmi.bmiHeader.biSizeImage = 0;
-  bmi.bmiHeader.biXPelsPerMeter =
-    bmi.bmiHeader.biYPelsPerMeter = 0;
-  bmi.bmiHeader.biClrUsed = 0;
-  bmi.bmiHeader.biClrImportant = 0;
-
-  if (image->visual->type == GDK_VISUAL_PSEUDO_COLOR)
-    {
-      iUsage = DIB_PAL_COLORS;
-      for (i = 0; i < 256; i++)
-       bmi.u.bmiIndices[i] = i;
-    }
-  else
-    {
-      if (depth == 1)
-       {
-         bmi.u.bmiColors[0].rgbBlue = 
-           bmi.u.bmiColors[0].rgbGreen =
-           bmi.u.bmiColors[0].rgbRed = 0x00;
-         bmi.u.bmiColors[0].rgbReserved = 0x00;
-
-         bmi.u.bmiColors[1].rgbBlue = 
-           bmi.u.bmiColors[1].rgbGreen =
-           bmi.u.bmiColors[1].rgbRed = 0xFF;
-         bmi.u.bmiColors[1].rgbReserved = 0x00;
-
-       }
-#if 1
-      else if (depth == 16)
-       {
-         bmi.u.bmiMasks[0] = visual->red_mask;
-         bmi.u.bmiMasks[1] = visual->green_mask;
-         bmi.u.bmiMasks[2] = visual->blue_mask;
-       }
-#endif
-      iUsage = DIB_RGB_COLORS;
-    }
-
-  private->ximage =
-    CreateDIBSection (gdk_DC, (BITMAPINFO *) &bmi, iUsage,
-                     &image->mem, NULL, 0);
-
-  if (private->ximage == NULL)
-    {
-      g_warning ("gdk_image_new_with_depth: CreateDIBSection failed");
-      g_free (image);
-      return NULL;
-    }
-
-  switch (depth)
-    {
-    case 1:
-    case 8:
-      image->bpp = 1;
-      break;
-    case 15:
-    case 16:
-      image->bpp = 2;
-      break;
-    case 24:
-      image->bpp = 3;
-      break;
-    case 32:
-      image->bpp = 4;
-      break;
-    default:
-      g_warning ("gdk_image_new_with_depth: depth = %d", depth);
-      g_assert_not_reached ();
-    }
-  image->byte_order = GDK_LSB_FIRST;
-  if (depth == 1)
-    image->bpl = ((width-1)/32 + 1)*4;
-  else
-    image->bpl = ((width*image->bpp - 1)/4 + 1)*4;
-
-  GDK_NOTE (MISC, g_print ("... = %#x mem = %#x, bpl = %d\n",
-                          private->ximage, image->mem, image->bpl));
-
-  return image;
-}
-
-GdkImage*
-gdk_image_new (GdkImageType  type,
-              GdkVisual    *visual,
-              gint          width,
-              gint          height)
-{
-  GdkVisualPrivate *visual_private = (GdkVisualPrivate *) visual;
-  return gdk_image_new_with_depth (type, visual, width, height,
-                                  visual_private->xvisual->bitspixel);
-}
-
-GdkImage*
-gdk_image_bitmap_new (GdkImageType  type,
-                     GdkVisual    *visual,
-                     gint          width,
-                     gint          height)
-{
-  return gdk_image_new_with_depth (type, visual, width, height, 1);
-}
-
-GdkImage*
-gdk_image_get (GdkWindow *window,
-              gint       x,
-              gint       y,
-              gint       width,
-              gint       height)
-{
-  GdkImage *image;
-  GdkImagePrivate *private;
-  HDC hdc, memdc;
-  struct {
-    BITMAPINFOHEADER bmiHeader;
-    union {
-      WORD bmiIndices[256];
-      DWORD bmiMasks[3];
-      RGBQUAD bmiColors[256];
-    } u;
-  } bmi;
-  HGDIOBJ oldbitmap1, oldbitmap2;
-  UINT iUsage;
-  BITMAP bm;
-  int i;
-
-  g_return_val_if_fail (window != NULL, NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-
-  GDK_NOTE (MISC, g_print ("gdk_image_get: %#x %dx%d@+%d+%d\n",
-                          GDK_DRAWABLE_XID (window), width, height, x, y));
-
-  private = g_new (GdkImagePrivate, 1);
-  image = (GdkImage*) private;
-
-  private->image_put = gdk_image_put_normal;
-
-  image->type = GDK_IMAGE_SHARED;
-  image->visual = gdk_window_get_visual (window);
-  image->width = width;
-  image->height = height;
-
-  /* This function is called both to blit from a window and from
-   * a pixmap.
-   */
-  if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-    {
-      if ((hdc = CreateCompatibleDC (NULL)) == NULL)
-       {
-         g_warning ("gdk_image_get: CreateCompatibleDC #1 failed");
-         g_free (image);
-         return NULL;
-       }
-      if ((oldbitmap1 = SelectObject (hdc, GDK_DRAWABLE_XID (window))) == NULL)
-       {
-         g_warning ("gdk_image_get: SelectObject #1 failed");
-         DeleteDC (hdc);
-         g_free (image);
-         return NULL;
-       }
-      GetObject (GDK_DRAWABLE_XID (window), sizeof (BITMAP), &bm);
-      GDK_NOTE (MISC,
-               g_print ("gdk_image_get: bmWidth = %d, bmHeight = %d, bmWidthBytes = %d, bmBitsPixel = %d\n",
-                        bm.bmWidth, bm.bmHeight, bm.bmWidthBytes, bm.bmBitsPixel));
-      image->depth = bm.bmBitsPixel;
-      if (image->depth <= 8)
-       {
-         iUsage = DIB_PAL_COLORS;
-         for (i = 0; i < 256; i++)
-           bmi.u.bmiIndices[i] = i;
-       }
-      else
-       iUsage = DIB_RGB_COLORS;
-    }
-  else
-    {
-      if ((hdc = GetDC (GDK_DRAWABLE_XID (window))) == NULL)
-       {
-         g_warning ("gdk_image_get: GetDC failed");
-         g_free (image);
-         return NULL;
-       }
-      image->depth = gdk_visual_get_system ()->depth;
-      if (image->visual->type == GDK_VISUAL_PSEUDO_COLOR)
-       {
-         iUsage = DIB_PAL_COLORS;
-         for (i = 0; i < 256; i++)
-           bmi.u.bmiIndices[i] = i;
-       }
-      else
-       iUsage = DIB_RGB_COLORS;
-    }
-
-  if ((memdc = CreateCompatibleDC (hdc)) == NULL)
-    {
-      g_warning ("gdk_image_get: CreateCompatibleDC #2 failed");
-      if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-       {
-         SelectObject (hdc, oldbitmap1);
-         DeleteDC (hdc);
-       }
-      else
-       {
-         ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-       }
-      g_free (image);
-      return NULL;
-    }
-
-  bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-  bmi.bmiHeader.biWidth = width;
-  bmi.bmiHeader.biHeight = -height;
-  bmi.bmiHeader.biPlanes = 1;
-  bmi.bmiHeader.biBitCount = image->depth;
-  if (image->depth == 16)
-    {
-      bmi.bmiHeader.biCompression = BI_BITFIELDS;
-      if (image->visual == NULL)
-       {
-         /* XXX ??? Is it always this if depth==16 and a pixmap? Guess so. */
-         bmi.u.bmiMasks[0] = 0xf800;
-         bmi.u.bmiMasks[1] = 0x07e0;
-         bmi.u.bmiMasks[2] = 0x001f;
-       }
-      else
-       {
-         bmi.u.bmiMasks[0] = image->visual->red_mask;
-         bmi.u.bmiMasks[1] = image->visual->green_mask;
-         bmi.u.bmiMasks[2] = image->visual->blue_mask;
-       }
-    }
-  else
-    bmi.bmiHeader.biCompression = BI_RGB;
-  bmi.bmiHeader.biSizeImage = 0;
-  bmi.bmiHeader.biXPelsPerMeter =
-    bmi.bmiHeader.biYPelsPerMeter = 0;
-  bmi.bmiHeader.biClrUsed = 0;
-  bmi.bmiHeader.biClrImportant = 0;
-
-  if ((private->ximage =
-       CreateDIBSection (hdc, (BITMAPINFO *) &bmi, iUsage,
-                        &image->mem, NULL, 0)) == NULL)
-    {
-      g_warning ("gdk_image_get: CreateDIBSection failed");
-      DeleteDC (memdc);
-      if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-       {
-         SelectObject (hdc, oldbitmap1);
-         DeleteDC (hdc);
-       }
-      else
-       {
-         ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-       }
-      g_free (image);
-      return NULL;
-    }
-
-  if ((oldbitmap2 = SelectObject (memdc, private->ximage)) == NULL)
-    {
-      g_warning ("gdk_image_get: SelectObject #2 failed");
-      DeleteObject (private->ximage);
-      DeleteDC (memdc);
-      if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-       {
-         SelectObject (hdc, oldbitmap1);
-         DeleteDC (hdc);
-       }
-      else
-       {
-         ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-       }
-      g_free (image);
-      return NULL;
-    }
-
-  if (!BitBlt (memdc, 0, 0, width, height, hdc, x, y, SRCCOPY))
-    {
-      g_warning ("gdk_image_get: BitBlt failed");
-      SelectObject (memdc, oldbitmap2);
-      DeleteObject (private->ximage);
-      DeleteDC (memdc);
-      if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-       {
-         SelectObject (hdc, oldbitmap1);
-         DeleteDC (hdc);
-       }
-      else
-       {
-         ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-       }
-      g_free (image);
-      return NULL;
-    }
-
-  if (SelectObject (memdc, oldbitmap2) == NULL)
-    g_warning ("gdk_image_get: SelectObject #3 failed");
-
-  if (!DeleteDC (memdc))
-    g_warning ("gdk_image_get: DeleteDC failed");
-
-  if (GDK_DRAWABLE_TYPE (window) == GDK_DRAWABLE_PIXMAP)
-    {
-      SelectObject (hdc, oldbitmap1);
-      DeleteDC (hdc);
-    }
-  else
-    {
-      ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-    }
-
-  switch (image->depth)
-    {
-    case 1:
-    case 8:
-      image->bpp = 1;
-      break;
-    case 15:
-    case 16:
-      image->bpp = 2;
-      break;
-    case 24:
-      image->bpp = 3;
-      break;
-    case 32:
-      image->bpp = 4;
-      break;
-    default:
-      g_warning ("gdk_image_get: image->depth = %d", image->depth);
-      g_assert_not_reached ();
-    }
-  image->byte_order = GDK_LSB_FIRST;
-  if (image->depth == 1)
-    image->bpl = ((width - 1)/32 + 1)*4;
-  else
-    image->bpl = ((width*image->bpp - 1)/4 + 1)*4;
-
-  GDK_NOTE (MISC, g_print ("... = %#x mem = %#x, bpl = %d\n",
-                          private->ximage, image->mem, image->bpl));
-
-  return image;
-}
-
-guint32
-gdk_image_get_pixel (GdkImage *image,
-                    gint x,
-                    gint y)
-{
-  guint32 pixel;
-  GdkImagePrivate *private;
-
-  g_return_val_if_fail (image != NULL, 0);
-
-  private = (GdkImagePrivate *) image;
-
-  g_return_val_if_fail (x >= 0 && x < image->width
-                       && y >= 0 && y < image->height, 0);
-
-  if (image->depth == 1)
-    pixel = (((char *) image->mem)[y * image->bpl + (x >> 3)] & (1 << (7 - (x & 0x7)))) != 0;
-  else
-    {
-      guchar *pixelp = (guchar *) image->mem + y * image->bpl + x * image->bpp;
-      
-      switch (image->bpp)
-       {
-       case 1:
-         pixel = *pixelp;
-         break;
-
-       /* Windows is always LSB, no need to check image->byte_order. */
-       case 2:
-         pixel = pixelp[0] | (pixelp[1] << 8);
-         break;
-
-       case 3:
-         pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16);
-         break;
-
-       case 4:
-         pixel = pixelp[0] | (pixelp[1] << 8) | (pixelp[2] << 16);
-         break;
-       }
-    }
-
-  return pixel;
-}
-
-void
-gdk_image_put_pixel (GdkImage *image,
-                    gint x,
-                    gint y,
-                    guint32 pixel)
-{
-  GdkImagePrivate *private;
-
-  g_return_if_fail (image != NULL);
-
-  private = (GdkImagePrivate *) image;
-
-  g_return_if_fail (x >= 0 && x < image->width && y >= 0 && y < image->height);
-
-  if (image->depth == 1)
-    if (pixel & 1)
-      ((guchar *) image->mem)[y * image->bpl + (x >> 3)] |= (1 << (7 - (x & 0x7)));
-    else
-      ((guchar *) image->mem)[y * image->bpl + (x >> 3)] &= ~(1 << (7 - (x & 0x7)));
-  else
-    {
-      guchar *pixelp = (guchar *) image->mem + y * image->bpl + x * image->bpp;
-      
-      /* Windows is always LSB, no need to check image->byte_order. */
-      switch (image->bpp)
-       {
-       case 4:
-         pixelp[3] = 0;
-       case 3:
-         pixelp[2] = ((pixel >> 16) & 0xFF);
-       case 2:
-         pixelp[1] = ((pixel >> 8) & 0xFF);
-       case 1:
-         pixelp[0] = (pixel & 0xFF);
-       }
-    }
-}
-
-void
-gdk_image_destroy (GdkImage *image)
-{
-  GdkImagePrivate *private;
-
-  g_return_if_fail (image != NULL);
-
-  private = (GdkImagePrivate*) image;
-
-  GDK_NOTE (MISC, g_print ("gdk_image_destroy: %#x%s\n",
-                          private->ximage,
-                          (image->type == GDK_IMAGE_SHARED_PIXMAP ?
-                           " (shared pixmap)" : "")));
-  
-  switch (image->type)
-    {
-    case GDK_IMAGE_SHARED_PIXMAP:
-      break;                   /* The Windows bitmap has already been
-                                * (or will be) deleted when freeing
-                                * the corresponding pixmap.
-                                */
-
-    case GDK_IMAGE_SHARED:
-      if (!DeleteObject (private->ximage))
-       g_warning ("gdk_image_destroy: DeleteObject failed");
-      break;
-
-    default:
-      g_assert_not_reached ();
-    }
-
-  g_free (image);
-}
-
-static void
-gdk_image_put_normal (GdkDrawable *drawable,
-                     GdkGC       *gc,
-                     GdkImage    *image,
-                     gint         xsrc,
-                     gint         ysrc,
-                     gint         xdest,
-                     gint         ydest,
-                     gint         width,
-                     gint         height)
-{
-  GdkDrawablePrivate *drawable_private;
-  GdkImagePrivate *image_private;
-  GdkGCPrivate *gc_private;
-  HDC hdc;
-  GdkColormapPrivate *colormap_private;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (image != NULL);
-  g_return_if_fail (gc != NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (drawable))
-    return;
-  image_private = (GdkImagePrivate*) image;
-  drawable_private = (GdkDrawablePrivate*) drawable;
-  gc_private = (GdkGCPrivate*) gc;
-
-  /* The image can in fact be "shared", so don't test */
-
-  hdc = gdk_gc_predraw (drawable_private, gc_private);
-  colormap_private = (GdkColormapPrivate *) drawable_private->colormap;
-  if (colormap_private && colormap_private->xcolormap->rc_palette)
-    {
-      DIBSECTION ds;
-      static struct {
-       BITMAPINFOHEADER bmiHeader;
-       WORD bmiIndices[256];
-      } bmi;
-      static gboolean bmi_inited = FALSE;
-      int i;
-
-      if (!bmi_inited)
-       {
-         for (i = 0; i < 256; i++)
-           bmi.bmiIndices[i] = i;
-         bmi_inited = TRUE;
-       }
-
-      if (GetObject (image_private->ximage, sizeof (DIBSECTION),
-                    &ds) != sizeof (DIBSECTION))
-       {
-         g_warning ("gdk_image_put_normal: GetObject failed");
-       }
-#if 0
-      g_print("xdest = %d, ydest = %d, xsrc = %d, ysrc = %d, width = %d, height = %d\n",
-             xdest, ydest, xsrc, ysrc, width, height);
-      g_print("bmWidth = %d, bmHeight = %d, bmBitsPixel = %d, bmBits = %p\n",
-             ds.dsBm.bmWidth, ds.dsBm.bmHeight, ds.dsBm.bmBitsPixel, ds.dsBm.bmBits);
-      g_print("biWidth = %d, biHeight = %d, biBitCount = %d, biClrUsed = %d\n",
-             ds.dsBmih.biWidth, ds.dsBmih.biHeight, ds.dsBmih.biBitCount, ds.dsBmih.biClrUsed);
-#endif
-      bmi.bmiHeader = ds.dsBmih;
-      /* I have spent hours on getting the parameters to
-       * SetDIBitsToDevice right. I wonder what drugs the guys in
-       * Redmond were on when they designed this API.
-       */
-      if (SetDIBitsToDevice (hdc,
-                            xdest, ydest,
-                            width, height,
-                            xsrc, (-ds.dsBmih.biHeight)-height-ysrc,
-                            0, -ds.dsBmih.biHeight,
-                            ds.dsBm.bmBits,
-                            (CONST BITMAPINFO *) &bmi,
-                            DIB_PAL_COLORS) == 0)
-       g_warning ("SetDIBitsToDevice failed");
-    }
-  else
-    {
-      HDC memdc;
-      HGDIOBJ oldbitmap;
-
-      if ((memdc = CreateCompatibleDC (hdc)) == NULL)
-       {
-         g_warning ("gdk_image_put_normal: CreateCompatibleDC failed");
-         gdk_gc_postdraw (drawable_private, gc_private);
-         return;
-       }
-
-      if ((oldbitmap = SelectObject (memdc, image_private->ximage)) == NULL)
-       {
-         g_warning ("gdk_image_put_normal: SelectObject #1 failed");
-         gdk_gc_postdraw (drawable_private, gc_private);
-         return;
-       }
-      if (!BitBlt (hdc, xdest, ydest, width, height,
-                  memdc, xsrc, ysrc, SRCCOPY))
-       g_warning ("gdk_image_put_normal: BitBlt failed");
-
-      if (SelectObject (memdc, oldbitmap) == NULL)
-       g_warning ("gdk_image_put_normal: SelectObject #2 failed");
-
-      if (!DeleteDC (memdc))
-       g_warning ("gdk_image_put_normal: DeleteDC failed");
-    }
-  gdk_gc_postdraw (drawable_private, gc_private);
-}
diff --git a/gdk/win32/gdkinput-win32.c b/gdk/win32/gdkinput-win32.c
deleted file mode 100644 (file)
index 2335e98..0000000
+++ /dev/null
@@ -1,1685 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-
-#include "gdk.h"
-#include "gdkinput.h"
-#include "gdkprivate.h"
-#include "gdkx.h"
-
-#ifdef HAVE_WINTAB
-#include <wintab.h>
-#define PACKETDATA (PK_CONTEXT | PK_CURSOR | PK_BUTTONS | PK_X | PK_Y  | PK_NORMAL_PRESSURE | PK_ORIENTATION)
-#define PACKETMODE (PK_BUTTONS)
-#include <pktdef.h>
-#endif
-
-#include "gdkinputprivate.h"
-
-struct _GdkDevicePrivate {
-  GdkDeviceInfo  info;
-
-  /* information about the axes */
-  GdkAxisInfo *axes;
-
-  /* reverse lookup on axis use type */
-  gint axis_for_use[GDK_AXIS_LAST];
-  
-  /* true if we need to select a different set of events, but
-   * can't because this is the core pointer
-   */
-  gint needs_update;
-
-  /* State of buttons */
-  gint button_state;
-
-  gint *last_axis_data;
-  gint last_buttons;
-#ifdef HAVE_WINTAB
-  /* WINTAB stuff: */
-  HCTX hctx;
-  /* Cursor number */
-  UINT cursor;
-  /* The cursor's CSR_PKTDATA */
-  WTPKT pktdata;
-  /* CSR_NPBTNMARKS */
-  UINT npbtnmarks[2];
-  /* Azimuth and altitude axis */
-  AXIS orientation_axes[2];
-#endif
-};
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-/* If USE_SYSCONTEXT is on, we open the Wintab device (hmm, what if
- * there are several?) as a system pointing device, i.e. it controls
- * the normal Windows cursor. This seems much more natural.
- */
-#define USE_SYSCONTEXT 1       /* The code for the other choice is not
-                                * good at all.
-                                */
-
-#ifdef HAVE_WINTAB
-#define DEBUG_WINTAB 1
-#endif
-
-#define TWOPI (2.*M_PI)
-
-#define PING() g_print("%s: %d\n",__FILE__,__LINE__)
-
-/* Forward declarations */
-
-static gint gdk_input_enable_window (GdkWindow *window,
-                                    GdkDevicePrivate *gdkdev);
-static gint gdk_input_disable_window (GdkWindow *window,
-                                     GdkDevicePrivate *gdkdev);
-static void gdk_input_none_get_pointer (GdkWindow       *window,
-                                       guint32          deviceid,
-                                       gdouble         *x,
-                                       gdouble         *y,
-                                       gdouble         *pressure,
-                                       gdouble         *xtilt,
-                                       gdouble         *ytilt,
-                                       GdkModifierType *mask);
-
-static GdkDevicePrivate *gdk_input_find_device (guint32 deviceid);
-
-#ifdef HAVE_WINTAB
-
-static gint gdk_input_win32_set_mode (guint32      deviceid,
-                                     GdkInputMode mode);
-static void gdk_input_win32_get_pointer (GdkWindow       *window,
-                                        guint32            deviceid,
-                                        gdouble         *x,
-                                        gdouble         *y,
-                                        gdouble         *pressure,
-                                        gdouble         *xtilt,
-                                        gdouble         *ytilt,
-                                        GdkModifierType *mask);
-static gint gdk_input_win32_grab_pointer (GdkWindow *     window,
-                                         gint            owner_events,
-                                         GdkEventMask    event_mask,
-                                         GdkWindow      *confine_to,
-                                         guint32         time);
-static void gdk_input_win32_ungrab_pointer (guint32 time);
-static void gdk_input_win32_configure_event (GdkEventConfigure *event, 
-                                            GdkWindow         *window);
-static void gdk_input_win32_enter_event (GdkEventCrossing  *xevent, 
-                                        GdkWindow         *window);
-static gint gdk_input_win32_other_event (GdkEvent  *event, 
-                                        MSG       *xevent);
-static gint gdk_input_win32_enable_window (GdkWindow        *window,
-                                          GdkDevicePrivate *gdkdev);
-static gint gdk_input_win32_disable_window (GdkWindow        *window,
-                                           GdkDevicePrivate *gdkdev);
-
-static GdkInputWindow *gdk_input_window_find (GdkWindow *window);
-#if !USE_SYSCONTEXT
-static GdkInputWindow *gdk_input_window_find_within (GdkWindow *window);
-#endif
-static GdkDevicePrivate *gdk_input_find_dev_from_ctx (HCTX hctx,
-                                                     UINT id);
-#endif /* HAVE_WINTAB */
-
-/* Local variables */
-
-static GList     *gdk_input_devices;
-static GList     *gdk_input_windows;
-static GList     *wintab_contexts;
-
-static gint gdk_input_root_width;
-static gint gdk_input_root_height;
-
-static GdkWindow *wintab_window;
-
-static guint32 last_moved_cursor_id;
-
-static GdkAxisUse gdk_input_core_axes[] = { GDK_AXIS_X, GDK_AXIS_Y };
-
-static GdkDeviceInfo gdk_input_core_info =
-{
-  GDK_CORE_POINTER,
-  "Core Pointer",
-  GDK_SOURCE_MOUSE,
-  GDK_MODE_SCREEN,
-  TRUE,
-  2,
-  gdk_input_core_axes
-};
-
-/* Global variables  */
-
-GdkInputVTable    gdk_input_vtable;
-gint              gdk_input_ignore_core;
-gint             gdk_input_ignore_wintab = FALSE;
-
-#if DEBUG_WINTAB
-
-static void
-print_lc(LOGCONTEXT *lc)
-{
-  g_print ("lcName = %s\n", lc->lcName);
-  g_print ("lcOptions =");
-  if (lc->lcOptions & CXO_SYSTEM) g_print (" CXO_SYSTEM");
-  if (lc->lcOptions & CXO_PEN) g_print (" CXO_PEN");
-  if (lc->lcOptions & CXO_MESSAGES) g_print (" CXO_MESSAGES");
-  if (lc->lcOptions & CXO_MARGIN) g_print (" CXO_MARGIN");
-  if (lc->lcOptions & CXO_MGNINSIDE) g_print (" CXO_MGNINSIDE");
-  if (lc->lcOptions & CXO_CSRMESSAGES) g_print (" CXO_CSRMESSAGES");
-  if (lc->lcOptions & CXO_CSRMESSAGES) g_print (" CXO_CSRMESSAGES");
-  g_print ("\n");
-  g_print ("lcStatus =");
-  if (lc->lcStatus & CXS_DISABLED) g_print (" CXS_DISABLED");
-  if (lc->lcStatus & CXS_OBSCURED) g_print (" CXS_OBSCURED");
-  if (lc->lcStatus & CXS_ONTOP) g_print (" CXS_ONTOP");
-  g_print ("\n");
-  g_print ("lcLocks =");
-  if (lc->lcLocks & CXL_INSIZE) g_print (" CXL_INSIZE");
-  if (lc->lcLocks & CXL_INASPECT) g_print (" CXL_INASPECT");
-  if (lc->lcLocks & CXL_SENSITIVITY) g_print (" CXL_SENSITIVITY");
-  if (lc->lcLocks & CXL_MARGIN) g_print (" CXL_MARGIN");
-  g_print ("\n");
-  g_print ("lcMsgBase = %#x, lcDevice = %#x, lcPktRate = %d\n",
-         lc->lcMsgBase, lc->lcDevice, lc->lcPktRate);
-  g_print ("lcPktData =");
-  if (lc->lcPktData & PK_CONTEXT) g_print (" PK_CONTEXT");
-  if (lc->lcPktData & PK_STATUS) g_print (" PK_STATUS");
-  if (lc->lcPktData & PK_TIME) g_print (" PK_TIME");
-  if (lc->lcPktData & PK_CHANGED) g_print (" PK_CHANGED");
-  if (lc->lcPktData & PK_SERIAL_NUMBER) g_print (" PK_SERIAL_NUMBER");
-  if (lc->lcPktData & PK_CURSOR) g_print (" PK_CURSOR");
-  if (lc->lcPktData & PK_BUTTONS) g_print (" PK_BUTTONS");
-  if (lc->lcPktData & PK_X) g_print (" PK_X");
-  if (lc->lcPktData & PK_Y) g_print (" PK_Y");
-  if (lc->lcPktData & PK_Z) g_print (" PK_Z");
-  if (lc->lcPktData & PK_NORMAL_PRESSURE) g_print (" PK_NORMAL_PRESSURE");
-  if (lc->lcPktData & PK_TANGENT_PRESSURE) g_print (" PK_TANGENT_PRESSURE");
-  if (lc->lcPktData & PK_ORIENTATION) g_print (" PK_ORIENTATION");
-  if (lc->lcPktData & PK_ROTATION) g_print (" PK_ROTATION");
-  g_print ("\n");
-  g_print ("lcPktMode =");
-  if (lc->lcPktMode & PK_CONTEXT) g_print (" PK_CONTEXT");
-  if (lc->lcPktMode & PK_STATUS) g_print (" PK_STATUS");
-  if (lc->lcPktMode & PK_TIME) g_print (" PK_TIME");
-  if (lc->lcPktMode & PK_CHANGED) g_print (" PK_CHANGED");
-  if (lc->lcPktMode & PK_SERIAL_NUMBER) g_print (" PK_SERIAL_NUMBER");
-  if (lc->lcPktMode & PK_CURSOR) g_print (" PK_CURSOR");
-  if (lc->lcPktMode & PK_BUTTONS) g_print (" PK_BUTTONS");
-  if (lc->lcPktMode & PK_X) g_print (" PK_X");
-  if (lc->lcPktMode & PK_Y) g_print (" PK_Y");
-  if (lc->lcPktMode & PK_Z) g_print (" PK_Z");
-  if (lc->lcPktMode & PK_NORMAL_PRESSURE) g_print (" PK_NORMAL_PRESSURE");
-  if (lc->lcPktMode & PK_TANGENT_PRESSURE) g_print (" PK_TANGENT_PRESSURE");
-  if (lc->lcPktMode & PK_ORIENTATION) g_print (" PK_ORIENTATION");
-  if (lc->lcPktMode & PK_ROTATION) g_print (" PK_ROTATION");
-  g_print ("\n");
-  g_print ("lcMoveMask =");
-  if (lc->lcMoveMask & PK_CONTEXT) g_print (" PK_CONTEXT");
-  if (lc->lcMoveMask & PK_STATUS) g_print (" PK_STATUS");
-  if (lc->lcMoveMask & PK_TIME) g_print (" PK_TIME");
-  if (lc->lcMoveMask & PK_CHANGED) g_print (" PK_CHANGED");
-  if (lc->lcMoveMask & PK_SERIAL_NUMBER) g_print (" PK_SERIAL_NUMBER");
-  if (lc->lcMoveMask & PK_CURSOR) g_print (" PK_CURSOR");
-  if (lc->lcMoveMask & PK_BUTTONS) g_print (" PK_BUTTONS");
-  if (lc->lcMoveMask & PK_X) g_print (" PK_X");
-  if (lc->lcMoveMask & PK_Y) g_print (" PK_Y");
-  if (lc->lcMoveMask & PK_Z) g_print (" PK_Z");
-  if (lc->lcMoveMask & PK_NORMAL_PRESSURE) g_print (" PK_NORMAL_PRESSURE");
-  if (lc->lcMoveMask & PK_TANGENT_PRESSURE) g_print (" PK_TANGENT_PRESSURE");
-  if (lc->lcMoveMask & PK_ORIENTATION) g_print (" PK_ORIENTATION");
-  if (lc->lcMoveMask & PK_ROTATION) g_print (" PK_ROTATION");
-  g_print ("\n");
-  g_print ("lcBtnDnMask = %#x, lcBtnUpMask = %#x\n",
-         lc->lcBtnDnMask, lc->lcBtnUpMask);
-  g_print ("lcInOrgX = %d, lcInOrgY = %d, lcInOrgZ = %d\n",
-         lc->lcInOrgX, lc->lcInOrgY, lc->lcInOrgZ);
-  g_print ("lcInExtX = %d, lcInExtY = %d, lcInExtZ = %d\n",
-         lc->lcInExtX, lc->lcInExtY, lc->lcInExtZ);
-  g_print ("lcOutOrgX = %d, lcOutOrgY = %d, lcOutOrgZ = %d\n",
-         lc->lcOutOrgX, lc->lcOutOrgY, lc->lcOutOrgZ);
-  g_print ("lcOutExtX = %d, lcOutExtY = %d, lcOutExtZ = %d\n",
-         lc->lcOutExtX, lc->lcOutExtY, lc->lcOutExtZ);
-  g_print ("lcSensX = %g, lcSensY = %g, lcSensZ = %g\n",
-         lc->lcSensX / 65536., lc->lcSensY / 65536., lc->lcSensZ / 65536.);
-  g_print ("lcSysMode = %d\n", lc->lcSysMode);
-  g_print ("lcSysOrgX = %d, lcSysOrgY = %d\n",
-         lc->lcSysOrgX, lc->lcSysOrgY);
-  g_print ("lcSysExtX = %d, lcSysExtY = %d\n",
-         lc->lcSysExtX, lc->lcSysExtY);
-  g_print ("lcSysSensX = %g, lcSysSensY = %g\n",
-         lc->lcSysSensX / 65536., lc->lcSysSensY / 65536.);
-}
-
-#endif
-
-void 
-gdk_input_init (void)
-{
-  guint32 deviceid_counter = 0;
-#ifdef HAVE_WINTAB
-  GdkDevicePrivate *gdkdev;
-  GdkDrawablePrivate *window_private;
-  GdkWindowAttr wa;
-  WORD specversion;
-  LOGCONTEXT defcontext;
-  HCTX *hctx;
-  UINT ndevices, ncursors, ncsrtypes, firstcsr, hardware;
-  BOOL active;
-  AXIS axis_x, axis_y, axis_npressure, axis_or[3];
-  int i, j, k;
-  int devix, cursorix;
-  char devname[100], csrname[100];
-
-  gdk_input_devices = NULL;
-  wintab_contexts = NULL;
-
-  if (!gdk_input_ignore_wintab &&
-      WTInfo (0, 0, NULL))
-    {
-      WTInfo (WTI_INTERFACE, IFC_SPECVERSION, &specversion);
-      GDK_NOTE (MISC, g_print ("Wintab interface version %d.%d\n",
-                              HIBYTE (specversion), LOBYTE (specversion)));
-#if USE_SYSCONTEXT
-      WTInfo (WTI_DEFSYSCTX, 0, &defcontext);
-#if DEBUG_WINTAB
-      GDK_NOTE (MISC, (g_print("DEFSYSCTX:\n"), print_lc(&defcontext)));
-#endif
-#else
-      WTInfo (WTI_DEFCONTEXT, 0, &defcontext);
-#if DEBUG_WINTAB
-      GDK_NOTE (MISC, (g_print("DEFCONTEXT:\n"), print_lc(&defcontext)));
-#endif
-#endif
-      WTInfo (WTI_INTERFACE, IFC_NDEVICES, &ndevices);
-      WTInfo (WTI_INTERFACE, IFC_NCURSORS, &ncursors);
-#if DEBUG_WINTAB
-      GDK_NOTE (MISC, g_print ("NDEVICES: %d, NCURSORS: %d\n",
-                              ndevices, ncursors));
-#endif
-      /* Create a dummy window to receive wintab events */
-      wa.wclass = GDK_INPUT_OUTPUT;
-      wa.event_mask = GDK_ALL_EVENTS_MASK;
-      wa.width = 2;
-      wa.height = 2;
-      wa.x = -100;
-      wa.y = -100;
-      wa.window_type = GDK_WINDOW_TOPLEVEL;
-      if ((wintab_window = gdk_window_new (NULL, &wa, GDK_WA_X|GDK_WA_Y)) == NULL)
-       {
-         g_warning ("gdk_input_init: gdk_window_new failed");
-         return;
-       }
-      gdk_window_ref (wintab_window);
-      window_private = (GdkDrawablePrivate *) wintab_window;
-      
-      for (devix = 0; devix < ndevices; devix++)
-       {
-         LOGCONTEXT lc;
-
-         WTInfo (WTI_DEVICES + devix, DVC_NAME, devname);
-      
-         WTInfo (WTI_DEVICES + devix, DVC_NCSRTYPES, &ncsrtypes);
-         WTInfo (WTI_DEVICES + devix, DVC_FIRSTCSR, &firstcsr);
-         WTInfo (WTI_DEVICES + devix, DVC_HARDWARE, &hardware);
-         WTInfo (WTI_DEVICES + devix, DVC_X, &axis_x);
-         WTInfo (WTI_DEVICES + devix, DVC_Y, &axis_y);
-         WTInfo (WTI_DEVICES + devix, DVC_NPRESSURE, &axis_npressure);
-         WTInfo (WTI_DEVICES + devix, DVC_ORIENTATION, axis_or);
-
-         if (HIBYTE (specversion) > 1 || LOBYTE (specversion) >= 1)
-           {
-             WTInfo (WTI_DDCTXS + devix, CTX_NAME, lc.lcName);
-             WTInfo (WTI_DDCTXS + devix, CTX_OPTIONS, &lc.lcOptions);
-             lc.lcOptions |= CXO_MESSAGES;
-#if USE_SYSCONTEXT
-             lc.lcOptions |= CXO_SYSTEM;
-#endif
-             lc.lcStatus = 0;
-             WTInfo (WTI_DDCTXS + devix, CTX_LOCKS, &lc.lcLocks);
-             lc.lcMsgBase = WT_DEFBASE;
-             lc.lcDevice = devix;
-             lc.lcPktRate = 50;
-             lc.lcPktData = PACKETDATA;
-             lc.lcPktMode = PK_BUTTONS; /* We want buttons in relative mode */
-             lc.lcMoveMask = PACKETDATA;
-             lc.lcBtnDnMask = lc.lcBtnUpMask = ~0;
-             WTInfo (WTI_DDCTXS + devix, CTX_INORGX, &lc.lcInOrgX);
-             WTInfo (WTI_DDCTXS + devix, CTX_INORGY, &lc.lcInOrgY);
-             WTInfo (WTI_DDCTXS + devix, CTX_INORGZ, &lc.lcInOrgZ);
-             WTInfo (WTI_DDCTXS + devix, CTX_INEXTX, &lc.lcInExtX);
-             WTInfo (WTI_DDCTXS + devix, CTX_INEXTY, &lc.lcInExtY);
-             WTInfo (WTI_DDCTXS + devix, CTX_INEXTZ, &lc.lcInExtZ);
-             lc.lcOutOrgX = axis_x.axMin;
-             lc.lcOutOrgY = axis_y.axMin;
-             lc.lcOutExtX = axis_x.axMax - axis_x.axMin;
-             lc.lcOutExtY = axis_y.axMax - axis_y.axMin;
-             lc.lcOutExtY = -lc.lcOutExtY; /* We want Y growing downward */
-             WTInfo (WTI_DDCTXS + devix, CTX_SENSX, &lc.lcSensX);
-             WTInfo (WTI_DDCTXS + devix, CTX_SENSY, &lc.lcSensY);
-             WTInfo (WTI_DDCTXS + devix, CTX_SENSZ, &lc.lcSensZ);
-             WTInfo (WTI_DDCTXS + devix, CTX_SYSMODE, &lc.lcSysMode);
-             lc.lcSysOrgX = lc.lcSysOrgY = 0;
-             WTInfo (WTI_DDCTXS + devix, CTX_SYSEXTX, &lc.lcSysExtX);
-             WTInfo (WTI_DDCTXS + devix, CTX_SYSEXTY, &lc.lcSysExtY);
-             WTInfo (WTI_DDCTXS + devix, CTX_SYSSENSX, &lc.lcSysSensX);
-             WTInfo (WTI_DDCTXS + devix, CTX_SYSSENSY, &lc.lcSysSensY);
-           }
-         else
-           {
-             lc = defcontext;
-             lc.lcOptions |= CXO_MESSAGES;
-             lc.lcMsgBase = WT_DEFBASE;
-             lc.lcPktRate = 50;
-             lc.lcPktData = PACKETDATA;
-             lc.lcPktMode = PACKETMODE;
-             lc.lcMoveMask = PACKETDATA;
-             lc.lcBtnUpMask = lc.lcBtnDnMask = ~0;
-#if 0
-             lc.lcOutExtY = -lc.lcOutExtY; /* Y grows downward */
-#else
-             lc.lcOutOrgX = axis_x.axMin;
-             lc.lcOutOrgY = axis_y.axMin;
-             lc.lcOutExtX = axis_x.axMax - axis_x.axMin;
-             lc.lcOutExtY = axis_y.axMax - axis_y.axMin;
-             lc.lcOutExtY = -lc.lcOutExtY; /* We want Y growing downward */
-#endif
-           }
-#if DEBUG_WINTAB
-         GDK_NOTE (MISC, (g_print("context for device %d:\n", devix),
-                          print_lc(&lc)));
-#endif
-         hctx = g_new (HCTX, 1);
-          if ((*hctx = WTOpen (window_private->xwindow, &lc, TRUE)) == NULL)
-           {
-             g_warning ("gdk_input_init: WTOpen failed");
-             return;
-           }
-         GDK_NOTE (MISC, g_print ("opened Wintab device %d %#x\n",
-                                  devix, *hctx));
-
-         wintab_contexts = g_list_append (wintab_contexts, hctx);
-#if 0
-         WTEnable (*hctx, TRUE);
-#endif
-         WTOverlap (*hctx, TRUE);
-
-#if DEBUG_WINTAB
-         GDK_NOTE (MISC, (g_print("context for device %d after WTOpen:\n", devix),
-                          print_lc(&lc)));
-#endif
-         for (cursorix = firstcsr; cursorix < firstcsr + ncsrtypes; cursorix++)
-           {
-             active = FALSE;
-             WTInfo (WTI_CURSORS + cursorix, CSR_ACTIVE, &active);
-             if (!active)
-               continue;
-             gdkdev = g_new (GdkDevicePrivate, 1);
-             WTInfo (WTI_CURSORS + cursorix, CSR_NAME, csrname);
-             gdkdev->info.name = g_strconcat (devname, " ", csrname, NULL);
-             gdkdev->info.deviceid = deviceid_counter++;
-             gdkdev->info.source = GDK_SOURCE_PEN;
-             gdkdev->info.mode = GDK_MODE_SCREEN;
-#if USE_SYSCONTEXT
-             gdkdev->info.has_cursor = TRUE;
-#else
-             gdkdev->info.has_cursor = FALSE;
-#endif
-             gdkdev->hctx = *hctx;
-             gdkdev->cursor = cursorix;
-             WTInfo (WTI_CURSORS + cursorix, CSR_PKTDATA, &gdkdev->pktdata);
-             gdkdev->info.num_axes = 0;
-             if (gdkdev->pktdata & PK_X)
-               gdkdev->info.num_axes++;
-             if (gdkdev->pktdata & PK_Y)
-               gdkdev->info.num_axes++;
-             if (gdkdev->pktdata & PK_NORMAL_PRESSURE)
-               gdkdev->info.num_axes++;
-             /* The wintab driver for the Wacom ArtPad II reports
-              * PK_ORIENTATION in CSR_PKTDATA, but the tablet doesn't
-              * actually sense tilt. Catch this by noticing that the
-              * orientation axis's azimuth resolution is zero.
-              */
-             if ((gdkdev->pktdata & PK_ORIENTATION)
-                 && axis_or[0].axResolution == 0)
-               gdkdev->pktdata &= ~PK_ORIENTATION;
-
-             if (gdkdev->pktdata & PK_ORIENTATION)
-               gdkdev->info.num_axes += 2; /* x and y tilt */
-             WTInfo (WTI_CURSORS + cursorix, CSR_NPBTNMARKS, &gdkdev->npbtnmarks);
-             gdkdev->axes = g_new (GdkAxisInfo, gdkdev->info.num_axes);
-             gdkdev->info.axes = g_new (GdkAxisUse, gdkdev->info.num_axes);
-             gdkdev->last_axis_data = g_new (gint, gdkdev->info.num_axes);
-             
-             for (k = 0; k < GDK_AXIS_LAST; k++)
-               gdkdev->axis_for_use[k] = -1;
-
-             k = 0;
-             if (gdkdev->pktdata & PK_X)
-               {
-                 gdkdev->axes[k].xresolution =
-                   gdkdev->axes[k].resolution = axis_x.axResolution / 65535.;
-                 gdkdev->axes[k].xmin_value =
-                   gdkdev->axes[k].min_value = axis_x.axMin;
-                 gdkdev->axes[k].xmax_value =
-                   gdkdev->axes[k].max_value = axis_x.axMax;
-                 gdkdev->info.axes[k] = GDK_AXIS_X;
-                 gdkdev->axis_for_use[GDK_AXIS_X] = k;
-                 k++;
-               }
-             if (gdkdev->pktdata & PK_Y)
-               {
-                 gdkdev->axes[k].xresolution =
-                   gdkdev->axes[k].resolution = axis_y.axResolution / 65535.;
-                 gdkdev->axes[k].xmin_value =
-                   gdkdev->axes[k].min_value = axis_y.axMin;
-                 gdkdev->axes[k].xmax_value =
-                   gdkdev->axes[k].max_value = axis_y.axMax;
-                 gdkdev->info.axes[k] = GDK_AXIS_Y;
-                 gdkdev->axis_for_use[GDK_AXIS_Y] = k;
-                 k++;
-               }
-             if (gdkdev->pktdata & PK_NORMAL_PRESSURE)
-               {
-                 gdkdev->axes[k].xresolution =
-                   gdkdev->axes[k].resolution = axis_npressure.axResolution / 65535.;
-                 gdkdev->axes[k].xmin_value =
-                   gdkdev->axes[k].min_value = axis_npressure.axMin;
-                 gdkdev->axes[k].xmax_value =
-                   gdkdev->axes[k].max_value = axis_npressure.axMax;
-                 gdkdev->info.axes[k] = GDK_AXIS_PRESSURE;
-                 gdkdev->axis_for_use[GDK_AXIS_PRESSURE] = k;
-                 k++;
-               }
-             if (gdkdev->pktdata & PK_ORIENTATION)
-               {
-                 GdkAxisUse axis;
-
-                 gdkdev->orientation_axes[0] = axis_or[0];
-                 gdkdev->orientation_axes[1] = axis_or[1];
-                 for (axis = GDK_AXIS_XTILT; axis <= GDK_AXIS_YTILT; axis++)
-                   {
-                     /* Wintab gives us aximuth and altitude, which
-                      * we convert to x and y tilt in the -1000..1000 range
-                      */
-                     gdkdev->axes[k].xresolution =
-                       gdkdev->axes[k].resolution = 1000;
-                     gdkdev->axes[k].xmin_value =
-                       gdkdev->axes[k].min_value = -1000;
-                     gdkdev->axes[k].xmax_value =
-                       gdkdev->axes[k].max_value = 1000;
-                     gdkdev->info.axes[k] = axis;
-                     gdkdev->axis_for_use[axis] = k;
-                     k++;
-                   }
-               }
-             gdkdev->info.num_keys = 0;
-             gdkdev->info.keys = NULL;
-             GDK_NOTE (EVENTS,
-                       (g_print ("device: %d (%d) %s axes: %d\n",
-                                 gdkdev->info.deviceid, cursorix,
-                                 gdkdev->info.name,
-                                 gdkdev->info.num_axes),
-                        g_print ("axes: X:%d, Y:%d, PRESSURE:%d, "
-                                 "XTILT:%d, YTILT:%d\n",
-                                 gdkdev->axis_for_use[GDK_AXIS_X],
-                                 gdkdev->axis_for_use[GDK_AXIS_Y],
-                                 gdkdev->axis_for_use[GDK_AXIS_PRESSURE],
-                                 gdkdev->axis_for_use[GDK_AXIS_XTILT],
-                                 gdkdev->axis_for_use[GDK_AXIS_YTILT])));
-             for (i = 0; i < gdkdev->info.num_axes; i++)
-               GDK_NOTE (EVENTS,
-                         g_print ("...axis %d: %d--%d@%d (%d--%d@%d)\n",
-                                  i,
-                                  gdkdev->axes[i].xmin_value, 
-                                  gdkdev->axes[i].xmax_value, 
-                                  gdkdev->axes[i].xresolution, 
-                                  gdkdev->axes[i].min_value, 
-                                  gdkdev->axes[i].max_value, 
-                                  gdkdev->axes[i].resolution));
-             gdk_input_devices = g_list_append (gdk_input_devices,
-                                                gdkdev);
-           }
-       }
-    }
-#endif /* HAVE_WINTAB */
-
-  if (deviceid_counter > 0)
-    {
-#ifdef HAVE_WINTAB
-      gdk_input_vtable.set_mode           = gdk_input_win32_set_mode;
-      gdk_input_vtable.set_axes           = NULL;
-      gdk_input_vtable.set_key            = NULL;
-      gdk_input_vtable.motion_events      = NULL;
-      gdk_input_vtable.get_pointer       = gdk_input_win32_get_pointer;
-      gdk_input_vtable.grab_pointer      = gdk_input_win32_grab_pointer;
-      gdk_input_vtable.ungrab_pointer     = gdk_input_win32_ungrab_pointer;
-      gdk_input_vtable.configure_event    = gdk_input_win32_configure_event;
-      gdk_input_vtable.enter_event        = gdk_input_win32_enter_event;
-      gdk_input_vtable.other_event        = gdk_input_win32_other_event;
-      gdk_input_vtable.enable_window      = gdk_input_win32_enable_window;
-      gdk_input_vtable.disable_window     = gdk_input_win32_disable_window;
-
-      gdk_input_root_width = gdk_screen_width ();
-      gdk_input_root_height = gdk_screen_height ();
-      gdk_input_ignore_core = FALSE;
-#else
-      g_assert_not_reached ();
-#endif
-    }
-  else
-    {
-      gdk_input_vtable.set_mode           = NULL;
-      gdk_input_vtable.set_axes           = NULL;
-      gdk_input_vtable.set_key            = NULL;
-      gdk_input_vtable.motion_events      = NULL;
-      gdk_input_vtable.get_pointer       = gdk_input_none_get_pointer;
-      gdk_input_vtable.grab_pointer      = NULL;
-      gdk_input_vtable.ungrab_pointer     = NULL;
-      gdk_input_vtable.configure_event    = NULL;
-      gdk_input_vtable.enter_event        = NULL;
-      gdk_input_vtable.other_event        = NULL;
-      gdk_input_vtable.enable_window      = NULL;
-      gdk_input_vtable.disable_window     = NULL;
-      gdk_input_ignore_core = FALSE;
-    }
-  
-  gdk_input_devices = g_list_append (gdk_input_devices, &gdk_input_core_info);
-}
-
-gint
-gdk_input_set_mode (guint32      deviceid,
-                   GdkInputMode mode)
-{
-  if (deviceid == GDK_CORE_POINTER)
-    return FALSE;
-
-  if (gdk_input_vtable.set_mode)
-    return gdk_input_vtable.set_mode (deviceid, mode);
-  else
-    return FALSE;
-}
-
-void
-gdk_input_set_axes (guint32     deviceid,
-                   GdkAxisUse *axes)
-{
-  int i;
-  GdkDevicePrivate *gdkdev = gdk_input_find_device (deviceid);
-  g_return_if_fail (gdkdev != NULL);
-
-  if (deviceid == GDK_CORE_POINTER)
-    return;
-
-  for (i = GDK_AXIS_IGNORE; i < GDK_AXIS_LAST; i++)
-    {
-      gdkdev->axis_for_use[i] = -1;
-    }
-
-  for (i = 0; i < gdkdev->info.num_axes; i++)
-    {
-      gdkdev->info.axes[i] = axes[i];
-      gdkdev->axis_for_use[axes[i]] = i;
-    }
-}
-
-static void
-gdk_input_none_get_pointer (GdkWindow       *window,
-                           guint32          deviceid,
-                           gdouble         *x,
-                           gdouble         *y,
-                           gdouble         *pressure,
-                           gdouble         *xtilt,
-                           gdouble         *ytilt,
-                           GdkModifierType *mask)
-{
-  gint x_int, y_int;
-
-  gdk_window_get_pointer (window, &x_int, &y_int, mask);
-
-  if (x)
-    *x = x_int;
-  if (y)
-    *y = y_int;
-  if (pressure)
-    *pressure = 0.5;
-  if (xtilt)
-    *xtilt = 0;
-  if (ytilt)
-    *ytilt = 0;
-}
-
-#ifdef HAVE_WINTAB
-
-static void
-gdk_input_translate_coordinates (GdkDevicePrivate *gdkdev,
-                                GdkInputWindow   *input_window,
-                                gint             *axis_data,
-                                gdouble          *x,
-                                gdouble          *y,
-                                gdouble          *pressure,
-                                gdouble          *xtilt,
-                                gdouble          *ytilt)
-{
-  GdkDrawablePrivate *window_private;
-  gint x_axis, y_axis, pressure_axis, xtilt_axis, ytilt_axis;
-  gdouble device_width, device_height;
-  gdouble x_offset, y_offset, x_scale, y_scale;
-
-  window_private = (GdkDrawablePrivate *) input_window->window;
-
-  x_axis = gdkdev->axis_for_use[GDK_AXIS_X];
-  y_axis = gdkdev->axis_for_use[GDK_AXIS_Y];
-  pressure_axis = gdkdev->axis_for_use[GDK_AXIS_PRESSURE];
-  xtilt_axis = gdkdev->axis_for_use[GDK_AXIS_XTILT];
-  ytilt_axis = gdkdev->axis_for_use[GDK_AXIS_YTILT];
-
-  device_width = gdkdev->axes[x_axis].max_value - 
-                  gdkdev->axes[x_axis].min_value;
-  device_height = gdkdev->axes[y_axis].max_value - 
-                    gdkdev->axes[y_axis].min_value;
-
-  if (gdkdev->info.mode == GDK_MODE_SCREEN) 
-    {
-      x_scale = gdk_input_root_width / device_width;
-      y_scale = gdk_input_root_height / device_height;
-
-      x_offset = -input_window->root_x;
-      y_offset = -input_window->root_y;
-    }
-  else                         /* GDK_MODE_WINDOW */
-    {
-      double device_aspect = (device_height*gdkdev->axes[y_axis].resolution) /
-       (device_width*gdkdev->axes[x_axis].resolution);
-
-      if (device_aspect * window_private->width >= window_private->height)
-       {
-         /* device taller than window */
-         x_scale = window_private->width / device_width;
-         y_scale = (x_scale * gdkdev->axes[x_axis].resolution)
-           / gdkdev->axes[y_axis].resolution;
-
-         x_offset = 0;
-         y_offset = -(device_height * y_scale - 
-                              window_private->height)/2;
-       }
-      else
-       {
-         /* window taller than device */
-         y_scale = window_private->height / device_height;
-         x_scale = (y_scale * gdkdev->axes[y_axis].resolution)
-           / gdkdev->axes[x_axis].resolution;
-
-         y_offset = 0;
-         x_offset = -(device_width * x_scale - window_private->width)/2;
-       }
-    }
-  
-  if (x)
-    *x = x_offset + x_scale*axis_data[x_axis];
-  if (y)
-    *y = y_offset + y_scale*axis_data[y_axis];
-
-  if (pressure)
-    {
-      if (pressure_axis != -1)
-       *pressure = ((double)axis_data[pressure_axis] 
-                    - gdkdev->axes[pressure_axis].min_value) 
-         / (gdkdev->axes[pressure_axis].max_value 
-            - gdkdev->axes[pressure_axis].min_value);
-      else
-       *pressure = 0.5;
-    }
-
-  if (xtilt)
-    {
-      if (xtilt_axis != -1)
-       {
-         *xtilt = 2. * (double)(axis_data[xtilt_axis] - 
-                                (gdkdev->axes[xtilt_axis].min_value +
-                                 gdkdev->axes[xtilt_axis].max_value)/2) /
-           (gdkdev->axes[xtilt_axis].max_value -
-            gdkdev->axes[xtilt_axis].min_value);
-       }
-      else
-       *xtilt = 0;
-    }
-  
-  if (ytilt)
-    {
-      if (ytilt_axis != -1)
-       {
-         *ytilt = 2. * (double)(axis_data[ytilt_axis] - 
-                                (gdkdev->axes[ytilt_axis].min_value +
-                                 gdkdev->axes[ytilt_axis].max_value)/2) /
-           (gdkdev->axes[ytilt_axis].max_value -
-            gdkdev->axes[ytilt_axis].min_value);
-       }
-      else
-       *ytilt = 0;
-    }
-}
-
-static void 
-gdk_input_win32_get_pointer (GdkWindow       *window,
-                            guint32          deviceid,
-                            gdouble         *x,
-                            gdouble         *y,
-                            gdouble         *pressure,
-                            gdouble         *xtilt,
-                            gdouble         *ytilt,
-                            GdkModifierType *mask)
-{
-  GdkDevicePrivate *gdkdev;
-  GdkInputWindow *input_window;
-  gint x_int, y_int;
-  gint i;
-
-  if (deviceid == GDK_CORE_POINTER)
-    {
-      gdk_window_get_pointer (window, &x_int, &y_int, mask);
-      if (x)
-       *x = x_int;
-      if (y)
-       *y = y_int;
-      if (pressure)
-       *pressure = 0.5;
-      if (xtilt)
-       *xtilt = 0;
-      if (ytilt)
-       *ytilt = 0;
-    }
-  else
-    {
-      if (mask)
-       gdk_window_get_pointer (window, NULL, NULL, mask);
-      
-      gdkdev = gdk_input_find_device (deviceid);
-      g_return_if_fail (gdkdev != NULL);
-
-      input_window = gdk_input_window_find (window);
-      g_return_if_fail (input_window != NULL);
-
-      gdk_input_translate_coordinates (gdkdev, input_window,
-                                      gdkdev->last_axis_data,
-                                      x, y, pressure,
-                                      xtilt, ytilt);
-      if (mask)
-       {
-         *mask &= 0xFF;
-         *mask |= ((gdkdev->last_buttons & 0x1F) << 8);
-       }
-    }
-}
-
-static void
-gdk_input_get_root_relative_geometry (HWND w,
-                                     int  *x_ret,
-                                     int  *y_ret)
-{
-  RECT rect;
-
-  GetWindowRect (w, &rect);
-
-  if (x_ret)
-    *x_ret = rect.left;
-  if (y_ret)
-    *y_ret = rect.top;
-}
-
-static gint
-gdk_input_win32_set_mode (guint32      deviceid,
-                         GdkInputMode mode)
-{
-  GList *tmp_list;
-  GdkDevicePrivate *gdkdev;
-  GdkInputMode old_mode;
-  GdkInputWindow *input_window;
-
-  if (deviceid == GDK_CORE_POINTER)
-    return FALSE;
-
-  gdkdev = gdk_input_find_device (deviceid);
-  g_return_val_if_fail (gdkdev != NULL, FALSE);
-  old_mode = gdkdev->info.mode;
-
-  if (old_mode == mode)
-    return TRUE;
-
-  gdkdev->info.mode = mode;
-
-  if (mode == GDK_MODE_WINDOW)
-    {
-      gdkdev->info.has_cursor = FALSE;
-      for (tmp_list = gdk_input_windows; tmp_list; tmp_list = tmp_list->next)
-       {
-         input_window = (GdkInputWindow *)tmp_list->data;
-         if (input_window->mode != GDK_EXTENSION_EVENTS_CURSOR)
-           gdk_input_win32_enable_window (input_window->window, gdkdev);
-         else
-           if (old_mode != GDK_MODE_DISABLED)
-             gdk_input_win32_disable_window (input_window->window, gdkdev);
-       }
-    }
-  else if (mode == GDK_MODE_SCREEN)
-    {
-      gdkdev->info.has_cursor = TRUE;
-      for (tmp_list = gdk_input_windows; tmp_list; tmp_list = tmp_list->next)
-       gdk_input_win32_enable_window (((GdkInputWindow *)tmp_list->data)->window,
-                                      gdkdev);
-    }
-  else  /* mode == GDK_MODE_DISABLED */
-    {
-      for (tmp_list = gdk_input_windows; tmp_list; tmp_list = tmp_list->next)
-       {
-         input_window = (GdkInputWindow *)tmp_list->data;
-         if (old_mode != GDK_MODE_WINDOW ||
-             input_window->mode != GDK_EXTENSION_EVENTS_CURSOR)
-           gdk_input_win32_disable_window (input_window->window, gdkdev);
-       }
-    }
-
-  return TRUE;
-}
-
-static void
-gdk_input_win32_configure_event (GdkEventConfigure *event,
-                                GdkWindow         *window)
-{
-  GdkInputWindow *input_window;
-  gint root_x, root_y;
-
-  input_window = gdk_input_window_find (window);
-  g_return_if_fail (window != NULL);
-
-  gdk_input_get_root_relative_geometry
-    (GDK_DRAWABLE_XID (window), &root_x, &root_y);
-
-  input_window->root_x = root_x;
-  input_window->root_y = root_y;
-}
-
-static void 
-gdk_input_win32_enter_event (GdkEventCrossing *event, 
-                            GdkWindow        *window)
-{
-  GdkInputWindow *input_window;
-  gint root_x, root_y;
-
-  input_window = gdk_input_window_find (window);
-  g_return_if_fail (window != NULL);
-
-  gdk_input_get_root_relative_geometry
-    (GDK_DRAWABLE_XID (window), &root_x, &root_y);
-
-  input_window->root_x = root_x;
-  input_window->root_y = root_y;
-}
-
-static void
-decode_tilt (gint   *axis_data,
-            AXIS   *axes,
-            PACKET *packet)
-{
-  /* As I don't have a tilt-sensing tablet,
-   * I cannot test this code.
-   */
-  
-  double az, el;
-
-  az = TWOPI * packet->pkOrientation.orAzimuth /
-    (axes[0].axResolution / 65536.);
-  el = TWOPI * packet->pkOrientation.orAltitude /
-    (axes[1].axResolution / 65536.);
-  
-  /* X tilt */
-  axis_data[0] = cos (az) * cos (el) * 1000;
-  /* Y tilt */
-  axis_data[1] = sin (az) * cos (el) * 1000;
-}
-
-static GdkDevicePrivate *
-gdk_input_find_dev_from_ctx (HCTX hctx,
-                            UINT cursor)
-{
-  GList *tmp_list = gdk_input_devices;
-  GdkDevicePrivate *gdkdev;
-
-  while (tmp_list)
-    {
-      gdkdev = (GdkDevicePrivate *) (tmp_list->data);
-      if (gdkdev->hctx == hctx && gdkdev->cursor == cursor)
-       return gdkdev;
-      tmp_list = tmp_list->next;
-    }
-  return NULL;
-}
-static gint 
-gdk_input_win32_other_event (GdkEvent  *event,
-                            MSG       *xevent)
-{
-  GdkWindow *current_window;
-  GdkInputWindow *input_window;
-  GdkWindow *window;
-  GdkWindowPrivate *window_private;
-  GdkDevicePrivate *gdkdev;
-  GdkEventMask masktest;
-  POINT pt;
-  PACKET packet;
-  gint return_val;
-  gint k;
-  gint x, y;
-
-  if (event->any.window != wintab_window)
-    g_warning ("gdk_input_win32_other_event: not wintab_window?");
-
-#if USE_SYSCONTEXT
-  window = gdk_window_at_pointer (&x, &y);
-  if (window == NULL)
-    window = (GdkWindow *) gdk_root_parent;
-
-  gdk_window_ref (window);
-
-  window_private = (GdkWindowPrivate *) window;
-
-  GDK_NOTE (EVENTS,
-           g_print ("gdk_input_win32_other_event: window=%#x (%d,%d)\n",
-                    GDK_DRAWABLE_XID (window), x, y));
-  
-#else
-  /* ??? This code is pretty bogus */
-  current_window = gdk_window_lookup (GetActiveWindow ());
-  if (current_window == NULL)
-    return FALSE;
-  
-  input_window = gdk_input_window_find_within (current_window);
-  if (input_window == NULL)
-    return FALSE;
-#endif
-
-  if (xevent->message == WT_PACKET)
-    {
-      if (!WTPacket ((HCTX) xevent->lParam, xevent->wParam, &packet))
-       return FALSE;
-    }
-
-  switch (xevent->message)
-    {
-    case WT_PACKET:
-      if (window_private == gdk_root_parent)
-       {
-         GDK_NOTE (EVENTS, g_print ("...is root\n"));
-         return FALSE;
-       }
-
-      if ((gdkdev = gdk_input_find_dev_from_ctx ((HCTX) xevent->lParam,
-                                                packet.pkCursor)) == NULL)
-       return FALSE;
-
-      if (gdkdev->info.mode == GDK_MODE_DISABLED)
-       return FALSE;
-      
-      k = 0;
-      if (gdkdev->pktdata & PK_X)
-       gdkdev->last_axis_data[k++] = packet.pkX;
-      if (gdkdev->pktdata & PK_Y)
-       gdkdev->last_axis_data[k++] = packet.pkY;
-      if (gdkdev->pktdata & PK_NORMAL_PRESSURE)
-       gdkdev->last_axis_data[k++] = packet.pkNormalPressure;
-      if (gdkdev->pktdata & PK_ORIENTATION)
-       {
-         decode_tilt (gdkdev->last_axis_data + k,
-                      gdkdev->orientation_axes, &packet);
-         k += 2;
-       }
-
-      g_assert (k == gdkdev->info.num_axes);
-
-      if (HIWORD (packet.pkButtons) != TBN_NONE)
-       {
-         /* Gdk buttons are numbered 1.. */
-         event->button.button = 1 + LOWORD (packet.pkButtons);
-
-         if (HIWORD (packet.pkButtons) == TBN_UP)
-           {
-             event->any.type = GDK_BUTTON_RELEASE;
-             masktest = GDK_BUTTON_RELEASE_MASK;
-             gdkdev->button_state &= ~(1 << LOWORD (packet.pkButtons));
-           }
-         else
-           {
-             event->any.type = GDK_BUTTON_PRESS;
-             masktest = GDK_BUTTON_PRESS_MASK;
-             gdkdev->button_state |= 1 << LOWORD (packet.pkButtons);
-           }
-       }
-      else
-       {
-         event->any.type = GDK_MOTION_NOTIFY;
-         masktest = GDK_POINTER_MOTION_MASK;
-         if (gdkdev->button_state & (1 << 0))
-           masktest |= GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK;
-         if (gdkdev->button_state & (1 << 1))
-           masktest |= GDK_BUTTON_MOTION_MASK | GDK_BUTTON2_MOTION_MASK;
-         if (gdkdev->button_state & (1 << 2))
-           masktest |= GDK_BUTTON_MOTION_MASK | GDK_BUTTON3_MOTION_MASK;
-       }
-
-      /* Now we can check if the window wants the event, and
-       * propagate if necessary.
-       */
-    dijkstra:
-      if (!window_private->extension_events_selected
-         || !(window_private->extension_events & masktest))
-       {
-         GDK_NOTE (EVENTS, g_print ("...not selected\n"));
-
-         if (window_private->parent == (GdkWindow *) gdk_root_parent)
-           return FALSE;
-         
-         pt.x = x;
-         pt.y = y;
-         ClientToScreen (GDK_DRAWABLE_XID (window), &pt);
-         gdk_window_unref (window);
-         window = window_private->parent;
-         gdk_window_ref (window);
-         window_private = (GdkWindowPrivate *) window;
-         ScreenToClient (GDK_DRAWABLE_XID (window), &pt);
-         x = pt.x;
-         y = pt.y;
-         GDK_NOTE (EVENTS, g_print ("...propagating to %#x, (%d,%d)\n",
-                                    GDK_DRAWABLE_XID (window), x, y));
-         goto dijkstra;
-       }
-
-      input_window = gdk_input_window_find (window);
-
-      g_assert (input_window != NULL);
-
-      if (gdkdev->info.mode == GDK_MODE_WINDOW
-         && input_window->mode == GDK_EXTENSION_EVENTS_CURSOR)
-       return FALSE;
-
-      event->any.window = window;
-
-      if (event->any.type == GDK_BUTTON_PRESS
-         || event->any.type == GDK_BUTTON_RELEASE)
-       {
-         event->button.time = xevent->time;
-         event->button.source = gdkdev->info.source;
-         last_moved_cursor_id = 
-           event->button.deviceid = gdkdev->info.deviceid;
-         
-#if 0
-#if USE_SYSCONTEXT
-         /* Buttons 1 to 3 will come in as WM_[LMR]BUTTON{DOWN,UP} */
-         if (event->button.button <= 3)
-           return FALSE;
-#endif
-#endif
-         gdk_input_translate_coordinates (gdkdev, input_window,
-                                          gdkdev->last_axis_data,
-                                          &event->button.x, &event->button.y,
-                                          &event->button.pressure,
-                                          &event->button.xtilt, 
-                                          &event->button.ytilt);
-
-         event->button.state = ((gdkdev->button_state << 8)
-                                & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK
-                                   | GDK_BUTTON3_MASK | GDK_BUTTON4_MASK
-                                   | GDK_BUTTON5_MASK));
-         GDK_NOTE (EVENTS, g_print ("WINTAB button %s: %d %d %g,%g %g %g,%g\n",
-                                    (event->button.type == GDK_BUTTON_PRESS ?
-                                     "press" : "release"),
-                                    event->button.deviceid,
-                                    event->button.button,
-                                    event->button.x, event->button.y,
-                                    event->button.pressure,
-                                    event->button.xtilt, event->button.ytilt));
-       }
-      else
-       {
-         event->motion.time = xevent->time;
-         last_moved_cursor_id =
-           event->motion.deviceid = gdkdev->info.deviceid;
-         event->motion.is_hint = FALSE;
-         event->motion.source = gdkdev->info.source;
-
-         gdk_input_translate_coordinates (gdkdev, input_window,
-                                          gdkdev->last_axis_data,
-                                          &event->motion.x, &event->motion.y,
-                                          &event->motion.pressure,
-                                          &event->motion.xtilt, 
-                                          &event->motion.ytilt);
-
-         event->motion.state = ((gdkdev->button_state << 8)
-                                & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK
-                                   | GDK_BUTTON3_MASK | GDK_BUTTON4_MASK
-                                   | GDK_BUTTON5_MASK));
-
-         GDK_NOTE (EVENTS, g_print ("WINTAB motion: %d %g,%g %g %g,%g\n",
-                                    event->motion.deviceid,
-                                    event->motion.x, event->motion.y,
-                                    event->motion.pressure,
-                                    event->motion.xtilt, event->motion.ytilt));
-
-         /* Check for missing release or press events for the normal
-          * pressure button. At least on my ArtPadII I sometimes miss a
-          * release event?
-          */
-         if ((gdkdev->pktdata & PK_NORMAL_PRESSURE
-              && (event->motion.state & GDK_BUTTON1_MASK)
-              && packet.pkNormalPressure <= MAX (0, gdkdev->npbtnmarks[0] - 2))
-             || (gdkdev->pktdata & PK_NORMAL_PRESSURE
-                 && !(event->motion.state & GDK_BUTTON1_MASK)
-                 && packet.pkNormalPressure > gdkdev->npbtnmarks[1] + 2))
-           {
-             GdkEvent *event2 = gdk_event_copy (event);
-             if (event->motion.state & GDK_BUTTON1_MASK)
-               {
-                 event2->button.type = GDK_BUTTON_RELEASE;
-                 gdkdev->button_state &= ~1;
-               }
-             else
-               {
-                 event2->button.type = GDK_BUTTON_PRESS;
-                 gdkdev->button_state |= 1;
-               }
-             event2->button.state = ((gdkdev->button_state << 8)
-                                     & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK
-                                        | GDK_BUTTON3_MASK | GDK_BUTTON4_MASK
-                                        | GDK_BUTTON5_MASK));
-             event2->button.button = 1;
-             GDK_NOTE (EVENTS, g_print ("WINTAB synthesized button %s: %d %d %g,%g %g\n",
-                                        (event2->button.type == GDK_BUTTON_PRESS ?
-                                         "press" : "release"),
-                                        event2->button.deviceid,
-                                        event2->button.button,
-                                        event2->button.x, event2->button.y,
-                                        event2->button.pressure));
-             gdk_event_queue_append (event2);
-           }
-       }
-      return TRUE;
-
-    case WT_PROXIMITY:
-      if (LOWORD (xevent->lParam) == 0)
-       {
-         event->proximity.type = GDK_PROXIMITY_OUT;
-         gdk_input_ignore_core = FALSE;
-       }
-      else
-       {
-         event->proximity.type = GDK_PROXIMITY_IN;
-         gdk_input_ignore_core = TRUE;
-       }
-      event->proximity.time = xevent->time;
-      event->proximity.source = GDK_SOURCE_PEN;
-      event->proximity.deviceid = last_moved_cursor_id;
-
-      GDK_NOTE (EVENTS, g_print ("WINTAB proximity %s: %d\n",
-                                (event->proximity.type == GDK_PROXIMITY_IN ?
-                                 "in" : "out"),
-                                event->proximity.deviceid));
-      return TRUE;
-    }
-  return FALSE;
-}
-
-static gint
-gdk_input_win32_enable_window (GdkWindow        *window,
-                              GdkDevicePrivate *gdkdev)
-{
-  GdkWindowPrivate *window_private = (GdkWindowPrivate *) window;
-
-  window_private->extension_events_selected = TRUE;
-  return TRUE;
-}
-
-static gint
-gdk_input_win32_disable_window (GdkWindow        *window,
-                               GdkDevicePrivate *gdkdev)
-{
-  GdkWindowPrivate *window_private = (GdkWindowPrivate *) window;
-
-  window_private->extension_events_selected = FALSE;
-  return TRUE;
-}
-
-static gint
-gdk_input_win32_grab_pointer (GdkWindow    *window,
-                             gint          owner_events,
-                             GdkEventMask  event_mask,
-                             GdkWindow    *confine_to,
-                             guint32       time)
-{
-  GdkInputWindow *input_window, *new_window;
-  gboolean need_ungrab;
-  GdkDevicePrivate *gdkdev;
-  GList *tmp_list;
-  gint result;
-
-  tmp_list = gdk_input_windows;
-  new_window = NULL;
-  need_ungrab = FALSE;
-
-  GDK_NOTE (MISC, g_print ("gdk_input_win32_grab_pointer: %#x %d %#x\n",
-                          GDK_DRAWABLE_XID (window),
-                          owner_events,
-                          (confine_to ? GDK_DRAWABLE_XID (confine_to) : 0)));
-
-  while (tmp_list)
-    {
-      input_window = (GdkInputWindow *)tmp_list->data;
-
-      if (input_window->window == window)
-       new_window = input_window;
-      else if (input_window->grabbed)
-       {
-         input_window->grabbed = FALSE;
-         need_ungrab = TRUE;
-       }
-
-      tmp_list = tmp_list->next;
-    }
-
-  if (new_window)
-    {
-      new_window->grabbed = TRUE;
-      
-      tmp_list = gdk_input_devices;
-      while (tmp_list)
-       {
-         gdkdev = (GdkDevicePrivate *)tmp_list->data;
-         if (gdkdev->info.deviceid != GDK_CORE_POINTER)
-           {
-#if 0        
-             /* XXX */
-             gdk_input_find_events (window, gdkdev,
-                                    event_mask,
-                                    event_classes, &num_classes);
-             result = XGrabDevice (GDK_DISPLAY(), gdkdev->xdevice,
-                                   GDK_WINDOW_XWINDOW (window),
-                                   owner_events, num_classes, event_classes,
-                                   GrabModeAsync, GrabModeAsync, time);
-             
-             /* FIXME: if failure occurs on something other than the first
-                device, things will be badly inconsistent */
-             if (result != Success)
-               return result;
-#endif
-           }
-         tmp_list = tmp_list->next;
-       }
-    }
-  else
-    { 
-      tmp_list = gdk_input_devices;
-      while (tmp_list)
-       {
-         gdkdev = (GdkDevicePrivate *)tmp_list->data;
-         if (gdkdev->info.deviceid != GDK_CORE_POINTER && 
-             ((gdkdev->button_state != 0) || need_ungrab))
-           {
-#if 0
-             /* XXX */
-             XUngrabDevice (gdk_display, gdkdev->xdevice, time);
-#endif
-             gdkdev->button_state = 0;
-           }
-         
-         tmp_list = tmp_list->next;
-       }
-    }
-
-  return Success;
-      
-}
-
-static void 
-gdk_input_win32_ungrab_pointer (guint32 time)
-{
-  GdkInputWindow *input_window;
-  GdkDevicePrivate *gdkdev;
-  GList *tmp_list;
-
-  GDK_NOTE (MISC, g_print ("gdk_input_win32_ungrab_pointer\n"));
-
-  tmp_list = gdk_input_windows;
-  while (tmp_list)
-    {
-      input_window = (GdkInputWindow *)tmp_list->data;
-      if (input_window->grabbed)
-       break;
-      tmp_list = tmp_list->next;
-    }
-
-  if (tmp_list)                        /* we found a grabbed window */
-    {
-      input_window->grabbed = FALSE;
-
-      tmp_list = gdk_input_devices;
-      while (tmp_list)
-       {
-         gdkdev = (GdkDevicePrivate *)tmp_list->data;
-#if 0
-         /* XXX */
-         if (gdkdev->info.deviceid != GDK_CORE_POINTER && gdkdev->xdevice)
-           XUngrabDevice (gdk_display, gdkdev->xdevice, time);
-#endif
-         tmp_list = tmp_list->next;
-       }
-    }
-}
-
-#endif /* HAVE_WINTAB */
-
-GList *
-gdk_input_list_devices (void)
-{
-  return gdk_input_devices;
-}
-
-void
-gdk_input_set_source (guint32        deviceid,
-                     GdkInputSource source)
-{
-  GdkDevicePrivate *gdkdev = gdk_input_find_device (deviceid);
-  g_return_if_fail (gdkdev != NULL);
-
-  gdkdev->info.source = source;
-}
-
-void gdk_input_set_key (guint32 deviceid,
-                       guint   index,
-                       guint   keyval,
-                       GdkModifierType modifiers)
-{
-  if (deviceid != GDK_CORE_POINTER && gdk_input_vtable.set_key)
-    gdk_input_vtable.set_key (deviceid, index, keyval, modifiers);
-}
-
-GdkTimeCoord *
-gdk_input_motion_events (GdkWindow *window,
-                        guint32    deviceid,
-                        guint32    start,
-                        guint32    stop,
-                        gint      *nevents_return)
-{
-  g_return_val_if_fail (window != NULL, NULL);
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-
-  *nevents_return = 0;
-  return NULL;         /* ??? */
-}
-
-static gint
-gdk_input_enable_window (GdkWindow *window, GdkDevicePrivate *gdkdev)
-{
-  if (gdk_input_vtable.enable_window)
-    return gdk_input_vtable.enable_window (window, gdkdev);
-  else
-    return TRUE;
-}
-
-static gint
-gdk_input_disable_window (GdkWindow *window, GdkDevicePrivate *gdkdev)
-{
-  if (gdk_input_vtable.disable_window)
-    return gdk_input_vtable.disable_window(window,gdkdev);
-  else
-    return TRUE;
-}
-
-
-static GdkInputWindow *
-gdk_input_window_find (GdkWindow *window)
-{
-  GList *tmp_list;
-
-  for (tmp_list=gdk_input_windows; tmp_list; tmp_list=tmp_list->next)
-    if (((GdkInputWindow *)(tmp_list->data))->window == window)
-      return (GdkInputWindow *)(tmp_list->data);
-
-  return NULL;      /* Not found */
-}
-
-#if !USE_SYSCONTEXT
-
-static GdkInputWindow *
-gdk_input_window_find_within (GdkWindow *window)
-{
-  GList *tmp_list;
-  GdkWindowPrivate *window_private;
-  GdkWindowPrivate *tmp_private;
-  GdkInputWindow *candidate = NULL;
-
-  window_private = (GdkWindowPrivate *) window;
-
-  for (tmp_list=gdk_input_windows; tmp_list; tmp_list=tmp_list->next)
-    {
-      (GdkWindowPrivate *) tmp_private =
-       (GdkWindowPrivate *) (((GdkInputWindow *)(tmp_list->data))->window);
-      if (tmp_private == window_private
-         || IsChild (window_private->xwindow, tmp_private->xwindow))
-       {
-         if (candidate)
-           return NULL;                /* Multiple hits */
-         candidate = (GdkInputWindow *)(tmp_list->data);
-       }
-    }
-
-  return candidate;
-}
-
-#endif
-
-/* FIXME: this routine currently needs to be called between creation
-   and the corresponding configure event (because it doesn't get the
-   root_relative_geometry).  This should work with
-   gtk_window_set_extension_events, but will likely fail in other
-   cases */
-
-void
-gdk_input_set_extension_events (GdkWindow       *window,
-                               gint             mask,
-                               GdkExtensionMode mode)
-{
-  GdkWindowPrivate *window_private;
-  GList *tmp_list;
-  GdkInputWindow *iw;
-
-  g_return_if_fail (window != NULL);
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-  window_private = (GdkWindowPrivate *) window;
-
-  if (mode == GDK_EXTENSION_EVENTS_NONE)
-    mask = 0;
-
-  if (mask != 0)
-    {
-      iw = g_new (GdkInputWindow,1);
-
-      iw->window = window;
-      iw->mode = mode;
-
-      iw->grabbed = FALSE;
-
-      gdk_input_windows = g_list_append (gdk_input_windows, iw);
-      window_private->extension_events = mask;
-
-      /* Add enter window events to the event mask */
-      gdk_window_set_events (window,
-                            gdk_window_get_events (window) | 
-                            GDK_ENTER_NOTIFY_MASK);
-    }
-  else
-    {
-      iw = gdk_input_window_find (window);
-      if (iw)
-       {
-         gdk_input_windows = g_list_remove (gdk_input_windows, iw);
-         g_free (iw);
-       }
-
-      window_private->extension_events = 0;
-    }
-
-  for (tmp_list = gdk_input_devices; tmp_list; tmp_list = tmp_list->next)
-    {
-      GdkDevicePrivate *gdkdev = (GdkDevicePrivate *)(tmp_list->data);
-
-      if (gdkdev->info.deviceid != GDK_CORE_POINTER)
-       {
-         if (mask != 0 && gdkdev->info.mode != GDK_MODE_DISABLED
-             && (gdkdev->info.has_cursor || mode == GDK_EXTENSION_EVENTS_ALL))
-           gdk_input_enable_window (window, gdkdev);
-         else
-           gdk_input_disable_window (window, gdkdev);
-       }
-    }
-}
-
-void
-gdk_input_window_destroy (GdkWindow *window)
-{
-  GdkInputWindow *input_window;
-
-  input_window = gdk_input_window_find (window);
-  g_return_if_fail (input_window != NULL);
-
-  gdk_input_windows = g_list_remove (gdk_input_windows,input_window);
-  g_free (input_window);
-}
-
-void
-gdk_input_exit (void)
-{
-#ifdef HAVE_WINTAB
-  GList *tmp_list;
-  GdkDevicePrivate *gdkdev;
-
-  for (tmp_list = gdk_input_devices; tmp_list; tmp_list = tmp_list->next)
-    {
-      gdkdev = (GdkDevicePrivate *)(tmp_list->data);
-      if (gdkdev->info.deviceid != GDK_CORE_POINTER)
-       {
-         gdk_input_win32_set_mode (gdkdev->info.deviceid, GDK_MODE_DISABLED);
-         g_free (gdkdev->info.name);
-         g_free (gdkdev->last_axis_data);
-         g_free (gdkdev->info.axes);
-         g_free (gdkdev->info.keys);
-         g_free (gdkdev->axes);
-         g_free (gdkdev);
-       }
-    }
-
-  g_list_free (gdk_input_devices);
-
-  for (tmp_list = gdk_input_windows; tmp_list; tmp_list = tmp_list->next)
-    {
-      g_free (tmp_list->data);
-    }
-  g_list_free (gdk_input_windows);
-  gdk_input_windows = NULL;
-
-  gdk_window_unref (wintab_window);
-  wintab_window = NULL;
-
-#if 1
-  for (tmp_list = wintab_contexts; tmp_list; tmp_list = tmp_list->next)
-    {
-      HCTX *hctx = (HCTX *) tmp_list->data;
-      BOOL result;
-
-#ifdef _MSC_VER
-      /* For some reason WTEnable and/or WTClose tend to crash here.
-       * Protect with __try/__except to avoid a message box.
-       * When compiling with gcc, we cannot use __try/__except, so
-       * don't call WTClose. I think this means that we'll
-       * eventually run out of Wintab contexts, sigh.
-       */
-      __try {
-#if 0
-        WTEnable (*hctx, FALSE);
-#endif
-       result = WTClose (*hctx);
-      }
-      __except (/* GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ? */
-                EXCEPTION_EXECUTE_HANDLER /*: 
-                EXCEPTION_CONTINUE_SEARCH */) {
-       result = FALSE;
-      }
-      if (!result)
-       g_warning ("gdk_input_exit: Closing Wintab context %#x failed", *hctx);
-#endif /* _MSC_VER */
-      g_free (hctx);
-    }
-#endif
-  g_list_free (wintab_contexts);
-  wintab_contexts = NULL;
-#endif
-}
-
-static GdkDevicePrivate *
-gdk_input_find_device (guint32 id)
-{
-  GList *tmp_list = gdk_input_devices;
-  GdkDevicePrivate *gdkdev;
-
-  while (tmp_list)
-    {
-      gdkdev = (GdkDevicePrivate *) (tmp_list->data);
-      if (gdkdev->info.deviceid == id)
-       return gdkdev;
-      tmp_list = tmp_list->next;
-    }
-  return NULL;
-}
-
-void
-gdk_input_window_get_pointer (GdkWindow       *window,
-                             guint32          deviceid,
-                             gdouble         *x,
-                             gdouble         *y,
-                             gdouble         *pressure,
-                             gdouble         *xtilt,
-                             gdouble         *ytilt,
-                             GdkModifierType *mask)
-{
-  if (gdk_input_vtable.get_pointer)
-    gdk_input_vtable.get_pointer (window, deviceid, x, y, pressure,
-                                 xtilt, ytilt, mask);
-}
diff --git a/gdk/win32/gdkinput.c b/gdk/win32/gdkinput.c
deleted file mode 100644 (file)
index 2335e98..0000000
+++ /dev/null
@@ -1,1685 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <math.h>
-
-#include "gdk.h"
-#include "gdkinput.h"
-#include "gdkprivate.h"
-#include "gdkx.h"
-
-#ifdef HAVE_WINTAB
-#include <wintab.h>
-#define PACKETDATA (PK_CONTEXT | PK_CURSOR | PK_BUTTONS | PK_X | PK_Y  | PK_NORMAL_PRESSURE | PK_ORIENTATION)
-#define PACKETMODE (PK_BUTTONS)
-#include <pktdef.h>
-#endif
-
-#include "gdkinputprivate.h"
-
-struct _GdkDevicePrivate {
-  GdkDeviceInfo  info;
-
-  /* information about the axes */
-  GdkAxisInfo *axes;
-
-  /* reverse lookup on axis use type */
-  gint axis_for_use[GDK_AXIS_LAST];
-  
-  /* true if we need to select a different set of events, but
-   * can't because this is the core pointer
-   */
-  gint needs_update;
-
-  /* State of buttons */
-  gint button_state;
-
-  gint *last_axis_data;
-  gint last_buttons;
-#ifdef HAVE_WINTAB
-  /* WINTAB stuff: */
-  HCTX hctx;
-  /* Cursor number */
-  UINT cursor;
-  /* The cursor's CSR_PKTDATA */
-  WTPKT pktdata;
-  /* CSR_NPBTNMARKS */
-  UINT npbtnmarks[2];
-  /* Azimuth and altitude axis */
-  AXIS orientation_axes[2];
-#endif
-};
-
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif
-
-/* If USE_SYSCONTEXT is on, we open the Wintab device (hmm, what if
- * there are several?) as a system pointing device, i.e. it controls
- * the normal Windows cursor. This seems much more natural.
- */
-#define USE_SYSCONTEXT 1       /* The code for the other choice is not
-                                * good at all.
-                                */
-
-#ifdef HAVE_WINTAB
-#define DEBUG_WINTAB 1
-#endif
-
-#define TWOPI (2.*M_PI)
-
-#define PING() g_print("%s: %d\n",__FILE__,__LINE__)
-
-/* Forward declarations */
-
-static gint gdk_input_enable_window (GdkWindow *window,
-                                    GdkDevicePrivate *gdkdev);
-static gint gdk_input_disable_window (GdkWindow *window,
-                                     GdkDevicePrivate *gdkdev);
-static void gdk_input_none_get_pointer (GdkWindow       *window,
-                                       guint32          deviceid,
-                                       gdouble         *x,
-                                       gdouble         *y,
-                                       gdouble         *pressure,
-                                       gdouble         *xtilt,
-                                       gdouble         *ytilt,
-                                       GdkModifierType *mask);
-
-static GdkDevicePrivate *gdk_input_find_device (guint32 deviceid);
-
-#ifdef HAVE_WINTAB
-
-static gint gdk_input_win32_set_mode (guint32      deviceid,
-                                     GdkInputMode mode);
-static void gdk_input_win32_get_pointer (GdkWindow       *window,
-                                        guint32            deviceid,
-                                        gdouble         *x,
-                                        gdouble         *y,
-                                        gdouble         *pressure,
-                                        gdouble         *xtilt,
-                                        gdouble         *ytilt,
-                                        GdkModifierType *mask);
-static gint gdk_input_win32_grab_pointer (GdkWindow *     window,
-                                         gint            owner_events,
-                                         GdkEventMask    event_mask,
-                                         GdkWindow      *confine_to,
-                                         guint32         time);
-static void gdk_input_win32_ungrab_pointer (guint32 time);
-static void gdk_input_win32_configure_event (GdkEventConfigure *event, 
-                                            GdkWindow         *window);
-static void gdk_input_win32_enter_event (GdkEventCrossing  *xevent, 
-                                        GdkWindow         *window);
-static gint gdk_input_win32_other_event (GdkEvent  *event, 
-                                        MSG       *xevent);
-static gint gdk_input_win32_enable_window (GdkWindow        *window,
-                                          GdkDevicePrivate *gdkdev);
-static gint gdk_input_win32_disable_window (GdkWindow        *window,
-                                           GdkDevicePrivate *gdkdev);
-
-static GdkInputWindow *gdk_input_window_find (GdkWindow *window);
-#if !USE_SYSCONTEXT
-static GdkInputWindow *gdk_input_window_find_within (GdkWindow *window);
-#endif
-static GdkDevicePrivate *gdk_input_find_dev_from_ctx (HCTX hctx,
-                                                     UINT id);
-#endif /* HAVE_WINTAB */
-
-/* Local variables */
-
-static GList     *gdk_input_devices;
-static GList     *gdk_input_windows;
-static GList     *wintab_contexts;
-
-static gint gdk_input_root_width;
-static gint gdk_input_root_height;
-
-static GdkWindow *wintab_window;
-
-static guint32 last_moved_cursor_id;
-
-static GdkAxisUse gdk_input_core_axes[] = { GDK_AXIS_X, GDK_AXIS_Y };
-
-static GdkDeviceInfo gdk_input_core_info =
-{
-  GDK_CORE_POINTER,
-  "Core Pointer",
-  GDK_SOURCE_MOUSE,
-  GDK_MODE_SCREEN,
-  TRUE,
-  2,
-  gdk_input_core_axes
-};
-
-/* Global variables  */
-
-GdkInputVTable    gdk_input_vtable;
-gint              gdk_input_ignore_core;
-gint             gdk_input_ignore_wintab = FALSE;
-
-#if DEBUG_WINTAB
-
-static void
-print_lc(LOGCONTEXT *lc)
-{
-  g_print ("lcName = %s\n", lc->lcName);
-  g_print ("lcOptions =");
-  if (lc->lcOptions & CXO_SYSTEM) g_print (" CXO_SYSTEM");
-  if (lc->lcOptions & CXO_PEN) g_print (" CXO_PEN");
-  if (lc->lcOptions & CXO_MESSAGES) g_print (" CXO_MESSAGES");
-  if (lc->lcOptions & CXO_MARGIN) g_print (" CXO_MARGIN");
-  if (lc->lcOptions & CXO_MGNINSIDE) g_print (" CXO_MGNINSIDE");
-  if (lc->lcOptions & CXO_CSRMESSAGES) g_print (" CXO_CSRMESSAGES");
-  if (lc->lcOptions & CXO_CSRMESSAGES) g_print (" CXO_CSRMESSAGES");
-  g_print ("\n");
-  g_print ("lcStatus =");
-  if (lc->lcStatus & CXS_DISABLED) g_print (" CXS_DISABLED");
-  if (lc->lcStatus & CXS_OBSCURED) g_print (" CXS_OBSCURED");
-  if (lc->lcStatus & CXS_ONTOP) g_print (" CXS_ONTOP");
-  g_print ("\n");
-  g_print ("lcLocks =");
-  if (lc->lcLocks & CXL_INSIZE) g_print (" CXL_INSIZE");
-  if (lc->lcLocks & CXL_INASPECT) g_print (" CXL_INASPECT");
-  if (lc->lcLocks & CXL_SENSITIVITY) g_print (" CXL_SENSITIVITY");
-  if (lc->lcLocks & CXL_MARGIN) g_print (" CXL_MARGIN");
-  g_print ("\n");
-  g_print ("lcMsgBase = %#x, lcDevice = %#x, lcPktRate = %d\n",
-         lc->lcMsgBase, lc->lcDevice, lc->lcPktRate);
-  g_print ("lcPktData =");
-  if (lc->lcPktData & PK_CONTEXT) g_print (" PK_CONTEXT");
-  if (lc->lcPktData & PK_STATUS) g_print (" PK_STATUS");
-  if (lc->lcPktData & PK_TIME) g_print (" PK_TIME");
-  if (lc->lcPktData & PK_CHANGED) g_print (" PK_CHANGED");
-  if (lc->lcPktData & PK_SERIAL_NUMBER) g_print (" PK_SERIAL_NUMBER");
-  if (lc->lcPktData & PK_CURSOR) g_print (" PK_CURSOR");
-  if (lc->lcPktData & PK_BUTTONS) g_print (" PK_BUTTONS");
-  if (lc->lcPktData & PK_X) g_print (" PK_X");
-  if (lc->lcPktData & PK_Y) g_print (" PK_Y");
-  if (lc->lcPktData & PK_Z) g_print (" PK_Z");
-  if (lc->lcPktData & PK_NORMAL_PRESSURE) g_print (" PK_NORMAL_PRESSURE");
-  if (lc->lcPktData & PK_TANGENT_PRESSURE) g_print (" PK_TANGENT_PRESSURE");
-  if (lc->lcPktData & PK_ORIENTATION) g_print (" PK_ORIENTATION");
-  if (lc->lcPktData & PK_ROTATION) g_print (" PK_ROTATION");
-  g_print ("\n");
-  g_print ("lcPktMode =");
-  if (lc->lcPktMode & PK_CONTEXT) g_print (" PK_CONTEXT");
-  if (lc->lcPktMode & PK_STATUS) g_print (" PK_STATUS");
-  if (lc->lcPktMode & PK_TIME) g_print (" PK_TIME");
-  if (lc->lcPktMode & PK_CHANGED) g_print (" PK_CHANGED");
-  if (lc->lcPktMode & PK_SERIAL_NUMBER) g_print (" PK_SERIAL_NUMBER");
-  if (lc->lcPktMode & PK_CURSOR) g_print (" PK_CURSOR");
-  if (lc->lcPktMode & PK_BUTTONS) g_print (" PK_BUTTONS");
-  if (lc->lcPktMode & PK_X) g_print (" PK_X");
-  if (lc->lcPktMode & PK_Y) g_print (" PK_Y");
-  if (lc->lcPktMode & PK_Z) g_print (" PK_Z");
-  if (lc->lcPktMode & PK_NORMAL_PRESSURE) g_print (" PK_NORMAL_PRESSURE");
-  if (lc->lcPktMode & PK_TANGENT_PRESSURE) g_print (" PK_TANGENT_PRESSURE");
-  if (lc->lcPktMode & PK_ORIENTATION) g_print (" PK_ORIENTATION");
-  if (lc->lcPktMode & PK_ROTATION) g_print (" PK_ROTATION");
-  g_print ("\n");
-  g_print ("lcMoveMask =");
-  if (lc->lcMoveMask & PK_CONTEXT) g_print (" PK_CONTEXT");
-  if (lc->lcMoveMask & PK_STATUS) g_print (" PK_STATUS");
-  if (lc->lcMoveMask & PK_TIME) g_print (" PK_TIME");
-  if (lc->lcMoveMask & PK_CHANGED) g_print (" PK_CHANGED");
-  if (lc->lcMoveMask & PK_SERIAL_NUMBER) g_print (" PK_SERIAL_NUMBER");
-  if (lc->lcMoveMask & PK_CURSOR) g_print (" PK_CURSOR");
-  if (lc->lcMoveMask & PK_BUTTONS) g_print (" PK_BUTTONS");
-  if (lc->lcMoveMask & PK_X) g_print (" PK_X");
-  if (lc->lcMoveMask & PK_Y) g_print (" PK_Y");
-  if (lc->lcMoveMask & PK_Z) g_print (" PK_Z");
-  if (lc->lcMoveMask & PK_NORMAL_PRESSURE) g_print (" PK_NORMAL_PRESSURE");
-  if (lc->lcMoveMask & PK_TANGENT_PRESSURE) g_print (" PK_TANGENT_PRESSURE");
-  if (lc->lcMoveMask & PK_ORIENTATION) g_print (" PK_ORIENTATION");
-  if (lc->lcMoveMask & PK_ROTATION) g_print (" PK_ROTATION");
-  g_print ("\n");
-  g_print ("lcBtnDnMask = %#x, lcBtnUpMask = %#x\n",
-         lc->lcBtnDnMask, lc->lcBtnUpMask);
-  g_print ("lcInOrgX = %d, lcInOrgY = %d, lcInOrgZ = %d\n",
-         lc->lcInOrgX, lc->lcInOrgY, lc->lcInOrgZ);
-  g_print ("lcInExtX = %d, lcInExtY = %d, lcInExtZ = %d\n",
-         lc->lcInExtX, lc->lcInExtY, lc->lcInExtZ);
-  g_print ("lcOutOrgX = %d, lcOutOrgY = %d, lcOutOrgZ = %d\n",
-         lc->lcOutOrgX, lc->lcOutOrgY, lc->lcOutOrgZ);
-  g_print ("lcOutExtX = %d, lcOutExtY = %d, lcOutExtZ = %d\n",
-         lc->lcOutExtX, lc->lcOutExtY, lc->lcOutExtZ);
-  g_print ("lcSensX = %g, lcSensY = %g, lcSensZ = %g\n",
-         lc->lcSensX / 65536., lc->lcSensY / 65536., lc->lcSensZ / 65536.);
-  g_print ("lcSysMode = %d\n", lc->lcSysMode);
-  g_print ("lcSysOrgX = %d, lcSysOrgY = %d\n",
-         lc->lcSysOrgX, lc->lcSysOrgY);
-  g_print ("lcSysExtX = %d, lcSysExtY = %d\n",
-         lc->lcSysExtX, lc->lcSysExtY);
-  g_print ("lcSysSensX = %g, lcSysSensY = %g\n",
-         lc->lcSysSensX / 65536., lc->lcSysSensY / 65536.);
-}
-
-#endif
-
-void 
-gdk_input_init (void)
-{
-  guint32 deviceid_counter = 0;
-#ifdef HAVE_WINTAB
-  GdkDevicePrivate *gdkdev;
-  GdkDrawablePrivate *window_private;
-  GdkWindowAttr wa;
-  WORD specversion;
-  LOGCONTEXT defcontext;
-  HCTX *hctx;
-  UINT ndevices, ncursors, ncsrtypes, firstcsr, hardware;
-  BOOL active;
-  AXIS axis_x, axis_y, axis_npressure, axis_or[3];
-  int i, j, k;
-  int devix, cursorix;
-  char devname[100], csrname[100];
-
-  gdk_input_devices = NULL;
-  wintab_contexts = NULL;
-
-  if (!gdk_input_ignore_wintab &&
-      WTInfo (0, 0, NULL))
-    {
-      WTInfo (WTI_INTERFACE, IFC_SPECVERSION, &specversion);
-      GDK_NOTE (MISC, g_print ("Wintab interface version %d.%d\n",
-                              HIBYTE (specversion), LOBYTE (specversion)));
-#if USE_SYSCONTEXT
-      WTInfo (WTI_DEFSYSCTX, 0, &defcontext);
-#if DEBUG_WINTAB
-      GDK_NOTE (MISC, (g_print("DEFSYSCTX:\n"), print_lc(&defcontext)));
-#endif
-#else
-      WTInfo (WTI_DEFCONTEXT, 0, &defcontext);
-#if DEBUG_WINTAB
-      GDK_NOTE (MISC, (g_print("DEFCONTEXT:\n"), print_lc(&defcontext)));
-#endif
-#endif
-      WTInfo (WTI_INTERFACE, IFC_NDEVICES, &ndevices);
-      WTInfo (WTI_INTERFACE, IFC_NCURSORS, &ncursors);
-#if DEBUG_WINTAB
-      GDK_NOTE (MISC, g_print ("NDEVICES: %d, NCURSORS: %d\n",
-                              ndevices, ncursors));
-#endif
-      /* Create a dummy window to receive wintab events */
-      wa.wclass = GDK_INPUT_OUTPUT;
-      wa.event_mask = GDK_ALL_EVENTS_MASK;
-      wa.width = 2;
-      wa.height = 2;
-      wa.x = -100;
-      wa.y = -100;
-      wa.window_type = GDK_WINDOW_TOPLEVEL;
-      if ((wintab_window = gdk_window_new (NULL, &wa, GDK_WA_X|GDK_WA_Y)) == NULL)
-       {
-         g_warning ("gdk_input_init: gdk_window_new failed");
-         return;
-       }
-      gdk_window_ref (wintab_window);
-      window_private = (GdkDrawablePrivate *) wintab_window;
-      
-      for (devix = 0; devix < ndevices; devix++)
-       {
-         LOGCONTEXT lc;
-
-         WTInfo (WTI_DEVICES + devix, DVC_NAME, devname);
-      
-         WTInfo (WTI_DEVICES + devix, DVC_NCSRTYPES, &ncsrtypes);
-         WTInfo (WTI_DEVICES + devix, DVC_FIRSTCSR, &firstcsr);
-         WTInfo (WTI_DEVICES + devix, DVC_HARDWARE, &hardware);
-         WTInfo (WTI_DEVICES + devix, DVC_X, &axis_x);
-         WTInfo (WTI_DEVICES + devix, DVC_Y, &axis_y);
-         WTInfo (WTI_DEVICES + devix, DVC_NPRESSURE, &axis_npressure);
-         WTInfo (WTI_DEVICES + devix, DVC_ORIENTATION, axis_or);
-
-         if (HIBYTE (specversion) > 1 || LOBYTE (specversion) >= 1)
-           {
-             WTInfo (WTI_DDCTXS + devix, CTX_NAME, lc.lcName);
-             WTInfo (WTI_DDCTXS + devix, CTX_OPTIONS, &lc.lcOptions);
-             lc.lcOptions |= CXO_MESSAGES;
-#if USE_SYSCONTEXT
-             lc.lcOptions |= CXO_SYSTEM;
-#endif
-             lc.lcStatus = 0;
-             WTInfo (WTI_DDCTXS + devix, CTX_LOCKS, &lc.lcLocks);
-             lc.lcMsgBase = WT_DEFBASE;
-             lc.lcDevice = devix;
-             lc.lcPktRate = 50;
-             lc.lcPktData = PACKETDATA;
-             lc.lcPktMode = PK_BUTTONS; /* We want buttons in relative mode */
-             lc.lcMoveMask = PACKETDATA;
-             lc.lcBtnDnMask = lc.lcBtnUpMask = ~0;
-             WTInfo (WTI_DDCTXS + devix, CTX_INORGX, &lc.lcInOrgX);
-             WTInfo (WTI_DDCTXS + devix, CTX_INORGY, &lc.lcInOrgY);
-             WTInfo (WTI_DDCTXS + devix, CTX_INORGZ, &lc.lcInOrgZ);
-             WTInfo (WTI_DDCTXS + devix, CTX_INEXTX, &lc.lcInExtX);
-             WTInfo (WTI_DDCTXS + devix, CTX_INEXTY, &lc.lcInExtY);
-             WTInfo (WTI_DDCTXS + devix, CTX_INEXTZ, &lc.lcInExtZ);
-             lc.lcOutOrgX = axis_x.axMin;
-             lc.lcOutOrgY = axis_y.axMin;
-             lc.lcOutExtX = axis_x.axMax - axis_x.axMin;
-             lc.lcOutExtY = axis_y.axMax - axis_y.axMin;
-             lc.lcOutExtY = -lc.lcOutExtY; /* We want Y growing downward */
-             WTInfo (WTI_DDCTXS + devix, CTX_SENSX, &lc.lcSensX);
-             WTInfo (WTI_DDCTXS + devix, CTX_SENSY, &lc.lcSensY);
-             WTInfo (WTI_DDCTXS + devix, CTX_SENSZ, &lc.lcSensZ);
-             WTInfo (WTI_DDCTXS + devix, CTX_SYSMODE, &lc.lcSysMode);
-             lc.lcSysOrgX = lc.lcSysOrgY = 0;
-             WTInfo (WTI_DDCTXS + devix, CTX_SYSEXTX, &lc.lcSysExtX);
-             WTInfo (WTI_DDCTXS + devix, CTX_SYSEXTY, &lc.lcSysExtY);
-             WTInfo (WTI_DDCTXS + devix, CTX_SYSSENSX, &lc.lcSysSensX);
-             WTInfo (WTI_DDCTXS + devix, CTX_SYSSENSY, &lc.lcSysSensY);
-           }
-         else
-           {
-             lc = defcontext;
-             lc.lcOptions |= CXO_MESSAGES;
-             lc.lcMsgBase = WT_DEFBASE;
-             lc.lcPktRate = 50;
-             lc.lcPktData = PACKETDATA;
-             lc.lcPktMode = PACKETMODE;
-             lc.lcMoveMask = PACKETDATA;
-             lc.lcBtnUpMask = lc.lcBtnDnMask = ~0;
-#if 0
-             lc.lcOutExtY = -lc.lcOutExtY; /* Y grows downward */
-#else
-             lc.lcOutOrgX = axis_x.axMin;
-             lc.lcOutOrgY = axis_y.axMin;
-             lc.lcOutExtX = axis_x.axMax - axis_x.axMin;
-             lc.lcOutExtY = axis_y.axMax - axis_y.axMin;
-             lc.lcOutExtY = -lc.lcOutExtY; /* We want Y growing downward */
-#endif
-           }
-#if DEBUG_WINTAB
-         GDK_NOTE (MISC, (g_print("context for device %d:\n", devix),
-                          print_lc(&lc)));
-#endif
-         hctx = g_new (HCTX, 1);
-          if ((*hctx = WTOpen (window_private->xwindow, &lc, TRUE)) == NULL)
-           {
-             g_warning ("gdk_input_init: WTOpen failed");
-             return;
-           }
-         GDK_NOTE (MISC, g_print ("opened Wintab device %d %#x\n",
-                                  devix, *hctx));
-
-         wintab_contexts = g_list_append (wintab_contexts, hctx);
-#if 0
-         WTEnable (*hctx, TRUE);
-#endif
-         WTOverlap (*hctx, TRUE);
-
-#if DEBUG_WINTAB
-         GDK_NOTE (MISC, (g_print("context for device %d after WTOpen:\n", devix),
-                          print_lc(&lc)));
-#endif
-         for (cursorix = firstcsr; cursorix < firstcsr + ncsrtypes; cursorix++)
-           {
-             active = FALSE;
-             WTInfo (WTI_CURSORS + cursorix, CSR_ACTIVE, &active);
-             if (!active)
-               continue;
-             gdkdev = g_new (GdkDevicePrivate, 1);
-             WTInfo (WTI_CURSORS + cursorix, CSR_NAME, csrname);
-             gdkdev->info.name = g_strconcat (devname, " ", csrname, NULL);
-             gdkdev->info.deviceid = deviceid_counter++;
-             gdkdev->info.source = GDK_SOURCE_PEN;
-             gdkdev->info.mode = GDK_MODE_SCREEN;
-#if USE_SYSCONTEXT
-             gdkdev->info.has_cursor = TRUE;
-#else
-             gdkdev->info.has_cursor = FALSE;
-#endif
-             gdkdev->hctx = *hctx;
-             gdkdev->cursor = cursorix;
-             WTInfo (WTI_CURSORS + cursorix, CSR_PKTDATA, &gdkdev->pktdata);
-             gdkdev->info.num_axes = 0;
-             if (gdkdev->pktdata & PK_X)
-               gdkdev->info.num_axes++;
-             if (gdkdev->pktdata & PK_Y)
-               gdkdev->info.num_axes++;
-             if (gdkdev->pktdata & PK_NORMAL_PRESSURE)
-               gdkdev->info.num_axes++;
-             /* The wintab driver for the Wacom ArtPad II reports
-              * PK_ORIENTATION in CSR_PKTDATA, but the tablet doesn't
-              * actually sense tilt. Catch this by noticing that the
-              * orientation axis's azimuth resolution is zero.
-              */
-             if ((gdkdev->pktdata & PK_ORIENTATION)
-                 && axis_or[0].axResolution == 0)
-               gdkdev->pktdata &= ~PK_ORIENTATION;
-
-             if (gdkdev->pktdata & PK_ORIENTATION)
-               gdkdev->info.num_axes += 2; /* x and y tilt */
-             WTInfo (WTI_CURSORS + cursorix, CSR_NPBTNMARKS, &gdkdev->npbtnmarks);
-             gdkdev->axes = g_new (GdkAxisInfo, gdkdev->info.num_axes);
-             gdkdev->info.axes = g_new (GdkAxisUse, gdkdev->info.num_axes);
-             gdkdev->last_axis_data = g_new (gint, gdkdev->info.num_axes);
-             
-             for (k = 0; k < GDK_AXIS_LAST; k++)
-               gdkdev->axis_for_use[k] = -1;
-
-             k = 0;
-             if (gdkdev->pktdata & PK_X)
-               {
-                 gdkdev->axes[k].xresolution =
-                   gdkdev->axes[k].resolution = axis_x.axResolution / 65535.;
-                 gdkdev->axes[k].xmin_value =
-                   gdkdev->axes[k].min_value = axis_x.axMin;
-                 gdkdev->axes[k].xmax_value =
-                   gdkdev->axes[k].max_value = axis_x.axMax;
-                 gdkdev->info.axes[k] = GDK_AXIS_X;
-                 gdkdev->axis_for_use[GDK_AXIS_X] = k;
-                 k++;
-               }
-             if (gdkdev->pktdata & PK_Y)
-               {
-                 gdkdev->axes[k].xresolution =
-                   gdkdev->axes[k].resolution = axis_y.axResolution / 65535.;
-                 gdkdev->axes[k].xmin_value =
-                   gdkdev->axes[k].min_value = axis_y.axMin;
-                 gdkdev->axes[k].xmax_value =
-                   gdkdev->axes[k].max_value = axis_y.axMax;
-                 gdkdev->info.axes[k] = GDK_AXIS_Y;
-                 gdkdev->axis_for_use[GDK_AXIS_Y] = k;
-                 k++;
-               }
-             if (gdkdev->pktdata & PK_NORMAL_PRESSURE)
-               {
-                 gdkdev->axes[k].xresolution =
-                   gdkdev->axes[k].resolution = axis_npressure.axResolution / 65535.;
-                 gdkdev->axes[k].xmin_value =
-                   gdkdev->axes[k].min_value = axis_npressure.axMin;
-                 gdkdev->axes[k].xmax_value =
-                   gdkdev->axes[k].max_value = axis_npressure.axMax;
-                 gdkdev->info.axes[k] = GDK_AXIS_PRESSURE;
-                 gdkdev->axis_for_use[GDK_AXIS_PRESSURE] = k;
-                 k++;
-               }
-             if (gdkdev->pktdata & PK_ORIENTATION)
-               {
-                 GdkAxisUse axis;
-
-                 gdkdev->orientation_axes[0] = axis_or[0];
-                 gdkdev->orientation_axes[1] = axis_or[1];
-                 for (axis = GDK_AXIS_XTILT; axis <= GDK_AXIS_YTILT; axis++)
-                   {
-                     /* Wintab gives us aximuth and altitude, which
-                      * we convert to x and y tilt in the -1000..1000 range
-                      */
-                     gdkdev->axes[k].xresolution =
-                       gdkdev->axes[k].resolution = 1000;
-                     gdkdev->axes[k].xmin_value =
-                       gdkdev->axes[k].min_value = -1000;
-                     gdkdev->axes[k].xmax_value =
-                       gdkdev->axes[k].max_value = 1000;
-                     gdkdev->info.axes[k] = axis;
-                     gdkdev->axis_for_use[axis] = k;
-                     k++;
-                   }
-               }
-             gdkdev->info.num_keys = 0;
-             gdkdev->info.keys = NULL;
-             GDK_NOTE (EVENTS,
-                       (g_print ("device: %d (%d) %s axes: %d\n",
-                                 gdkdev->info.deviceid, cursorix,
-                                 gdkdev->info.name,
-                                 gdkdev->info.num_axes),
-                        g_print ("axes: X:%d, Y:%d, PRESSURE:%d, "
-                                 "XTILT:%d, YTILT:%d\n",
-                                 gdkdev->axis_for_use[GDK_AXIS_X],
-                                 gdkdev->axis_for_use[GDK_AXIS_Y],
-                                 gdkdev->axis_for_use[GDK_AXIS_PRESSURE],
-                                 gdkdev->axis_for_use[GDK_AXIS_XTILT],
-                                 gdkdev->axis_for_use[GDK_AXIS_YTILT])));
-             for (i = 0; i < gdkdev->info.num_axes; i++)
-               GDK_NOTE (EVENTS,
-                         g_print ("...axis %d: %d--%d@%d (%d--%d@%d)\n",
-                                  i,
-                                  gdkdev->axes[i].xmin_value, 
-                                  gdkdev->axes[i].xmax_value, 
-                                  gdkdev->axes[i].xresolution, 
-                                  gdkdev->axes[i].min_value, 
-                                  gdkdev->axes[i].max_value, 
-                                  gdkdev->axes[i].resolution));
-             gdk_input_devices = g_list_append (gdk_input_devices,
-                                                gdkdev);
-           }
-       }
-    }
-#endif /* HAVE_WINTAB */
-
-  if (deviceid_counter > 0)
-    {
-#ifdef HAVE_WINTAB
-      gdk_input_vtable.set_mode           = gdk_input_win32_set_mode;
-      gdk_input_vtable.set_axes           = NULL;
-      gdk_input_vtable.set_key            = NULL;
-      gdk_input_vtable.motion_events      = NULL;
-      gdk_input_vtable.get_pointer       = gdk_input_win32_get_pointer;
-      gdk_input_vtable.grab_pointer      = gdk_input_win32_grab_pointer;
-      gdk_input_vtable.ungrab_pointer     = gdk_input_win32_ungrab_pointer;
-      gdk_input_vtable.configure_event    = gdk_input_win32_configure_event;
-      gdk_input_vtable.enter_event        = gdk_input_win32_enter_event;
-      gdk_input_vtable.other_event        = gdk_input_win32_other_event;
-      gdk_input_vtable.enable_window      = gdk_input_win32_enable_window;
-      gdk_input_vtable.disable_window     = gdk_input_win32_disable_window;
-
-      gdk_input_root_width = gdk_screen_width ();
-      gdk_input_root_height = gdk_screen_height ();
-      gdk_input_ignore_core = FALSE;
-#else
-      g_assert_not_reached ();
-#endif
-    }
-  else
-    {
-      gdk_input_vtable.set_mode           = NULL;
-      gdk_input_vtable.set_axes           = NULL;
-      gdk_input_vtable.set_key            = NULL;
-      gdk_input_vtable.motion_events      = NULL;
-      gdk_input_vtable.get_pointer       = gdk_input_none_get_pointer;
-      gdk_input_vtable.grab_pointer      = NULL;
-      gdk_input_vtable.ungrab_pointer     = NULL;
-      gdk_input_vtable.configure_event    = NULL;
-      gdk_input_vtable.enter_event        = NULL;
-      gdk_input_vtable.other_event        = NULL;
-      gdk_input_vtable.enable_window      = NULL;
-      gdk_input_vtable.disable_window     = NULL;
-      gdk_input_ignore_core = FALSE;
-    }
-  
-  gdk_input_devices = g_list_append (gdk_input_devices, &gdk_input_core_info);
-}
-
-gint
-gdk_input_set_mode (guint32      deviceid,
-                   GdkInputMode mode)
-{
-  if (deviceid == GDK_CORE_POINTER)
-    return FALSE;
-
-  if (gdk_input_vtable.set_mode)
-    return gdk_input_vtable.set_mode (deviceid, mode);
-  else
-    return FALSE;
-}
-
-void
-gdk_input_set_axes (guint32     deviceid,
-                   GdkAxisUse *axes)
-{
-  int i;
-  GdkDevicePrivate *gdkdev = gdk_input_find_device (deviceid);
-  g_return_if_fail (gdkdev != NULL);
-
-  if (deviceid == GDK_CORE_POINTER)
-    return;
-
-  for (i = GDK_AXIS_IGNORE; i < GDK_AXIS_LAST; i++)
-    {
-      gdkdev->axis_for_use[i] = -1;
-    }
-
-  for (i = 0; i < gdkdev->info.num_axes; i++)
-    {
-      gdkdev->info.axes[i] = axes[i];
-      gdkdev->axis_for_use[axes[i]] = i;
-    }
-}
-
-static void
-gdk_input_none_get_pointer (GdkWindow       *window,
-                           guint32          deviceid,
-                           gdouble         *x,
-                           gdouble         *y,
-                           gdouble         *pressure,
-                           gdouble         *xtilt,
-                           gdouble         *ytilt,
-                           GdkModifierType *mask)
-{
-  gint x_int, y_int;
-
-  gdk_window_get_pointer (window, &x_int, &y_int, mask);
-
-  if (x)
-    *x = x_int;
-  if (y)
-    *y = y_int;
-  if (pressure)
-    *pressure = 0.5;
-  if (xtilt)
-    *xtilt = 0;
-  if (ytilt)
-    *ytilt = 0;
-}
-
-#ifdef HAVE_WINTAB
-
-static void
-gdk_input_translate_coordinates (GdkDevicePrivate *gdkdev,
-                                GdkInputWindow   *input_window,
-                                gint             *axis_data,
-                                gdouble          *x,
-                                gdouble          *y,
-                                gdouble          *pressure,
-                                gdouble          *xtilt,
-                                gdouble          *ytilt)
-{
-  GdkDrawablePrivate *window_private;
-  gint x_axis, y_axis, pressure_axis, xtilt_axis, ytilt_axis;
-  gdouble device_width, device_height;
-  gdouble x_offset, y_offset, x_scale, y_scale;
-
-  window_private = (GdkDrawablePrivate *) input_window->window;
-
-  x_axis = gdkdev->axis_for_use[GDK_AXIS_X];
-  y_axis = gdkdev->axis_for_use[GDK_AXIS_Y];
-  pressure_axis = gdkdev->axis_for_use[GDK_AXIS_PRESSURE];
-  xtilt_axis = gdkdev->axis_for_use[GDK_AXIS_XTILT];
-  ytilt_axis = gdkdev->axis_for_use[GDK_AXIS_YTILT];
-
-  device_width = gdkdev->axes[x_axis].max_value - 
-                  gdkdev->axes[x_axis].min_value;
-  device_height = gdkdev->axes[y_axis].max_value - 
-                    gdkdev->axes[y_axis].min_value;
-
-  if (gdkdev->info.mode == GDK_MODE_SCREEN) 
-    {
-      x_scale = gdk_input_root_width / device_width;
-      y_scale = gdk_input_root_height / device_height;
-
-      x_offset = -input_window->root_x;
-      y_offset = -input_window->root_y;
-    }
-  else                         /* GDK_MODE_WINDOW */
-    {
-      double device_aspect = (device_height*gdkdev->axes[y_axis].resolution) /
-       (device_width*gdkdev->axes[x_axis].resolution);
-
-      if (device_aspect * window_private->width >= window_private->height)
-       {
-         /* device taller than window */
-         x_scale = window_private->width / device_width;
-         y_scale = (x_scale * gdkdev->axes[x_axis].resolution)
-           / gdkdev->axes[y_axis].resolution;
-
-         x_offset = 0;
-         y_offset = -(device_height * y_scale - 
-                              window_private->height)/2;
-       }
-      else
-       {
-         /* window taller than device */
-         y_scale = window_private->height / device_height;
-         x_scale = (y_scale * gdkdev->axes[y_axis].resolution)
-           / gdkdev->axes[x_axis].resolution;
-
-         y_offset = 0;
-         x_offset = -(device_width * x_scale - window_private->width)/2;
-       }
-    }
-  
-  if (x)
-    *x = x_offset + x_scale*axis_data[x_axis];
-  if (y)
-    *y = y_offset + y_scale*axis_data[y_axis];
-
-  if (pressure)
-    {
-      if (pressure_axis != -1)
-       *pressure = ((double)axis_data[pressure_axis] 
-                    - gdkdev->axes[pressure_axis].min_value) 
-         / (gdkdev->axes[pressure_axis].max_value 
-            - gdkdev->axes[pressure_axis].min_value);
-      else
-       *pressure = 0.5;
-    }
-
-  if (xtilt)
-    {
-      if (xtilt_axis != -1)
-       {
-         *xtilt = 2. * (double)(axis_data[xtilt_axis] - 
-                                (gdkdev->axes[xtilt_axis].min_value +
-                                 gdkdev->axes[xtilt_axis].max_value)/2) /
-           (gdkdev->axes[xtilt_axis].max_value -
-            gdkdev->axes[xtilt_axis].min_value);
-       }
-      else
-       *xtilt = 0;
-    }
-  
-  if (ytilt)
-    {
-      if (ytilt_axis != -1)
-       {
-         *ytilt = 2. * (double)(axis_data[ytilt_axis] - 
-                                (gdkdev->axes[ytilt_axis].min_value +
-                                 gdkdev->axes[ytilt_axis].max_value)/2) /
-           (gdkdev->axes[ytilt_axis].max_value -
-            gdkdev->axes[ytilt_axis].min_value);
-       }
-      else
-       *ytilt = 0;
-    }
-}
-
-static void 
-gdk_input_win32_get_pointer (GdkWindow       *window,
-                            guint32          deviceid,
-                            gdouble         *x,
-                            gdouble         *y,
-                            gdouble         *pressure,
-                            gdouble         *xtilt,
-                            gdouble         *ytilt,
-                            GdkModifierType *mask)
-{
-  GdkDevicePrivate *gdkdev;
-  GdkInputWindow *input_window;
-  gint x_int, y_int;
-  gint i;
-
-  if (deviceid == GDK_CORE_POINTER)
-    {
-      gdk_window_get_pointer (window, &x_int, &y_int, mask);
-      if (x)
-       *x = x_int;
-      if (y)
-       *y = y_int;
-      if (pressure)
-       *pressure = 0.5;
-      if (xtilt)
-       *xtilt = 0;
-      if (ytilt)
-       *ytilt = 0;
-    }
-  else
-    {
-      if (mask)
-       gdk_window_get_pointer (window, NULL, NULL, mask);
-      
-      gdkdev = gdk_input_find_device (deviceid);
-      g_return_if_fail (gdkdev != NULL);
-
-      input_window = gdk_input_window_find (window);
-      g_return_if_fail (input_window != NULL);
-
-      gdk_input_translate_coordinates (gdkdev, input_window,
-                                      gdkdev->last_axis_data,
-                                      x, y, pressure,
-                                      xtilt, ytilt);
-      if (mask)
-       {
-         *mask &= 0xFF;
-         *mask |= ((gdkdev->last_buttons & 0x1F) << 8);
-       }
-    }
-}
-
-static void
-gdk_input_get_root_relative_geometry (HWND w,
-                                     int  *x_ret,
-                                     int  *y_ret)
-{
-  RECT rect;
-
-  GetWindowRect (w, &rect);
-
-  if (x_ret)
-    *x_ret = rect.left;
-  if (y_ret)
-    *y_ret = rect.top;
-}
-
-static gint
-gdk_input_win32_set_mode (guint32      deviceid,
-                         GdkInputMode mode)
-{
-  GList *tmp_list;
-  GdkDevicePrivate *gdkdev;
-  GdkInputMode old_mode;
-  GdkInputWindow *input_window;
-
-  if (deviceid == GDK_CORE_POINTER)
-    return FALSE;
-
-  gdkdev = gdk_input_find_device (deviceid);
-  g_return_val_if_fail (gdkdev != NULL, FALSE);
-  old_mode = gdkdev->info.mode;
-
-  if (old_mode == mode)
-    return TRUE;
-
-  gdkdev->info.mode = mode;
-
-  if (mode == GDK_MODE_WINDOW)
-    {
-      gdkdev->info.has_cursor = FALSE;
-      for (tmp_list = gdk_input_windows; tmp_list; tmp_list = tmp_list->next)
-       {
-         input_window = (GdkInputWindow *)tmp_list->data;
-         if (input_window->mode != GDK_EXTENSION_EVENTS_CURSOR)
-           gdk_input_win32_enable_window (input_window->window, gdkdev);
-         else
-           if (old_mode != GDK_MODE_DISABLED)
-             gdk_input_win32_disable_window (input_window->window, gdkdev);
-       }
-    }
-  else if (mode == GDK_MODE_SCREEN)
-    {
-      gdkdev->info.has_cursor = TRUE;
-      for (tmp_list = gdk_input_windows; tmp_list; tmp_list = tmp_list->next)
-       gdk_input_win32_enable_window (((GdkInputWindow *)tmp_list->data)->window,
-                                      gdkdev);
-    }
-  else  /* mode == GDK_MODE_DISABLED */
-    {
-      for (tmp_list = gdk_input_windows; tmp_list; tmp_list = tmp_list->next)
-       {
-         input_window = (GdkInputWindow *)tmp_list->data;
-         if (old_mode != GDK_MODE_WINDOW ||
-             input_window->mode != GDK_EXTENSION_EVENTS_CURSOR)
-           gdk_input_win32_disable_window (input_window->window, gdkdev);
-       }
-    }
-
-  return TRUE;
-}
-
-static void
-gdk_input_win32_configure_event (GdkEventConfigure *event,
-                                GdkWindow         *window)
-{
-  GdkInputWindow *input_window;
-  gint root_x, root_y;
-
-  input_window = gdk_input_window_find (window);
-  g_return_if_fail (window != NULL);
-
-  gdk_input_get_root_relative_geometry
-    (GDK_DRAWABLE_XID (window), &root_x, &root_y);
-
-  input_window->root_x = root_x;
-  input_window->root_y = root_y;
-}
-
-static void 
-gdk_input_win32_enter_event (GdkEventCrossing *event, 
-                            GdkWindow        *window)
-{
-  GdkInputWindow *input_window;
-  gint root_x, root_y;
-
-  input_window = gdk_input_window_find (window);
-  g_return_if_fail (window != NULL);
-
-  gdk_input_get_root_relative_geometry
-    (GDK_DRAWABLE_XID (window), &root_x, &root_y);
-
-  input_window->root_x = root_x;
-  input_window->root_y = root_y;
-}
-
-static void
-decode_tilt (gint   *axis_data,
-            AXIS   *axes,
-            PACKET *packet)
-{
-  /* As I don't have a tilt-sensing tablet,
-   * I cannot test this code.
-   */
-  
-  double az, el;
-
-  az = TWOPI * packet->pkOrientation.orAzimuth /
-    (axes[0].axResolution / 65536.);
-  el = TWOPI * packet->pkOrientation.orAltitude /
-    (axes[1].axResolution / 65536.);
-  
-  /* X tilt */
-  axis_data[0] = cos (az) * cos (el) * 1000;
-  /* Y tilt */
-  axis_data[1] = sin (az) * cos (el) * 1000;
-}
-
-static GdkDevicePrivate *
-gdk_input_find_dev_from_ctx (HCTX hctx,
-                            UINT cursor)
-{
-  GList *tmp_list = gdk_input_devices;
-  GdkDevicePrivate *gdkdev;
-
-  while (tmp_list)
-    {
-      gdkdev = (GdkDevicePrivate *) (tmp_list->data);
-      if (gdkdev->hctx == hctx && gdkdev->cursor == cursor)
-       return gdkdev;
-      tmp_list = tmp_list->next;
-    }
-  return NULL;
-}
-static gint 
-gdk_input_win32_other_event (GdkEvent  *event,
-                            MSG       *xevent)
-{
-  GdkWindow *current_window;
-  GdkInputWindow *input_window;
-  GdkWindow *window;
-  GdkWindowPrivate *window_private;
-  GdkDevicePrivate *gdkdev;
-  GdkEventMask masktest;
-  POINT pt;
-  PACKET packet;
-  gint return_val;
-  gint k;
-  gint x, y;
-
-  if (event->any.window != wintab_window)
-    g_warning ("gdk_input_win32_other_event: not wintab_window?");
-
-#if USE_SYSCONTEXT
-  window = gdk_window_at_pointer (&x, &y);
-  if (window == NULL)
-    window = (GdkWindow *) gdk_root_parent;
-
-  gdk_window_ref (window);
-
-  window_private = (GdkWindowPrivate *) window;
-
-  GDK_NOTE (EVENTS,
-           g_print ("gdk_input_win32_other_event: window=%#x (%d,%d)\n",
-                    GDK_DRAWABLE_XID (window), x, y));
-  
-#else
-  /* ??? This code is pretty bogus */
-  current_window = gdk_window_lookup (GetActiveWindow ());
-  if (current_window == NULL)
-    return FALSE;
-  
-  input_window = gdk_input_window_find_within (current_window);
-  if (input_window == NULL)
-    return FALSE;
-#endif
-
-  if (xevent->message == WT_PACKET)
-    {
-      if (!WTPacket ((HCTX) xevent->lParam, xevent->wParam, &packet))
-       return FALSE;
-    }
-
-  switch (xevent->message)
-    {
-    case WT_PACKET:
-      if (window_private == gdk_root_parent)
-       {
-         GDK_NOTE (EVENTS, g_print ("...is root\n"));
-         return FALSE;
-       }
-
-      if ((gdkdev = gdk_input_find_dev_from_ctx ((HCTX) xevent->lParam,
-                                                packet.pkCursor)) == NULL)
-       return FALSE;
-
-      if (gdkdev->info.mode == GDK_MODE_DISABLED)
-       return FALSE;
-      
-      k = 0;
-      if (gdkdev->pktdata & PK_X)
-       gdkdev->last_axis_data[k++] = packet.pkX;
-      if (gdkdev->pktdata & PK_Y)
-       gdkdev->last_axis_data[k++] = packet.pkY;
-      if (gdkdev->pktdata & PK_NORMAL_PRESSURE)
-       gdkdev->last_axis_data[k++] = packet.pkNormalPressure;
-      if (gdkdev->pktdata & PK_ORIENTATION)
-       {
-         decode_tilt (gdkdev->last_axis_data + k,
-                      gdkdev->orientation_axes, &packet);
-         k += 2;
-       }
-
-      g_assert (k == gdkdev->info.num_axes);
-
-      if (HIWORD (packet.pkButtons) != TBN_NONE)
-       {
-         /* Gdk buttons are numbered 1.. */
-         event->button.button = 1 + LOWORD (packet.pkButtons);
-
-         if (HIWORD (packet.pkButtons) == TBN_UP)
-           {
-             event->any.type = GDK_BUTTON_RELEASE;
-             masktest = GDK_BUTTON_RELEASE_MASK;
-             gdkdev->button_state &= ~(1 << LOWORD (packet.pkButtons));
-           }
-         else
-           {
-             event->any.type = GDK_BUTTON_PRESS;
-             masktest = GDK_BUTTON_PRESS_MASK;
-             gdkdev->button_state |= 1 << LOWORD (packet.pkButtons);
-           }
-       }
-      else
-       {
-         event->any.type = GDK_MOTION_NOTIFY;
-         masktest = GDK_POINTER_MOTION_MASK;
-         if (gdkdev->button_state & (1 << 0))
-           masktest |= GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK;
-         if (gdkdev->button_state & (1 << 1))
-           masktest |= GDK_BUTTON_MOTION_MASK | GDK_BUTTON2_MOTION_MASK;
-         if (gdkdev->button_state & (1 << 2))
-           masktest |= GDK_BUTTON_MOTION_MASK | GDK_BUTTON3_MOTION_MASK;
-       }
-
-      /* Now we can check if the window wants the event, and
-       * propagate if necessary.
-       */
-    dijkstra:
-      if (!window_private->extension_events_selected
-         || !(window_private->extension_events & masktest))
-       {
-         GDK_NOTE (EVENTS, g_print ("...not selected\n"));
-
-         if (window_private->parent == (GdkWindow *) gdk_root_parent)
-           return FALSE;
-         
-         pt.x = x;
-         pt.y = y;
-         ClientToScreen (GDK_DRAWABLE_XID (window), &pt);
-         gdk_window_unref (window);
-         window = window_private->parent;
-         gdk_window_ref (window);
-         window_private = (GdkWindowPrivate *) window;
-         ScreenToClient (GDK_DRAWABLE_XID (window), &pt);
-         x = pt.x;
-         y = pt.y;
-         GDK_NOTE (EVENTS, g_print ("...propagating to %#x, (%d,%d)\n",
-                                    GDK_DRAWABLE_XID (window), x, y));
-         goto dijkstra;
-       }
-
-      input_window = gdk_input_window_find (window);
-
-      g_assert (input_window != NULL);
-
-      if (gdkdev->info.mode == GDK_MODE_WINDOW
-         && input_window->mode == GDK_EXTENSION_EVENTS_CURSOR)
-       return FALSE;
-
-      event->any.window = window;
-
-      if (event->any.type == GDK_BUTTON_PRESS
-         || event->any.type == GDK_BUTTON_RELEASE)
-       {
-         event->button.time = xevent->time;
-         event->button.source = gdkdev->info.source;
-         last_moved_cursor_id = 
-           event->button.deviceid = gdkdev->info.deviceid;
-         
-#if 0
-#if USE_SYSCONTEXT
-         /* Buttons 1 to 3 will come in as WM_[LMR]BUTTON{DOWN,UP} */
-         if (event->button.button <= 3)
-           return FALSE;
-#endif
-#endif
-         gdk_input_translate_coordinates (gdkdev, input_window,
-                                          gdkdev->last_axis_data,
-                                          &event->button.x, &event->button.y,
-                                          &event->button.pressure,
-                                          &event->button.xtilt, 
-                                          &event->button.ytilt);
-
-         event->button.state = ((gdkdev->button_state << 8)
-                                & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK
-                                   | GDK_BUTTON3_MASK | GDK_BUTTON4_MASK
-                                   | GDK_BUTTON5_MASK));
-         GDK_NOTE (EVENTS, g_print ("WINTAB button %s: %d %d %g,%g %g %g,%g\n",
-                                    (event->button.type == GDK_BUTTON_PRESS ?
-                                     "press" : "release"),
-                                    event->button.deviceid,
-                                    event->button.button,
-                                    event->button.x, event->button.y,
-                                    event->button.pressure,
-                                    event->button.xtilt, event->button.ytilt));
-       }
-      else
-       {
-         event->motion.time = xevent->time;
-         last_moved_cursor_id =
-           event->motion.deviceid = gdkdev->info.deviceid;
-         event->motion.is_hint = FALSE;
-         event->motion.source = gdkdev->info.source;
-
-         gdk_input_translate_coordinates (gdkdev, input_window,
-                                          gdkdev->last_axis_data,
-                                          &event->motion.x, &event->motion.y,
-                                          &event->motion.pressure,
-                                          &event->motion.xtilt, 
-                                          &event->motion.ytilt);
-
-         event->motion.state = ((gdkdev->button_state << 8)
-                                & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK
-                                   | GDK_BUTTON3_MASK | GDK_BUTTON4_MASK
-                                   | GDK_BUTTON5_MASK));
-
-         GDK_NOTE (EVENTS, g_print ("WINTAB motion: %d %g,%g %g %g,%g\n",
-                                    event->motion.deviceid,
-                                    event->motion.x, event->motion.y,
-                                    event->motion.pressure,
-                                    event->motion.xtilt, event->motion.ytilt));
-
-         /* Check for missing release or press events for the normal
-          * pressure button. At least on my ArtPadII I sometimes miss a
-          * release event?
-          */
-         if ((gdkdev->pktdata & PK_NORMAL_PRESSURE
-              && (event->motion.state & GDK_BUTTON1_MASK)
-              && packet.pkNormalPressure <= MAX (0, gdkdev->npbtnmarks[0] - 2))
-             || (gdkdev->pktdata & PK_NORMAL_PRESSURE
-                 && !(event->motion.state & GDK_BUTTON1_MASK)
-                 && packet.pkNormalPressure > gdkdev->npbtnmarks[1] + 2))
-           {
-             GdkEvent *event2 = gdk_event_copy (event);
-             if (event->motion.state & GDK_BUTTON1_MASK)
-               {
-                 event2->button.type = GDK_BUTTON_RELEASE;
-                 gdkdev->button_state &= ~1;
-               }
-             else
-               {
-                 event2->button.type = GDK_BUTTON_PRESS;
-                 gdkdev->button_state |= 1;
-               }
-             event2->button.state = ((gdkdev->button_state << 8)
-                                     & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK
-                                        | GDK_BUTTON3_MASK | GDK_BUTTON4_MASK
-                                        | GDK_BUTTON5_MASK));
-             event2->button.button = 1;
-             GDK_NOTE (EVENTS, g_print ("WINTAB synthesized button %s: %d %d %g,%g %g\n",
-                                        (event2->button.type == GDK_BUTTON_PRESS ?
-                                         "press" : "release"),
-                                        event2->button.deviceid,
-                                        event2->button.button,
-                                        event2->button.x, event2->button.y,
-                                        event2->button.pressure));
-             gdk_event_queue_append (event2);
-           }
-       }
-      return TRUE;
-
-    case WT_PROXIMITY:
-      if (LOWORD (xevent->lParam) == 0)
-       {
-         event->proximity.type = GDK_PROXIMITY_OUT;
-         gdk_input_ignore_core = FALSE;
-       }
-      else
-       {
-         event->proximity.type = GDK_PROXIMITY_IN;
-         gdk_input_ignore_core = TRUE;
-       }
-      event->proximity.time = xevent->time;
-      event->proximity.source = GDK_SOURCE_PEN;
-      event->proximity.deviceid = last_moved_cursor_id;
-
-      GDK_NOTE (EVENTS, g_print ("WINTAB proximity %s: %d\n",
-                                (event->proximity.type == GDK_PROXIMITY_IN ?
-                                 "in" : "out"),
-                                event->proximity.deviceid));
-      return TRUE;
-    }
-  return FALSE;
-}
-
-static gint
-gdk_input_win32_enable_window (GdkWindow        *window,
-                              GdkDevicePrivate *gdkdev)
-{
-  GdkWindowPrivate *window_private = (GdkWindowPrivate *) window;
-
-  window_private->extension_events_selected = TRUE;
-  return TRUE;
-}
-
-static gint
-gdk_input_win32_disable_window (GdkWindow        *window,
-                               GdkDevicePrivate *gdkdev)
-{
-  GdkWindowPrivate *window_private = (GdkWindowPrivate *) window;
-
-  window_private->extension_events_selected = FALSE;
-  return TRUE;
-}
-
-static gint
-gdk_input_win32_grab_pointer (GdkWindow    *window,
-                             gint          owner_events,
-                             GdkEventMask  event_mask,
-                             GdkWindow    *confine_to,
-                             guint32       time)
-{
-  GdkInputWindow *input_window, *new_window;
-  gboolean need_ungrab;
-  GdkDevicePrivate *gdkdev;
-  GList *tmp_list;
-  gint result;
-
-  tmp_list = gdk_input_windows;
-  new_window = NULL;
-  need_ungrab = FALSE;
-
-  GDK_NOTE (MISC, g_print ("gdk_input_win32_grab_pointer: %#x %d %#x\n",
-                          GDK_DRAWABLE_XID (window),
-                          owner_events,
-                          (confine_to ? GDK_DRAWABLE_XID (confine_to) : 0)));
-
-  while (tmp_list)
-    {
-      input_window = (GdkInputWindow *)tmp_list->data;
-
-      if (input_window->window == window)
-       new_window = input_window;
-      else if (input_window->grabbed)
-       {
-         input_window->grabbed = FALSE;
-         need_ungrab = TRUE;
-       }
-
-      tmp_list = tmp_list->next;
-    }
-
-  if (new_window)
-    {
-      new_window->grabbed = TRUE;
-      
-      tmp_list = gdk_input_devices;
-      while (tmp_list)
-       {
-         gdkdev = (GdkDevicePrivate *)tmp_list->data;
-         if (gdkdev->info.deviceid != GDK_CORE_POINTER)
-           {
-#if 0        
-             /* XXX */
-             gdk_input_find_events (window, gdkdev,
-                                    event_mask,
-                                    event_classes, &num_classes);
-             result = XGrabDevice (GDK_DISPLAY(), gdkdev->xdevice,
-                                   GDK_WINDOW_XWINDOW (window),
-                                   owner_events, num_classes, event_classes,
-                                   GrabModeAsync, GrabModeAsync, time);
-             
-             /* FIXME: if failure occurs on something other than the first
-                device, things will be badly inconsistent */
-             if (result != Success)
-               return result;
-#endif
-           }
-         tmp_list = tmp_list->next;
-       }
-    }
-  else
-    { 
-      tmp_list = gdk_input_devices;
-      while (tmp_list)
-       {
-         gdkdev = (GdkDevicePrivate *)tmp_list->data;
-         if (gdkdev->info.deviceid != GDK_CORE_POINTER && 
-             ((gdkdev->button_state != 0) || need_ungrab))
-           {
-#if 0
-             /* XXX */
-             XUngrabDevice (gdk_display, gdkdev->xdevice, time);
-#endif
-             gdkdev->button_state = 0;
-           }
-         
-         tmp_list = tmp_list->next;
-       }
-    }
-
-  return Success;
-      
-}
-
-static void 
-gdk_input_win32_ungrab_pointer (guint32 time)
-{
-  GdkInputWindow *input_window;
-  GdkDevicePrivate *gdkdev;
-  GList *tmp_list;
-
-  GDK_NOTE (MISC, g_print ("gdk_input_win32_ungrab_pointer\n"));
-
-  tmp_list = gdk_input_windows;
-  while (tmp_list)
-    {
-      input_window = (GdkInputWindow *)tmp_list->data;
-      if (input_window->grabbed)
-       break;
-      tmp_list = tmp_list->next;
-    }
-
-  if (tmp_list)                        /* we found a grabbed window */
-    {
-      input_window->grabbed = FALSE;
-
-      tmp_list = gdk_input_devices;
-      while (tmp_list)
-       {
-         gdkdev = (GdkDevicePrivate *)tmp_list->data;
-#if 0
-         /* XXX */
-         if (gdkdev->info.deviceid != GDK_CORE_POINTER && gdkdev->xdevice)
-           XUngrabDevice (gdk_display, gdkdev->xdevice, time);
-#endif
-         tmp_list = tmp_list->next;
-       }
-    }
-}
-
-#endif /* HAVE_WINTAB */
-
-GList *
-gdk_input_list_devices (void)
-{
-  return gdk_input_devices;
-}
-
-void
-gdk_input_set_source (guint32        deviceid,
-                     GdkInputSource source)
-{
-  GdkDevicePrivate *gdkdev = gdk_input_find_device (deviceid);
-  g_return_if_fail (gdkdev != NULL);
-
-  gdkdev->info.source = source;
-}
-
-void gdk_input_set_key (guint32 deviceid,
-                       guint   index,
-                       guint   keyval,
-                       GdkModifierType modifiers)
-{
-  if (deviceid != GDK_CORE_POINTER && gdk_input_vtable.set_key)
-    gdk_input_vtable.set_key (deviceid, index, keyval, modifiers);
-}
-
-GdkTimeCoord *
-gdk_input_motion_events (GdkWindow *window,
-                        guint32    deviceid,
-                        guint32    start,
-                        guint32    stop,
-                        gint      *nevents_return)
-{
-  g_return_val_if_fail (window != NULL, NULL);
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-
-  *nevents_return = 0;
-  return NULL;         /* ??? */
-}
-
-static gint
-gdk_input_enable_window (GdkWindow *window, GdkDevicePrivate *gdkdev)
-{
-  if (gdk_input_vtable.enable_window)
-    return gdk_input_vtable.enable_window (window, gdkdev);
-  else
-    return TRUE;
-}
-
-static gint
-gdk_input_disable_window (GdkWindow *window, GdkDevicePrivate *gdkdev)
-{
-  if (gdk_input_vtable.disable_window)
-    return gdk_input_vtable.disable_window(window,gdkdev);
-  else
-    return TRUE;
-}
-
-
-static GdkInputWindow *
-gdk_input_window_find (GdkWindow *window)
-{
-  GList *tmp_list;
-
-  for (tmp_list=gdk_input_windows; tmp_list; tmp_list=tmp_list->next)
-    if (((GdkInputWindow *)(tmp_list->data))->window == window)
-      return (GdkInputWindow *)(tmp_list->data);
-
-  return NULL;      /* Not found */
-}
-
-#if !USE_SYSCONTEXT
-
-static GdkInputWindow *
-gdk_input_window_find_within (GdkWindow *window)
-{
-  GList *tmp_list;
-  GdkWindowPrivate *window_private;
-  GdkWindowPrivate *tmp_private;
-  GdkInputWindow *candidate = NULL;
-
-  window_private = (GdkWindowPrivate *) window;
-
-  for (tmp_list=gdk_input_windows; tmp_list; tmp_list=tmp_list->next)
-    {
-      (GdkWindowPrivate *) tmp_private =
-       (GdkWindowPrivate *) (((GdkInputWindow *)(tmp_list->data))->window);
-      if (tmp_private == window_private
-         || IsChild (window_private->xwindow, tmp_private->xwindow))
-       {
-         if (candidate)
-           return NULL;                /* Multiple hits */
-         candidate = (GdkInputWindow *)(tmp_list->data);
-       }
-    }
-
-  return candidate;
-}
-
-#endif
-
-/* FIXME: this routine currently needs to be called between creation
-   and the corresponding configure event (because it doesn't get the
-   root_relative_geometry).  This should work with
-   gtk_window_set_extension_events, but will likely fail in other
-   cases */
-
-void
-gdk_input_set_extension_events (GdkWindow       *window,
-                               gint             mask,
-                               GdkExtensionMode mode)
-{
-  GdkWindowPrivate *window_private;
-  GList *tmp_list;
-  GdkInputWindow *iw;
-
-  g_return_if_fail (window != NULL);
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-  window_private = (GdkWindowPrivate *) window;
-
-  if (mode == GDK_EXTENSION_EVENTS_NONE)
-    mask = 0;
-
-  if (mask != 0)
-    {
-      iw = g_new (GdkInputWindow,1);
-
-      iw->window = window;
-      iw->mode = mode;
-
-      iw->grabbed = FALSE;
-
-      gdk_input_windows = g_list_append (gdk_input_windows, iw);
-      window_private->extension_events = mask;
-
-      /* Add enter window events to the event mask */
-      gdk_window_set_events (window,
-                            gdk_window_get_events (window) | 
-                            GDK_ENTER_NOTIFY_MASK);
-    }
-  else
-    {
-      iw = gdk_input_window_find (window);
-      if (iw)
-       {
-         gdk_input_windows = g_list_remove (gdk_input_windows, iw);
-         g_free (iw);
-       }
-
-      window_private->extension_events = 0;
-    }
-
-  for (tmp_list = gdk_input_devices; tmp_list; tmp_list = tmp_list->next)
-    {
-      GdkDevicePrivate *gdkdev = (GdkDevicePrivate *)(tmp_list->data);
-
-      if (gdkdev->info.deviceid != GDK_CORE_POINTER)
-       {
-         if (mask != 0 && gdkdev->info.mode != GDK_MODE_DISABLED
-             && (gdkdev->info.has_cursor || mode == GDK_EXTENSION_EVENTS_ALL))
-           gdk_input_enable_window (window, gdkdev);
-         else
-           gdk_input_disable_window (window, gdkdev);
-       }
-    }
-}
-
-void
-gdk_input_window_destroy (GdkWindow *window)
-{
-  GdkInputWindow *input_window;
-
-  input_window = gdk_input_window_find (window);
-  g_return_if_fail (input_window != NULL);
-
-  gdk_input_windows = g_list_remove (gdk_input_windows,input_window);
-  g_free (input_window);
-}
-
-void
-gdk_input_exit (void)
-{
-#ifdef HAVE_WINTAB
-  GList *tmp_list;
-  GdkDevicePrivate *gdkdev;
-
-  for (tmp_list = gdk_input_devices; tmp_list; tmp_list = tmp_list->next)
-    {
-      gdkdev = (GdkDevicePrivate *)(tmp_list->data);
-      if (gdkdev->info.deviceid != GDK_CORE_POINTER)
-       {
-         gdk_input_win32_set_mode (gdkdev->info.deviceid, GDK_MODE_DISABLED);
-         g_free (gdkdev->info.name);
-         g_free (gdkdev->last_axis_data);
-         g_free (gdkdev->info.axes);
-         g_free (gdkdev->info.keys);
-         g_free (gdkdev->axes);
-         g_free (gdkdev);
-       }
-    }
-
-  g_list_free (gdk_input_devices);
-
-  for (tmp_list = gdk_input_windows; tmp_list; tmp_list = tmp_list->next)
-    {
-      g_free (tmp_list->data);
-    }
-  g_list_free (gdk_input_windows);
-  gdk_input_windows = NULL;
-
-  gdk_window_unref (wintab_window);
-  wintab_window = NULL;
-
-#if 1
-  for (tmp_list = wintab_contexts; tmp_list; tmp_list = tmp_list->next)
-    {
-      HCTX *hctx = (HCTX *) tmp_list->data;
-      BOOL result;
-
-#ifdef _MSC_VER
-      /* For some reason WTEnable and/or WTClose tend to crash here.
-       * Protect with __try/__except to avoid a message box.
-       * When compiling with gcc, we cannot use __try/__except, so
-       * don't call WTClose. I think this means that we'll
-       * eventually run out of Wintab contexts, sigh.
-       */
-      __try {
-#if 0
-        WTEnable (*hctx, FALSE);
-#endif
-       result = WTClose (*hctx);
-      }
-      __except (/* GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ? */
-                EXCEPTION_EXECUTE_HANDLER /*: 
-                EXCEPTION_CONTINUE_SEARCH */) {
-       result = FALSE;
-      }
-      if (!result)
-       g_warning ("gdk_input_exit: Closing Wintab context %#x failed", *hctx);
-#endif /* _MSC_VER */
-      g_free (hctx);
-    }
-#endif
-  g_list_free (wintab_contexts);
-  wintab_contexts = NULL;
-#endif
-}
-
-static GdkDevicePrivate *
-gdk_input_find_device (guint32 id)
-{
-  GList *tmp_list = gdk_input_devices;
-  GdkDevicePrivate *gdkdev;
-
-  while (tmp_list)
-    {
-      gdkdev = (GdkDevicePrivate *) (tmp_list->data);
-      if (gdkdev->info.deviceid == id)
-       return gdkdev;
-      tmp_list = tmp_list->next;
-    }
-  return NULL;
-}
-
-void
-gdk_input_window_get_pointer (GdkWindow       *window,
-                             guint32          deviceid,
-                             gdouble         *x,
-                             gdouble         *y,
-                             gdouble         *pressure,
-                             gdouble         *xtilt,
-                             gdouble         *ytilt,
-                             GdkModifierType *mask)
-{
-  if (gdk_input_vtable.get_pointer)
-    gdk_input_vtable.get_pointer (window, deviceid, x, y, pressure,
-                                 xtilt, ytilt, mask);
-}
diff --git a/gdk/win32/gdkmain-win32.c b/gdk/win32/gdkmain-win32.c
deleted file mode 100644 (file)
index e8fa5af..0000000
+++ /dev/null
@@ -1,2115 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1998-1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <limits.h>
-#include <io.h>
-
-#include "gdk.h"
-#include "gdkprivate.h"
-#include "gdkinputprivate.h"
-#include "gdkkeysyms.h"
-
-#include <objbase.h>
-
-static void     gdkx_XConvertCase      (KeySym        symbol,
-                                        KeySym       *lower,
-                                        KeySym       *upper);
-static void        gdk_exit_func                (void);
-
-
-/* Private variable declarations
- */
-static int gdk_initialized = 0;        /* 1 if the library is initialized,
-                                * 0 otherwise.
-                                */
-#ifdef G_ENABLE_DEBUG
-static const GDebugKey gdk_debug_keys[] = {
-  {"events",       GDK_DEBUG_EVENTS},
-  {"misc",         GDK_DEBUG_MISC},
-  {"dnd",          GDK_DEBUG_DND},
-  {"color-context", GDK_DEBUG_COLOR_CONTEXT},
-  {"xim",          GDK_DEBUG_XIM},
-  {"selection",            GDK_DEBUG_SELECTION}
-};
-
-static const int gdk_ndebug_keys = sizeof(gdk_debug_keys)/sizeof(GDebugKey);
-
-#endif /* G_ENABLE_DEBUG */
-
-int __stdcall
-DllMain(HINSTANCE hinstDLL,
-       DWORD dwReason,
-       LPVOID reserved)
-{
-  gdk_DLLInstance = hinstDLL;
-
-  return TRUE;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_init
- *
- *   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).
- *
- * Side effects:
- *   The library is initialized.
- *
- *--------------------------------------------------------------
- */
-
-gboolean
-gdk_init_check (int    *argc,
-               char ***argv)
-{
-  gint i, j, k;
-  
-  if (gdk_initialized)
-    return TRUE;
-  
-  if (g_thread_supported ())
-    gdk_threads_mutex = g_mutex_new ();
-  
-#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 (getenv ("GDK_IGNORE_WINTAB") != NULL)
-    gdk_input_ignore_wintab = TRUE;
-
-  if (getenv ("GDK_EVENT_FUNC_FROM_WINDOW_PROC") != NULL)
-    gdk_event_func_from_window_proc = TRUE;
-
-  if (argc && argv)
-    {
-      if (*argc > 0)
-       {
-         gchar *d;
-         
-         d = strrchr((*argv)[0], G_DIR_SEPARATOR);
-         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 ("--sync", (*argv)[i]) == 0)
-             {
-               (*argv)[i] = NULL;
-               GdiSetBatchLimit (1);
-             }
-           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 ("--gdk-no-wintab", (*argv)[i]) == 0
-                    || strcmp ("--gdk-ignore-wintab", (*argv)[i]) == 0)
-             {
-               (*argv)[i] = NULL;
-               gdk_input_ignore_wintab = TRUE;
-             }
-           else if (strcmp ("--gdk-event-func-from-window-proc", (*argv)[i]) == 0)
-             {
-               (*argv)[i] = NULL;
-               gdk_event_func_from_window_proc = TRUE;
-             }
-         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_ProgInstance = GetModuleHandle (NULL);
-  gdk_DC = CreateDC ("DISPLAY", NULL, NULL, NULL);
-  gdk_root_window = GetDesktopWindow ();
-  windows_version = GetVersion ();
-
-  CoInitialize (NULL);
-
-  gdk_selection_request_msg = RegisterWindowMessage ("gdk-selection-request");
-  gdk_selection_notify_msg = RegisterWindowMessage ("gdk-selection-notify");
-  gdk_selection_clear_msg = RegisterWindowMessage ("gdk-selection-clear");
-
-  gdk_selection_property = gdk_atom_intern ("GDK_SELECTION", FALSE);
-  gdk_clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE);
-  gdk_win32_dropfiles_atom = gdk_atom_intern ("DROPFILES_DND", FALSE);
-  gdk_ole2_dnd_atom = gdk_atom_intern ("OLE2_DND", FALSE);
-
-  gdk_progclass = g_basename (g_get_prgname ());
-  gdk_progclass[0] = toupper (gdk_progclass[0]);
-
-  g_atexit (gdk_exit_func);
-  
-  gdk_events_init ();
-  gdk_visual_init ();
-  gdk_window_init ();
-  gdk_image_init ();
-  gdk_input_init ();
-  gdk_selection_init ();
-  gdk_dnd_init ();
-
-  gdk_initialized = 1;
-
-  return TRUE;
-}
-
-void
-gdk_init (int *argc, char ***argv)
-{
-  if (!gdk_init_check (argc, argv))
-    {
-      g_warning ("cannot initialize GDK");
-      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_func(),
-     no need to do this here (Alex J.) */
-  exit (errorcode);
-}
-
-void
-gdk_set_use_xshm (gint use_xshm)
-{
-  /* Always on */
-}
-
-gint
-gdk_get_use_xshm (void)
-{
-  return TRUE;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_width
- *
- *   Return the width of the screen.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_width (void)
-{
-  gint return_val;
-  
-  return_val = gdk_root_parent->drawable.width;
-
-  return return_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_height
- *
- *   Return the height of the screen.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_height (void)
-{
-  gint return_val;
-  
-  return_val = gdk_root_parent->drawable.height;
-
-  return return_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_width_mm
- *
- *   Return the width of the screen in millimetres.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_width_mm (void)
-{
-  HDC hdc;
-  gint return_val;
-
-  hdc = GetDC (NULL);
-  return_val = GetDeviceCaps (hdc, HORZSIZE);
-  ReleaseDC (NULL, hdc);
-
-  return return_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_height
- *
- *   Return the height of the screen in millimetres.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_height_mm (void)
-{
-  HDC hdc;
-  gint return_val;
-
-  hdc = GetDC (NULL);
-  return_val = GetDeviceCaps (hdc, VERTSIZE);
-  ReleaseDC (NULL, hdc);
-  
-  return return_val;
-}
-
-void
-gdk_key_repeat_disable (void)
-{
-  /* XXX */
-}
-
-void
-gdk_key_repeat_restore (void)
-{
-  /* XXX */
-}
-
-
-/*
- *--------------------------------------------------------------
- * gdk_flush
- *
- *   Flushes the Xlib output buffer and then waits
- *   until all requests have been received and processed
- *   by the X server. The only real use for this function
- *   is in dealing with XShm.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_flush (void)
-{
-  GdiFlush ();
-}
-
-void
-gdk_beep (void)
-{
-  Beep(1000, 50);
-}
-
-/*
- *--------------------------------------------------------------
- * 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)
-{
-  static gboolean in_gdk_exit_func = FALSE;
-  
-  GDK_NOTE (MISC, g_print ("gdk_exit_func\n"));
-  /* 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)
-    {
-      gdk_image_exit ();
-      gdk_input_exit ();
-      gdk_key_repeat_restore ();
-      gdk_dnd_exit ();
-
-      CoUninitialize ();
-
-      DeleteDC (gdk_DC);
-      gdk_DC = NULL;
-      gdk_initialized = 0;
-    }
-}
-
-gchar *
-gdk_get_display(void)
-{
-  return "local:";
-}
-
-/*************************************************************
- * 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)
-{
-  /* ??? */
-}
-
-/*************************************************************
- * 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)
-{
-  /* ??? */
-  return 0;
-}
-
-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 */
-    }
-}
-
-static struct gdk_key {
-  guint keyval;
-  const char *name;
-} gdk_keys_by_keyval[] = {
-  { 0x000020, "space" },
-  { 0x000021, "exclam" },
-  { 0x000022, "quotedbl" },
-  { 0x000023, "numbersign" },
-  { 0x000024, "dollar" },
-  { 0x000025, "percent" },
-  { 0x000026, "ampersand" },
-  { 0x000027, "apostrophe" },
-  { 0x000027, "quoteright" },
-  { 0x000028, "parenleft" },
-  { 0x000029, "parenright" },
-  { 0x00002a, "asterisk" },
-  { 0x00002b, "plus" },
-  { 0x00002c, "comma" },
-  { 0x00002d, "minus" },
-  { 0x00002e, "period" },
-  { 0x00002f, "slash" },
-  { 0x000030, "0" },
-  { 0x000031, "1" },
-  { 0x000032, "2" },
-  { 0x000033, "3" },
-  { 0x000034, "4" },
-  { 0x000035, "5" },
-  { 0x000036, "6" },
-  { 0x000037, "7" },
-  { 0x000038, "8" },
-  { 0x000039, "9" },
-  { 0x00003a, "colon" },
-  { 0x00003b, "semicolon" },
-  { 0x00003c, "less" },
-  { 0x00003d, "equal" },
-  { 0x00003e, "greater" },
-  { 0x00003f, "question" },
-  { 0x000040, "at" },
-  { 0x000041, "A" },
-  { 0x000042, "B" },
-  { 0x000043, "C" },
-  { 0x000044, "D" },
-  { 0x000045, "E" },
-  { 0x000046, "F" },
-  { 0x000047, "G" },
-  { 0x000048, "H" },
-  { 0x000049, "I" },
-  { 0x00004a, "J" },
-  { 0x00004b, "K" },
-  { 0x00004c, "L" },
-  { 0x00004d, "M" },
-  { 0x00004e, "N" },
-  { 0x00004f, "O" },
-  { 0x000050, "P" },
-  { 0x000051, "Q" },
-  { 0x000052, "R" },
-  { 0x000053, "S" },
-  { 0x000054, "T" },
-  { 0x000055, "U" },
-  { 0x000056, "V" },
-  { 0x000057, "W" },
-  { 0x000058, "X" },
-  { 0x000059, "Y" },
-  { 0x00005a, "Z" },
-  { 0x00005b, "bracketleft" },
-  { 0x00005c, "backslash" },
-  { 0x00005d, "bracketright" },
-  { 0x00005e, "asciicircum" },
-  { 0x00005f, "underscore" },
-  { 0x000060, "grave" },
-  { 0x000060, "quoteleft" },
-  { 0x000061, "a" },
-  { 0x000062, "b" },
-  { 0x000063, "c" },
-  { 0x000064, "d" },
-  { 0x000065, "e" },
-  { 0x000066, "f" },
-  { 0x000067, "g" },
-  { 0x000068, "h" },
-  { 0x000069, "i" },
-  { 0x00006a, "j" },
-  { 0x00006b, "k" },
-  { 0x00006c, "l" },
-  { 0x00006d, "m" },
-  { 0x00006e, "n" },
-  { 0x00006f, "o" },
-  { 0x000070, "p" },
-  { 0x000071, "q" },
-  { 0x000072, "r" },
-  { 0x000073, "s" },
-  { 0x000074, "t" },
-  { 0x000075, "u" },
-  { 0x000076, "v" },
-  { 0x000077, "w" },
-  { 0x000078, "x" },
-  { 0x000079, "y" },
-  { 0x00007a, "z" },
-  { 0x00007b, "braceleft" },
-  { 0x00007c, "bar" },
-  { 0x00007d, "braceright" },
-  { 0x00007e, "asciitilde" },
-  { 0x0000a0, "nobreakspace" },
-  { 0x0000a1, "exclamdown" },
-  { 0x0000a2, "cent" },
-  { 0x0000a3, "sterling" },
-  { 0x0000a4, "currency" },
-  { 0x0000a5, "yen" },
-  { 0x0000a6, "brokenbar" },
-  { 0x0000a7, "section" },
-  { 0x0000a8, "diaeresis" },
-  { 0x0000a9, "copyright" },
-  { 0x0000aa, "ordfeminine" },
-  { 0x0000ab, "guillemotleft" },
-  { 0x0000ac, "notsign" },
-  { 0x0000ad, "hyphen" },
-  { 0x0000ae, "registered" },
-  { 0x0000af, "macron" },
-  { 0x0000b0, "degree" },
-  { 0x0000b1, "plusminus" },
-  { 0x0000b2, "twosuperior" },
-  { 0x0000b3, "threesuperior" },
-  { 0x0000b4, "acute" },
-  { 0x0000b5, "mu" },
-  { 0x0000b6, "paragraph" },
-  { 0x0000b7, "periodcentered" },
-  { 0x0000b8, "cedilla" },
-  { 0x0000b9, "onesuperior" },
-  { 0x0000ba, "masculine" },
-  { 0x0000bb, "guillemotright" },
-  { 0x0000bc, "onequarter" },
-  { 0x0000bd, "onehalf" },
-  { 0x0000be, "threequarters" },
-  { 0x0000bf, "questiondown" },
-  { 0x0000c0, "Agrave" },
-  { 0x0000c1, "Aacute" },
-  { 0x0000c2, "Acircumflex" },
-  { 0x0000c3, "Atilde" },
-  { 0x0000c4, "Adiaeresis" },
-  { 0x0000c5, "Aring" },
-  { 0x0000c6, "AE" },
-  { 0x0000c7, "Ccedilla" },
-  { 0x0000c8, "Egrave" },
-  { 0x0000c9, "Eacute" },
-  { 0x0000ca, "Ecircumflex" },
-  { 0x0000cb, "Ediaeresis" },
-  { 0x0000cc, "Igrave" },
-  { 0x0000cd, "Iacute" },
-  { 0x0000ce, "Icircumflex" },
-  { 0x0000cf, "Idiaeresis" },
-  { 0x0000d0, "ETH" },
-  { 0x0000d0, "Eth" },
-  { 0x0000d1, "Ntilde" },
-  { 0x0000d2, "Ograve" },
-  { 0x0000d3, "Oacute" },
-  { 0x0000d4, "Ocircumflex" },
-  { 0x0000d5, "Otilde" },
-  { 0x0000d6, "Odiaeresis" },
-  { 0x0000d7, "multiply" },
-  { 0x0000d8, "Ooblique" },
-  { 0x0000d9, "Ugrave" },
-  { 0x0000da, "Uacute" },
-  { 0x0000db, "Ucircumflex" },
-  { 0x0000dc, "Udiaeresis" },
-  { 0x0000dd, "Yacute" },
-  { 0x0000de, "THORN" },
-  { 0x0000de, "Thorn" },
-  { 0x0000df, "ssharp" },
-  { 0x0000e0, "agrave" },
-  { 0x0000e1, "aacute" },
-  { 0x0000e2, "acircumflex" },
-  { 0x0000e3, "atilde" },
-  { 0x0000e4, "adiaeresis" },
-  { 0x0000e5, "aring" },
-  { 0x0000e6, "ae" },
-  { 0x0000e7, "ccedilla" },
-  { 0x0000e8, "egrave" },
-  { 0x0000e9, "eacute" },
-  { 0x0000ea, "ecircumflex" },
-  { 0x0000eb, "ediaeresis" },
-  { 0x0000ec, "igrave" },
-  { 0x0000ed, "iacute" },
-  { 0x0000ee, "icircumflex" },
-  { 0x0000ef, "idiaeresis" },
-  { 0x0000f0, "eth" },
-  { 0x0000f1, "ntilde" },
-  { 0x0000f2, "ograve" },
-  { 0x0000f3, "oacute" },
-  { 0x0000f4, "ocircumflex" },
-  { 0x0000f5, "otilde" },
-  { 0x0000f6, "odiaeresis" },
-  { 0x0000f7, "division" },
-  { 0x0000f8, "oslash" },
-  { 0x0000f9, "ugrave" },
-  { 0x0000fa, "uacute" },
-  { 0x0000fb, "ucircumflex" },
-  { 0x0000fc, "udiaeresis" },
-  { 0x0000fd, "yacute" },
-  { 0x0000fe, "thorn" },
-  { 0x0000ff, "ydiaeresis" },
-  { 0x0001a1, "Aogonek" },
-  { 0x0001a2, "breve" },
-  { 0x0001a3, "Lstroke" },
-  { 0x0001a5, "Lcaron" },
-  { 0x0001a6, "Sacute" },
-  { 0x0001a9, "Scaron" },
-  { 0x0001aa, "Scedilla" },
-  { 0x0001ab, "Tcaron" },
-  { 0x0001ac, "Zacute" },
-  { 0x0001ae, "Zcaron" },
-  { 0x0001af, "Zabovedot" },
-  { 0x0001b1, "aogonek" },
-  { 0x0001b2, "ogonek" },
-  { 0x0001b3, "lstroke" },
-  { 0x0001b5, "lcaron" },
-  { 0x0001b6, "sacute" },
-  { 0x0001b7, "caron" },
-  { 0x0001b9, "scaron" },
-  { 0x0001ba, "scedilla" },
-  { 0x0001bb, "tcaron" },
-  { 0x0001bc, "zacute" },
-  { 0x0001bd, "doubleacute" },
-  { 0x0001be, "zcaron" },
-  { 0x0001bf, "zabovedot" },
-  { 0x0001c0, "Racute" },
-  { 0x0001c3, "Abreve" },
-  { 0x0001c5, "Lacute" },
-  { 0x0001c6, "Cacute" },
-  { 0x0001c8, "Ccaron" },
-  { 0x0001ca, "Eogonek" },
-  { 0x0001cc, "Ecaron" },
-  { 0x0001cf, "Dcaron" },
-  { 0x0001d0, "Dstroke" },
-  { 0x0001d1, "Nacute" },
-  { 0x0001d2, "Ncaron" },
-  { 0x0001d5, "Odoubleacute" },
-  { 0x0001d8, "Rcaron" },
-  { 0x0001d9, "Uring" },
-  { 0x0001db, "Udoubleacute" },
-  { 0x0001de, "Tcedilla" },
-  { 0x0001e0, "racute" },
-  { 0x0001e3, "abreve" },
-  { 0x0001e5, "lacute" },
-  { 0x0001e6, "cacute" },
-  { 0x0001e8, "ccaron" },
-  { 0x0001ea, "eogonek" },
-  { 0x0001ec, "ecaron" },
-  { 0x0001ef, "dcaron" },
-  { 0x0001f0, "dstroke" },
-  { 0x0001f1, "nacute" },
-  { 0x0001f2, "ncaron" },
-  { 0x0001f5, "odoubleacute" },
-  { 0x0001f8, "rcaron" },
-  { 0x0001f9, "uring" },
-  { 0x0001fb, "udoubleacute" },
-  { 0x0001fe, "tcedilla" },
-  { 0x0001ff, "abovedot" },
-  { 0x0002a1, "Hstroke" },
-  { 0x0002a6, "Hcircumflex" },
-  { 0x0002a9, "Iabovedot" },
-  { 0x0002ab, "Gbreve" },
-  { 0x0002ac, "Jcircumflex" },
-  { 0x0002b1, "hstroke" },
-  { 0x0002b6, "hcircumflex" },
-  { 0x0002b9, "idotless" },
-  { 0x0002bb, "gbreve" },
-  { 0x0002bc, "jcircumflex" },
-  { 0x0002c5, "Cabovedot" },
-  { 0x0002c6, "Ccircumflex" },
-  { 0x0002d5, "Gabovedot" },
-  { 0x0002d8, "Gcircumflex" },
-  { 0x0002dd, "Ubreve" },
-  { 0x0002de, "Scircumflex" },
-  { 0x0002e5, "cabovedot" },
-  { 0x0002e6, "ccircumflex" },
-  { 0x0002f5, "gabovedot" },
-  { 0x0002f8, "gcircumflex" },
-  { 0x0002fd, "ubreve" },
-  { 0x0002fe, "scircumflex" },
-  { 0x0003a2, "kappa" },
-  { 0x0003a2, "kra" },
-  { 0x0003a3, "Rcedilla" },
-  { 0x0003a5, "Itilde" },
-  { 0x0003a6, "Lcedilla" },
-  { 0x0003aa, "Emacron" },
-  { 0x0003ab, "Gcedilla" },
-  { 0x0003ac, "Tslash" },
-  { 0x0003b3, "rcedilla" },
-  { 0x0003b5, "itilde" },
-  { 0x0003b6, "lcedilla" },
-  { 0x0003ba, "emacron" },
-  { 0x0003bb, "gcedilla" },
-  { 0x0003bc, "tslash" },
-  { 0x0003bd, "ENG" },
-  { 0x0003bf, "eng" },
-  { 0x0003c0, "Amacron" },
-  { 0x0003c7, "Iogonek" },
-  { 0x0003cc, "Eabovedot" },
-  { 0x0003cf, "Imacron" },
-  { 0x0003d1, "Ncedilla" },
-  { 0x0003d2, "Omacron" },
-  { 0x0003d3, "Kcedilla" },
-  { 0x0003d9, "Uogonek" },
-  { 0x0003dd, "Utilde" },
-  { 0x0003de, "Umacron" },
-  { 0x0003e0, "amacron" },
-  { 0x0003e7, "iogonek" },
-  { 0x0003ec, "eabovedot" },
-  { 0x0003ef, "imacron" },
-  { 0x0003f1, "ncedilla" },
-  { 0x0003f2, "omacron" },
-  { 0x0003f3, "kcedilla" },
-  { 0x0003f9, "uogonek" },
-  { 0x0003fd, "utilde" },
-  { 0x0003fe, "umacron" },
-  { 0x00047e, "overline" },
-  { 0x0004a1, "kana_fullstop" },
-  { 0x0004a2, "kana_openingbracket" },
-  { 0x0004a3, "kana_closingbracket" },
-  { 0x0004a4, "kana_comma" },
-  { 0x0004a5, "kana_conjunctive" },
-  { 0x0004a5, "kana_middledot" },
-  { 0x0004a6, "kana_WO" },
-  { 0x0004a7, "kana_a" },
-  { 0x0004a8, "kana_i" },
-  { 0x0004a9, "kana_u" },
-  { 0x0004aa, "kana_e" },
-  { 0x0004ab, "kana_o" },
-  { 0x0004ac, "kana_ya" },
-  { 0x0004ad, "kana_yu" },
-  { 0x0004ae, "kana_yo" },
-  { 0x0004af, "kana_tsu" },
-  { 0x0004af, "kana_tu" },
-  { 0x0004b0, "prolongedsound" },
-  { 0x0004b1, "kana_A" },
-  { 0x0004b2, "kana_I" },
-  { 0x0004b3, "kana_U" },
-  { 0x0004b4, "kana_E" },
-  { 0x0004b5, "kana_O" },
-  { 0x0004b6, "kana_KA" },
-  { 0x0004b7, "kana_KI" },
-  { 0x0004b8, "kana_KU" },
-  { 0x0004b9, "kana_KE" },
-  { 0x0004ba, "kana_KO" },
-  { 0x0004bb, "kana_SA" },
-  { 0x0004bc, "kana_SHI" },
-  { 0x0004bd, "kana_SU" },
-  { 0x0004be, "kana_SE" },
-  { 0x0004bf, "kana_SO" },
-  { 0x0004c0, "kana_TA" },
-  { 0x0004c1, "kana_CHI" },
-  { 0x0004c1, "kana_TI" },
-  { 0x0004c2, "kana_TSU" },
-  { 0x0004c2, "kana_TU" },
-  { 0x0004c3, "kana_TE" },
-  { 0x0004c4, "kana_TO" },
-  { 0x0004c5, "kana_NA" },
-  { 0x0004c6, "kana_NI" },
-  { 0x0004c7, "kana_NU" },
-  { 0x0004c8, "kana_NE" },
-  { 0x0004c9, "kana_NO" },
-  { 0x0004ca, "kana_HA" },
-  { 0x0004cb, "kana_HI" },
-  { 0x0004cc, "kana_FU" },
-  { 0x0004cc, "kana_HU" },
-  { 0x0004cd, "kana_HE" },
-  { 0x0004ce, "kana_HO" },
-  { 0x0004cf, "kana_MA" },
-  { 0x0004d0, "kana_MI" },
-  { 0x0004d1, "kana_MU" },
-  { 0x0004d2, "kana_ME" },
-  { 0x0004d3, "kana_MO" },
-  { 0x0004d4, "kana_YA" },
-  { 0x0004d5, "kana_YU" },
-  { 0x0004d6, "kana_YO" },
-  { 0x0004d7, "kana_RA" },
-  { 0x0004d8, "kana_RI" },
-  { 0x0004d9, "kana_RU" },
-  { 0x0004da, "kana_RE" },
-  { 0x0004db, "kana_RO" },
-  { 0x0004dc, "kana_WA" },
-  { 0x0004dd, "kana_N" },
-  { 0x0004de, "voicedsound" },
-  { 0x0004df, "semivoicedsound" },
-  { 0x0005ac, "Arabic_comma" },
-  { 0x0005bb, "Arabic_semicolon" },
-  { 0x0005bf, "Arabic_question_mark" },
-  { 0x0005c1, "Arabic_hamza" },
-  { 0x0005c2, "Arabic_maddaonalef" },
-  { 0x0005c3, "Arabic_hamzaonalef" },
-  { 0x0005c4, "Arabic_hamzaonwaw" },
-  { 0x0005c5, "Arabic_hamzaunderalef" },
-  { 0x0005c6, "Arabic_hamzaonyeh" },
-  { 0x0005c7, "Arabic_alef" },
-  { 0x0005c8, "Arabic_beh" },
-  { 0x0005c9, "Arabic_tehmarbuta" },
-  { 0x0005ca, "Arabic_teh" },
-  { 0x0005cb, "Arabic_theh" },
-  { 0x0005cc, "Arabic_jeem" },
-  { 0x0005cd, "Arabic_hah" },
-  { 0x0005ce, "Arabic_khah" },
-  { 0x0005cf, "Arabic_dal" },
-  { 0x0005d0, "Arabic_thal" },
-  { 0x0005d1, "Arabic_ra" },
-  { 0x0005d2, "Arabic_zain" },
-  { 0x0005d3, "Arabic_seen" },
-  { 0x0005d4, "Arabic_sheen" },
-  { 0x0005d5, "Arabic_sad" },
-  { 0x0005d6, "Arabic_dad" },
-  { 0x0005d7, "Arabic_tah" },
-  { 0x0005d8, "Arabic_zah" },
-  { 0x0005d9, "Arabic_ain" },
-  { 0x0005da, "Arabic_ghain" },
-  { 0x0005e0, "Arabic_tatweel" },
-  { 0x0005e1, "Arabic_feh" },
-  { 0x0005e2, "Arabic_qaf" },
-  { 0x0005e3, "Arabic_kaf" },
-  { 0x0005e4, "Arabic_lam" },
-  { 0x0005e5, "Arabic_meem" },
-  { 0x0005e6, "Arabic_noon" },
-  { 0x0005e7, "Arabic_ha" },
-  { 0x0005e7, "Arabic_heh" },
-  { 0x0005e8, "Arabic_waw" },
-  { 0x0005e9, "Arabic_alefmaksura" },
-  { 0x0005ea, "Arabic_yeh" },
-  { 0x0005eb, "Arabic_fathatan" },
-  { 0x0005ec, "Arabic_dammatan" },
-  { 0x0005ed, "Arabic_kasratan" },
-  { 0x0005ee, "Arabic_fatha" },
-  { 0x0005ef, "Arabic_damma" },
-  { 0x0005f0, "Arabic_kasra" },
-  { 0x0005f1, "Arabic_shadda" },
-  { 0x0005f2, "Arabic_sukun" },
-  { 0x0006a1, "Serbian_dje" },
-  { 0x0006a2, "Macedonia_gje" },
-  { 0x0006a3, "Cyrillic_io" },
-  { 0x0006a4, "Ukrainian_ie" },
-  { 0x0006a4, "Ukranian_je" },
-  { 0x0006a5, "Macedonia_dse" },
-  { 0x0006a6, "Ukrainian_i" },
-  { 0x0006a6, "Ukranian_i" },
-  { 0x0006a7, "Ukrainian_yi" },
-  { 0x0006a7, "Ukranian_yi" },
-  { 0x0006a8, "Cyrillic_je" },
-  { 0x0006a8, "Serbian_je" },
-  { 0x0006a9, "Cyrillic_lje" },
-  { 0x0006a9, "Serbian_lje" },
-  { 0x0006aa, "Cyrillic_nje" },
-  { 0x0006aa, "Serbian_nje" },
-  { 0x0006ab, "Serbian_tshe" },
-  { 0x0006ac, "Macedonia_kje" },
-  { 0x0006ae, "Byelorussian_shortu" },
-  { 0x0006af, "Cyrillic_dzhe" },
-  { 0x0006af, "Serbian_dze" },
-  { 0x0006b0, "numerosign" },
-  { 0x0006b1, "Serbian_DJE" },
-  { 0x0006b2, "Macedonia_GJE" },
-  { 0x0006b3, "Cyrillic_IO" },
-  { 0x0006b4, "Ukrainian_IE" },
-  { 0x0006b4, "Ukranian_JE" },
-  { 0x0006b5, "Macedonia_DSE" },
-  { 0x0006b6, "Ukrainian_I" },
-  { 0x0006b6, "Ukranian_I" },
-  { 0x0006b7, "Ukrainian_YI" },
-  { 0x0006b7, "Ukranian_YI" },
-  { 0x0006b8, "Cyrillic_JE" },
-  { 0x0006b8, "Serbian_JE" },
-  { 0x0006b9, "Cyrillic_LJE" },
-  { 0x0006b9, "Serbian_LJE" },
-  { 0x0006ba, "Cyrillic_NJE" },
-  { 0x0006ba, "Serbian_NJE" },
-  { 0x0006bb, "Serbian_TSHE" },
-  { 0x0006bc, "Macedonia_KJE" },
-  { 0x0006be, "Byelorussian_SHORTU" },
-  { 0x0006bf, "Cyrillic_DZHE" },
-  { 0x0006bf, "Serbian_DZE" },
-  { 0x0006c0, "Cyrillic_yu" },
-  { 0x0006c1, "Cyrillic_a" },
-  { 0x0006c2, "Cyrillic_be" },
-  { 0x0006c3, "Cyrillic_tse" },
-  { 0x0006c4, "Cyrillic_de" },
-  { 0x0006c5, "Cyrillic_ie" },
-  { 0x0006c6, "Cyrillic_ef" },
-  { 0x0006c7, "Cyrillic_ghe" },
-  { 0x0006c8, "Cyrillic_ha" },
-  { 0x0006c9, "Cyrillic_i" },
-  { 0x0006ca, "Cyrillic_shorti" },
-  { 0x0006cb, "Cyrillic_ka" },
-  { 0x0006cc, "Cyrillic_el" },
-  { 0x0006cd, "Cyrillic_em" },
-  { 0x0006ce, "Cyrillic_en" },
-  { 0x0006cf, "Cyrillic_o" },
-  { 0x0006d0, "Cyrillic_pe" },
-  { 0x0006d1, "Cyrillic_ya" },
-  { 0x0006d2, "Cyrillic_er" },
-  { 0x0006d3, "Cyrillic_es" },
-  { 0x0006d4, "Cyrillic_te" },
-  { 0x0006d5, "Cyrillic_u" },
-  { 0x0006d6, "Cyrillic_zhe" },
-  { 0x0006d7, "Cyrillic_ve" },
-  { 0x0006d8, "Cyrillic_softsign" },
-  { 0x0006d9, "Cyrillic_yeru" },
-  { 0x0006da, "Cyrillic_ze" },
-  { 0x0006db, "Cyrillic_sha" },
-  { 0x0006dc, "Cyrillic_e" },
-  { 0x0006dd, "Cyrillic_shcha" },
-  { 0x0006de, "Cyrillic_che" },
-  { 0x0006df, "Cyrillic_hardsign" },
-  { 0x0006e0, "Cyrillic_YU" },
-  { 0x0006e1, "Cyrillic_A" },
-  { 0x0006e2, "Cyrillic_BE" },
-  { 0x0006e3, "Cyrillic_TSE" },
-  { 0x0006e4, "Cyrillic_DE" },
-  { 0x0006e5, "Cyrillic_IE" },
-  { 0x0006e6, "Cyrillic_EF" },
-  { 0x0006e7, "Cyrillic_GHE" },
-  { 0x0006e8, "Cyrillic_HA" },
-  { 0x0006e9, "Cyrillic_I" },
-  { 0x0006ea, "Cyrillic_SHORTI" },
-  { 0x0006eb, "Cyrillic_KA" },
-  { 0x0006ec, "Cyrillic_EL" },
-  { 0x0006ed, "Cyrillic_EM" },
-  { 0x0006ee, "Cyrillic_EN" },
-  { 0x0006ef, "Cyrillic_O" },
-  { 0x0006f0, "Cyrillic_PE" },
-  { 0x0006f1, "Cyrillic_YA" },
-  { 0x0006f2, "Cyrillic_ER" },
-  { 0x0006f3, "Cyrillic_ES" },
-  { 0x0006f4, "Cyrillic_TE" },
-  { 0x0006f5, "Cyrillic_U" },
-  { 0x0006f6, "Cyrillic_ZHE" },
-  { 0x0006f7, "Cyrillic_VE" },
-  { 0x0006f8, "Cyrillic_SOFTSIGN" },
-  { 0x0006f9, "Cyrillic_YERU" },
-  { 0x0006fa, "Cyrillic_ZE" },
-  { 0x0006fb, "Cyrillic_SHA" },
-  { 0x0006fc, "Cyrillic_E" },
-  { 0x0006fd, "Cyrillic_SHCHA" },
-  { 0x0006fe, "Cyrillic_CHE" },
-  { 0x0006ff, "Cyrillic_HARDSIGN" },
-  { 0x0007a1, "Greek_ALPHAaccent" },
-  { 0x0007a2, "Greek_EPSILONaccent" },
-  { 0x0007a3, "Greek_ETAaccent" },
-  { 0x0007a4, "Greek_IOTAaccent" },
-  { 0x0007a5, "Greek_IOTAdiaeresis" },
-  { 0x0007a7, "Greek_OMICRONaccent" },
-  { 0x0007a8, "Greek_UPSILONaccent" },
-  { 0x0007a9, "Greek_UPSILONdieresis" },
-  { 0x0007ab, "Greek_OMEGAaccent" },
-  { 0x0007ae, "Greek_accentdieresis" },
-  { 0x0007af, "Greek_horizbar" },
-  { 0x0007b1, "Greek_alphaaccent" },
-  { 0x0007b2, "Greek_epsilonaccent" },
-  { 0x0007b3, "Greek_etaaccent" },
-  { 0x0007b4, "Greek_iotaaccent" },
-  { 0x0007b5, "Greek_iotadieresis" },
-  { 0x0007b6, "Greek_iotaaccentdieresis" },
-  { 0x0007b7, "Greek_omicronaccent" },
-  { 0x0007b8, "Greek_upsilonaccent" },
-  { 0x0007b9, "Greek_upsilondieresis" },
-  { 0x0007ba, "Greek_upsilonaccentdieresis" },
-  { 0x0007bb, "Greek_omegaaccent" },
-  { 0x0007c1, "Greek_ALPHA" },
-  { 0x0007c2, "Greek_BETA" },
-  { 0x0007c3, "Greek_GAMMA" },
-  { 0x0007c4, "Greek_DELTA" },
-  { 0x0007c5, "Greek_EPSILON" },
-  { 0x0007c6, "Greek_ZETA" },
-  { 0x0007c7, "Greek_ETA" },
-  { 0x0007c8, "Greek_THETA" },
-  { 0x0007c9, "Greek_IOTA" },
-  { 0x0007ca, "Greek_KAPPA" },
-  { 0x0007cb, "Greek_LAMBDA" },
-  { 0x0007cb, "Greek_LAMDA" },
-  { 0x0007cc, "Greek_MU" },
-  { 0x0007cd, "Greek_NU" },
-  { 0x0007ce, "Greek_XI" },
-  { 0x0007cf, "Greek_OMICRON" },
-  { 0x0007d0, "Greek_PI" },
-  { 0x0007d1, "Greek_RHO" },
-  { 0x0007d2, "Greek_SIGMA" },
-  { 0x0007d4, "Greek_TAU" },
-  { 0x0007d5, "Greek_UPSILON" },
-  { 0x0007d6, "Greek_PHI" },
-  { 0x0007d7, "Greek_CHI" },
-  { 0x0007d8, "Greek_PSI" },
-  { 0x0007d9, "Greek_OMEGA" },
-  { 0x0007e1, "Greek_alpha" },
-  { 0x0007e2, "Greek_beta" },
-  { 0x0007e3, "Greek_gamma" },
-  { 0x0007e4, "Greek_delta" },
-  { 0x0007e5, "Greek_epsilon" },
-  { 0x0007e6, "Greek_zeta" },
-  { 0x0007e7, "Greek_eta" },
-  { 0x0007e8, "Greek_theta" },
-  { 0x0007e9, "Greek_iota" },
-  { 0x0007ea, "Greek_kappa" },
-  { 0x0007eb, "Greek_lambda" },
-  { 0x0007eb, "Greek_lamda" },
-  { 0x0007ec, "Greek_mu" },
-  { 0x0007ed, "Greek_nu" },
-  { 0x0007ee, "Greek_xi" },
-  { 0x0007ef, "Greek_omicron" },
-  { 0x0007f0, "Greek_pi" },
-  { 0x0007f1, "Greek_rho" },
-  { 0x0007f2, "Greek_sigma" },
-  { 0x0007f3, "Greek_finalsmallsigma" },
-  { 0x0007f4, "Greek_tau" },
-  { 0x0007f5, "Greek_upsilon" },
-  { 0x0007f6, "Greek_phi" },
-  { 0x0007f7, "Greek_chi" },
-  { 0x0007f8, "Greek_psi" },
-  { 0x0007f9, "Greek_omega" },
-  { 0x0008a1, "leftradical" },
-  { 0x0008a2, "topleftradical" },
-  { 0x0008a3, "horizconnector" },
-  { 0x0008a4, "topintegral" },
-  { 0x0008a5, "botintegral" },
-  { 0x0008a6, "vertconnector" },
-  { 0x0008a7, "topleftsqbracket" },
-  { 0x0008a8, "botleftsqbracket" },
-  { 0x0008a9, "toprightsqbracket" },
-  { 0x0008aa, "botrightsqbracket" },
-  { 0x0008ab, "topleftparens" },
-  { 0x0008ac, "botleftparens" },
-  { 0x0008ad, "toprightparens" },
-  { 0x0008ae, "botrightparens" },
-  { 0x0008af, "leftmiddlecurlybrace" },
-  { 0x0008b0, "rightmiddlecurlybrace" },
-  { 0x0008b1, "topleftsummation" },
-  { 0x0008b2, "botleftsummation" },
-  { 0x0008b3, "topvertsummationconnector" },
-  { 0x0008b4, "botvertsummationconnector" },
-  { 0x0008b5, "toprightsummation" },
-  { 0x0008b6, "botrightsummation" },
-  { 0x0008b7, "rightmiddlesummation" },
-  { 0x0008bc, "lessthanequal" },
-  { 0x0008bd, "notequal" },
-  { 0x0008be, "greaterthanequal" },
-  { 0x0008bf, "integral" },
-  { 0x0008c0, "therefore" },
-  { 0x0008c1, "variation" },
-  { 0x0008c2, "infinity" },
-  { 0x0008c5, "nabla" },
-  { 0x0008c8, "approximate" },
-  { 0x0008c9, "similarequal" },
-  { 0x0008cd, "ifonlyif" },
-  { 0x0008ce, "implies" },
-  { 0x0008cf, "identical" },
-  { 0x0008d6, "radical" },
-  { 0x0008da, "includedin" },
-  { 0x0008db, "includes" },
-  { 0x0008dc, "intersection" },
-  { 0x0008dd, "union" },
-  { 0x0008de, "logicaland" },
-  { 0x0008df, "logicalor" },
-  { 0x0008ef, "partialderivative" },
-  { 0x0008f6, "function" },
-  { 0x0008fb, "leftarrow" },
-  { 0x0008fc, "uparrow" },
-  { 0x0008fd, "rightarrow" },
-  { 0x0008fe, "downarrow" },
-  { 0x0009df, "blank" },
-  { 0x0009e0, "soliddiamond" },
-  { 0x0009e1, "checkerboard" },
-  { 0x0009e2, "ht" },
-  { 0x0009e3, "ff" },
-  { 0x0009e4, "cr" },
-  { 0x0009e5, "lf" },
-  { 0x0009e8, "nl" },
-  { 0x0009e9, "vt" },
-  { 0x0009ea, "lowrightcorner" },
-  { 0x0009eb, "uprightcorner" },
-  { 0x0009ec, "upleftcorner" },
-  { 0x0009ed, "lowleftcorner" },
-  { 0x0009ee, "crossinglines" },
-  { 0x0009ef, "horizlinescan1" },
-  { 0x0009f0, "horizlinescan3" },
-  { 0x0009f1, "horizlinescan5" },
-  { 0x0009f2, "horizlinescan7" },
-  { 0x0009f3, "horizlinescan9" },
-  { 0x0009f4, "leftt" },
-  { 0x0009f5, "rightt" },
-  { 0x0009f6, "bott" },
-  { 0x0009f7, "topt" },
-  { 0x0009f8, "vertbar" },
-  { 0x000aa1, "emspace" },
-  { 0x000aa2, "enspace" },
-  { 0x000aa3, "em3space" },
-  { 0x000aa4, "em4space" },
-  { 0x000aa5, "digitspace" },
-  { 0x000aa6, "punctspace" },
-  { 0x000aa7, "thinspace" },
-  { 0x000aa8, "hairspace" },
-  { 0x000aa9, "emdash" },
-  { 0x000aaa, "endash" },
-  { 0x000aac, "signifblank" },
-  { 0x000aae, "ellipsis" },
-  { 0x000aaf, "doubbaselinedot" },
-  { 0x000ab0, "onethird" },
-  { 0x000ab1, "twothirds" },
-  { 0x000ab2, "onefifth" },
-  { 0x000ab3, "twofifths" },
-  { 0x000ab4, "threefifths" },
-  { 0x000ab5, "fourfifths" },
-  { 0x000ab6, "onesixth" },
-  { 0x000ab7, "fivesixths" },
-  { 0x000ab8, "careof" },
-  { 0x000abb, "figdash" },
-  { 0x000abc, "leftanglebracket" },
-  { 0x000abd, "decimalpoint" },
-  { 0x000abe, "rightanglebracket" },
-  { 0x000abf, "marker" },
-  { 0x000ac3, "oneeighth" },
-  { 0x000ac4, "threeeighths" },
-  { 0x000ac5, "fiveeighths" },
-  { 0x000ac6, "seveneighths" },
-  { 0x000ac9, "trademark" },
-  { 0x000aca, "signaturemark" },
-  { 0x000acb, "trademarkincircle" },
-  { 0x000acc, "leftopentriangle" },
-  { 0x000acd, "rightopentriangle" },
-  { 0x000ace, "emopencircle" },
-  { 0x000acf, "emopenrectangle" },
-  { 0x000ad0, "leftsinglequotemark" },
-  { 0x000ad1, "rightsinglequotemark" },
-  { 0x000ad2, "leftdoublequotemark" },
-  { 0x000ad3, "rightdoublequotemark" },
-  { 0x000ad4, "prescription" },
-  { 0x000ad6, "minutes" },
-  { 0x000ad7, "seconds" },
-  { 0x000ad9, "latincross" },
-  { 0x000ada, "hexagram" },
-  { 0x000adb, "filledrectbullet" },
-  { 0x000adc, "filledlefttribullet" },
-  { 0x000add, "filledrighttribullet" },
-  { 0x000ade, "emfilledcircle" },
-  { 0x000adf, "emfilledrect" },
-  { 0x000ae0, "enopencircbullet" },
-  { 0x000ae1, "enopensquarebullet" },
-  { 0x000ae2, "openrectbullet" },
-  { 0x000ae3, "opentribulletup" },
-  { 0x000ae4, "opentribulletdown" },
-  { 0x000ae5, "openstar" },
-  { 0x000ae6, "enfilledcircbullet" },
-  { 0x000ae7, "enfilledsqbullet" },
-  { 0x000ae8, "filledtribulletup" },
-  { 0x000ae9, "filledtribulletdown" },
-  { 0x000aea, "leftpointer" },
-  { 0x000aeb, "rightpointer" },
-  { 0x000aec, "club" },
-  { 0x000aed, "diamond" },
-  { 0x000aee, "heart" },
-  { 0x000af0, "maltesecross" },
-  { 0x000af1, "dagger" },
-  { 0x000af2, "doubledagger" },
-  { 0x000af3, "checkmark" },
-  { 0x000af4, "ballotcross" },
-  { 0x000af5, "musicalsharp" },
-  { 0x000af6, "musicalflat" },
-  { 0x000af7, "malesymbol" },
-  { 0x000af8, "femalesymbol" },
-  { 0x000af9, "telephone" },
-  { 0x000afa, "telephonerecorder" },
-  { 0x000afb, "phonographcopyright" },
-  { 0x000afc, "caret" },
-  { 0x000afd, "singlelowquotemark" },
-  { 0x000afe, "doublelowquotemark" },
-  { 0x000aff, "cursor" },
-  { 0x000ba3, "leftcaret" },
-  { 0x000ba6, "rightcaret" },
-  { 0x000ba8, "downcaret" },
-  { 0x000ba9, "upcaret" },
-  { 0x000bc0, "overbar" },
-  { 0x000bc2, "downtack" },
-  { 0x000bc3, "upshoe" },
-  { 0x000bc4, "downstile" },
-  { 0x000bc6, "underbar" },
-  { 0x000bca, "jot" },
-  { 0x000bcc, "quad" },
-  { 0x000bce, "uptack" },
-  { 0x000bcf, "circle" },
-  { 0x000bd3, "upstile" },
-  { 0x000bd6, "downshoe" },
-  { 0x000bd8, "rightshoe" },
-  { 0x000bda, "leftshoe" },
-  { 0x000bdc, "lefttack" },
-  { 0x000bfc, "righttack" },
-  { 0x000cdf, "hebrew_doublelowline" },
-  { 0x000ce0, "hebrew_aleph" },
-  { 0x000ce1, "hebrew_bet" },
-  { 0x000ce1, "hebrew_beth" },
-  { 0x000ce2, "hebrew_gimel" },
-  { 0x000ce2, "hebrew_gimmel" },
-  { 0x000ce3, "hebrew_dalet" },
-  { 0x000ce3, "hebrew_daleth" },
-  { 0x000ce4, "hebrew_he" },
-  { 0x000ce5, "hebrew_waw" },
-  { 0x000ce6, "hebrew_zain" },
-  { 0x000ce6, "hebrew_zayin" },
-  { 0x000ce7, "hebrew_chet" },
-  { 0x000ce7, "hebrew_het" },
-  { 0x000ce8, "hebrew_tet" },
-  { 0x000ce8, "hebrew_teth" },
-  { 0x000ce9, "hebrew_yod" },
-  { 0x000cea, "hebrew_finalkaph" },
-  { 0x000ceb, "hebrew_kaph" },
-  { 0x000cec, "hebrew_lamed" },
-  { 0x000ced, "hebrew_finalmem" },
-  { 0x000cee, "hebrew_mem" },
-  { 0x000cef, "hebrew_finalnun" },
-  { 0x000cf0, "hebrew_nun" },
-  { 0x000cf1, "hebrew_samech" },
-  { 0x000cf1, "hebrew_samekh" },
-  { 0x000cf2, "hebrew_ayin" },
-  { 0x000cf3, "hebrew_finalpe" },
-  { 0x000cf4, "hebrew_pe" },
-  { 0x000cf5, "hebrew_finalzade" },
-  { 0x000cf5, "hebrew_finalzadi" },
-  { 0x000cf6, "hebrew_zade" },
-  { 0x000cf6, "hebrew_zadi" },
-  { 0x000cf7, "hebrew_kuf" },
-  { 0x000cf7, "hebrew_qoph" },
-  { 0x000cf8, "hebrew_resh" },
-  { 0x000cf9, "hebrew_shin" },
-  { 0x000cfa, "hebrew_taf" },
-  { 0x000cfa, "hebrew_taw" },
-  { 0x000da1, "Thai_kokai" },
-  { 0x000da2, "Thai_khokhai" },
-  { 0x000da3, "Thai_khokhuat" },
-  { 0x000da4, "Thai_khokhwai" },
-  { 0x000da5, "Thai_khokhon" },
-  { 0x000da6, "Thai_khorakhang" },
-  { 0x000da7, "Thai_ngongu" },
-  { 0x000da8, "Thai_chochan" },
-  { 0x000da9, "Thai_choching" },
-  { 0x000daa, "Thai_chochang" },
-  { 0x000dab, "Thai_soso" },
-  { 0x000dac, "Thai_chochoe" },
-  { 0x000dad, "Thai_yoying" },
-  { 0x000dae, "Thai_dochada" },
-  { 0x000daf, "Thai_topatak" },
-  { 0x000db0, "Thai_thothan" },
-  { 0x000db1, "Thai_thonangmontho" },
-  { 0x000db2, "Thai_thophuthao" },
-  { 0x000db3, "Thai_nonen" },
-  { 0x000db4, "Thai_dodek" },
-  { 0x000db5, "Thai_totao" },
-  { 0x000db6, "Thai_thothung" },
-  { 0x000db7, "Thai_thothahan" },
-  { 0x000db8, "Thai_thothong" },
-  { 0x000db9, "Thai_nonu" },
-  { 0x000dba, "Thai_bobaimai" },
-  { 0x000dbb, "Thai_popla" },
-  { 0x000dbc, "Thai_phophung" },
-  { 0x000dbd, "Thai_fofa" },
-  { 0x000dbe, "Thai_phophan" },
-  { 0x000dbf, "Thai_fofan" },
-  { 0x000dc0, "Thai_phosamphao" },
-  { 0x000dc1, "Thai_moma" },
-  { 0x000dc2, "Thai_yoyak" },
-  { 0x000dc3, "Thai_rorua" },
-  { 0x000dc4, "Thai_ru" },
-  { 0x000dc5, "Thai_loling" },
-  { 0x000dc6, "Thai_lu" },
-  { 0x000dc7, "Thai_wowaen" },
-  { 0x000dc8, "Thai_sosala" },
-  { 0x000dc9, "Thai_sorusi" },
-  { 0x000dca, "Thai_sosua" },
-  { 0x000dcb, "Thai_hohip" },
-  { 0x000dcc, "Thai_lochula" },
-  { 0x000dcd, "Thai_oang" },
-  { 0x000dce, "Thai_honokhuk" },
-  { 0x000dcf, "Thai_paiyannoi" },
-  { 0x000dd0, "Thai_saraa" },
-  { 0x000dd1, "Thai_maihanakat" },
-  { 0x000dd2, "Thai_saraaa" },
-  { 0x000dd3, "Thai_saraam" },
-  { 0x000dd4, "Thai_sarai" },
-  { 0x000dd5, "Thai_saraii" },
-  { 0x000dd6, "Thai_saraue" },
-  { 0x000dd7, "Thai_sarauee" },
-  { 0x000dd8, "Thai_sarau" },
-  { 0x000dd9, "Thai_sarauu" },
-  { 0x000dda, "Thai_phinthu" },
-  { 0x000dde, "Thai_maihanakat_maitho" },
-  { 0x000ddf, "Thai_baht" },
-  { 0x000de0, "Thai_sarae" },
-  { 0x000de1, "Thai_saraae" },
-  { 0x000de2, "Thai_sarao" },
-  { 0x000de3, "Thai_saraaimaimuan" },
-  { 0x000de4, "Thai_saraaimaimalai" },
-  { 0x000de5, "Thai_lakkhangyao" },
-  { 0x000de6, "Thai_maiyamok" },
-  { 0x000de7, "Thai_maitaikhu" },
-  { 0x000de8, "Thai_maiek" },
-  { 0x000de9, "Thai_maitho" },
-  { 0x000dea, "Thai_maitri" },
-  { 0x000deb, "Thai_maichattawa" },
-  { 0x000dec, "Thai_thanthakhat" },
-  { 0x000ded, "Thai_nikhahit" },
-  { 0x000df0, "Thai_leksun" },
-  { 0x000df1, "Thai_leknung" },
-  { 0x000df2, "Thai_leksong" },
-  { 0x000df3, "Thai_leksam" },
-  { 0x000df4, "Thai_leksi" },
-  { 0x000df5, "Thai_lekha" },
-  { 0x000df6, "Thai_lekhok" },
-  { 0x000df7, "Thai_lekchet" },
-  { 0x000df8, "Thai_lekpaet" },
-  { 0x000df9, "Thai_lekkao" },
-  { 0x000ea1, "Hangul_Kiyeog" },
-  { 0x000ea2, "Hangul_SsangKiyeog" },
-  { 0x000ea3, "Hangul_KiyeogSios" },
-  { 0x000ea4, "Hangul_Nieun" },
-  { 0x000ea5, "Hangul_NieunJieuj" },
-  { 0x000ea6, "Hangul_NieunHieuh" },
-  { 0x000ea7, "Hangul_Dikeud" },
-  { 0x000ea8, "Hangul_SsangDikeud" },
-  { 0x000ea9, "Hangul_Rieul" },
-  { 0x000eaa, "Hangul_RieulKiyeog" },
-  { 0x000eab, "Hangul_RieulMieum" },
-  { 0x000eac, "Hangul_RieulPieub" },
-  { 0x000ead, "Hangul_RieulSios" },
-  { 0x000eae, "Hangul_RieulTieut" },
-  { 0x000eaf, "Hangul_RieulPhieuf" },
-  { 0x000eb0, "Hangul_RieulHieuh" },
-  { 0x000eb1, "Hangul_Mieum" },
-  { 0x000eb2, "Hangul_Pieub" },
-  { 0x000eb3, "Hangul_SsangPieub" },
-  { 0x000eb4, "Hangul_PieubSios" },
-  { 0x000eb5, "Hangul_Sios" },
-  { 0x000eb6, "Hangul_SsangSios" },
-  { 0x000eb7, "Hangul_Ieung" },
-  { 0x000eb8, "Hangul_Jieuj" },
-  { 0x000eb9, "Hangul_SsangJieuj" },
-  { 0x000eba, "Hangul_Cieuc" },
-  { 0x000ebb, "Hangul_Khieuq" },
-  { 0x000ebc, "Hangul_Tieut" },
-  { 0x000ebd, "Hangul_Phieuf" },
-  { 0x000ebe, "Hangul_Hieuh" },
-  { 0x000ebf, "Hangul_A" },
-  { 0x000ec0, "Hangul_AE" },
-  { 0x000ec1, "Hangul_YA" },
-  { 0x000ec2, "Hangul_YAE" },
-  { 0x000ec3, "Hangul_EO" },
-  { 0x000ec4, "Hangul_E" },
-  { 0x000ec5, "Hangul_YEO" },
-  { 0x000ec6, "Hangul_YE" },
-  { 0x000ec7, "Hangul_O" },
-  { 0x000ec8, "Hangul_WA" },
-  { 0x000ec9, "Hangul_WAE" },
-  { 0x000eca, "Hangul_OE" },
-  { 0x000ecb, "Hangul_YO" },
-  { 0x000ecc, "Hangul_U" },
-  { 0x000ecd, "Hangul_WEO" },
-  { 0x000ece, "Hangul_WE" },
-  { 0x000ecf, "Hangul_WI" },
-  { 0x000ed0, "Hangul_YU" },
-  { 0x000ed1, "Hangul_EU" },
-  { 0x000ed2, "Hangul_YI" },
-  { 0x000ed3, "Hangul_I" },
-  { 0x000ed4, "Hangul_J_Kiyeog" },
-  { 0x000ed5, "Hangul_J_SsangKiyeog" },
-  { 0x000ed6, "Hangul_J_KiyeogSios" },
-  { 0x000ed7, "Hangul_J_Nieun" },
-  { 0x000ed8, "Hangul_J_NieunJieuj" },
-  { 0x000ed9, "Hangul_J_NieunHieuh" },
-  { 0x000eda, "Hangul_J_Dikeud" },
-  { 0x000edb, "Hangul_J_Rieul" },
-  { 0x000edc, "Hangul_J_RieulKiyeog" },
-  { 0x000edd, "Hangul_J_RieulMieum" },
-  { 0x000ede, "Hangul_J_RieulPieub" },
-  { 0x000edf, "Hangul_J_RieulSios" },
-  { 0x000ee0, "Hangul_J_RieulTieut" },
-  { 0x000ee1, "Hangul_J_RieulPhieuf" },
-  { 0x000ee2, "Hangul_J_RieulHieuh" },
-  { 0x000ee3, "Hangul_J_Mieum" },
-  { 0x000ee4, "Hangul_J_Pieub" },
-  { 0x000ee5, "Hangul_J_PieubSios" },
-  { 0x000ee6, "Hangul_J_Sios" },
-  { 0x000ee7, "Hangul_J_SsangSios" },
-  { 0x000ee8, "Hangul_J_Ieung" },
-  { 0x000ee9, "Hangul_J_Jieuj" },
-  { 0x000eea, "Hangul_J_Cieuc" },
-  { 0x000eeb, "Hangul_J_Khieuq" },
-  { 0x000eec, "Hangul_J_Tieut" },
-  { 0x000eed, "Hangul_J_Phieuf" },
-  { 0x000eee, "Hangul_J_Hieuh" },
-  { 0x000eef, "Hangul_RieulYeorinHieuh" },
-  { 0x000ef0, "Hangul_SunkyeongeumMieum" },
-  { 0x000ef1, "Hangul_SunkyeongeumPieub" },
-  { 0x000ef2, "Hangul_PanSios" },
-  { 0x000ef3, "Hangul_KkogjiDalrinIeung" },
-  { 0x000ef4, "Hangul_SunkyeongeumPhieuf" },
-  { 0x000ef5, "Hangul_YeorinHieuh" },
-  { 0x000ef6, "Hangul_AraeA" },
-  { 0x000ef7, "Hangul_AraeAE" },
-  { 0x000ef8, "Hangul_J_PanSios" },
-  { 0x000ef9, "Hangul_J_KkogjiDalrinIeung" },
-  { 0x000efa, "Hangul_J_YeorinHieuh" },
-  { 0x000eff, "Korean_Won" },
-  { 0x0013bc, "OE" },
-  { 0x0013bd, "oe" },
-  { 0x0013be, "Ydiaeresis" },
-  { 0x0020a0, "EcuSign" },
-  { 0x0020a1, "ColonSign" },
-  { 0x0020a2, "CruzeiroSign" },
-  { 0x0020a3, "FFrancSign" },
-  { 0x0020a4, "LiraSign" },
-  { 0x0020a5, "MillSign" },
-  { 0x0020a6, "NairaSign" },
-  { 0x0020a7, "PesetaSign" },
-  { 0x0020a8, "RupeeSign" },
-  { 0x0020a9, "WonSign" },
-  { 0x0020aa, "NewSheqelSign" },
-  { 0x0020ab, "DongSign" },
-  { 0x0020ac, "EuroSign" },
-  { 0x00fd01, "3270_Duplicate" },
-  { 0x00fd02, "3270_FieldMark" },
-  { 0x00fd03, "3270_Right2" },
-  { 0x00fd04, "3270_Left2" },
-  { 0x00fd05, "3270_BackTab" },
-  { 0x00fd06, "3270_EraseEOF" },
-  { 0x00fd07, "3270_EraseInput" },
-  { 0x00fd08, "3270_Reset" },
-  { 0x00fd09, "3270_Quit" },
-  { 0x00fd0a, "3270_PA1" },
-  { 0x00fd0b, "3270_PA2" },
-  { 0x00fd0c, "3270_PA3" },
-  { 0x00fd0d, "3270_Test" },
-  { 0x00fd0e, "3270_Attn" },
-  { 0x00fd0f, "3270_CursorBlink" },
-  { 0x00fd10, "3270_AltCursor" },
-  { 0x00fd11, "3270_KeyClick" },
-  { 0x00fd12, "3270_Jump" },
-  { 0x00fd13, "3270_Ident" },
-  { 0x00fd14, "3270_Rule" },
-  { 0x00fd15, "3270_Copy" },
-  { 0x00fd16, "3270_Play" },
-  { 0x00fd17, "3270_Setup" },
-  { 0x00fd18, "3270_Record" },
-  { 0x00fd19, "3270_ChangeScreen" },
-  { 0x00fd1a, "3270_DeleteWord" },
-  { 0x00fd1b, "3270_ExSelect" },
-  { 0x00fd1c, "3270_CursorSelect" },
-  { 0x00fd1d, "3270_PrintScreen" },
-  { 0x00fd1e, "3270_Enter" },
-  { 0x00fe01, "ISO_Lock" },
-  { 0x00fe02, "ISO_Level2_Latch" },
-  { 0x00fe03, "ISO_Level3_Shift" },
-  { 0x00fe04, "ISO_Level3_Latch" },
-  { 0x00fe05, "ISO_Level3_Lock" },
-  { 0x00fe06, "ISO_Group_Latch" },
-  { 0x00fe07, "ISO_Group_Lock" },
-  { 0x00fe08, "ISO_Next_Group" },
-  { 0x00fe09, "ISO_Next_Group_Lock" },
-  { 0x00fe0a, "ISO_Prev_Group" },
-  { 0x00fe0b, "ISO_Prev_Group_Lock" },
-  { 0x00fe0c, "ISO_First_Group" },
-  { 0x00fe0d, "ISO_First_Group_Lock" },
-  { 0x00fe0e, "ISO_Last_Group" },
-  { 0x00fe0f, "ISO_Last_Group_Lock" },
-  { 0x00fe20, "ISO_Left_Tab" },
-  { 0x00fe21, "ISO_Move_Line_Up" },
-  { 0x00fe22, "ISO_Move_Line_Down" },
-  { 0x00fe23, "ISO_Partial_Line_Up" },
-  { 0x00fe24, "ISO_Partial_Line_Down" },
-  { 0x00fe25, "ISO_Partial_Space_Left" },
-  { 0x00fe26, "ISO_Partial_Space_Right" },
-  { 0x00fe27, "ISO_Set_Margin_Left" },
-  { 0x00fe28, "ISO_Set_Margin_Right" },
-  { 0x00fe29, "ISO_Release_Margin_Left" },
-  { 0x00fe2a, "ISO_Release_Margin_Right" },
-  { 0x00fe2b, "ISO_Release_Both_Margins" },
-  { 0x00fe2c, "ISO_Fast_Cursor_Left" },
-  { 0x00fe2d, "ISO_Fast_Cursor_Right" },
-  { 0x00fe2e, "ISO_Fast_Cursor_Up" },
-  { 0x00fe2f, "ISO_Fast_Cursor_Down" },
-  { 0x00fe30, "ISO_Continuous_Underline" },
-  { 0x00fe31, "ISO_Discontinuous_Underline" },
-  { 0x00fe32, "ISO_Emphasize" },
-  { 0x00fe33, "ISO_Center_Object" },
-  { 0x00fe34, "ISO_Enter" },
-  { 0x00fe50, "dead_grave" },
-  { 0x00fe51, "dead_acute" },
-  { 0x00fe52, "dead_circumflex" },
-  { 0x00fe53, "dead_tilde" },
-  { 0x00fe54, "dead_macron" },
-  { 0x00fe55, "dead_breve" },
-  { 0x00fe56, "dead_abovedot" },
-  { 0x00fe57, "dead_diaeresis" },
-  { 0x00fe58, "dead_abovering" },
-  { 0x00fe59, "dead_doubleacute" },
-  { 0x00fe5a, "dead_caron" },
-  { 0x00fe5b, "dead_cedilla" },
-  { 0x00fe5c, "dead_ogonek" },
-  { 0x00fe5d, "dead_iota" },
-  { 0x00fe5e, "dead_voiced_sound" },
-  { 0x00fe5f, "dead_semivoiced_sound" },
-  { 0x00fe60, "dead_belowdot" },
-  { 0x00fe70, "AccessX_Enable" },
-  { 0x00fe71, "AccessX_Feedback_Enable" },
-  { 0x00fe72, "RepeatKeys_Enable" },
-  { 0x00fe73, "SlowKeys_Enable" },
-  { 0x00fe74, "BounceKeys_Enable" },
-  { 0x00fe75, "StickyKeys_Enable" },
-  { 0x00fe76, "MouseKeys_Enable" },
-  { 0x00fe77, "MouseKeys_Accel_Enable" },
-  { 0x00fe78, "Overlay1_Enable" },
-  { 0x00fe79, "Overlay2_Enable" },
-  { 0x00fe7a, "AudibleBell_Enable" },
-  { 0x00fed0, "First_Virtual_Screen" },
-  { 0x00fed1, "Prev_Virtual_Screen" },
-  { 0x00fed2, "Next_Virtual_Screen" },
-  { 0x00fed4, "Last_Virtual_Screen" },
-  { 0x00fed5, "Terminate_Server" },
-  { 0x00fee0, "Pointer_Left" },
-  { 0x00fee1, "Pointer_Right" },
-  { 0x00fee2, "Pointer_Up" },
-  { 0x00fee3, "Pointer_Down" },
-  { 0x00fee4, "Pointer_UpLeft" },
-  { 0x00fee5, "Pointer_UpRight" },
-  { 0x00fee6, "Pointer_DownLeft" },
-  { 0x00fee7, "Pointer_DownRight" },
-  { 0x00fee8, "Pointer_Button_Dflt" },
-  { 0x00fee9, "Pointer_Button1" },
-  { 0x00feea, "Pointer_Button2" },
-  { 0x00feeb, "Pointer_Button3" },
-  { 0x00feec, "Pointer_Button4" },
-  { 0x00feed, "Pointer_Button5" },
-  { 0x00feee, "Pointer_DblClick_Dflt" },
-  { 0x00feef, "Pointer_DblClick1" },
-  { 0x00fef0, "Pointer_DblClick2" },
-  { 0x00fef1, "Pointer_DblClick3" },
-  { 0x00fef2, "Pointer_DblClick4" },
-  { 0x00fef3, "Pointer_DblClick5" },
-  { 0x00fef4, "Pointer_Drag_Dflt" },
-  { 0x00fef5, "Pointer_Drag1" },
-  { 0x00fef6, "Pointer_Drag2" },
-  { 0x00fef7, "Pointer_Drag3" },
-  { 0x00fef8, "Pointer_Drag4" },
-  { 0x00fef9, "Pointer_EnableKeys" },
-  { 0x00fefa, "Pointer_Accelerate" },
-  { 0x00fefb, "Pointer_DfltBtnNext" },
-  { 0x00fefc, "Pointer_DfltBtnPrev" },
-  { 0x00fefd, "Pointer_Drag5" },
-  { 0x00ff08, "BackSpace" },
-  { 0x00ff09, "Tab" },
-  { 0x00ff0a, "Linefeed" },
-  { 0x00ff0b, "Clear" },
-  { 0x00ff0d, "Return" },
-  { 0x00ff13, "Pause" },
-  { 0x00ff14, "Scroll_Lock" },
-  { 0x00ff15, "Sys_Req" },
-  { 0x00ff1b, "Escape" },
-  { 0x00ff20, "Multi_key" },
-  { 0x00ff21, "Kanji" },
-  { 0x00ff22, "Muhenkan" },
-  { 0x00ff23, "Henkan" },
-  { 0x00ff23, "Henkan_Mode" },
-  { 0x00ff24, "Romaji" },
-  { 0x00ff25, "Hiragana" },
-  { 0x00ff26, "Katakana" },
-  { 0x00ff27, "Hiragana_Katakana" },
-  { 0x00ff28, "Zenkaku" },
-  { 0x00ff29, "Hankaku" },
-  { 0x00ff2a, "Zenkaku_Hankaku" },
-  { 0x00ff2b, "Touroku" },
-  { 0x00ff2c, "Massyo" },
-  { 0x00ff2d, "Kana_Lock" },
-  { 0x00ff2e, "Kana_Shift" },
-  { 0x00ff2f, "Eisu_Shift" },
-  { 0x00ff30, "Eisu_toggle" },
-  { 0x00ff31, "Hangul" },
-  { 0x00ff32, "Hangul_Start" },
-  { 0x00ff33, "Hangul_End" },
-  { 0x00ff34, "Hangul_Hanja" },
-  { 0x00ff35, "Hangul_Jamo" },
-  { 0x00ff36, "Hangul_Romaja" },
-  { 0x00ff37, "Codeinput" },
-  { 0x00ff38, "Hangul_Jeonja" },
-  { 0x00ff39, "Hangul_Banja" },
-  { 0x00ff3a, "Hangul_PreHanja" },
-  { 0x00ff3b, "Hangul_PostHanja" },
-  { 0x00ff3c, "SingleCandidate" },
-  { 0x00ff3d, "MultipleCandidate" },
-  { 0x00ff3e, "PreviousCandidate" },
-  { 0x00ff3f, "Hangul_Special" },
-  { 0x00ff50, "Home" },
-  { 0x00ff51, "Left" },
-  { 0x00ff52, "Up" },
-  { 0x00ff53, "Right" },
-  { 0x00ff54, "Down" },
-  { 0x00ff55, "Page_Up" },
-  { 0x00ff55, "Prior" },
-  { 0x00ff56, "Next" },
-  { 0x00ff56, "Page_Down" },
-  { 0x00ff57, "End" },
-  { 0x00ff58, "Begin" },
-  { 0x00ff60, "Select" },
-  { 0x00ff61, "Print" },
-  { 0x00ff62, "Execute" },
-  { 0x00ff63, "Insert" },
-  { 0x00ff65, "Undo" },
-  { 0x00ff66, "Redo" },
-  { 0x00ff67, "Menu" },
-  { 0x00ff68, "Find" },
-  { 0x00ff69, "Cancel" },
-  { 0x00ff6a, "Help" },
-  { 0x00ff6b, "Break" },
-  { 0x00ff7e, "Arabic_switch" },
-  { 0x00ff7e, "Greek_switch" },
-  { 0x00ff7e, "Hangul_switch" },
-  { 0x00ff7e, "Hebrew_switch" },
-  { 0x00ff7e, "ISO_Group_Shift" },
-  { 0x00ff7e, "Mode_switch" },
-  { 0x00ff7e, "kana_switch" },
-  { 0x00ff7e, "script_switch" },
-  { 0x00ff7f, "Num_Lock" },
-  { 0x00ff80, "KP_Space" },
-  { 0x00ff89, "KP_Tab" },
-  { 0x00ff8d, "KP_Enter" },
-  { 0x00ff91, "KP_F1" },
-  { 0x00ff92, "KP_F2" },
-  { 0x00ff93, "KP_F3" },
-  { 0x00ff94, "KP_F4" },
-  { 0x00ff95, "KP_Home" },
-  { 0x00ff96, "KP_Left" },
-  { 0x00ff97, "KP_Up" },
-  { 0x00ff98, "KP_Right" },
-  { 0x00ff99, "KP_Down" },
-  { 0x00ff9a, "KP_Page_Up" },
-  { 0x00ff9a, "KP_Prior" },
-  { 0x00ff9b, "KP_Next" },
-  { 0x00ff9b, "KP_Page_Down" },
-  { 0x00ff9c, "KP_End" },
-  { 0x00ff9d, "KP_Begin" },
-  { 0x00ff9e, "KP_Insert" },
-  { 0x00ff9f, "KP_Delete" },
-  { 0x00ffaa, "KP_Multiply" },
-  { 0x00ffab, "KP_Add" },
-  { 0x00ffac, "KP_Separator" },
-  { 0x00ffad, "KP_Subtract" },
-  { 0x00ffae, "KP_Decimal" },
-  { 0x00ffaf, "KP_Divide" },
-  { 0x00ffb0, "KP_0" },
-  { 0x00ffb1, "KP_1" },
-  { 0x00ffb2, "KP_2" },
-  { 0x00ffb3, "KP_3" },
-  { 0x00ffb4, "KP_4" },
-  { 0x00ffb5, "KP_5" },
-  { 0x00ffb6, "KP_6" },
-  { 0x00ffb7, "KP_7" },
-  { 0x00ffb8, "KP_8" },
-  { 0x00ffb9, "KP_9" },
-  { 0x00ffbd, "KP_Equal" },
-  { 0x00ffbe, "F1" },
-  { 0x00ffbf, "F2" },
-  { 0x00ffc0, "F3" },
-  { 0x00ffc1, "F4" },
-  { 0x00ffc2, "F5" },
-  { 0x00ffc3, "F6" },
-  { 0x00ffc4, "F7" },
-  { 0x00ffc5, "F8" },
-  { 0x00ffc6, "F9" },
-  { 0x00ffc7, "F10" },
-  { 0x00ffc8, "F11" },
-  { 0x00ffc9, "F12" },
-  { 0x00ffca, "F13" },
-  { 0x00ffcb, "F14" },
-  { 0x00ffcc, "F15" },
-  { 0x00ffcd, "F16" },
-  { 0x00ffce, "F17" },
-  { 0x00ffcf, "F18" },
-  { 0x00ffd0, "F19" },
-  { 0x00ffd1, "F20" },
-  { 0x00ffd2, "F21" },
-  { 0x00ffd3, "F22" },
-  { 0x00ffd4, "F23" },
-  { 0x00ffd5, "F24" },
-  { 0x00ffd6, "F25" },
-  { 0x00ffd7, "F26" },
-  { 0x00ffd8, "F27" },
-  { 0x00ffd9, "F28" },
-  { 0x00ffda, "F29" },
-  { 0x00ffdb, "F30" },
-  { 0x00ffdc, "F31" },
-  { 0x00ffdd, "F32" },
-  { 0x00ffde, "F33" },
-  { 0x00ffdf, "F34" },
-  { 0x00ffe0, "F35" },
-  { 0x00ffe1, "Shift_L" },
-  { 0x00ffe2, "Shift_R" },
-  { 0x00ffe3, "Control_L" },
-  { 0x00ffe4, "Control_R" },
-  { 0x00ffe5, "Caps_Lock" },
-  { 0x00ffe6, "Shift_Lock" },
-  { 0x00ffe7, "Meta_L" },
-  { 0x00ffe8, "Meta_R" },
-  { 0x00ffe9, "Alt_L" },
-  { 0x00ffea, "Alt_R" },
-  { 0x00ffeb, "Super_L" },
-  { 0x00ffec, "Super_R" },
-  { 0x00ffed, "Hyper_L" },
-  { 0x00ffee, "Hyper_R" },
-  { 0x00ffff, "Delete" },
-  { 0xffffff, "VoidSymbol" },
-};
-
-#define GDK_NUM_KEYS (sizeof (gdk_keys_by_keyval) / sizeof (gdk_keys_by_keyval[0]))
-
-static struct gdk_key *gdk_keys_by_name = NULL;
-
-static int
-gdk_keys_keyval_compare (const void *pkey, const void *pbase)
-{
-  return (*(int *) pkey) - ((struct gdk_key *) pbase)->keyval;
-}
-
-gchar*
-gdk_keyval_name (guint       keyval)
-{
-  struct gdk_key *found =
-    bsearch (&keyval, gdk_keys_by_keyval,
-            GDK_NUM_KEYS, sizeof (struct gdk_key),
-            gdk_keys_keyval_compare);
-  if (found != NULL)
-    return (gchar *) found->name;
-  else
-    return NULL;
-}
-
-static int 
-gdk_key_compare_by_name (const void *a, const void *b)
-{
-  return strcmp (((const struct gdk_key *) a)->name, ((const struct gdk_key *) b)->name);
-}
-
-static int
-gdk_keys_name_compare (const void *pkey, const void *pbase)
-{
-  return strcmp ((const char *) pkey, ((const struct gdk_key *) pbase)->name);
-}
-
-guint
-gdk_keyval_from_name (const gchar *keyval_name)
-{
-  struct gdk_key *found;
-
-  g_return_val_if_fail (keyval_name != NULL, 0);
-  
-  if (gdk_keys_by_name == NULL)
-    {
-      gdk_keys_by_name = g_new (struct gdk_key, GDK_NUM_KEYS);
-
-      memcpy (gdk_keys_by_name, gdk_keys_by_keyval,
-             GDK_NUM_KEYS * sizeof (struct gdk_key));
-
-      qsort (gdk_keys_by_name, GDK_NUM_KEYS, sizeof (struct gdk_key),
-            gdk_key_compare_by_name);
-    }
-
-  found = bsearch (keyval_name, gdk_keys_by_name,
-                  GDK_NUM_KEYS, sizeof (struct gdk_key),
-                  gdk_keys_name_compare);
-  if (found != NULL)
-    return found->keyval;
-  else
-    return GDK_VoidSymbol;
-}
-
-guint
-gdk_keyval_to_upper (guint       keyval)
-{
-  if (keyval)
-    {
-      KeySym lower_val = 0;
-      KeySym upper_val = 0;
-      
-      gdkx_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;
-      
-      gdkx_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;
-      
-      gdkx_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;
-      
-      gdkx_XConvertCase (keyval, &lower_val, &upper_val);
-      return lower_val == keyval;
-    }
-  return TRUE;
-}
-
-
-void
-gdk_threads_enter ()
-{
-  GDK_THREADS_ENTER ();
-}
-
-void
-gdk_threads_leave ()
-{
-  GDK_THREADS_LEAVE ();
-}
diff --git a/gdk/win32/gdkpixmap-win32.c b/gdk/win32/gdkpixmap-win32.c
deleted file mode 100644 (file)
index a78fca9..0000000
+++ /dev/null
@@ -1,1002 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1998-1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "gdkpixmap.h"
-#include "gdkprivate.h"
-#include "gdkx.h"
-
-typedef struct
-{
-  gchar *color_string;
-  GdkColor color;
-  gint transparent;
-} _GdkPixmapColor;
-
-typedef struct
-{
-  guint ncolors;
-  GdkColormap *colormap;
-  gulong pixels[1];
-} _GdkPixmapInfo;
-
-GdkPixmap*
-gdk_pixmap_new (GdkWindow *window,
-               gint       width,
-               gint       height,
-               gint       depth)
-{
-  GdkPixmap *pixmap;
-  GdkDrawablePrivate *private;
-  GdkWindowPrivate *window_private;
-  struct {
-    BITMAPINFOHEADER bmiHeader;
-    union {
-      WORD bmiIndices[256];
-      DWORD bmiMasks[3];
-      RGBQUAD bmiColors[256];
-    } u;
-  } bmi;
-  UINT iUsage;
-  HDC hdc;
-  GdkVisual *visual;
-  guchar *bits;
-  gint i;
-
-  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;
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-  window_private = (GdkWindowPrivate*) window;
-
-  if (depth == -1)
-    depth = gdk_drawable_get_visual (window)->depth;
-
-  GDK_NOTE (MISC, g_print ("gdk_pixmap_new: %dx%dx%d\n",
-                          width, height, depth));
-
-  private = g_new0 (GdkDrawablePrivate, 1);
-  pixmap = (GdkPixmap*) private;
-
-  private->window_type = GDK_DRAWABLE_PIXMAP;
-
-  visual = gdk_drawable_get_visual (window);
-
-  if ((hdc = GetDC (GDK_DRAWABLE_XID (window))) == NULL)
-    {
-      g_warning ("gdk_pixmap_new: GetDC failed");
-      g_free (private);
-      return NULL;
-    }
-
-  bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-  bmi.bmiHeader.biWidth = width;
-  bmi.bmiHeader.biHeight = -height;
-  bmi.bmiHeader.biPlanes = 1;
-  if (depth == 15)
-    bmi.bmiHeader.biBitCount = 16;
-  else
-    bmi.bmiHeader.biBitCount = depth;
-#if 1
-  if (depth == 16)
-    bmi.bmiHeader.biCompression = BI_BITFIELDS;
-  else
-#endif
-    bmi.bmiHeader.biCompression = BI_RGB;
-  bmi.bmiHeader.biSizeImage = 0;
-  bmi.bmiHeader.biXPelsPerMeter =
-    bmi.bmiHeader.biYPelsPerMeter = 0;
-  bmi.bmiHeader.biClrUsed = 0;
-  bmi.bmiHeader.biClrImportant = 0;
-
-  iUsage = DIB_RGB_COLORS;
-  if (depth == 1)
-    {
-      bmi.u.bmiColors[0].rgbBlue =
-       bmi.u.bmiColors[0].rgbGreen =
-       bmi.u.bmiColors[0].rgbRed = 0x00;
-      bmi.u.bmiColors[0].rgbReserved = 0x00;
-
-      bmi.u.bmiColors[1].rgbBlue =
-       bmi.u.bmiColors[1].rgbGreen =
-      bmi.u.bmiColors[1].rgbRed = 0xFF;
-      bmi.u.bmiColors[1].rgbReserved = 0x00;
-      private->colormap = NULL;
-    }
-  else
-    {
-      private->colormap = window_private->drawable.colormap;
-      if (private->colormap == NULL)
-       private->colormap = gdk_colormap_get_system ();
-
-      if (depth == 8)
-       {
-         iUsage = DIB_PAL_COLORS;
-         for (i = 0; i < 256; i++)
-           bmi.u.bmiIndices[i] = i;
-       }
-      else
-       {
-         if (depth != visual->depth)
-           g_warning ("gdk_pixmap_new: depth %d doesn't match display depth %d",
-                      depth, visual->depth);
-#if 1
-         if (depth == 16)
-           {
-             bmi.u.bmiMasks[0] = visual->red_mask;
-             bmi.u.bmiMasks[1] = visual->green_mask;
-             bmi.u.bmiMasks[2] = visual->blue_mask;
-           }
-#endif
-       }
-    }
-  if ((private->xwindow =
-       CreateDIBSection (hdc, (BITMAPINFO *) &bmi,
-                        iUsage, (PVOID *) &bits, NULL, 0)) == NULL)
-    {
-      g_warning ("gdk_pixmap_new: CreateDIBSection failed: %d", GetLastError ());
-      ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-      g_free (private);
-      return NULL;
-    }
-  ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-
-  GDK_NOTE (MISC, g_print ("... = %#x\n", private->xwindow));
-
-  private->width = width;
-  private->height = height;
-  private->ref_count = 1;
-  private->destroyed = 0;
-
-  gdk_xid_table_insert (&private->xwindow, pixmap);
-
-  return pixmap;
-}
-
-GdkPixmap *
-gdk_pixmap_create_on_shared_image (GdkImage **image_return,
-                                  GdkWindow *window,
-                                  GdkVisual *visual,
-                                  gint       width,
-                                  gint       height,
-                                  gint       depth)
-{
-  GdkPixmap *pixmap;
-  GdkImagePrivate *image_private;
-  GdkDrawablePrivate *private;
-  GdkWindowPrivate *window_private;
-
-  g_return_val_if_fail (window != NULL, NULL);
-
-  window_private = (GdkWindowPrivate *) window;
-
-  if (depth == 1)
-    *image_return = gdk_image_bitmap_new (GDK_IMAGE_SHARED_PIXMAP, visual, width, height);
-  else
-    {
-      g_return_val_if_fail (depth == visual->depth, NULL);
-      *image_return = gdk_image_new (GDK_IMAGE_SHARED_PIXMAP, visual, width, height);
-    }
-
-  g_return_val_if_fail (*image_return != NULL, NULL);
-
-  image_private = (GdkImagePrivate *) *image_return;
-
-  private = g_new0 (GdkDrawablePrivate, 1);
-  pixmap = (GdkPixmap*) private;
-
-  private->xwindow = image_private->ximage;
-  private->window_type = GDK_DRAWABLE_PIXMAP;
-  private->colormap = window_private->drawable.colormap;
-  private->width = width;
-  private->height = height;
-  private->ref_count = 1;
-  private->destroyed = 0;
-
-  gdk_xid_table_insert (&private->xwindow, pixmap);
-
-  GDK_NOTE (MISC,
-           g_print ("gdk_pixmap_create_on_shared_image: %dx%dx%d = %#x\n",
-                    width, height, depth, private->xwindow));
-
-  return pixmap;
-}
-
-static unsigned char mirror[256] = {
-  0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
-  0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
-  0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
-  0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
-  0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
-  0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
-  0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
-  0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
-  0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
-  0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
-  0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
-  0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
-  0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
-  0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
-  0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
-  0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
-  0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
-  0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
-  0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
-  0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
-  0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
-  0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
-  0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
-  0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
-  0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
-  0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
-  0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
-  0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
-  0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
-  0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
-  0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
-  0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
-};
-
-GdkPixmap *
-gdk_bitmap_create_from_data (GdkWindow   *window,
-                            const gchar *data,
-                            gint         width,
-                            gint         height)
-{
-  GdkPixmap *pixmap;
-  GdkDrawablePrivate *private;
-  gint i, j, bpl, aligned_bpl;
-  guchar *bits;
-
-  g_return_val_if_fail (data != NULL, NULL);
-  g_return_val_if_fail ((width != 0) && (height != 0), NULL);
-  g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
-
-  if (!window)
-    window = (GdkWindow*) gdk_root_parent;
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-
-  private = g_new0 (GdkDrawablePrivate, 1);
-  pixmap = (GdkPixmap*) private;
-
-  private->window_type = GDK_DRAWABLE_PIXMAP;
-  private->width = width;
-  private->height = height;
-  private->ref_count = 1;
-  private->destroyed = FALSE;
-
-  bpl = ((width - 1) / 8 + 1);
-  aligned_bpl = ((bpl - 1) / 2 + 1) * 2;
-  bits = g_malloc (aligned_bpl * height);
-  for (i = 0; i < height; i++)
-    for (j = 0; j < bpl; j++)
-      bits[i*aligned_bpl + j] = mirror[(guchar) data[i*bpl + j]];
-  private->xwindow = CreateBitmap (width, height, 1, 1, bits);
-
-  GDK_NOTE (MISC, g_print ("gdk_bitmap_create_from_data: %dx%d = %#x\n",
-                          width, height, private->xwindow));
-
-  g_free (bits);
-
-  private->colormap = NULL;
-  gdk_xid_table_insert (&private->xwindow, pixmap);
-
-  return pixmap;
-}
-
-GdkPixmap*
-gdk_pixmap_create_from_data (GdkWindow   *window,
-                            const gchar *data,
-                            gint         width,
-                            gint         height,
-                            gint         depth,
-                            GdkColor    *fg,
-                            GdkColor    *bg)
-{
-  /* Oh wow. I struggled with dozens of lines of code trying to get
-   * this right using a monochrome Win32 bitmap created from data, and
-   * a colour DIB section as the result, trying setting pens,
-   * background colors, whatnot and BitBlt:ing.  Nope. Then finally I
-   * realized it's much easier to do it using gdk...:
-   */
-
-  GdkPixmap *result = gdk_pixmap_new (window, width, height, depth);
-  GdkPixmap *source = gdk_bitmap_create_from_data (window, data, width, height);
-  GdkGC *gc = gdk_gc_new (result);
-  gdk_gc_set_foreground (gc, fg);
-  gdk_gc_set_background (gc, bg);
-  gdk_draw_pixmap (result, gc, source, 0, 0, 0, 0, width, height);
-  gdk_pixmap_unref (source);
-  gdk_gc_unref (gc);
-
-  GDK_NOTE (MISC, g_print ("gdk_pixmap_create_from_data: %dx%dx%d = %#x\n",
-                          width, height, depth,
-                          GDK_DRAWABLE_XID (result)));
-  return result;
-}
-
-static gint
-gdk_pixmap_seek_string (FILE  *infile,
-                        const gchar *str,
-                        gint   skip_comments)
-{
-  char instr[1024];
-
-  while (!feof (infile))
-    {
-      fscanf (infile, "%1023s", instr);
-      if (skip_comments == TRUE && strcmp (instr, "/*") == 0)
-        {
-          fscanf (infile, "%1023s", instr);
-          while (!feof (infile) && strcmp (instr, "*/") != 0)
-            fscanf (infile, "%1023s", instr);
-          fscanf(infile, "%1023s", instr);
-        }
-      if (strcmp (instr, str)==0)
-        return TRUE;
-    }
-
-  return FALSE;
-}
-
-static gint
-gdk_pixmap_seek_char (FILE  *infile,
-                      gchar  c)
-{
-  gint b, oldb;
-
-  while ((b = getc(infile)) != EOF)
-    {
-      if (c != b && b == '/')
-       {
-         b = getc (infile);
-         if (b == EOF)
-           return FALSE;
-         else if (b == '*')    /* we have a comment */
-           {
-             b = -1;
-             do
-               {
-                 oldb = b;
-                 b = getc (infile);
-                 if (b == EOF)
-                   return FALSE;
-               }
-             while (!(oldb == '*' && b == '/'));
-           }
-        }
-      else if (c == b)
-       return TRUE;
-    }
-  return FALSE;
-}
-
-static gint
-gdk_pixmap_read_string (FILE  *infile,
-                        gchar **buffer,
-                       guint *buffer_size)
-{
-  gint c;
-  guint cnt = 0, bufsiz, ret = FALSE;
-  gchar *buf;
-
-  buf = *buffer;
-  bufsiz = *buffer_size;
-  if (buf == NULL)
-    {
-      bufsiz = 10 * sizeof (gchar);
-      buf = g_new(gchar, bufsiz);
-    }
-
-  do
-    c = getc (infile);
-  while (c != EOF && c != '"');
-
-  if (c != '"')
-    goto out;
-
-  while ((c = getc(infile)) != EOF)
-    {
-      if (cnt == bufsiz)
-       {
-         guint new_size = bufsiz * 2;
-         if (new_size > bufsiz)
-           bufsiz = new_size;
-         else
-           goto out;
-       
-         buf = (gchar *) g_realloc (buf, bufsiz);
-         buf[bufsiz-1] = '\0';
-       }
-
-      if (c != '"')
-        buf[cnt++] = c;
-      else
-        {
-          buf[cnt] = 0;
-         ret = TRUE;
-         break;
-        }
-    }
-
- out:
-  buf[bufsiz-1] = '\0';                /* ensure null termination for errors */
-  *buffer = buf;
-  *buffer_size = bufsiz;
-  return ret;
-}
-
-static gchar*
-gdk_pixmap_skip_whitespaces (gchar *buffer)
-{
-  gint32 index = 0;
-
-  while (buffer[index] != 0 && (buffer[index] == 0x20 || buffer[index] == 0x09))
-    index++;
-
-  return &buffer[index];
-}
-
-static gchar*
-gdk_pixmap_skip_string (gchar *buffer)
-{
-  gint32 index = 0;
-
-  while (buffer[index] != 0 && buffer[index] != 0x20 && buffer[index] != 0x09)
-    index++;
-
-  return &buffer[index];
-}
-
-#define MAX_COLOR_LEN 120
-
-static gchar*
-gdk_pixmap_extract_color (gchar *buffer)
-{
-  gint counter, numnames;
-  gchar *ptr = NULL, ch, temp[128];
-  gchar color[MAX_COLOR_LEN], *retcol;
-  gint space;
-
-  counter = 0;
-  while (ptr == NULL)
-    {
-      if (buffer[counter] == 'c')
-        {
-          ch = buffer[counter + 1];
-          if (ch == 0x20 || ch == 0x09)
-            ptr = &buffer[counter + 1];
-        }
-      else if (buffer[counter] == 0)
-        return NULL;
-
-      counter++;
-    }
-
-  ptr = gdk_pixmap_skip_whitespaces (ptr);
-
-  if (ptr[0] == 0)
-    return NULL;
-  else if (ptr[0] == '#')
-    {
-      counter = 1;
-      while (ptr[counter] != 0 &&
-             ((ptr[counter] >= '0' && ptr[counter] <= '9') ||
-              (ptr[counter] >= 'a' && ptr[counter] <= 'f') ||
-              (ptr[counter] >= 'A' && ptr[counter] <= 'F')))
-        counter++;
-
-      retcol = g_new (gchar, counter+1);
-      strncpy (retcol, ptr, counter);
-
-      retcol[counter] = 0;
-
-      return retcol;
-    }
-
-  color[0] = 0;
-  numnames = 0;
-
-  space = MAX_COLOR_LEN - 1;
-  while (space > 0)
-    {
-      sscanf (ptr, "%127s", temp);
-
-      if (((gint)ptr[0] == 0) ||
-         (strcmp ("s", temp) == 0) || (strcmp ("m", temp) == 0) ||
-          (strcmp ("g", temp) == 0) || (strcmp ("g4", temp) == 0))
-       {
-         break;
-       }
-      else
-        {
-          if (numnames > 0)
-           {
-             space -= 1;
-             strcat (color, " ");
-           }
-         strncat (color, temp, space);
-         space -= MIN (space, strlen (temp));
-          ptr = gdk_pixmap_skip_string (ptr);
-          ptr = gdk_pixmap_skip_whitespaces (ptr);
-          numnames++;
-        }
-    }
-
-  retcol = g_strdup (color);
-  return retcol;
-}
-
-
-enum buffer_op
-{
-  op_header,
-  op_cmap,
-  op_body
-};
-
-
-static void
-gdk_xpm_destroy_notify (gpointer data)
-{
-  _GdkPixmapInfo *info = (_GdkPixmapInfo *)data;
-  GdkColor color;
-  int i;
-
-  for (i=0; i<info->ncolors; i++)
-    {
-      color.pixel = info->pixels[i];
-      gdk_colormap_free_colors (info->colormap, &color, 1);
-    }
-
-  gdk_colormap_unref (info->colormap);
-  g_free (info);
-}
-
-static GdkPixmap *
-_gdk_pixmap_create_from_xpm (GdkWindow   *window,
-                            GdkColormap *colormap,
-                            GdkBitmap  **mask,
-                            GdkColor    *transparent_color,
-                            gchar *    (*get_buf) (enum buffer_op op,
-                                                   gpointer       handle),
-                            gpointer     handle)
-{
-  GdkPixmap *pixmap = NULL;
-  GdkImage *image = NULL;
-  GdkVisual *visual;
-  GdkGC *gc = NULL;
-  GdkColor tmp_color;
-  gint width, height, num_cols, cpp, n, ns, cnt, xcnt, ycnt, wbytes;
-  gchar *buffer, pixel_str[32];
-  gchar *name_buf;
-  _GdkPixmapColor *color = NULL, *fallbackcolor = NULL;
-  _GdkPixmapColor *colors = NULL;
-  gulong index;
-  GHashTable *color_hash = NULL;
-  _GdkPixmapInfo *color_info = NULL;
-
-  if ((window == NULL) && (colormap == NULL))
-    g_warning ("Creating pixmap from xpm with NULL window and colormap");
-
-  if (window == NULL)
-    window = (GdkWindow *) gdk_root_parent;
-
-  if (colormap == NULL)
-    {
-      colormap = gdk_window_get_colormap (window);
-      visual = gdk_window_get_visual (window);
-    }
-  else
-    visual = ((GdkColormapPrivate *)colormap)->visual;
-
-  buffer = (*get_buf) (op_header, handle);
-  if (buffer == NULL)
-    return NULL;
-
-  sscanf (buffer,"%d %d %d %d", &width, &height, &num_cols, &cpp);
-  if (cpp >= 32)
-    {
-      g_warning ("Pixmap has more than 31 characters per color");
-      return NULL;
-    }
-
-  color_hash = g_hash_table_new (g_str_hash, g_str_equal);
-
-  if (transparent_color == NULL)
-    {
-      gdk_color_white (colormap, &tmp_color);
-      transparent_color = &tmp_color;
-    }
-
-  /* For pseudo-color and grayscale visuals, we have to remember
-   * the colors we allocated, so we can free them later.
-   */
-  if ((visual->type == GDK_VISUAL_PSEUDO_COLOR) ||
-      (visual->type == GDK_VISUAL_GRAYSCALE))
-    {
-      color_info = g_malloc (sizeof (_GdkPixmapInfo) +
-                            sizeof(gulong) * (num_cols - 1));
-      color_info->ncolors = num_cols;
-      color_info->colormap = colormap;
-      gdk_colormap_ref (colormap);
-    }
-
-  name_buf = g_new (gchar, num_cols * (cpp+1));
-  colors = g_new (_GdkPixmapColor, num_cols);
-
-  for (cnt = 0; cnt < num_cols; cnt++)
-    {
-      gchar *color_name;
-
-      buffer = (*get_buf) (op_cmap, handle);
-      if (buffer == NULL)
-       goto error;
-
-      color = &colors[cnt];
-      color->color_string = &name_buf [cnt * (cpp + 1)];
-      strncpy (color->color_string, buffer, cpp);
-      color->color_string[cpp] = 0;
-      buffer += strlen (color->color_string);
-      color->transparent = FALSE;
-
-      color_name = gdk_pixmap_extract_color (buffer);
-
-      if (color_name == NULL ||
-         gdk_color_parse (color_name, &color->color) == FALSE)
-       {
-         color->color = *transparent_color;
-         color->transparent = TRUE;
-       }
-
-      g_free (color_name);
-
-      /* FIXME: The remaining slowness appears to happen in this
-         function. */
-      gdk_color_alloc (colormap, &color->color);
-
-      if (color_info)
-       color_info->pixels[cnt] = color->color.pixel;
-
-      g_hash_table_insert (color_hash, color->color_string, color);
-      if (cnt == 0)
-       fallbackcolor = color;
-    }
-
-  index = 0;
-  image = gdk_image_new (GDK_IMAGE_FASTEST, visual, width, height);
-
-  if (mask)
-    {
-      /* The pixmap mask is just a bits pattern.
-       * Color 0 is used for background and 1 for foreground.
-       * We don't care about the colormap, we just need 0 and 1.
-       */
-      GdkColor mask_pattern;
-
-      *mask = gdk_pixmap_new (window, width, height, 1);
-      gc = gdk_gc_new (*mask);
-
-      mask_pattern.pixel = 0;
-      gdk_gc_set_foreground (gc, &mask_pattern);
-      gdk_draw_rectangle (*mask, gc, TRUE, 0, 0, -1, -1);
-
-      mask_pattern.pixel = 1;
-      gdk_gc_set_foreground (gc, &mask_pattern);
-    }
-
-  wbytes = width * cpp;
-  for (ycnt = 0; ycnt < height; ycnt++)
-    {
-      buffer = (*get_buf) (op_body, handle);
-
-      /* FIXME: this slows things down a little - it could be
-       * integrated into the strncpy below, perhaps. OTOH, strlen
-       * is fast.
-       */
-      if ((buffer == NULL) || strlen (buffer) < wbytes)
-       continue;
-
-      for (n = 0, cnt = 0, xcnt = 0; n < wbytes; n += cpp, xcnt++)
-       {
-         strncpy (pixel_str, &buffer[n], cpp);
-         pixel_str[cpp] = 0;
-         ns = 0;
-       
-         color = g_hash_table_lookup (color_hash, pixel_str);
-       
-         if (!color) /* screwed up XPM file */
-           color = fallbackcolor;
-       
-         gdk_image_put_pixel (image, xcnt, ycnt, color->color.pixel);
-       
-         if (mask && color->transparent)
-           {
-             if (cnt < xcnt)
-               gdk_draw_line (*mask, gc, cnt, ycnt, xcnt - 1, ycnt);
-             cnt = xcnt + 1;
-           }
-       }
-
-      if (mask && (cnt < xcnt))
-       gdk_draw_line (*mask, gc, cnt, ycnt, xcnt - 1, ycnt);
-    }
-
- error:
-
-  if (mask)
-    gdk_gc_destroy (gc);
-
-  if (image != NULL)
-    {
-      pixmap = gdk_pixmap_new (window, width, height, visual->depth);
-
-      if (color_info)
-       gdk_drawable_set_data (pixmap, "gdk-xpm", color_info,
-                              gdk_xpm_destroy_notify);
-
-      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);
-    }
-  else if (color_info)
-    gdk_xpm_destroy_notify (color_info);
-
-  if (color_hash != NULL)
-    g_hash_table_destroy (color_hash);
-
-  if (colors != NULL)
-    g_free (colors);
-
-  if (name_buf != NULL)
-    g_free (name_buf);
-
-  return pixmap;
-}
-
-
-struct file_handle
-{
-  FILE *infile;
-  gchar *buffer;
-  guint buffer_size;
-};
-
-
-static gchar *
-file_buffer (enum buffer_op op, gpointer handle)
-{
-  struct file_handle *h = handle;
-
-  switch (op)
-    {
-    case op_header:
-      if (gdk_pixmap_seek_string (h->infile, "XPM", FALSE) != TRUE)
-       break;
-
-      if (gdk_pixmap_seek_char (h->infile,'{') != TRUE)
-       break;
-      /* Fall through to the next gdk_pixmap_seek_char. */
-
-    case op_cmap:
-      gdk_pixmap_seek_char (h->infile, '"');
-      fseek (h->infile, -1, SEEK_CUR);
-      /* Fall through to the gdk_pixmap_read_string. */
-
-    case op_body:
-      gdk_pixmap_read_string (h->infile, &h->buffer, &h->buffer_size);
-      return h->buffer;
-    }
-  return 0;
-}
-
-GdkPixmap*
-gdk_pixmap_colormap_create_from_xpm (GdkWindow   *window,
-                                    GdkColormap *colormap,
-                                    GdkBitmap  **mask,
-                                    GdkColor    *transparent_color,
-                                    const gchar *filename)
-{
-  struct file_handle h;
-  GdkPixmap *pixmap = NULL;
-
-  memset (&h, 0, sizeof (h));
-  h.infile = fopen (filename, "rb");
-  if (h.infile != NULL)
-    {
-      pixmap = _gdk_pixmap_create_from_xpm (window, colormap, mask,
-                                           transparent_color,
-                                           file_buffer, &h);
-      fclose (h.infile);
-      g_free (h.buffer);
-    }
-
-  return pixmap;
-}
-
-GdkPixmap*
-gdk_pixmap_create_from_xpm (GdkWindow  *window,
-                           GdkBitmap **mask,
-                           GdkColor   *transparent_color,
-                           const gchar *filename)
-{
-  return gdk_pixmap_colormap_create_from_xpm (window, NULL, mask,
-                                      transparent_color, filename);
-}
-
-struct mem_handle
-{
-  gchar **data;
-  int offset;
-};
-
-
-static gchar *
-mem_buffer (enum buffer_op op, gpointer handle)
-{
-  struct mem_handle *h = handle;
-  switch (op)
-    {
-    case op_header:
-    case op_cmap:
-    case op_body:
-      if (h->data[h->offset])
-       return h->data[h->offset ++];
-    }
-  return 0;
-}
-
-GdkPixmap*
-gdk_pixmap_colormap_create_from_xpm_d (GdkWindow  *window,
-                                      GdkColormap *colormap,
-                                      GdkBitmap **mask,
-                                      GdkColor   *transparent_color,
-                                      gchar     **data)
-{
-  struct mem_handle h;
-  GdkPixmap *pixmap = NULL;
-
-  memset (&h, 0, sizeof (h));
-  h.data = data;
-  pixmap = _gdk_pixmap_create_from_xpm (window, colormap, mask,
-                                       transparent_color,
-                                       mem_buffer, &h);
-  return pixmap;
-}
-
-GdkPixmap*
-gdk_pixmap_create_from_xpm_d (GdkWindow  *window,
-                             GdkBitmap **mask,
-                             GdkColor   *transparent_color,
-                             gchar     **data)
-{
-  return gdk_pixmap_colormap_create_from_xpm_d (window, NULL, mask,
-                                               transparent_color, data);
-}
-
-GdkPixmap*
-gdk_pixmap_foreign_new (guint32 anid)
-{
-  GdkPixmap *pixmap;
-  GdkDrawablePrivate *private;
-  GdkWindowPrivate *window_private;
-  HBITMAP xpixmap;
-  SIZE size;
-  unsigned int x_ret, y_ret, w_ret, h_ret, bw_ret, depth_ret;
-
-  /* check to make sure we were passed something at
-     least a little sane */
-  g_return_val_if_fail((anid != 0), NULL);
-
-  /* set the pixmap to the passed in value */
-  xpixmap = (HBITMAP) anid;
-  /* get the root window */
-  window_private = gdk_root_parent;
-
-  /* get information about the BITMAP to fill in the structure for
-     the gdk window */
-  GetBitmapDimensionEx (xpixmap, &size);
-  w_ret = size.cx;
-  h_ret = size.cy;
-
-  /* allocate a new gdk pixmap */
-  private = g_new (GdkDrawablePrivate, 1);
-  pixmap = (GdkPixmap *)private;
-
-  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);
-
-  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;
-
-  GDK_NOTE (MISC, g_print ("gdk_pixmap_unref: %#x %d%s\n",
-                          private->xwindow, private->ref_count,
-                          (private->ref_count == 0 ? " freeing" : "")));
-
-  if (private->ref_count == 0)
-    {
-      if (!DeleteObject (private->xwindow))
-       g_warning ("gdk_pixmap_unref: DeleteObject failed");
-      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/win32/gdkpixmap.c b/gdk/win32/gdkpixmap.c
deleted file mode 100644 (file)
index a78fca9..0000000
+++ /dev/null
@@ -1,1002 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1998-1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "gdkpixmap.h"
-#include "gdkprivate.h"
-#include "gdkx.h"
-
-typedef struct
-{
-  gchar *color_string;
-  GdkColor color;
-  gint transparent;
-} _GdkPixmapColor;
-
-typedef struct
-{
-  guint ncolors;
-  GdkColormap *colormap;
-  gulong pixels[1];
-} _GdkPixmapInfo;
-
-GdkPixmap*
-gdk_pixmap_new (GdkWindow *window,
-               gint       width,
-               gint       height,
-               gint       depth)
-{
-  GdkPixmap *pixmap;
-  GdkDrawablePrivate *private;
-  GdkWindowPrivate *window_private;
-  struct {
-    BITMAPINFOHEADER bmiHeader;
-    union {
-      WORD bmiIndices[256];
-      DWORD bmiMasks[3];
-      RGBQUAD bmiColors[256];
-    } u;
-  } bmi;
-  UINT iUsage;
-  HDC hdc;
-  GdkVisual *visual;
-  guchar *bits;
-  gint i;
-
-  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;
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-  window_private = (GdkWindowPrivate*) window;
-
-  if (depth == -1)
-    depth = gdk_drawable_get_visual (window)->depth;
-
-  GDK_NOTE (MISC, g_print ("gdk_pixmap_new: %dx%dx%d\n",
-                          width, height, depth));
-
-  private = g_new0 (GdkDrawablePrivate, 1);
-  pixmap = (GdkPixmap*) private;
-
-  private->window_type = GDK_DRAWABLE_PIXMAP;
-
-  visual = gdk_drawable_get_visual (window);
-
-  if ((hdc = GetDC (GDK_DRAWABLE_XID (window))) == NULL)
-    {
-      g_warning ("gdk_pixmap_new: GetDC failed");
-      g_free (private);
-      return NULL;
-    }
-
-  bmi.bmiHeader.biSize = sizeof (BITMAPINFOHEADER);
-  bmi.bmiHeader.biWidth = width;
-  bmi.bmiHeader.biHeight = -height;
-  bmi.bmiHeader.biPlanes = 1;
-  if (depth == 15)
-    bmi.bmiHeader.biBitCount = 16;
-  else
-    bmi.bmiHeader.biBitCount = depth;
-#if 1
-  if (depth == 16)
-    bmi.bmiHeader.biCompression = BI_BITFIELDS;
-  else
-#endif
-    bmi.bmiHeader.biCompression = BI_RGB;
-  bmi.bmiHeader.biSizeImage = 0;
-  bmi.bmiHeader.biXPelsPerMeter =
-    bmi.bmiHeader.biYPelsPerMeter = 0;
-  bmi.bmiHeader.biClrUsed = 0;
-  bmi.bmiHeader.biClrImportant = 0;
-
-  iUsage = DIB_RGB_COLORS;
-  if (depth == 1)
-    {
-      bmi.u.bmiColors[0].rgbBlue =
-       bmi.u.bmiColors[0].rgbGreen =
-       bmi.u.bmiColors[0].rgbRed = 0x00;
-      bmi.u.bmiColors[0].rgbReserved = 0x00;
-
-      bmi.u.bmiColors[1].rgbBlue =
-       bmi.u.bmiColors[1].rgbGreen =
-      bmi.u.bmiColors[1].rgbRed = 0xFF;
-      bmi.u.bmiColors[1].rgbReserved = 0x00;
-      private->colormap = NULL;
-    }
-  else
-    {
-      private->colormap = window_private->drawable.colormap;
-      if (private->colormap == NULL)
-       private->colormap = gdk_colormap_get_system ();
-
-      if (depth == 8)
-       {
-         iUsage = DIB_PAL_COLORS;
-         for (i = 0; i < 256; i++)
-           bmi.u.bmiIndices[i] = i;
-       }
-      else
-       {
-         if (depth != visual->depth)
-           g_warning ("gdk_pixmap_new: depth %d doesn't match display depth %d",
-                      depth, visual->depth);
-#if 1
-         if (depth == 16)
-           {
-             bmi.u.bmiMasks[0] = visual->red_mask;
-             bmi.u.bmiMasks[1] = visual->green_mask;
-             bmi.u.bmiMasks[2] = visual->blue_mask;
-           }
-#endif
-       }
-    }
-  if ((private->xwindow =
-       CreateDIBSection (hdc, (BITMAPINFO *) &bmi,
-                        iUsage, (PVOID *) &bits, NULL, 0)) == NULL)
-    {
-      g_warning ("gdk_pixmap_new: CreateDIBSection failed: %d", GetLastError ());
-      ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-      g_free (private);
-      return NULL;
-    }
-  ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-
-  GDK_NOTE (MISC, g_print ("... = %#x\n", private->xwindow));
-
-  private->width = width;
-  private->height = height;
-  private->ref_count = 1;
-  private->destroyed = 0;
-
-  gdk_xid_table_insert (&private->xwindow, pixmap);
-
-  return pixmap;
-}
-
-GdkPixmap *
-gdk_pixmap_create_on_shared_image (GdkImage **image_return,
-                                  GdkWindow *window,
-                                  GdkVisual *visual,
-                                  gint       width,
-                                  gint       height,
-                                  gint       depth)
-{
-  GdkPixmap *pixmap;
-  GdkImagePrivate *image_private;
-  GdkDrawablePrivate *private;
-  GdkWindowPrivate *window_private;
-
-  g_return_val_if_fail (window != NULL, NULL);
-
-  window_private = (GdkWindowPrivate *) window;
-
-  if (depth == 1)
-    *image_return = gdk_image_bitmap_new (GDK_IMAGE_SHARED_PIXMAP, visual, width, height);
-  else
-    {
-      g_return_val_if_fail (depth == visual->depth, NULL);
-      *image_return = gdk_image_new (GDK_IMAGE_SHARED_PIXMAP, visual, width, height);
-    }
-
-  g_return_val_if_fail (*image_return != NULL, NULL);
-
-  image_private = (GdkImagePrivate *) *image_return;
-
-  private = g_new0 (GdkDrawablePrivate, 1);
-  pixmap = (GdkPixmap*) private;
-
-  private->xwindow = image_private->ximage;
-  private->window_type = GDK_DRAWABLE_PIXMAP;
-  private->colormap = window_private->drawable.colormap;
-  private->width = width;
-  private->height = height;
-  private->ref_count = 1;
-  private->destroyed = 0;
-
-  gdk_xid_table_insert (&private->xwindow, pixmap);
-
-  GDK_NOTE (MISC,
-           g_print ("gdk_pixmap_create_on_shared_image: %dx%dx%d = %#x\n",
-                    width, height, depth, private->xwindow));
-
-  return pixmap;
-}
-
-static unsigned char mirror[256] = {
-  0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0,
-  0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0,
-  0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8,
-  0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8,
-  0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4,
-  0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4,
-  0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec,
-  0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc,
-  0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2,
-  0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2,
-  0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea,
-  0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa,
-  0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6,
-  0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6,
-  0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee,
-  0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe,
-  0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1,
-  0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1,
-  0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9,
-  0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9,
-  0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5,
-  0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5,
-  0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed,
-  0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd,
-  0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3,
-  0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3,
-  0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb,
-  0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb,
-  0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7,
-  0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7,
-  0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef,
-  0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff
-};
-
-GdkPixmap *
-gdk_bitmap_create_from_data (GdkWindow   *window,
-                            const gchar *data,
-                            gint         width,
-                            gint         height)
-{
-  GdkPixmap *pixmap;
-  GdkDrawablePrivate *private;
-  gint i, j, bpl, aligned_bpl;
-  guchar *bits;
-
-  g_return_val_if_fail (data != NULL, NULL);
-  g_return_val_if_fail ((width != 0) && (height != 0), NULL);
-  g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
-
-  if (!window)
-    window = (GdkWindow*) gdk_root_parent;
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-
-  private = g_new0 (GdkDrawablePrivate, 1);
-  pixmap = (GdkPixmap*) private;
-
-  private->window_type = GDK_DRAWABLE_PIXMAP;
-  private->width = width;
-  private->height = height;
-  private->ref_count = 1;
-  private->destroyed = FALSE;
-
-  bpl = ((width - 1) / 8 + 1);
-  aligned_bpl = ((bpl - 1) / 2 + 1) * 2;
-  bits = g_malloc (aligned_bpl * height);
-  for (i = 0; i < height; i++)
-    for (j = 0; j < bpl; j++)
-      bits[i*aligned_bpl + j] = mirror[(guchar) data[i*bpl + j]];
-  private->xwindow = CreateBitmap (width, height, 1, 1, bits);
-
-  GDK_NOTE (MISC, g_print ("gdk_bitmap_create_from_data: %dx%d = %#x\n",
-                          width, height, private->xwindow));
-
-  g_free (bits);
-
-  private->colormap = NULL;
-  gdk_xid_table_insert (&private->xwindow, pixmap);
-
-  return pixmap;
-}
-
-GdkPixmap*
-gdk_pixmap_create_from_data (GdkWindow   *window,
-                            const gchar *data,
-                            gint         width,
-                            gint         height,
-                            gint         depth,
-                            GdkColor    *fg,
-                            GdkColor    *bg)
-{
-  /* Oh wow. I struggled with dozens of lines of code trying to get
-   * this right using a monochrome Win32 bitmap created from data, and
-   * a colour DIB section as the result, trying setting pens,
-   * background colors, whatnot and BitBlt:ing.  Nope. Then finally I
-   * realized it's much easier to do it using gdk...:
-   */
-
-  GdkPixmap *result = gdk_pixmap_new (window, width, height, depth);
-  GdkPixmap *source = gdk_bitmap_create_from_data (window, data, width, height);
-  GdkGC *gc = gdk_gc_new (result);
-  gdk_gc_set_foreground (gc, fg);
-  gdk_gc_set_background (gc, bg);
-  gdk_draw_pixmap (result, gc, source, 0, 0, 0, 0, width, height);
-  gdk_pixmap_unref (source);
-  gdk_gc_unref (gc);
-
-  GDK_NOTE (MISC, g_print ("gdk_pixmap_create_from_data: %dx%dx%d = %#x\n",
-                          width, height, depth,
-                          GDK_DRAWABLE_XID (result)));
-  return result;
-}
-
-static gint
-gdk_pixmap_seek_string (FILE  *infile,
-                        const gchar *str,
-                        gint   skip_comments)
-{
-  char instr[1024];
-
-  while (!feof (infile))
-    {
-      fscanf (infile, "%1023s", instr);
-      if (skip_comments == TRUE && strcmp (instr, "/*") == 0)
-        {
-          fscanf (infile, "%1023s", instr);
-          while (!feof (infile) && strcmp (instr, "*/") != 0)
-            fscanf (infile, "%1023s", instr);
-          fscanf(infile, "%1023s", instr);
-        }
-      if (strcmp (instr, str)==0)
-        return TRUE;
-    }
-
-  return FALSE;
-}
-
-static gint
-gdk_pixmap_seek_char (FILE  *infile,
-                      gchar  c)
-{
-  gint b, oldb;
-
-  while ((b = getc(infile)) != EOF)
-    {
-      if (c != b && b == '/')
-       {
-         b = getc (infile);
-         if (b == EOF)
-           return FALSE;
-         else if (b == '*')    /* we have a comment */
-           {
-             b = -1;
-             do
-               {
-                 oldb = b;
-                 b = getc (infile);
-                 if (b == EOF)
-                   return FALSE;
-               }
-             while (!(oldb == '*' && b == '/'));
-           }
-        }
-      else if (c == b)
-       return TRUE;
-    }
-  return FALSE;
-}
-
-static gint
-gdk_pixmap_read_string (FILE  *infile,
-                        gchar **buffer,
-                       guint *buffer_size)
-{
-  gint c;
-  guint cnt = 0, bufsiz, ret = FALSE;
-  gchar *buf;
-
-  buf = *buffer;
-  bufsiz = *buffer_size;
-  if (buf == NULL)
-    {
-      bufsiz = 10 * sizeof (gchar);
-      buf = g_new(gchar, bufsiz);
-    }
-
-  do
-    c = getc (infile);
-  while (c != EOF && c != '"');
-
-  if (c != '"')
-    goto out;
-
-  while ((c = getc(infile)) != EOF)
-    {
-      if (cnt == bufsiz)
-       {
-         guint new_size = bufsiz * 2;
-         if (new_size > bufsiz)
-           bufsiz = new_size;
-         else
-           goto out;
-       
-         buf = (gchar *) g_realloc (buf, bufsiz);
-         buf[bufsiz-1] = '\0';
-       }
-
-      if (c != '"')
-        buf[cnt++] = c;
-      else
-        {
-          buf[cnt] = 0;
-         ret = TRUE;
-         break;
-        }
-    }
-
- out:
-  buf[bufsiz-1] = '\0';                /* ensure null termination for errors */
-  *buffer = buf;
-  *buffer_size = bufsiz;
-  return ret;
-}
-
-static gchar*
-gdk_pixmap_skip_whitespaces (gchar *buffer)
-{
-  gint32 index = 0;
-
-  while (buffer[index] != 0 && (buffer[index] == 0x20 || buffer[index] == 0x09))
-    index++;
-
-  return &buffer[index];
-}
-
-static gchar*
-gdk_pixmap_skip_string (gchar *buffer)
-{
-  gint32 index = 0;
-
-  while (buffer[index] != 0 && buffer[index] != 0x20 && buffer[index] != 0x09)
-    index++;
-
-  return &buffer[index];
-}
-
-#define MAX_COLOR_LEN 120
-
-static gchar*
-gdk_pixmap_extract_color (gchar *buffer)
-{
-  gint counter, numnames;
-  gchar *ptr = NULL, ch, temp[128];
-  gchar color[MAX_COLOR_LEN], *retcol;
-  gint space;
-
-  counter = 0;
-  while (ptr == NULL)
-    {
-      if (buffer[counter] == 'c')
-        {
-          ch = buffer[counter + 1];
-          if (ch == 0x20 || ch == 0x09)
-            ptr = &buffer[counter + 1];
-        }
-      else if (buffer[counter] == 0)
-        return NULL;
-
-      counter++;
-    }
-
-  ptr = gdk_pixmap_skip_whitespaces (ptr);
-
-  if (ptr[0] == 0)
-    return NULL;
-  else if (ptr[0] == '#')
-    {
-      counter = 1;
-      while (ptr[counter] != 0 &&
-             ((ptr[counter] >= '0' && ptr[counter] <= '9') ||
-              (ptr[counter] >= 'a' && ptr[counter] <= 'f') ||
-              (ptr[counter] >= 'A' && ptr[counter] <= 'F')))
-        counter++;
-
-      retcol = g_new (gchar, counter+1);
-      strncpy (retcol, ptr, counter);
-
-      retcol[counter] = 0;
-
-      return retcol;
-    }
-
-  color[0] = 0;
-  numnames = 0;
-
-  space = MAX_COLOR_LEN - 1;
-  while (space > 0)
-    {
-      sscanf (ptr, "%127s", temp);
-
-      if (((gint)ptr[0] == 0) ||
-         (strcmp ("s", temp) == 0) || (strcmp ("m", temp) == 0) ||
-          (strcmp ("g", temp) == 0) || (strcmp ("g4", temp) == 0))
-       {
-         break;
-       }
-      else
-        {
-          if (numnames > 0)
-           {
-             space -= 1;
-             strcat (color, " ");
-           }
-         strncat (color, temp, space);
-         space -= MIN (space, strlen (temp));
-          ptr = gdk_pixmap_skip_string (ptr);
-          ptr = gdk_pixmap_skip_whitespaces (ptr);
-          numnames++;
-        }
-    }
-
-  retcol = g_strdup (color);
-  return retcol;
-}
-
-
-enum buffer_op
-{
-  op_header,
-  op_cmap,
-  op_body
-};
-
-
-static void
-gdk_xpm_destroy_notify (gpointer data)
-{
-  _GdkPixmapInfo *info = (_GdkPixmapInfo *)data;
-  GdkColor color;
-  int i;
-
-  for (i=0; i<info->ncolors; i++)
-    {
-      color.pixel = info->pixels[i];
-      gdk_colormap_free_colors (info->colormap, &color, 1);
-    }
-
-  gdk_colormap_unref (info->colormap);
-  g_free (info);
-}
-
-static GdkPixmap *
-_gdk_pixmap_create_from_xpm (GdkWindow   *window,
-                            GdkColormap *colormap,
-                            GdkBitmap  **mask,
-                            GdkColor    *transparent_color,
-                            gchar *    (*get_buf) (enum buffer_op op,
-                                                   gpointer       handle),
-                            gpointer     handle)
-{
-  GdkPixmap *pixmap = NULL;
-  GdkImage *image = NULL;
-  GdkVisual *visual;
-  GdkGC *gc = NULL;
-  GdkColor tmp_color;
-  gint width, height, num_cols, cpp, n, ns, cnt, xcnt, ycnt, wbytes;
-  gchar *buffer, pixel_str[32];
-  gchar *name_buf;
-  _GdkPixmapColor *color = NULL, *fallbackcolor = NULL;
-  _GdkPixmapColor *colors = NULL;
-  gulong index;
-  GHashTable *color_hash = NULL;
-  _GdkPixmapInfo *color_info = NULL;
-
-  if ((window == NULL) && (colormap == NULL))
-    g_warning ("Creating pixmap from xpm with NULL window and colormap");
-
-  if (window == NULL)
-    window = (GdkWindow *) gdk_root_parent;
-
-  if (colormap == NULL)
-    {
-      colormap = gdk_window_get_colormap (window);
-      visual = gdk_window_get_visual (window);
-    }
-  else
-    visual = ((GdkColormapPrivate *)colormap)->visual;
-
-  buffer = (*get_buf) (op_header, handle);
-  if (buffer == NULL)
-    return NULL;
-
-  sscanf (buffer,"%d %d %d %d", &width, &height, &num_cols, &cpp);
-  if (cpp >= 32)
-    {
-      g_warning ("Pixmap has more than 31 characters per color");
-      return NULL;
-    }
-
-  color_hash = g_hash_table_new (g_str_hash, g_str_equal);
-
-  if (transparent_color == NULL)
-    {
-      gdk_color_white (colormap, &tmp_color);
-      transparent_color = &tmp_color;
-    }
-
-  /* For pseudo-color and grayscale visuals, we have to remember
-   * the colors we allocated, so we can free them later.
-   */
-  if ((visual->type == GDK_VISUAL_PSEUDO_COLOR) ||
-      (visual->type == GDK_VISUAL_GRAYSCALE))
-    {
-      color_info = g_malloc (sizeof (_GdkPixmapInfo) +
-                            sizeof(gulong) * (num_cols - 1));
-      color_info->ncolors = num_cols;
-      color_info->colormap = colormap;
-      gdk_colormap_ref (colormap);
-    }
-
-  name_buf = g_new (gchar, num_cols * (cpp+1));
-  colors = g_new (_GdkPixmapColor, num_cols);
-
-  for (cnt = 0; cnt < num_cols; cnt++)
-    {
-      gchar *color_name;
-
-      buffer = (*get_buf) (op_cmap, handle);
-      if (buffer == NULL)
-       goto error;
-
-      color = &colors[cnt];
-      color->color_string = &name_buf [cnt * (cpp + 1)];
-      strncpy (color->color_string, buffer, cpp);
-      color->color_string[cpp] = 0;
-      buffer += strlen (color->color_string);
-      color->transparent = FALSE;
-
-      color_name = gdk_pixmap_extract_color (buffer);
-
-      if (color_name == NULL ||
-         gdk_color_parse (color_name, &color->color) == FALSE)
-       {
-         color->color = *transparent_color;
-         color->transparent = TRUE;
-       }
-
-      g_free (color_name);
-
-      /* FIXME: The remaining slowness appears to happen in this
-         function. */
-      gdk_color_alloc (colormap, &color->color);
-
-      if (color_info)
-       color_info->pixels[cnt] = color->color.pixel;
-
-      g_hash_table_insert (color_hash, color->color_string, color);
-      if (cnt == 0)
-       fallbackcolor = color;
-    }
-
-  index = 0;
-  image = gdk_image_new (GDK_IMAGE_FASTEST, visual, width, height);
-
-  if (mask)
-    {
-      /* The pixmap mask is just a bits pattern.
-       * Color 0 is used for background and 1 for foreground.
-       * We don't care about the colormap, we just need 0 and 1.
-       */
-      GdkColor mask_pattern;
-
-      *mask = gdk_pixmap_new (window, width, height, 1);
-      gc = gdk_gc_new (*mask);
-
-      mask_pattern.pixel = 0;
-      gdk_gc_set_foreground (gc, &mask_pattern);
-      gdk_draw_rectangle (*mask, gc, TRUE, 0, 0, -1, -1);
-
-      mask_pattern.pixel = 1;
-      gdk_gc_set_foreground (gc, &mask_pattern);
-    }
-
-  wbytes = width * cpp;
-  for (ycnt = 0; ycnt < height; ycnt++)
-    {
-      buffer = (*get_buf) (op_body, handle);
-
-      /* FIXME: this slows things down a little - it could be
-       * integrated into the strncpy below, perhaps. OTOH, strlen
-       * is fast.
-       */
-      if ((buffer == NULL) || strlen (buffer) < wbytes)
-       continue;
-
-      for (n = 0, cnt = 0, xcnt = 0; n < wbytes; n += cpp, xcnt++)
-       {
-         strncpy (pixel_str, &buffer[n], cpp);
-         pixel_str[cpp] = 0;
-         ns = 0;
-       
-         color = g_hash_table_lookup (color_hash, pixel_str);
-       
-         if (!color) /* screwed up XPM file */
-           color = fallbackcolor;
-       
-         gdk_image_put_pixel (image, xcnt, ycnt, color->color.pixel);
-       
-         if (mask && color->transparent)
-           {
-             if (cnt < xcnt)
-               gdk_draw_line (*mask, gc, cnt, ycnt, xcnt - 1, ycnt);
-             cnt = xcnt + 1;
-           }
-       }
-
-      if (mask && (cnt < xcnt))
-       gdk_draw_line (*mask, gc, cnt, ycnt, xcnt - 1, ycnt);
-    }
-
- error:
-
-  if (mask)
-    gdk_gc_destroy (gc);
-
-  if (image != NULL)
-    {
-      pixmap = gdk_pixmap_new (window, width, height, visual->depth);
-
-      if (color_info)
-       gdk_drawable_set_data (pixmap, "gdk-xpm", color_info,
-                              gdk_xpm_destroy_notify);
-
-      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);
-    }
-  else if (color_info)
-    gdk_xpm_destroy_notify (color_info);
-
-  if (color_hash != NULL)
-    g_hash_table_destroy (color_hash);
-
-  if (colors != NULL)
-    g_free (colors);
-
-  if (name_buf != NULL)
-    g_free (name_buf);
-
-  return pixmap;
-}
-
-
-struct file_handle
-{
-  FILE *infile;
-  gchar *buffer;
-  guint buffer_size;
-};
-
-
-static gchar *
-file_buffer (enum buffer_op op, gpointer handle)
-{
-  struct file_handle *h = handle;
-
-  switch (op)
-    {
-    case op_header:
-      if (gdk_pixmap_seek_string (h->infile, "XPM", FALSE) != TRUE)
-       break;
-
-      if (gdk_pixmap_seek_char (h->infile,'{') != TRUE)
-       break;
-      /* Fall through to the next gdk_pixmap_seek_char. */
-
-    case op_cmap:
-      gdk_pixmap_seek_char (h->infile, '"');
-      fseek (h->infile, -1, SEEK_CUR);
-      /* Fall through to the gdk_pixmap_read_string. */
-
-    case op_body:
-      gdk_pixmap_read_string (h->infile, &h->buffer, &h->buffer_size);
-      return h->buffer;
-    }
-  return 0;
-}
-
-GdkPixmap*
-gdk_pixmap_colormap_create_from_xpm (GdkWindow   *window,
-                                    GdkColormap *colormap,
-                                    GdkBitmap  **mask,
-                                    GdkColor    *transparent_color,
-                                    const gchar *filename)
-{
-  struct file_handle h;
-  GdkPixmap *pixmap = NULL;
-
-  memset (&h, 0, sizeof (h));
-  h.infile = fopen (filename, "rb");
-  if (h.infile != NULL)
-    {
-      pixmap = _gdk_pixmap_create_from_xpm (window, colormap, mask,
-                                           transparent_color,
-                                           file_buffer, &h);
-      fclose (h.infile);
-      g_free (h.buffer);
-    }
-
-  return pixmap;
-}
-
-GdkPixmap*
-gdk_pixmap_create_from_xpm (GdkWindow  *window,
-                           GdkBitmap **mask,
-                           GdkColor   *transparent_color,
-                           const gchar *filename)
-{
-  return gdk_pixmap_colormap_create_from_xpm (window, NULL, mask,
-                                      transparent_color, filename);
-}
-
-struct mem_handle
-{
-  gchar **data;
-  int offset;
-};
-
-
-static gchar *
-mem_buffer (enum buffer_op op, gpointer handle)
-{
-  struct mem_handle *h = handle;
-  switch (op)
-    {
-    case op_header:
-    case op_cmap:
-    case op_body:
-      if (h->data[h->offset])
-       return h->data[h->offset ++];
-    }
-  return 0;
-}
-
-GdkPixmap*
-gdk_pixmap_colormap_create_from_xpm_d (GdkWindow  *window,
-                                      GdkColormap *colormap,
-                                      GdkBitmap **mask,
-                                      GdkColor   *transparent_color,
-                                      gchar     **data)
-{
-  struct mem_handle h;
-  GdkPixmap *pixmap = NULL;
-
-  memset (&h, 0, sizeof (h));
-  h.data = data;
-  pixmap = _gdk_pixmap_create_from_xpm (window, colormap, mask,
-                                       transparent_color,
-                                       mem_buffer, &h);
-  return pixmap;
-}
-
-GdkPixmap*
-gdk_pixmap_create_from_xpm_d (GdkWindow  *window,
-                             GdkBitmap **mask,
-                             GdkColor   *transparent_color,
-                             gchar     **data)
-{
-  return gdk_pixmap_colormap_create_from_xpm_d (window, NULL, mask,
-                                               transparent_color, data);
-}
-
-GdkPixmap*
-gdk_pixmap_foreign_new (guint32 anid)
-{
-  GdkPixmap *pixmap;
-  GdkDrawablePrivate *private;
-  GdkWindowPrivate *window_private;
-  HBITMAP xpixmap;
-  SIZE size;
-  unsigned int x_ret, y_ret, w_ret, h_ret, bw_ret, depth_ret;
-
-  /* check to make sure we were passed something at
-     least a little sane */
-  g_return_val_if_fail((anid != 0), NULL);
-
-  /* set the pixmap to the passed in value */
-  xpixmap = (HBITMAP) anid;
-  /* get the root window */
-  window_private = gdk_root_parent;
-
-  /* get information about the BITMAP to fill in the structure for
-     the gdk window */
-  GetBitmapDimensionEx (xpixmap, &size);
-  w_ret = size.cx;
-  h_ret = size.cy;
-
-  /* allocate a new gdk pixmap */
-  private = g_new (GdkDrawablePrivate, 1);
-  pixmap = (GdkPixmap *)private;
-
-  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);
-
-  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;
-
-  GDK_NOTE (MISC, g_print ("gdk_pixmap_unref: %#x %d%s\n",
-                          private->xwindow, private->ref_count,
-                          (private->ref_count == 0 ? " freeing" : "")));
-
-  if (private->ref_count == 0)
-    {
-      if (!DeleteObject (private->xwindow))
-       g_warning ("gdk_pixmap_unref: DeleteObject failed");
-      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/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h
deleted file mode 100644 (file)
index 30b276d..0000000
+++ /dev/null
@@ -1,459 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#ifndef __GDK_PRIVATE_H__
-#define __GDK_PRIVATE_H__
-
-#define STRICT                 /* We want strict type checks */
-#include <windows.h>
-#include <commctrl.h>
-
-/* Make up for some minor mingw32 lossage */
-
-/* PS_JOIN_MASK is missing from the mingw32 headers */
-#ifndef PS_JOIN_MASK
-#define PS_JOIN_MASK (PS_JOIN_BEVEL|PS_JOIN_MITER|PS_JOIN_ROUND)
-#endif
-
-/* CLR_INVALID is missing */
-#ifndef CLR_INVALID
-#define CLR_INVALID CLR_NONE
-#endif
-
-/* Some charsets are missing */
-#ifndef JOHAB_CHARSET
-#define JOHAB_CHARSET 130
-#endif
-#ifndef VIETNAMESE_CHARSET
-#define VIETNAMESE_CHARSET 163
-#endif
-
-#ifndef VM_OEM_PLUS
-#define VK_OEM_PLUS 0xBB
-#endif
-
-#include <time.h>
-
-#include <gdk/gdktypes.h>
-
-#include <gdk/gdkcursor.h>
-#include <gdk/gdkevents.h>
-#include <gdk/gdkfont.h>
-#include <gdk/gdkgc.h>
-#include <gdk/gdkim.h>
-#include <gdk/gdkimage.h>
-#include <gdk/gdkregion.h>
-#include <gdk/gdkvisual.h>
-#include <gdk/gdkwindow.h>
-
-#define GDK_DRAWABLE_TYPE(d) (((GdkDrawablePrivate *)d)->window_type)
-#define GDK_IS_WINDOW(d) (GDK_DRAWABLE_TYPE(d) <= GDK_WINDOW_TEMP || \
-                          GDK_DRAWABLE_TYPE(d) == GDK_WINDOW_FOREIGN)
-#define GDK_IS_PIXMAP(d) (GDK_DRAWABLE_TYPE(d) == GDK_DRAWABLE_PIXMAP)
-#define GDK_DRAWABLE_DESTROYED(d) (((GdkDrawablePrivate *)d)->destroyed)
-
-#define gdk_window_lookup(xid)    ((GdkWindow*) gdk_xid_table_lookup (xid))
-#define gdk_pixmap_lookup(xid)    ((GdkPixmap*) gdk_xid_table_lookup (xid))
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* Define corresponding Windows types for some X11 types, just for laziness.
- */
-
-typedef HANDLE XID;
-typedef PALETTEENTRY XColor;
-typedef HDC GC;
-typedef ATOM Atom;
-typedef HCURSOR Cursor;
-typedef guint VisualID;
-typedef DWORD KeySym;
-typedef int Status;
-
-/* Define some of the X11 constants also here, again just for laziness */
-
-/* Generic null resource */
-#define None 0
-
-/* Error codes */
-#define Success            0
-
-/* Grabbing status */
-#define GrabSuccess       0
-#define AlreadyGrabbed    2
-
-/* For CreateColormap */
-#define AllocNone 0
-#define AllocAll 1
-
-/* Some structs are somewhat useful to emulate internally, just to
-   keep the code less #ifdefed.  */
-typedef struct {
-  HPALETTE palette;            /* Palette handle used when drawing. */
-  guint size;                  /* Number of entries in the palette. */
-  gboolean stale;              /* 1 if palette needs to be realized,
-                                * otherwise 0. */
-  gboolean *in_use;
-  gboolean rc_palette;         /* If RC_PALETTE is on in the RASTERCAPS */
-  gulong sizepalette;          /* SIZEPALETTE if rc_palette */
-} ColormapStruct, *Colormap;
-  
-typedef struct {
-  gint map_entries;
-  guint visualid;
-  guint bitspixel;
-} Visual;
-
-typedef struct {
-  Colormap colormap;
-  unsigned long red_max;
-  unsigned long red_mult;
-  unsigned long green_max;
-  unsigned long green_mult;
-  unsigned long blue_max;
-  unsigned long blue_mult;
-  unsigned long base_pixel;
-} XStandardColormap;
-
-typedef struct _GdkDrawablePrivate     GdkDrawablePrivate;
-/* typedef struct _GdkDrawablePrivate     GdkPixmapPrivate; */
-typedef struct _GdkWindowPrivate       GdkWindowPrivate;
-typedef struct _GdkImagePrivate               GdkImagePrivate;
-typedef struct _GdkGCPrivate          GdkGCPrivate;
-typedef struct _GdkColormapPrivate     GdkColormapPrivate;
-typedef struct _GdkColorInfo           GdkColorInfo;
-typedef struct _GdkVisualPrivate       GdkVisualPrivate;
-typedef struct _GdkFontPrivate        GdkFontPrivate;
-typedef struct _GdkCursorPrivate       GdkCursorPrivate;
-typedef struct _GdkEventFilter        GdkEventFilter;
-typedef struct _GdkClientFilter               GdkClientFilter;
-typedef struct _GdkRegionPrivate       GdkRegionPrivate;
-
-struct _GdkDrawablePrivate
-{
-  GdkDrawable drawable;
-
-  guint8 window_type;
-  guint ref_count;
-
-  guint16 width;
-  guint16 height;
-
-  HANDLE xwindow;
-  GdkColormap *colormap;
-
-  guint destroyed : 2;
-};
-
-struct _GdkWindowPrivate
-{
-  GdkDrawablePrivate drawable;
-
-  GdkWindow *parent;
-  gint16 x;
-  gint16 y;
-  guint8 resize_count;
-  guint mapped : 1;
-  guint guffaw_gravity : 1;
-
-  /* We must keep the event mask here to filter them ourselves */
-  gint event_mask;
-
-  /* Values for bg_type */
-#define GDK_WIN32_BG_NORMAL 0
-#define GDK_WIN32_BG_PIXEL 1
-#define GDK_WIN32_BG_PIXMAP 2
-#define GDK_WIN32_BG_PARENT_RELATIVE 3
-#define GDK_WIN32_BG_TRANSPARENT 4
-
-  /* We draw the background ourselves at WM_ERASEBKGND  */
-  guchar bg_type;
-  GdkColor bg_pixel;
-  GdkPixmap *bg_pixmap;
-
-  HCURSOR xcursor;
-
-  /* Window size hints */
-  gint hint_flags;
-  gint hint_x, hint_y;
-  gint hint_min_width, hint_min_height;
-  gint hint_max_width, hint_max_height;
-
-  gint extension_events;
-  gboolean extension_events_selected;
-
-  GList *filters;
-  GList *children;
-
-  HKL input_locale;
-  CHARSETINFO charset_info;
-};
-
-struct _GdkImagePrivate
-{
-  GdkImage image;
-  HBITMAP ximage;
-  gpointer x_shm_info;
-
-  void (*image_put) (GdkDrawable *window,
-                    GdkGC       *gc,
-                    GdkImage    *image,
-                    gint         xsrc,
-                    gint         ysrc,
-                    gint         xdest,
-                    gint         ydest,
-                    gint         width,
-                    gint         height);
-};
-
-struct _GdkGCPrivate
-{
-  GdkGC gc;
-  GC xgc;
-  /* A Windows Device Context (DC) is not equivalent to an X11
-   * GC. We can use a DC only in the window for which it was
-   * allocated, or (in the case of a memory DC) with the bitmap that
-   * has been selected into it. Thus, we have to release and
-   * reallocate a DC each time the GdkGC is used to paint into a new
-   * window or pixmap. We thus keep all the necessary values in the
-   * GdkGCPrivate struct.
-   */
-  GdkGCValuesMask values_mask;
-  GdkColor foreground;
-  GdkColor background;
-  GdkFont *font;
-  gint rop2;
-  GdkFill fill_style;
-  GdkPixmap *tile;
-  GdkPixmap *stipple;
-  HRGN clip_region;
-  GdkSubwindowMode subwindow_mode;
-  gint ts_x_origin;
-  gint ts_y_origin;
-  gint clip_x_origin;
-  gint clip_y_origin;
-  gint graphics_exposures;
-  gint pen_width;
-  DWORD pen_style;
-  HANDLE hwnd;                 /* If a DC is allocated, for which window
-                                  or what bitmap is selected into it */
-  int saved_dc;
-  guint ref_count;
-};
-
-typedef enum {
-  GDK_COLOR_WRITEABLE = 1 << 0
-} GdkColorInfoFlags;
-
-struct _GdkColorInfo
-{
-  GdkColorInfoFlags flags;
-  guint ref_count;
-};
-
-struct _GdkColormapPrivate
-{
-  GdkColormap colormap;
-  Colormap xcolormap;
-  GdkVisual *visual;
-  gint private_val;
-
-  GHashTable *hash;
-  GdkColorInfo *info;
-  time_t last_sync_time;
-  
-  guint ref_count;
-};
-
-struct _GdkVisualPrivate
-{
-  GdkVisual visual;
-  Visual *xvisual;
-};
-
-typedef struct
-{
-  HFONT xfont;
-  DWORD charset;
-  UINT codepage;
-  CPINFO cpinfo;
-  FONTSIGNATURE fs;
-} GdkWin32SingleFont;
-
-struct _GdkFontPrivate
-{
-  GdkFont font;
-  guint ref_count;
-
-  GSList *fonts;
-  GSList *names;
-};
-
-struct _GdkCursorPrivate
-{
-  GdkCursor cursor;
-  Cursor xcursor;
-};
-
-struct _GdkEventFilter {
-  GdkFilterFunc function;
-  gpointer data;
-};
-
-struct _GdkClientFilter {
-  GdkAtom       type;
-  GdkFilterFunc function;
-  gpointer      data;
-};
-
-struct _GdkRegionPrivate
-{
-  GdkRegion region;
-  HRGN xregion;
-};
-
-typedef enum {
-  GDK_DEBUG_MISC          = 1 << 0,
-  GDK_DEBUG_EVENTS        = 1 << 1,
-  GDK_DEBUG_DND           = 1 << 2,
-  GDK_DEBUG_COLOR_CONTEXT = 1 << 3,
-  GDK_DEBUG_XIM           = 1 << 4,
-  GDK_DEBUG_SELECTION    = 1 << 5
-} GdkDebugFlag;
-
-void gdk_events_init (void);
-void gdk_window_init (void);
-void gdk_visual_init (void);
-void gdk_selection_init (void);
-void gdk_dnd_init    (void);
-void gdk_dnd_exit    (void);
-void gdk_image_init  (void);
-void gdk_image_exit  (void);
-
-GdkColormap* gdk_colormap_lookup (Colormap  xcolormap);
-GdkVisual*   gdk_visual_lookup  (Visual   *xvisual);
-
-void gdk_window_add_colormap_windows (GdkWindow *window);
-void gdk_window_destroy_notify      (GdkWindow *window);
-
-void    gdk_xid_table_insert (XID      *xid,
-                              gpointer  data);
-void    gdk_xid_table_remove (XID       xid);
-gpointer gdk_xid_table_lookup (XID      xid);
-
-/* Internal functions */
-
-HDC    gdk_gc_predraw  (GdkDrawablePrivate *drawable_private,
-                        GdkGCPrivate       *gc_private);
-void   gdk_gc_postdraw (GdkDrawablePrivate *drawable_private,
-                        GdkGCPrivate       *gc_private);
-HRGN   BitmapToRegion  (HBITMAP hBmp);
-
-void    gdk_sel_prop_store (GdkWindow *owner,
-                           GdkAtom    type,
-                           gint       format,
-                           guchar    *data,
-                           gint       length);
-
-void gdk_event_queue_append (GdkEvent *event);
-
-gint gdk_nmbstowcs (GdkWChar    *dest,
-                         const gchar *src,
-                         gint         src_len,
-                         gint         dest_max);
-gint gdk_nmbstowchar_ts (wchar_t     *dest,
-                              const gchar *src,
-                              gint         src_len,
-                              gint         dest_max);
-
-void gdk_wchar_text_handle (GdkFont       *font,
-                           const wchar_t *wcstr,
-                           int            wclen,
-                           void         (*handler)(GdkWin32SingleFont *,
-                                                   const wchar_t *,
-                                                   int,
-                                                   void *),
-                           void          *arg);
-
-/* Please see gdkwindow.c for comments on how to use */ 
-HWND gdk_window_xid_at(HWND base, gint bx, gint by, gint x, gint y, GList *excludes, gboolean excl_child);
-HWND gdk_window_xid_at_coords(gint x, gint y, GList *excludes, gboolean excl_child);
-
-extern gint             gdk_debug_level;
-extern gint             gdk_show_events;
-extern gint             gdk_stack_trace;
-extern HWND             gdk_root_window;
-extern HWND             gdk_leader_window;
-GDKVAR GdkWindowPrivate        *gdk_root_parent;
-GDKVAR Atom             gdk_selection_property;
-GDKVAR gchar           *gdk_progclass;
-GDKVAR gint             gdk_error_code;
-GDKVAR gint             gdk_error_warnings;
-GDKVAR gint              gdk_null_window_warnings;
-extern gint             gdk_event_func_from_window_proc;
-
-extern HDC              gdk_DC;
-extern HINSTANCE        gdk_DLLInstance;
-extern HINSTANCE        gdk_ProgInstance;
-
-extern UINT             gdk_selection_notify_msg;
-extern UINT             gdk_selection_request_msg;
-extern UINT             gdk_selection_clear_msg;
-extern GdkAtom          gdk_clipboard_atom;
-extern GdkAtom          gdk_win32_dropfiles_atom;
-extern GdkAtom          gdk_ole2_dnd_atom;
-
-extern LRESULT CALLBACK gdk_WindowProc (HWND, UINT, WPARAM, LPARAM);
-
-extern DWORD            windows_version;
-
-/* Debugging support */
-
-#ifdef G_ENABLE_DEBUG
-
-#define GDK_NOTE(type,action)               G_STMT_START { \
-    if (gdk_debug_flags & GDK_DEBUG_##type)                \
-       { action; };                         } G_STMT_END
-
-#else /* !G_ENABLE_DEBUG */
-
-#define GDK_NOTE(type,action)
-      
-#endif /* G_ENABLE_DEBUG */
-
-GDKVAR guint gdk_debug_flags;
-
-/* Internal functions for debug output etc. */
-
-char   *gdk_color_to_string (GdkColor *);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GDK_PRIVATE_H__ */
diff --git a/gdk/win32/gdkprivate.h b/gdk/win32/gdkprivate.h
deleted file mode 100644 (file)
index 30b276d..0000000
+++ /dev/null
@@ -1,459 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#ifndef __GDK_PRIVATE_H__
-#define __GDK_PRIVATE_H__
-
-#define STRICT                 /* We want strict type checks */
-#include <windows.h>
-#include <commctrl.h>
-
-/* Make up for some minor mingw32 lossage */
-
-/* PS_JOIN_MASK is missing from the mingw32 headers */
-#ifndef PS_JOIN_MASK
-#define PS_JOIN_MASK (PS_JOIN_BEVEL|PS_JOIN_MITER|PS_JOIN_ROUND)
-#endif
-
-/* CLR_INVALID is missing */
-#ifndef CLR_INVALID
-#define CLR_INVALID CLR_NONE
-#endif
-
-/* Some charsets are missing */
-#ifndef JOHAB_CHARSET
-#define JOHAB_CHARSET 130
-#endif
-#ifndef VIETNAMESE_CHARSET
-#define VIETNAMESE_CHARSET 163
-#endif
-
-#ifndef VM_OEM_PLUS
-#define VK_OEM_PLUS 0xBB
-#endif
-
-#include <time.h>
-
-#include <gdk/gdktypes.h>
-
-#include <gdk/gdkcursor.h>
-#include <gdk/gdkevents.h>
-#include <gdk/gdkfont.h>
-#include <gdk/gdkgc.h>
-#include <gdk/gdkim.h>
-#include <gdk/gdkimage.h>
-#include <gdk/gdkregion.h>
-#include <gdk/gdkvisual.h>
-#include <gdk/gdkwindow.h>
-
-#define GDK_DRAWABLE_TYPE(d) (((GdkDrawablePrivate *)d)->window_type)
-#define GDK_IS_WINDOW(d) (GDK_DRAWABLE_TYPE(d) <= GDK_WINDOW_TEMP || \
-                          GDK_DRAWABLE_TYPE(d) == GDK_WINDOW_FOREIGN)
-#define GDK_IS_PIXMAP(d) (GDK_DRAWABLE_TYPE(d) == GDK_DRAWABLE_PIXMAP)
-#define GDK_DRAWABLE_DESTROYED(d) (((GdkDrawablePrivate *)d)->destroyed)
-
-#define gdk_window_lookup(xid)    ((GdkWindow*) gdk_xid_table_lookup (xid))
-#define gdk_pixmap_lookup(xid)    ((GdkPixmap*) gdk_xid_table_lookup (xid))
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/* Define corresponding Windows types for some X11 types, just for laziness.
- */
-
-typedef HANDLE XID;
-typedef PALETTEENTRY XColor;
-typedef HDC GC;
-typedef ATOM Atom;
-typedef HCURSOR Cursor;
-typedef guint VisualID;
-typedef DWORD KeySym;
-typedef int Status;
-
-/* Define some of the X11 constants also here, again just for laziness */
-
-/* Generic null resource */
-#define None 0
-
-/* Error codes */
-#define Success            0
-
-/* Grabbing status */
-#define GrabSuccess       0
-#define AlreadyGrabbed    2
-
-/* For CreateColormap */
-#define AllocNone 0
-#define AllocAll 1
-
-/* Some structs are somewhat useful to emulate internally, just to
-   keep the code less #ifdefed.  */
-typedef struct {
-  HPALETTE palette;            /* Palette handle used when drawing. */
-  guint size;                  /* Number of entries in the palette. */
-  gboolean stale;              /* 1 if palette needs to be realized,
-                                * otherwise 0. */
-  gboolean *in_use;
-  gboolean rc_palette;         /* If RC_PALETTE is on in the RASTERCAPS */
-  gulong sizepalette;          /* SIZEPALETTE if rc_palette */
-} ColormapStruct, *Colormap;
-  
-typedef struct {
-  gint map_entries;
-  guint visualid;
-  guint bitspixel;
-} Visual;
-
-typedef struct {
-  Colormap colormap;
-  unsigned long red_max;
-  unsigned long red_mult;
-  unsigned long green_max;
-  unsigned long green_mult;
-  unsigned long blue_max;
-  unsigned long blue_mult;
-  unsigned long base_pixel;
-} XStandardColormap;
-
-typedef struct _GdkDrawablePrivate     GdkDrawablePrivate;
-/* typedef struct _GdkDrawablePrivate     GdkPixmapPrivate; */
-typedef struct _GdkWindowPrivate       GdkWindowPrivate;
-typedef struct _GdkImagePrivate               GdkImagePrivate;
-typedef struct _GdkGCPrivate          GdkGCPrivate;
-typedef struct _GdkColormapPrivate     GdkColormapPrivate;
-typedef struct _GdkColorInfo           GdkColorInfo;
-typedef struct _GdkVisualPrivate       GdkVisualPrivate;
-typedef struct _GdkFontPrivate        GdkFontPrivate;
-typedef struct _GdkCursorPrivate       GdkCursorPrivate;
-typedef struct _GdkEventFilter        GdkEventFilter;
-typedef struct _GdkClientFilter               GdkClientFilter;
-typedef struct _GdkRegionPrivate       GdkRegionPrivate;
-
-struct _GdkDrawablePrivate
-{
-  GdkDrawable drawable;
-
-  guint8 window_type;
-  guint ref_count;
-
-  guint16 width;
-  guint16 height;
-
-  HANDLE xwindow;
-  GdkColormap *colormap;
-
-  guint destroyed : 2;
-};
-
-struct _GdkWindowPrivate
-{
-  GdkDrawablePrivate drawable;
-
-  GdkWindow *parent;
-  gint16 x;
-  gint16 y;
-  guint8 resize_count;
-  guint mapped : 1;
-  guint guffaw_gravity : 1;
-
-  /* We must keep the event mask here to filter them ourselves */
-  gint event_mask;
-
-  /* Values for bg_type */
-#define GDK_WIN32_BG_NORMAL 0
-#define GDK_WIN32_BG_PIXEL 1
-#define GDK_WIN32_BG_PIXMAP 2
-#define GDK_WIN32_BG_PARENT_RELATIVE 3
-#define GDK_WIN32_BG_TRANSPARENT 4
-
-  /* We draw the background ourselves at WM_ERASEBKGND  */
-  guchar bg_type;
-  GdkColor bg_pixel;
-  GdkPixmap *bg_pixmap;
-
-  HCURSOR xcursor;
-
-  /* Window size hints */
-  gint hint_flags;
-  gint hint_x, hint_y;
-  gint hint_min_width, hint_min_height;
-  gint hint_max_width, hint_max_height;
-
-  gint extension_events;
-  gboolean extension_events_selected;
-
-  GList *filters;
-  GList *children;
-
-  HKL input_locale;
-  CHARSETINFO charset_info;
-};
-
-struct _GdkImagePrivate
-{
-  GdkImage image;
-  HBITMAP ximage;
-  gpointer x_shm_info;
-
-  void (*image_put) (GdkDrawable *window,
-                    GdkGC       *gc,
-                    GdkImage    *image,
-                    gint         xsrc,
-                    gint         ysrc,
-                    gint         xdest,
-                    gint         ydest,
-                    gint         width,
-                    gint         height);
-};
-
-struct _GdkGCPrivate
-{
-  GdkGC gc;
-  GC xgc;
-  /* A Windows Device Context (DC) is not equivalent to an X11
-   * GC. We can use a DC only in the window for which it was
-   * allocated, or (in the case of a memory DC) with the bitmap that
-   * has been selected into it. Thus, we have to release and
-   * reallocate a DC each time the GdkGC is used to paint into a new
-   * window or pixmap. We thus keep all the necessary values in the
-   * GdkGCPrivate struct.
-   */
-  GdkGCValuesMask values_mask;
-  GdkColor foreground;
-  GdkColor background;
-  GdkFont *font;
-  gint rop2;
-  GdkFill fill_style;
-  GdkPixmap *tile;
-  GdkPixmap *stipple;
-  HRGN clip_region;
-  GdkSubwindowMode subwindow_mode;
-  gint ts_x_origin;
-  gint ts_y_origin;
-  gint clip_x_origin;
-  gint clip_y_origin;
-  gint graphics_exposures;
-  gint pen_width;
-  DWORD pen_style;
-  HANDLE hwnd;                 /* If a DC is allocated, for which window
-                                  or what bitmap is selected into it */
-  int saved_dc;
-  guint ref_count;
-};
-
-typedef enum {
-  GDK_COLOR_WRITEABLE = 1 << 0
-} GdkColorInfoFlags;
-
-struct _GdkColorInfo
-{
-  GdkColorInfoFlags flags;
-  guint ref_count;
-};
-
-struct _GdkColormapPrivate
-{
-  GdkColormap colormap;
-  Colormap xcolormap;
-  GdkVisual *visual;
-  gint private_val;
-
-  GHashTable *hash;
-  GdkColorInfo *info;
-  time_t last_sync_time;
-  
-  guint ref_count;
-};
-
-struct _GdkVisualPrivate
-{
-  GdkVisual visual;
-  Visual *xvisual;
-};
-
-typedef struct
-{
-  HFONT xfont;
-  DWORD charset;
-  UINT codepage;
-  CPINFO cpinfo;
-  FONTSIGNATURE fs;
-} GdkWin32SingleFont;
-
-struct _GdkFontPrivate
-{
-  GdkFont font;
-  guint ref_count;
-
-  GSList *fonts;
-  GSList *names;
-};
-
-struct _GdkCursorPrivate
-{
-  GdkCursor cursor;
-  Cursor xcursor;
-};
-
-struct _GdkEventFilter {
-  GdkFilterFunc function;
-  gpointer data;
-};
-
-struct _GdkClientFilter {
-  GdkAtom       type;
-  GdkFilterFunc function;
-  gpointer      data;
-};
-
-struct _GdkRegionPrivate
-{
-  GdkRegion region;
-  HRGN xregion;
-};
-
-typedef enum {
-  GDK_DEBUG_MISC          = 1 << 0,
-  GDK_DEBUG_EVENTS        = 1 << 1,
-  GDK_DEBUG_DND           = 1 << 2,
-  GDK_DEBUG_COLOR_CONTEXT = 1 << 3,
-  GDK_DEBUG_XIM           = 1 << 4,
-  GDK_DEBUG_SELECTION    = 1 << 5
-} GdkDebugFlag;
-
-void gdk_events_init (void);
-void gdk_window_init (void);
-void gdk_visual_init (void);
-void gdk_selection_init (void);
-void gdk_dnd_init    (void);
-void gdk_dnd_exit    (void);
-void gdk_image_init  (void);
-void gdk_image_exit  (void);
-
-GdkColormap* gdk_colormap_lookup (Colormap  xcolormap);
-GdkVisual*   gdk_visual_lookup  (Visual   *xvisual);
-
-void gdk_window_add_colormap_windows (GdkWindow *window);
-void gdk_window_destroy_notify      (GdkWindow *window);
-
-void    gdk_xid_table_insert (XID      *xid,
-                              gpointer  data);
-void    gdk_xid_table_remove (XID       xid);
-gpointer gdk_xid_table_lookup (XID      xid);
-
-/* Internal functions */
-
-HDC    gdk_gc_predraw  (GdkDrawablePrivate *drawable_private,
-                        GdkGCPrivate       *gc_private);
-void   gdk_gc_postdraw (GdkDrawablePrivate *drawable_private,
-                        GdkGCPrivate       *gc_private);
-HRGN   BitmapToRegion  (HBITMAP hBmp);
-
-void    gdk_sel_prop_store (GdkWindow *owner,
-                           GdkAtom    type,
-                           gint       format,
-                           guchar    *data,
-                           gint       length);
-
-void gdk_event_queue_append (GdkEvent *event);
-
-gint gdk_nmbstowcs (GdkWChar    *dest,
-                         const gchar *src,
-                         gint         src_len,
-                         gint         dest_max);
-gint gdk_nmbstowchar_ts (wchar_t     *dest,
-                              const gchar *src,
-                              gint         src_len,
-                              gint         dest_max);
-
-void gdk_wchar_text_handle (GdkFont       *font,
-                           const wchar_t *wcstr,
-                           int            wclen,
-                           void         (*handler)(GdkWin32SingleFont *,
-                                                   const wchar_t *,
-                                                   int,
-                                                   void *),
-                           void          *arg);
-
-/* Please see gdkwindow.c for comments on how to use */ 
-HWND gdk_window_xid_at(HWND base, gint bx, gint by, gint x, gint y, GList *excludes, gboolean excl_child);
-HWND gdk_window_xid_at_coords(gint x, gint y, GList *excludes, gboolean excl_child);
-
-extern gint             gdk_debug_level;
-extern gint             gdk_show_events;
-extern gint             gdk_stack_trace;
-extern HWND             gdk_root_window;
-extern HWND             gdk_leader_window;
-GDKVAR GdkWindowPrivate        *gdk_root_parent;
-GDKVAR Atom             gdk_selection_property;
-GDKVAR gchar           *gdk_progclass;
-GDKVAR gint             gdk_error_code;
-GDKVAR gint             gdk_error_warnings;
-GDKVAR gint              gdk_null_window_warnings;
-extern gint             gdk_event_func_from_window_proc;
-
-extern HDC              gdk_DC;
-extern HINSTANCE        gdk_DLLInstance;
-extern HINSTANCE        gdk_ProgInstance;
-
-extern UINT             gdk_selection_notify_msg;
-extern UINT             gdk_selection_request_msg;
-extern UINT             gdk_selection_clear_msg;
-extern GdkAtom          gdk_clipboard_atom;
-extern GdkAtom          gdk_win32_dropfiles_atom;
-extern GdkAtom          gdk_ole2_dnd_atom;
-
-extern LRESULT CALLBACK gdk_WindowProc (HWND, UINT, WPARAM, LPARAM);
-
-extern DWORD            windows_version;
-
-/* Debugging support */
-
-#ifdef G_ENABLE_DEBUG
-
-#define GDK_NOTE(type,action)               G_STMT_START { \
-    if (gdk_debug_flags & GDK_DEBUG_##type)                \
-       { action; };                         } G_STMT_END
-
-#else /* !G_ENABLE_DEBUG */
-
-#define GDK_NOTE(type,action)
-      
-#endif /* G_ENABLE_DEBUG */
-
-GDKVAR guint gdk_debug_flags;
-
-/* Internal functions for debug output etc. */
-
-char   *gdk_color_to_string (GdkColor *);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-
-#endif /* __GDK_PRIVATE_H__ */
diff --git a/gdk/win32/gdkproperty-win32.c b/gdk/win32/gdkproperty-win32.c
deleted file mode 100644 (file)
index 86ee087..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <string.h>
-
-#include "gdkproperty.h"
-#include "gdkselection.h"
-#include "gdkprivate.h"
-#include "gdkx.h"
-
-GdkAtom
-gdk_atom_intern (const gchar *atom_name,
-                gint         only_if_exists)
-{
-  GdkAtom retval;
-  static GHashTable *atom_hash = NULL;
-  
-  if (!atom_hash)
-    atom_hash = g_hash_table_new (g_str_hash, g_str_equal);
-
-  retval = GPOINTER_TO_UINT (g_hash_table_lookup (atom_hash, atom_name));
-  if (!retval)
-    {
-      if (strcmp (atom_name, "PRIMARY") == 0)
-       retval = GDK_SELECTION_PRIMARY;
-      else if (strcmp (atom_name, "SECONDARY") == 0)
-       retval = GDK_SELECTION_SECONDARY;
-      else if (strcmp (atom_name, "ATOM") == 0)
-       retval = GDK_SELECTION_TYPE_ATOM;
-      else if (strcmp (atom_name, "BITMAP") == 0)
-       retval = GDK_SELECTION_TYPE_BITMAP;
-      else if (strcmp (atom_name, "COLORMAP") == 0)
-       retval = GDK_SELECTION_TYPE_COLORMAP;
-      else if (strcmp (atom_name, "DRAWABLE") == 0)
-       retval = GDK_SELECTION_TYPE_DRAWABLE;
-      else if (strcmp (atom_name, "INTEGER") == 0)
-       retval = GDK_SELECTION_TYPE_INTEGER;
-      else if (strcmp (atom_name, "PIXMAP") == 0)
-       retval = GDK_SELECTION_TYPE_PIXMAP;
-      else if (strcmp (atom_name, "WINDOW") == 0)
-       retval = GDK_SELECTION_TYPE_WINDOW;
-      else if (strcmp (atom_name, "STRING") == 0)
-       retval = GDK_SELECTION_TYPE_STRING;
-      else
-       {
-         retval = GlobalFindAtom (atom_name);
-         if (only_if_exists && retval == 0)
-           retval = 0;
-         else
-           retval = GlobalAddAtom (atom_name);
-       }
-      g_hash_table_insert (atom_hash, 
-                          g_strdup (atom_name), 
-                          GUINT_TO_POINTER (retval));
-    }
-
-  return retval;
-}
-
-gchar *
-gdk_atom_name (GdkAtom atom)
-{
-  gchar name[256];
-
-  switch (atom)
-    {
-    case GDK_SELECTION_PRIMARY: return g_strdup ("PRIMARY");
-    case GDK_SELECTION_SECONDARY: return g_strdup ("SECONDARY");
-    case GDK_SELECTION_TYPE_ATOM: return g_strdup ("ATOM");
-    case GDK_SELECTION_TYPE_BITMAP: return g_strdup ("BITMAP");
-    case GDK_SELECTION_TYPE_COLORMAP: return g_strdup ("COLORMAP");
-    case GDK_SELECTION_TYPE_DRAWABLE: return g_strdup ("DRAWABLE");
-    case GDK_SELECTION_TYPE_INTEGER: return g_strdup ("INTEGER");
-    case GDK_SELECTION_TYPE_PIXMAP: return g_strdup ("PIXMAP");
-    case GDK_SELECTION_TYPE_WINDOW: return g_strdup ("WINDOW");
-    case GDK_SELECTION_TYPE_STRING: return g_strdup ("STRING");
-    }
-  if (atom < 0xC000)
-    return g_strdup_printf ("#%x", atom);
-  else if (GlobalGetAtomName (atom, name, sizeof (name)) == 0)
-    return NULL;
-  return g_strdup (name);
-}
-
-gint
-gdk_property_get (GdkWindow   *window,
-                 GdkAtom      property,
-                 GdkAtom      type,
-                 gulong       offset,
-                 gulong       length,
-                 gint         pdelete,
-                 GdkAtom     *actual_property_type,
-                 gint        *actual_format_type,
-                 gint        *actual_length,
-                 guchar     **data)
-{
-  g_warning ("gdk_property_get: Not implemented");
-
-  return FALSE;
-}
-
-void
-gdk_property_change (GdkWindow   *window,
-                    GdkAtom      property,
-                    GdkAtom      type,
-                    gint         format,
-                    GdkPropMode  mode,
-                    guchar      *data,
-                    gint         nelements)
-{
-  HGLOBAL hdata;
-  gint i, length;
-  gchar *prop_name, *type_name;
-  guchar *ptr;
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  GDK_NOTE (SELECTION,
-           (prop_name = gdk_atom_name (property),
-            type_name = gdk_atom_name (type),
-            g_print ("gdk_property_change: %#x %#x (%s) %#x (%s) %s %d*%d bytes %.10s\n",
-                     GDK_DRAWABLE_XID (window), property, prop_name,
-                     type, type_name,
-                     (mode == GDK_PROP_MODE_REPLACE ? "REPLACE" :
-                      (mode == GDK_PROP_MODE_PREPEND ? "PREPEND" :
-                       (mode == GDK_PROP_MODE_APPEND ? "APPEND" :
-                        "???"))),
-                     format, nelements, data),
-            g_free (prop_name),
-            g_free (type_name)));
-
-  if (property == gdk_selection_property
-      && type == GDK_TARGET_STRING
-      && format == 8
-      && mode == GDK_PROP_MODE_REPLACE)
-    {
-      length = nelements;
-      ptr = data;
-      for (i = 0; i < nelements; i++)
-       if (*ptr++ == '\n')
-         length++;
-#if 1      
-      GDK_NOTE (SELECTION, g_print ("...OpenClipboard(%#x)\n",
-                                   GDK_DRAWABLE_XID (window)));
-      if (!OpenClipboard (GDK_DRAWABLE_XID (window)))
-       {
-         g_warning ("gdk_property_change: OpenClipboard failed");
-         return;
-       }
-#endif
-      hdata = GlobalAlloc (GMEM_MOVEABLE|GMEM_DDESHARE, length + 1);
-      ptr = GlobalLock (hdata);
-      GDK_NOTE (SELECTION, g_print ("...hdata=%#x, ptr=%#x\n", hdata, ptr));
-
-      for (i = 0; i < nelements; i++)
-       {
-         if (*data == '\n')
-           *ptr++ = '\r';
-         *ptr++ = *data++;
-       }
-      *ptr++ = '\0';
-      GlobalUnlock (hdata);
-      GDK_NOTE (SELECTION, g_print ("...SetClipboardData(CF_TEXT, %#x)\n",
-                                   hdata));
-      if (!SetClipboardData(CF_TEXT, hdata))
-       g_warning ("gdk_property_change: SetClipboardData failed: %d",
-                  GetLastError ());
-#if 1
-      GDK_NOTE (SELECTION, g_print ("...CloseClipboard()\n"));
-      if (!CloseClipboard ())
-       {
-         g_warning ("gdk_property_change: CloseClipboard failed");
-         return;
-       }
-#endif
-    }
-  else
-    g_warning ("gdk_property_change: General case not implemented");
-}
-
-void
-gdk_property_delete (GdkWindow *window,
-                    GdkAtom    property)
-{
-  gchar *prop_name, *type_name;
-  extern void gdk_selection_property_delete (GdkWindow *);
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  GDK_NOTE (SELECTION,
-           (prop_name = gdk_atom_name (property),
-            g_print ("gdk_property_delete: %#x %#x (%s)\n",
-                     (window ? GDK_DRAWABLE_XID (window) : 0),
-                     property, prop_name),
-            g_free (prop_name)));
-
-  if (property == gdk_selection_property)
-    gdk_selection_property_delete (window);
-  else
-    g_warning ("gdk_property_delete: General case not implemented");
-}
diff --git a/gdk/win32/gdkproperty.c b/gdk/win32/gdkproperty.c
deleted file mode 100644 (file)
index 86ee087..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <string.h>
-
-#include "gdkproperty.h"
-#include "gdkselection.h"
-#include "gdkprivate.h"
-#include "gdkx.h"
-
-GdkAtom
-gdk_atom_intern (const gchar *atom_name,
-                gint         only_if_exists)
-{
-  GdkAtom retval;
-  static GHashTable *atom_hash = NULL;
-  
-  if (!atom_hash)
-    atom_hash = g_hash_table_new (g_str_hash, g_str_equal);
-
-  retval = GPOINTER_TO_UINT (g_hash_table_lookup (atom_hash, atom_name));
-  if (!retval)
-    {
-      if (strcmp (atom_name, "PRIMARY") == 0)
-       retval = GDK_SELECTION_PRIMARY;
-      else if (strcmp (atom_name, "SECONDARY") == 0)
-       retval = GDK_SELECTION_SECONDARY;
-      else if (strcmp (atom_name, "ATOM") == 0)
-       retval = GDK_SELECTION_TYPE_ATOM;
-      else if (strcmp (atom_name, "BITMAP") == 0)
-       retval = GDK_SELECTION_TYPE_BITMAP;
-      else if (strcmp (atom_name, "COLORMAP") == 0)
-       retval = GDK_SELECTION_TYPE_COLORMAP;
-      else if (strcmp (atom_name, "DRAWABLE") == 0)
-       retval = GDK_SELECTION_TYPE_DRAWABLE;
-      else if (strcmp (atom_name, "INTEGER") == 0)
-       retval = GDK_SELECTION_TYPE_INTEGER;
-      else if (strcmp (atom_name, "PIXMAP") == 0)
-       retval = GDK_SELECTION_TYPE_PIXMAP;
-      else if (strcmp (atom_name, "WINDOW") == 0)
-       retval = GDK_SELECTION_TYPE_WINDOW;
-      else if (strcmp (atom_name, "STRING") == 0)
-       retval = GDK_SELECTION_TYPE_STRING;
-      else
-       {
-         retval = GlobalFindAtom (atom_name);
-         if (only_if_exists && retval == 0)
-           retval = 0;
-         else
-           retval = GlobalAddAtom (atom_name);
-       }
-      g_hash_table_insert (atom_hash, 
-                          g_strdup (atom_name), 
-                          GUINT_TO_POINTER (retval));
-    }
-
-  return retval;
-}
-
-gchar *
-gdk_atom_name (GdkAtom atom)
-{
-  gchar name[256];
-
-  switch (atom)
-    {
-    case GDK_SELECTION_PRIMARY: return g_strdup ("PRIMARY");
-    case GDK_SELECTION_SECONDARY: return g_strdup ("SECONDARY");
-    case GDK_SELECTION_TYPE_ATOM: return g_strdup ("ATOM");
-    case GDK_SELECTION_TYPE_BITMAP: return g_strdup ("BITMAP");
-    case GDK_SELECTION_TYPE_COLORMAP: return g_strdup ("COLORMAP");
-    case GDK_SELECTION_TYPE_DRAWABLE: return g_strdup ("DRAWABLE");
-    case GDK_SELECTION_TYPE_INTEGER: return g_strdup ("INTEGER");
-    case GDK_SELECTION_TYPE_PIXMAP: return g_strdup ("PIXMAP");
-    case GDK_SELECTION_TYPE_WINDOW: return g_strdup ("WINDOW");
-    case GDK_SELECTION_TYPE_STRING: return g_strdup ("STRING");
-    }
-  if (atom < 0xC000)
-    return g_strdup_printf ("#%x", atom);
-  else if (GlobalGetAtomName (atom, name, sizeof (name)) == 0)
-    return NULL;
-  return g_strdup (name);
-}
-
-gint
-gdk_property_get (GdkWindow   *window,
-                 GdkAtom      property,
-                 GdkAtom      type,
-                 gulong       offset,
-                 gulong       length,
-                 gint         pdelete,
-                 GdkAtom     *actual_property_type,
-                 gint        *actual_format_type,
-                 gint        *actual_length,
-                 guchar     **data)
-{
-  g_warning ("gdk_property_get: Not implemented");
-
-  return FALSE;
-}
-
-void
-gdk_property_change (GdkWindow   *window,
-                    GdkAtom      property,
-                    GdkAtom      type,
-                    gint         format,
-                    GdkPropMode  mode,
-                    guchar      *data,
-                    gint         nelements)
-{
-  HGLOBAL hdata;
-  gint i, length;
-  gchar *prop_name, *type_name;
-  guchar *ptr;
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  GDK_NOTE (SELECTION,
-           (prop_name = gdk_atom_name (property),
-            type_name = gdk_atom_name (type),
-            g_print ("gdk_property_change: %#x %#x (%s) %#x (%s) %s %d*%d bytes %.10s\n",
-                     GDK_DRAWABLE_XID (window), property, prop_name,
-                     type, type_name,
-                     (mode == GDK_PROP_MODE_REPLACE ? "REPLACE" :
-                      (mode == GDK_PROP_MODE_PREPEND ? "PREPEND" :
-                       (mode == GDK_PROP_MODE_APPEND ? "APPEND" :
-                        "???"))),
-                     format, nelements, data),
-            g_free (prop_name),
-            g_free (type_name)));
-
-  if (property == gdk_selection_property
-      && type == GDK_TARGET_STRING
-      && format == 8
-      && mode == GDK_PROP_MODE_REPLACE)
-    {
-      length = nelements;
-      ptr = data;
-      for (i = 0; i < nelements; i++)
-       if (*ptr++ == '\n')
-         length++;
-#if 1      
-      GDK_NOTE (SELECTION, g_print ("...OpenClipboard(%#x)\n",
-                                   GDK_DRAWABLE_XID (window)));
-      if (!OpenClipboard (GDK_DRAWABLE_XID (window)))
-       {
-         g_warning ("gdk_property_change: OpenClipboard failed");
-         return;
-       }
-#endif
-      hdata = GlobalAlloc (GMEM_MOVEABLE|GMEM_DDESHARE, length + 1);
-      ptr = GlobalLock (hdata);
-      GDK_NOTE (SELECTION, g_print ("...hdata=%#x, ptr=%#x\n", hdata, ptr));
-
-      for (i = 0; i < nelements; i++)
-       {
-         if (*data == '\n')
-           *ptr++ = '\r';
-         *ptr++ = *data++;
-       }
-      *ptr++ = '\0';
-      GlobalUnlock (hdata);
-      GDK_NOTE (SELECTION, g_print ("...SetClipboardData(CF_TEXT, %#x)\n",
-                                   hdata));
-      if (!SetClipboardData(CF_TEXT, hdata))
-       g_warning ("gdk_property_change: SetClipboardData failed: %d",
-                  GetLastError ());
-#if 1
-      GDK_NOTE (SELECTION, g_print ("...CloseClipboard()\n"));
-      if (!CloseClipboard ())
-       {
-         g_warning ("gdk_property_change: CloseClipboard failed");
-         return;
-       }
-#endif
-    }
-  else
-    g_warning ("gdk_property_change: General case not implemented");
-}
-
-void
-gdk_property_delete (GdkWindow *window,
-                    GdkAtom    property)
-{
-  gchar *prop_name, *type_name;
-  extern void gdk_selection_property_delete (GdkWindow *);
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  GDK_NOTE (SELECTION,
-           (prop_name = gdk_atom_name (property),
-            g_print ("gdk_property_delete: %#x %#x (%s)\n",
-                     (window ? GDK_DRAWABLE_XID (window) : 0),
-                     property, prop_name),
-            g_free (prop_name)));
-
-  if (property == gdk_selection_property)
-    gdk_selection_property_delete (window);
-  else
-    g_warning ("gdk_property_delete: General case not implemented");
-}
diff --git a/gdk/win32/gdkregion-win32.c b/gdk/win32/gdkregion-win32.c
deleted file mode 100644 (file)
index 7a0acf5..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include "gdk.h"
-#include "gdkprivate.h"
-
-
-GdkRegion*
-gdk_region_new (void)
-{
-  GdkRegionPrivate *private;
-  GdkRegion *region;
-  HRGN xregion;
-  RECT emptyRect;
-
-  /* Create an empty region */
-  SetRectEmpty (&emptyRect);
-  xregion = CreateRectRgnIndirect (&emptyRect);
-  private = g_new (GdkRegionPrivate, 1);
-  private->xregion = xregion;
-  region = (GdkRegion*) private;
-  region->user_data = NULL;
-
-  return region;
-}
-
-void
-gdk_region_destroy (GdkRegion *region)
-{
-  GdkRegionPrivate *private;
-
-  g_return_if_fail (region != NULL);
-
-  private = (GdkRegionPrivate *) region;
-  DeleteObject (private->xregion);
-  g_free (private);
-}
-
-gboolean
-gdk_region_empty (GdkRegion      *region)
-{
-  GdkRegionPrivate *private;
-  RECT rect;
-
-  g_return_val_if_fail (region != NULL, 0);
-
-  private = (GdkRegionPrivate *) region;
-  
-  return (GetRgnBox (private->xregion, &rect) == NULLREGION);
-}
-
-gboolean
-gdk_region_equal (GdkRegion      *region1,
-                  GdkRegion      *region2)
-{
-  GdkRegionPrivate *private1;
-  GdkRegionPrivate *private2;
-
-  g_return_val_if_fail (region1 != NULL, 0);
-  g_return_val_if_fail (region2 != NULL, 0);
-
-  private1 = (GdkRegionPrivate *) region1;
-  private2 = (GdkRegionPrivate *) region2;
-  
-  return EqualRgn (private1->xregion, private2->xregion);
-}
-
-void
-gdk_region_get_clipbox(GdkRegion    *region,
-                      GdkRectangle *rectangle)
-{
-  GdkRegionPrivate *rp;
-  RECT r;
-  
-  g_return_if_fail(region != NULL);
-  g_return_if_fail(rectangle != NULL);
-
-  rp = (GdkRegionPrivate *)region;
-    
-  GetRgnBox (rp->xregion, &r);
-  rectangle->x = r.left;
-  rectangle->y = r.top;
-  rectangle->width = r.right - r.left;
-  rectangle->height = r.bottom - r.top;
-}
-
-gboolean
-gdk_region_point_in (GdkRegion      *region,
-                     gint           x,
-                    gint           y)
-{
-  GdkRegionPrivate *private;
-
-  g_return_val_if_fail (region != NULL, 0);
-
-  private = (GdkRegionPrivate *) region;
-  
-  return PtInRegion (private->xregion, x, y);
-}
-
-GdkOverlapType
-gdk_region_rect_in (GdkRegion      *region,
-                    GdkRectangle   *rect)
-{
-  GdkRegionPrivate *private;
-  RECT r;
-  int res;
-
-  g_return_val_if_fail (region != NULL, 0);
-
-  private = (GdkRegionPrivate *) region;
-  
-  r.left = rect->x;
-  r.top = rect->y;
-  r.right = rect->x + rect->width;
-  r.bottom = rect->y + rect->height;
-  
-  if (RectInRegion (private->xregion, &r))
-    return GDK_OVERLAP_RECTANGLE_PART;
-
-  return GDK_OVERLAP_RECTANGLE_OUT;  /*what else ? */
-}
-                                   
-GdkRegion *
-gdk_region_polygon (GdkPoint    *points,
-                   gint         npoints,
-                   GdkFillRule  fill_rule)
-{
-  GdkRegionPrivate *private;
-  GdkRegion *region;
-  HRGN xregion;
-  POINT *pts;
-  gint xfill_rule = ALTERNATE;
-  gint i;
-
-  g_return_val_if_fail (points != NULL, NULL);
-  g_return_val_if_fail (npoints != 0, NULL); /* maybe we should check for at least three points */
-
-  switch (fill_rule)
-    {
-    case GDK_EVEN_ODD_RULE:
-      xfill_rule = ALTERNATE;
-      break;
-
-    case GDK_WINDING_RULE:
-      xfill_rule = WINDING;
-      break;
-    }
-
-  pts = g_malloc (npoints * sizeof (*pts));
-  for (i = 0; i < npoints; i++)
-    {
-      pts[i].x = points[i].x;
-      pts[i].y = points[i].y;
-    }
-  xregion = CreatePolygonRgn (pts, npoints, xfill_rule);
-  g_free (pts);
-
-  private = g_new (GdkRegionPrivate, 1);
-  private->xregion = xregion;
-  region = (GdkRegion *) private;
-  region->user_data = NULL;
-
-  return region;
-}
-
-void          
-gdk_region_offset (GdkRegion      *region,
-                   gint           dx,
-                  gint           dy)
-{
-  GdkRegionPrivate *private;
-
-  g_return_if_fail (region != NULL);
-
-  private = (GdkRegionPrivate *) region;
-  
-  OffsetRgn (private->xregion, dx, dy);
-}
-
-void
-gdk_region_shrink (GdkRegion      *region,
-                   gint           dx,
-                  gint           dy)
-{
-  GdkRegionPrivate *private;
-  HRGN shrunken_bbox;
-  RECT r;
-
-  g_return_if_fail (region != NULL);
-
-  private = (GdkRegionPrivate *) region;
-  
-  if (dx > 0 || dy > 0)
-    {
-      /* We want to shrink it in one or both dimensions.
-       * Is it correct just to intersect it with a smaller bounding box?
-       * XXX
-       */
-      GetRgnBox (private->xregion, &r);
-      if (dx > 0)
-       {
-         r.left += dx - dx/2;
-         r.right -= dx/2;
-       }
-      if (dy > 0)
-       {
-         r.top += dy - dy/2;
-         r.bottom -= dy/2;
-       }
-
-      shrunken_bbox = CreateRectRgnIndirect (&r);
-      CombineRgn (private->xregion, private->xregion,
-                 shrunken_bbox, RGN_AND);
-      DeleteObject (shrunken_bbox);
-    }
-  else
-    {
-      /* Do nothing if the regions is expanded? XXX */
-    }
-}
-
-GdkRegion*    
-gdk_region_union_with_rect (GdkRegion      *region,
-                            GdkRectangle   *rect)
-{
-  GdkRegionPrivate *private;
-  GdkRegion *res;
-  GdkRegionPrivate *res_private;
-  RECT xrect;
-  HRGN rectangle;
-
-  g_return_val_if_fail (region != NULL, NULL);
-
-  private = (GdkRegionPrivate *) region;
-  
-  xrect.left = rect->x;
-  xrect.top = rect->y;
-  xrect.right = rect->x + rect->width;
-  xrect.bottom = rect->y + rect->height;
-
-  res = gdk_region_new ();
-  res_private = (GdkRegionPrivate *) res;
-  
-  rectangle = CreateRectRgnIndirect (&xrect);
-  CombineRgn (res_private->xregion, private->xregion,
-             rectangle, RGN_OR);
-  DeleteObject (rectangle);
-  return res;
-}
-
-GdkRegion*    
-gdk_regions_intersect (GdkRegion      *source1,
-                       GdkRegion      *source2)
-{
-  GdkRegionPrivate *private1;
-  GdkRegionPrivate *private2;
-  GdkRegion *res;
-  GdkRegionPrivate *res_private;
-
-  g_return_val_if_fail (source1 != NULL, NULL);
-  g_return_val_if_fail (source2 != NULL, NULL);
-
-  private1 = (GdkRegionPrivate *) source1;
-  private2 = (GdkRegionPrivate *) source2;
-
-  res = gdk_region_new ();
-  res_private = (GdkRegionPrivate *) res;
-  
-  CombineRgn (res_private->xregion, private1->xregion, private2->xregion,
-             RGN_AND);
-  return res;
-}
-
-GdkRegion* 
-gdk_regions_union (GdkRegion      *source1,
-                   GdkRegion      *source2)
-{
-  GdkRegionPrivate *private1;
-  GdkRegionPrivate *private2;
-  GdkRegion *res;
-  GdkRegionPrivate *res_private;
-
-  g_return_val_if_fail (source1 != NULL, NULL);
-  g_return_val_if_fail (source2 != NULL, NULL);
-
-  private1 = (GdkRegionPrivate *) source1;
-  private2 = (GdkRegionPrivate *) source2;
-
-  res = gdk_region_new ();
-  res_private = (GdkRegionPrivate *) res;
-  
-  CombineRgn (res_private->xregion, private1->xregion, private2->xregion,
-             RGN_OR);
-  return res;
-}
-
-GdkRegion*    
-gdk_regions_subtract (GdkRegion      *source1,
-                      GdkRegion      *source2)
-{
-  GdkRegionPrivate *private1;
-  GdkRegionPrivate *private2;
-  GdkRegion *res;
-  GdkRegionPrivate *res_private;
-
-  g_return_val_if_fail (source1 != NULL, NULL);
-  g_return_val_if_fail (source2 != NULL, NULL);
-
-  private1 = (GdkRegionPrivate *) source1;
-  private2 = (GdkRegionPrivate *) source2;
-
-  res = gdk_region_new ();
-  res_private = (GdkRegionPrivate *) res;
-  
-  CombineRgn (res_private->xregion, private1->xregion, private2->xregion,
-             RGN_DIFF);
-  return res;
-}
-
-GdkRegion*    
-gdk_regions_xor (GdkRegion      *source1,
-                 GdkRegion      *source2)
-{
-  GdkRegionPrivate *private1;
-  GdkRegionPrivate *private2;
-  GdkRegion *res;
-  GdkRegionPrivate *res_private;
-
-  g_return_val_if_fail (source1 != NULL, NULL);
-  g_return_val_if_fail (source2 != NULL, NULL);
-
-  private1 = (GdkRegionPrivate *) source1;
-  private2 = (GdkRegionPrivate *) source2;
-
-  res = gdk_region_new ();
-  res_private = (GdkRegionPrivate *) res;
-  
-  CombineRgn (res_private->xregion, private1->xregion, private2->xregion,
-             RGN_XOR);
-  return res;
-}
diff --git a/gdk/win32/gdkregion.c b/gdk/win32/gdkregion.c
deleted file mode 100644 (file)
index 7a0acf5..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include "gdk.h"
-#include "gdkprivate.h"
-
-
-GdkRegion*
-gdk_region_new (void)
-{
-  GdkRegionPrivate *private;
-  GdkRegion *region;
-  HRGN xregion;
-  RECT emptyRect;
-
-  /* Create an empty region */
-  SetRectEmpty (&emptyRect);
-  xregion = CreateRectRgnIndirect (&emptyRect);
-  private = g_new (GdkRegionPrivate, 1);
-  private->xregion = xregion;
-  region = (GdkRegion*) private;
-  region->user_data = NULL;
-
-  return region;
-}
-
-void
-gdk_region_destroy (GdkRegion *region)
-{
-  GdkRegionPrivate *private;
-
-  g_return_if_fail (region != NULL);
-
-  private = (GdkRegionPrivate *) region;
-  DeleteObject (private->xregion);
-  g_free (private);
-}
-
-gboolean
-gdk_region_empty (GdkRegion      *region)
-{
-  GdkRegionPrivate *private;
-  RECT rect;
-
-  g_return_val_if_fail (region != NULL, 0);
-
-  private = (GdkRegionPrivate *) region;
-  
-  return (GetRgnBox (private->xregion, &rect) == NULLREGION);
-}
-
-gboolean
-gdk_region_equal (GdkRegion      *region1,
-                  GdkRegion      *region2)
-{
-  GdkRegionPrivate *private1;
-  GdkRegionPrivate *private2;
-
-  g_return_val_if_fail (region1 != NULL, 0);
-  g_return_val_if_fail (region2 != NULL, 0);
-
-  private1 = (GdkRegionPrivate *) region1;
-  private2 = (GdkRegionPrivate *) region2;
-  
-  return EqualRgn (private1->xregion, private2->xregion);
-}
-
-void
-gdk_region_get_clipbox(GdkRegion    *region,
-                      GdkRectangle *rectangle)
-{
-  GdkRegionPrivate *rp;
-  RECT r;
-  
-  g_return_if_fail(region != NULL);
-  g_return_if_fail(rectangle != NULL);
-
-  rp = (GdkRegionPrivate *)region;
-    
-  GetRgnBox (rp->xregion, &r);
-  rectangle->x = r.left;
-  rectangle->y = r.top;
-  rectangle->width = r.right - r.left;
-  rectangle->height = r.bottom - r.top;
-}
-
-gboolean
-gdk_region_point_in (GdkRegion      *region,
-                     gint           x,
-                    gint           y)
-{
-  GdkRegionPrivate *private;
-
-  g_return_val_if_fail (region != NULL, 0);
-
-  private = (GdkRegionPrivate *) region;
-  
-  return PtInRegion (private->xregion, x, y);
-}
-
-GdkOverlapType
-gdk_region_rect_in (GdkRegion      *region,
-                    GdkRectangle   *rect)
-{
-  GdkRegionPrivate *private;
-  RECT r;
-  int res;
-
-  g_return_val_if_fail (region != NULL, 0);
-
-  private = (GdkRegionPrivate *) region;
-  
-  r.left = rect->x;
-  r.top = rect->y;
-  r.right = rect->x + rect->width;
-  r.bottom = rect->y + rect->height;
-  
-  if (RectInRegion (private->xregion, &r))
-    return GDK_OVERLAP_RECTANGLE_PART;
-
-  return GDK_OVERLAP_RECTANGLE_OUT;  /*what else ? */
-}
-                                   
-GdkRegion *
-gdk_region_polygon (GdkPoint    *points,
-                   gint         npoints,
-                   GdkFillRule  fill_rule)
-{
-  GdkRegionPrivate *private;
-  GdkRegion *region;
-  HRGN xregion;
-  POINT *pts;
-  gint xfill_rule = ALTERNATE;
-  gint i;
-
-  g_return_val_if_fail (points != NULL, NULL);
-  g_return_val_if_fail (npoints != 0, NULL); /* maybe we should check for at least three points */
-
-  switch (fill_rule)
-    {
-    case GDK_EVEN_ODD_RULE:
-      xfill_rule = ALTERNATE;
-      break;
-
-    case GDK_WINDING_RULE:
-      xfill_rule = WINDING;
-      break;
-    }
-
-  pts = g_malloc (npoints * sizeof (*pts));
-  for (i = 0; i < npoints; i++)
-    {
-      pts[i].x = points[i].x;
-      pts[i].y = points[i].y;
-    }
-  xregion = CreatePolygonRgn (pts, npoints, xfill_rule);
-  g_free (pts);
-
-  private = g_new (GdkRegionPrivate, 1);
-  private->xregion = xregion;
-  region = (GdkRegion *) private;
-  region->user_data = NULL;
-
-  return region;
-}
-
-void          
-gdk_region_offset (GdkRegion      *region,
-                   gint           dx,
-                  gint           dy)
-{
-  GdkRegionPrivate *private;
-
-  g_return_if_fail (region != NULL);
-
-  private = (GdkRegionPrivate *) region;
-  
-  OffsetRgn (private->xregion, dx, dy);
-}
-
-void
-gdk_region_shrink (GdkRegion      *region,
-                   gint           dx,
-                  gint           dy)
-{
-  GdkRegionPrivate *private;
-  HRGN shrunken_bbox;
-  RECT r;
-
-  g_return_if_fail (region != NULL);
-
-  private = (GdkRegionPrivate *) region;
-  
-  if (dx > 0 || dy > 0)
-    {
-      /* We want to shrink it in one or both dimensions.
-       * Is it correct just to intersect it with a smaller bounding box?
-       * XXX
-       */
-      GetRgnBox (private->xregion, &r);
-      if (dx > 0)
-       {
-         r.left += dx - dx/2;
-         r.right -= dx/2;
-       }
-      if (dy > 0)
-       {
-         r.top += dy - dy/2;
-         r.bottom -= dy/2;
-       }
-
-      shrunken_bbox = CreateRectRgnIndirect (&r);
-      CombineRgn (private->xregion, private->xregion,
-                 shrunken_bbox, RGN_AND);
-      DeleteObject (shrunken_bbox);
-    }
-  else
-    {
-      /* Do nothing if the regions is expanded? XXX */
-    }
-}
-
-GdkRegion*    
-gdk_region_union_with_rect (GdkRegion      *region,
-                            GdkRectangle   *rect)
-{
-  GdkRegionPrivate *private;
-  GdkRegion *res;
-  GdkRegionPrivate *res_private;
-  RECT xrect;
-  HRGN rectangle;
-
-  g_return_val_if_fail (region != NULL, NULL);
-
-  private = (GdkRegionPrivate *) region;
-  
-  xrect.left = rect->x;
-  xrect.top = rect->y;
-  xrect.right = rect->x + rect->width;
-  xrect.bottom = rect->y + rect->height;
-
-  res = gdk_region_new ();
-  res_private = (GdkRegionPrivate *) res;
-  
-  rectangle = CreateRectRgnIndirect (&xrect);
-  CombineRgn (res_private->xregion, private->xregion,
-             rectangle, RGN_OR);
-  DeleteObject (rectangle);
-  return res;
-}
-
-GdkRegion*    
-gdk_regions_intersect (GdkRegion      *source1,
-                       GdkRegion      *source2)
-{
-  GdkRegionPrivate *private1;
-  GdkRegionPrivate *private2;
-  GdkRegion *res;
-  GdkRegionPrivate *res_private;
-
-  g_return_val_if_fail (source1 != NULL, NULL);
-  g_return_val_if_fail (source2 != NULL, NULL);
-
-  private1 = (GdkRegionPrivate *) source1;
-  private2 = (GdkRegionPrivate *) source2;
-
-  res = gdk_region_new ();
-  res_private = (GdkRegionPrivate *) res;
-  
-  CombineRgn (res_private->xregion, private1->xregion, private2->xregion,
-             RGN_AND);
-  return res;
-}
-
-GdkRegion* 
-gdk_regions_union (GdkRegion      *source1,
-                   GdkRegion      *source2)
-{
-  GdkRegionPrivate *private1;
-  GdkRegionPrivate *private2;
-  GdkRegion *res;
-  GdkRegionPrivate *res_private;
-
-  g_return_val_if_fail (source1 != NULL, NULL);
-  g_return_val_if_fail (source2 != NULL, NULL);
-
-  private1 = (GdkRegionPrivate *) source1;
-  private2 = (GdkRegionPrivate *) source2;
-
-  res = gdk_region_new ();
-  res_private = (GdkRegionPrivate *) res;
-  
-  CombineRgn (res_private->xregion, private1->xregion, private2->xregion,
-             RGN_OR);
-  return res;
-}
-
-GdkRegion*    
-gdk_regions_subtract (GdkRegion      *source1,
-                      GdkRegion      *source2)
-{
-  GdkRegionPrivate *private1;
-  GdkRegionPrivate *private2;
-  GdkRegion *res;
-  GdkRegionPrivate *res_private;
-
-  g_return_val_if_fail (source1 != NULL, NULL);
-  g_return_val_if_fail (source2 != NULL, NULL);
-
-  private1 = (GdkRegionPrivate *) source1;
-  private2 = (GdkRegionPrivate *) source2;
-
-  res = gdk_region_new ();
-  res_private = (GdkRegionPrivate *) res;
-  
-  CombineRgn (res_private->xregion, private1->xregion, private2->xregion,
-             RGN_DIFF);
-  return res;
-}
-
-GdkRegion*    
-gdk_regions_xor (GdkRegion      *source1,
-                 GdkRegion      *source2)
-{
-  GdkRegionPrivate *private1;
-  GdkRegionPrivate *private2;
-  GdkRegion *res;
-  GdkRegionPrivate *res_private;
-
-  g_return_val_if_fail (source1 != NULL, NULL);
-  g_return_val_if_fail (source2 != NULL, NULL);
-
-  private1 = (GdkRegionPrivate *) source1;
-  private2 = (GdkRegionPrivate *) source2;
-
-  res = gdk_region_new ();
-  res_private = (GdkRegionPrivate *) res;
-  
-  CombineRgn (res_private->xregion, private1->xregion, private2->xregion,
-             RGN_XOR);
-  return res;
-}
diff --git a/gdk/win32/gdkselection-win32.c b/gdk/win32/gdkselection-win32.c
deleted file mode 100644 (file)
index 0338672..0000000
+++ /dev/null
@@ -1,403 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <string.h>
-
-#include <gdk/gdk.h>
-#include "gdkx.h"
-
-/* We emulate the GDK_SELECTION window properties by storing
- * it's data in a per-window hashtable.
- */
-
-typedef struct {
-  guchar *data;
-  gint length;
-  gint format;
-  GdkAtom type;
-} GdkSelProp;
-
-static GHashTable *sel_prop_table = NULL;
-
-void
-gdk_selection_init (void)
-{
-  if (sel_prop_table == NULL)
-    sel_prop_table = g_hash_table_new (g_int_hash, g_int_equal);
-}
-
-void
-gdk_sel_prop_store (GdkWindow *owner,
-                   GdkAtom    type,
-                   gint       format,
-                   guchar    *data,
-                   gint       length)
-{
-  GdkSelProp *prop;
-
-  prop = g_hash_table_lookup (sel_prop_table, &GDK_DRAWABLE_XID (owner));
-  if (prop != NULL)
-    {
-      g_free (prop->data);
-      g_hash_table_remove (sel_prop_table, &GDK_DRAWABLE_XID (owner));
-    }
-  prop = g_new (GdkSelProp, 1);
-  prop->data = data;
-  prop->length = length;
-  prop->format = format;
-  prop->type = type;
-  g_hash_table_insert (sel_prop_table, &GDK_DRAWABLE_XID (owner), prop);
-}
-
-gint
-gdk_selection_owner_set (GdkWindow *owner,
-                        GdkAtom    selection,
-                        guint32    time,
-                        gint       send_event)
-{
-  gchar *sel_name;
-  HWND xwindow;
-
-  GDK_NOTE (SELECTION,
-           (sel_name = gdk_atom_name (selection),
-            g_print ("gdk_selection_owner_set: %#x %#x (%s)\n",
-                     (owner ? GDK_DRAWABLE_XID (owner) : 0),
-                     selection, sel_name),
-            g_free (sel_name)));
-
-  if (selection != gdk_clipboard_atom)
-    return FALSE;
-
-  if (owner != NULL)
-    xwindow = GDK_DRAWABLE_XID (owner);
-  else
-    xwindow = NULL;
-
-  GDK_NOTE (SELECTION, g_print ("...OpenClipboard(%#x)\n", xwindow));
-  if (!OpenClipboard (xwindow))
-    {
-      g_warning ("gdk_selection_owner_set: OpenClipboard failed");
-      return FALSE;
-    }
-  GDK_NOTE (SELECTION, g_print ("...EmptyClipboard()\n"));
-  if (!EmptyClipboard ())
-    {
-      g_warning ("gdk_selection_owner_set: EmptyClipboard failed");
-      CloseClipboard ();
-      return FALSE;
-    }
-#if 0
-  /* No delayed rendering */
-  if (xwindow != NULL)
-    SetClipboardData (CF_TEXT, NULL);
-#endif
-  GDK_NOTE (SELECTION, g_print ("...CloseClipboard()\n"));
-  if (!CloseClipboard ())
-    {
-      g_warning ("gdk_selection_owner_set: CloseClipboard failed");
-      return FALSE;
-    }
-  if (owner != NULL)
-    {
-      /* Send ourselves an ersatz selection request message so that
-       * gdk_property_change will be called to store the clipboard data.
-       */
-      SendMessage (xwindow, gdk_selection_request_msg,
-                  selection, 0);
-    }
-
-  return TRUE;
-}
-
-GdkWindow*
-gdk_selection_owner_get (GdkAtom selection)
-{
-  GdkWindow *window;
-  gchar *sel_name;
-
-#if 1
-  /* XXX Hmm, gtk selections seem to work best with this. This causes
-   * gtk to always get the clipboard contents from Windows, and not
-   * from the editable's own stashed-away copy.
-   */
-  return NULL;
-#else
-  if (selection != gdk_clipboard_atom)
-    window = NULL;
-  else
-    window = gdk_window_lookup (GetClipboardOwner ());
-
-#endif
-
-  GDK_NOTE (SELECTION,
-           (sel_name = gdk_atom_name (selection),
-            g_print ("gdk_selection_owner_get: %#x (%s) = %#x\n",
-                     selection, sel_name,
-                     (window ? GDK_DRAWABLE_XID (window) : 0)),
-            g_free (sel_name)));
-
-  return window;
-}
-
-void
-gdk_selection_convert (GdkWindow *requestor,
-                      GdkAtom    selection,
-                      GdkAtom    target,
-                      guint32    time)
-{
-  HGLOBAL hdata;
-  GdkSelProp *prop;
-  guchar *ptr, *data, *datap, *p;
-  guint i, length, slength;
-  gchar *sel_name, *tgt_name;
-
-  g_return_if_fail (requestor != NULL);
-  if (GDK_DRAWABLE_DESTROYED (requestor))
-    return;
-
-  GDK_NOTE (SELECTION,
-           (sel_name = gdk_atom_name (selection),
-            tgt_name = gdk_atom_name (target),
-            g_print ("gdk_selection_convert: %#x %#x (%s) %#x (%s)\n",
-                     GDK_DRAWABLE_XID (requestor), selection, sel_name, target, tgt_name),
-            g_free (sel_name),
-            g_free (tgt_name)));
-
-  if (selection == gdk_clipboard_atom)
-    {
-      /* Converting the CLIPBOARD selection means he wants the
-       * contents of the clipboard. Get the clipboard data,
-       * and store it for later.
-       */
-      GDK_NOTE (SELECTION, g_print ("...OpenClipboard(%#x)\n",
-                                   GDK_DRAWABLE_XID (requestor)));
-      if (!OpenClipboard (GDK_DRAWABLE_XID (requestor)))
-       {
-         g_warning ("gdk_selection_convert: OpenClipboard failed");
-         return;
-       }
-
-      GDK_NOTE (SELECTION, g_print ("...GetClipboardData(CF_TEXT)\n"));
-      if ((hdata = GetClipboardData (CF_TEXT)) != NULL)
-       {
-         if ((ptr = GlobalLock (hdata)) != NULL)
-           {
-             length = GlobalSize (hdata);
-             
-             GDK_NOTE (SELECTION, g_print ("...got data: %d bytes: %.10s\n",
-                                           length, ptr));
-             
-             slength = 0;
-             p = ptr;
-             for (i = 0; i < length; i++)
-               {
-                 if (*p == '\0')
-                   break;
-                 else if (*p != '\r')
-                   slength++;
-                 p++;
-               }
-             
-             data = datap = g_malloc (slength + 1);
-             p = ptr;
-             for (i = 0; i < length; i++)
-               {
-                 if (*p == '\0')
-                   break;
-                 else if (*p != '\r')
-                   *datap++ = *p;
-                 p++;
-               }
-             *datap++ = '\0';
-             gdk_sel_prop_store (requestor, GDK_TARGET_STRING, 8,
-                                 data, strlen (data) + 1);
-             
-             GlobalUnlock (hdata);
-           }
-       }
-      GDK_NOTE (SELECTION, g_print ("...CloseClipboard()\n"));
-      CloseClipboard ();
-
-
-      /* Send ourselves an ersatz selection notify message so that we actually
-       * fetch the data.
-       */
-      SendMessage (GDK_DRAWABLE_XID (requestor), gdk_selection_notify_msg, selection, target);
-    }
-  else if (selection == gdk_win32_dropfiles_atom)
-    {
-      /* This means he wants the names of the dropped files.
-       * gdk_dropfiles_filter already has stored the text/uri-list
-       * data, tempoarily on gdk_root_parent's selection "property".
-       */
-      GdkSelProp *prop;
-
-      prop = g_hash_table_lookup (sel_prop_table, &gdk_root_parent->drawable.xwindow);
-
-      if (prop != NULL)
-       {
-         g_hash_table_remove (sel_prop_table, &gdk_root_parent->drawable.xwindow);
-         gdk_sel_prop_store (requestor, prop->type, prop->format,
-                             prop->data, prop->length);
-         g_free (prop);
-         SendMessage (GDK_DRAWABLE_XID (requestor), gdk_selection_notify_msg, selection, target);
-       }
-    }
-  else
-    {
-      g_warning ("gdk_selection_convert: General case not implemented");
-    }
-}
-
-gint
-gdk_selection_property_get (GdkWindow  *requestor,
-                           guchar    **data,
-                           GdkAtom    *ret_type,
-                           gint       *ret_format)
-{
-  GdkSelProp *prop;
-
-  g_return_val_if_fail (requestor != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (requestor), 0);
-
-  if (GDK_DRAWABLE_DESTROYED (requestor))
-    return 0;
-  
-  GDK_NOTE (SELECTION, g_print ("gdk_selection_property_get: %#x\n",
-                               GDK_DRAWABLE_XID (requestor)));
-
-  prop = g_hash_table_lookup (sel_prop_table, &GDK_DRAWABLE_XID (requestor));
-
-  if (prop == NULL)
-    {
-      *data = NULL;
-      return 0;
-    }
-  *data = g_malloc (prop->length);
-  if (prop->length > 0)
-    memmove (*data, prop->data, prop->length);
-  if (ret_type)
-    *ret_type = prop->type;
-  if (ret_format)
-    *ret_format = prop->format;
-
-  return prop->length;
-}
-
-void
-gdk_selection_property_delete (GdkWindow *window)
-{
-  GdkSelProp *prop;
-  
-  prop = g_hash_table_lookup (sel_prop_table, &GDK_DRAWABLE_XID (window));
-  if (prop != NULL)
-    {
-      g_free (prop->data);
-      g_hash_table_remove (sel_prop_table, &GDK_DRAWABLE_XID (window));
-    }
-  else
-    g_warning ("huh?");
-}
-
-void
-gdk_selection_send_notify (guint32  requestor,
-                          GdkAtom  selection,
-                          GdkAtom  target,
-                          GdkAtom  property,
-                          guint32  time)
-{
-  gchar *sel_name, *tgt_name, *prop_name;
-
-  GDK_NOTE (SELECTION,
-           (sel_name = gdk_atom_name (selection),
-            tgt_name = gdk_atom_name (target),
-            prop_name = gdk_atom_name (property),
-            g_print ("gdk_selection_send_notify: %#x %#x (%s) %#x (%s) %#x (%s)\n",
-                     requestor,
-                     selection, sel_name,
-                     target, tgt_name,
-                     property, prop_name),
-            g_free (sel_name),
-            g_free (tgt_name),
-            g_free (prop_name)));
-
-  /* Send ourselves a selection clear message so that gtk thinks we don't
-   * have the selection, and will claim it anew when needed, and
-   * we thus get a chance to store data in the Windows clipboard.
-   * Otherwise, if a gtkeditable does a copy to clipboard several times
-   * only the first one actually gets copied to the Windows clipboard,
-   * as only he first one causes a call to gdk_property_change.
-   *
-   * Hmm, there is something fishy with this. Cut and paste inside the
-   * same app didn't work, the gtkeditable immediately forgot the
-   * clipboard contents in gtk_editable_selection_clear as a result of
-   * this message. OTOH, when I changed gdk_selection_owner_get to
-   * always return NULL, it works. Sigh.
-   */
-
-  SendMessage ((HWND) requestor, gdk_selection_clear_msg, selection, 0);
-}
-
-gint
-gdk_text_property_to_text_list (GdkAtom  encoding,
-                               gint     format, 
-                               guchar  *text,
-                               gint     length,
-                               gchar ***list)
-{
-  GDK_NOTE (SELECTION,
-           g_print ("gdk_text_property_to_text_list not implemented\n"));
-  
-  return 0;
-}
-
-void
-gdk_free_text_list (gchar **list)
-{
-  g_return_if_fail (list != NULL);
-
-  /* ??? */
-}
-
-gint
-gdk_string_to_compound_text (gchar   *str,
-                            GdkAtom *encoding,
-                            gint    *format,
-                            guchar **ctext,
-                            gint    *length)
-{
-  g_warning ("gdk_string_to_compound_text: Not implemented");
-
-  return 0;
-}
-
-void
-gdk_free_compound_text (guchar *ctext)
-{
-  g_warning ("gdk_free_compound_text: Not implemented");
-}
diff --git a/gdk/win32/gdkselection.c b/gdk/win32/gdkselection.c
deleted file mode 100644 (file)
index 0338672..0000000
+++ /dev/null
@@ -1,403 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <string.h>
-
-#include <gdk/gdk.h>
-#include "gdkx.h"
-
-/* We emulate the GDK_SELECTION window properties by storing
- * it's data in a per-window hashtable.
- */
-
-typedef struct {
-  guchar *data;
-  gint length;
-  gint format;
-  GdkAtom type;
-} GdkSelProp;
-
-static GHashTable *sel_prop_table = NULL;
-
-void
-gdk_selection_init (void)
-{
-  if (sel_prop_table == NULL)
-    sel_prop_table = g_hash_table_new (g_int_hash, g_int_equal);
-}
-
-void
-gdk_sel_prop_store (GdkWindow *owner,
-                   GdkAtom    type,
-                   gint       format,
-                   guchar    *data,
-                   gint       length)
-{
-  GdkSelProp *prop;
-
-  prop = g_hash_table_lookup (sel_prop_table, &GDK_DRAWABLE_XID (owner));
-  if (prop != NULL)
-    {
-      g_free (prop->data);
-      g_hash_table_remove (sel_prop_table, &GDK_DRAWABLE_XID (owner));
-    }
-  prop = g_new (GdkSelProp, 1);
-  prop->data = data;
-  prop->length = length;
-  prop->format = format;
-  prop->type = type;
-  g_hash_table_insert (sel_prop_table, &GDK_DRAWABLE_XID (owner), prop);
-}
-
-gint
-gdk_selection_owner_set (GdkWindow *owner,
-                        GdkAtom    selection,
-                        guint32    time,
-                        gint       send_event)
-{
-  gchar *sel_name;
-  HWND xwindow;
-
-  GDK_NOTE (SELECTION,
-           (sel_name = gdk_atom_name (selection),
-            g_print ("gdk_selection_owner_set: %#x %#x (%s)\n",
-                     (owner ? GDK_DRAWABLE_XID (owner) : 0),
-                     selection, sel_name),
-            g_free (sel_name)));
-
-  if (selection != gdk_clipboard_atom)
-    return FALSE;
-
-  if (owner != NULL)
-    xwindow = GDK_DRAWABLE_XID (owner);
-  else
-    xwindow = NULL;
-
-  GDK_NOTE (SELECTION, g_print ("...OpenClipboard(%#x)\n", xwindow));
-  if (!OpenClipboard (xwindow))
-    {
-      g_warning ("gdk_selection_owner_set: OpenClipboard failed");
-      return FALSE;
-    }
-  GDK_NOTE (SELECTION, g_print ("...EmptyClipboard()\n"));
-  if (!EmptyClipboard ())
-    {
-      g_warning ("gdk_selection_owner_set: EmptyClipboard failed");
-      CloseClipboard ();
-      return FALSE;
-    }
-#if 0
-  /* No delayed rendering */
-  if (xwindow != NULL)
-    SetClipboardData (CF_TEXT, NULL);
-#endif
-  GDK_NOTE (SELECTION, g_print ("...CloseClipboard()\n"));
-  if (!CloseClipboard ())
-    {
-      g_warning ("gdk_selection_owner_set: CloseClipboard failed");
-      return FALSE;
-    }
-  if (owner != NULL)
-    {
-      /* Send ourselves an ersatz selection request message so that
-       * gdk_property_change will be called to store the clipboard data.
-       */
-      SendMessage (xwindow, gdk_selection_request_msg,
-                  selection, 0);
-    }
-
-  return TRUE;
-}
-
-GdkWindow*
-gdk_selection_owner_get (GdkAtom selection)
-{
-  GdkWindow *window;
-  gchar *sel_name;
-
-#if 1
-  /* XXX Hmm, gtk selections seem to work best with this. This causes
-   * gtk to always get the clipboard contents from Windows, and not
-   * from the editable's own stashed-away copy.
-   */
-  return NULL;
-#else
-  if (selection != gdk_clipboard_atom)
-    window = NULL;
-  else
-    window = gdk_window_lookup (GetClipboardOwner ());
-
-#endif
-
-  GDK_NOTE (SELECTION,
-           (sel_name = gdk_atom_name (selection),
-            g_print ("gdk_selection_owner_get: %#x (%s) = %#x\n",
-                     selection, sel_name,
-                     (window ? GDK_DRAWABLE_XID (window) : 0)),
-            g_free (sel_name)));
-
-  return window;
-}
-
-void
-gdk_selection_convert (GdkWindow *requestor,
-                      GdkAtom    selection,
-                      GdkAtom    target,
-                      guint32    time)
-{
-  HGLOBAL hdata;
-  GdkSelProp *prop;
-  guchar *ptr, *data, *datap, *p;
-  guint i, length, slength;
-  gchar *sel_name, *tgt_name;
-
-  g_return_if_fail (requestor != NULL);
-  if (GDK_DRAWABLE_DESTROYED (requestor))
-    return;
-
-  GDK_NOTE (SELECTION,
-           (sel_name = gdk_atom_name (selection),
-            tgt_name = gdk_atom_name (target),
-            g_print ("gdk_selection_convert: %#x %#x (%s) %#x (%s)\n",
-                     GDK_DRAWABLE_XID (requestor), selection, sel_name, target, tgt_name),
-            g_free (sel_name),
-            g_free (tgt_name)));
-
-  if (selection == gdk_clipboard_atom)
-    {
-      /* Converting the CLIPBOARD selection means he wants the
-       * contents of the clipboard. Get the clipboard data,
-       * and store it for later.
-       */
-      GDK_NOTE (SELECTION, g_print ("...OpenClipboard(%#x)\n",
-                                   GDK_DRAWABLE_XID (requestor)));
-      if (!OpenClipboard (GDK_DRAWABLE_XID (requestor)))
-       {
-         g_warning ("gdk_selection_convert: OpenClipboard failed");
-         return;
-       }
-
-      GDK_NOTE (SELECTION, g_print ("...GetClipboardData(CF_TEXT)\n"));
-      if ((hdata = GetClipboardData (CF_TEXT)) != NULL)
-       {
-         if ((ptr = GlobalLock (hdata)) != NULL)
-           {
-             length = GlobalSize (hdata);
-             
-             GDK_NOTE (SELECTION, g_print ("...got data: %d bytes: %.10s\n",
-                                           length, ptr));
-             
-             slength = 0;
-             p = ptr;
-             for (i = 0; i < length; i++)
-               {
-                 if (*p == '\0')
-                   break;
-                 else if (*p != '\r')
-                   slength++;
-                 p++;
-               }
-             
-             data = datap = g_malloc (slength + 1);
-             p = ptr;
-             for (i = 0; i < length; i++)
-               {
-                 if (*p == '\0')
-                   break;
-                 else if (*p != '\r')
-                   *datap++ = *p;
-                 p++;
-               }
-             *datap++ = '\0';
-             gdk_sel_prop_store (requestor, GDK_TARGET_STRING, 8,
-                                 data, strlen (data) + 1);
-             
-             GlobalUnlock (hdata);
-           }
-       }
-      GDK_NOTE (SELECTION, g_print ("...CloseClipboard()\n"));
-      CloseClipboard ();
-
-
-      /* Send ourselves an ersatz selection notify message so that we actually
-       * fetch the data.
-       */
-      SendMessage (GDK_DRAWABLE_XID (requestor), gdk_selection_notify_msg, selection, target);
-    }
-  else if (selection == gdk_win32_dropfiles_atom)
-    {
-      /* This means he wants the names of the dropped files.
-       * gdk_dropfiles_filter already has stored the text/uri-list
-       * data, tempoarily on gdk_root_parent's selection "property".
-       */
-      GdkSelProp *prop;
-
-      prop = g_hash_table_lookup (sel_prop_table, &gdk_root_parent->drawable.xwindow);
-
-      if (prop != NULL)
-       {
-         g_hash_table_remove (sel_prop_table, &gdk_root_parent->drawable.xwindow);
-         gdk_sel_prop_store (requestor, prop->type, prop->format,
-                             prop->data, prop->length);
-         g_free (prop);
-         SendMessage (GDK_DRAWABLE_XID (requestor), gdk_selection_notify_msg, selection, target);
-       }
-    }
-  else
-    {
-      g_warning ("gdk_selection_convert: General case not implemented");
-    }
-}
-
-gint
-gdk_selection_property_get (GdkWindow  *requestor,
-                           guchar    **data,
-                           GdkAtom    *ret_type,
-                           gint       *ret_format)
-{
-  GdkSelProp *prop;
-
-  g_return_val_if_fail (requestor != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (requestor), 0);
-
-  if (GDK_DRAWABLE_DESTROYED (requestor))
-    return 0;
-  
-  GDK_NOTE (SELECTION, g_print ("gdk_selection_property_get: %#x\n",
-                               GDK_DRAWABLE_XID (requestor)));
-
-  prop = g_hash_table_lookup (sel_prop_table, &GDK_DRAWABLE_XID (requestor));
-
-  if (prop == NULL)
-    {
-      *data = NULL;
-      return 0;
-    }
-  *data = g_malloc (prop->length);
-  if (prop->length > 0)
-    memmove (*data, prop->data, prop->length);
-  if (ret_type)
-    *ret_type = prop->type;
-  if (ret_format)
-    *ret_format = prop->format;
-
-  return prop->length;
-}
-
-void
-gdk_selection_property_delete (GdkWindow *window)
-{
-  GdkSelProp *prop;
-  
-  prop = g_hash_table_lookup (sel_prop_table, &GDK_DRAWABLE_XID (window));
-  if (prop != NULL)
-    {
-      g_free (prop->data);
-      g_hash_table_remove (sel_prop_table, &GDK_DRAWABLE_XID (window));
-    }
-  else
-    g_warning ("huh?");
-}
-
-void
-gdk_selection_send_notify (guint32  requestor,
-                          GdkAtom  selection,
-                          GdkAtom  target,
-                          GdkAtom  property,
-                          guint32  time)
-{
-  gchar *sel_name, *tgt_name, *prop_name;
-
-  GDK_NOTE (SELECTION,
-           (sel_name = gdk_atom_name (selection),
-            tgt_name = gdk_atom_name (target),
-            prop_name = gdk_atom_name (property),
-            g_print ("gdk_selection_send_notify: %#x %#x (%s) %#x (%s) %#x (%s)\n",
-                     requestor,
-                     selection, sel_name,
-                     target, tgt_name,
-                     property, prop_name),
-            g_free (sel_name),
-            g_free (tgt_name),
-            g_free (prop_name)));
-
-  /* Send ourselves a selection clear message so that gtk thinks we don't
-   * have the selection, and will claim it anew when needed, and
-   * we thus get a chance to store data in the Windows clipboard.
-   * Otherwise, if a gtkeditable does a copy to clipboard several times
-   * only the first one actually gets copied to the Windows clipboard,
-   * as only he first one causes a call to gdk_property_change.
-   *
-   * Hmm, there is something fishy with this. Cut and paste inside the
-   * same app didn't work, the gtkeditable immediately forgot the
-   * clipboard contents in gtk_editable_selection_clear as a result of
-   * this message. OTOH, when I changed gdk_selection_owner_get to
-   * always return NULL, it works. Sigh.
-   */
-
-  SendMessage ((HWND) requestor, gdk_selection_clear_msg, selection, 0);
-}
-
-gint
-gdk_text_property_to_text_list (GdkAtom  encoding,
-                               gint     format, 
-                               guchar  *text,
-                               gint     length,
-                               gchar ***list)
-{
-  GDK_NOTE (SELECTION,
-           g_print ("gdk_text_property_to_text_list not implemented\n"));
-  
-  return 0;
-}
-
-void
-gdk_free_text_list (gchar **list)
-{
-  g_return_if_fail (list != NULL);
-
-  /* ??? */
-}
-
-gint
-gdk_string_to_compound_text (gchar   *str,
-                            GdkAtom *encoding,
-                            gint    *format,
-                            guchar **ctext,
-                            gint    *length)
-{
-  g_warning ("gdk_string_to_compound_text: Not implemented");
-
-  return 0;
-}
-
-void
-gdk_free_compound_text (guchar *ctext)
-{
-  g_warning ("gdk_free_compound_text: Not implemented");
-}
diff --git a/gdk/win32/gdkvisual-win32.c b/gdk/win32/gdkvisual-win32.c
deleted file mode 100644 (file)
index 635c515..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include "gdkvisual.h"
-#include "gdkprivate.h"
-
-static void  gdk_visual_decompose_mask (gulong     mask,
-                                       gint      *shift,
-                                       gint      *prec);
-
-static GdkVisualPrivate *system_visual;
-
-static gint available_depths[1];
-
-static GdkVisualType available_types[1];
-
-#ifdef G_ENABLE_DEBUG
-
-static const gchar* visual_names[] =
-{
-  "static gray",
-  "grayscale",
-  "static color",
-  "pseudo color",
-  "true color",
-  "direct color",
-};
-
-#endif /* G_ENABLE_DEBUG */
-
-void
-gdk_visual_init (void)
-{
-  struct
-  {
-    BITMAPINFOHEADER bi;
-    union
-    {
-      RGBQUAD colors[256];
-      DWORD fields[256];
-    } u;
-  } bmi;
-  HBITMAP hbm;
-
-  int rastercaps, numcolors, sizepalette, bitspixel;
-
-  system_visual = g_new (GdkVisualPrivate, 1);
-
-  bitspixel = GetDeviceCaps (gdk_DC, BITSPIXEL);
-  rastercaps = GetDeviceCaps (gdk_DC, RASTERCAPS);
-  system_visual->xvisual = g_new (Visual, 1);
-  system_visual->xvisual->visualid = 0;
-  system_visual->xvisual->bitspixel = bitspixel;
-
-  if (rastercaps & RC_PALETTE)
-    {
-      system_visual->visual.type = GDK_VISUAL_PSEUDO_COLOR;
-      numcolors = GetDeviceCaps (gdk_DC, NUMCOLORS);
-      sizepalette = GetDeviceCaps (gdk_DC, SIZEPALETTE);
-      system_visual->xvisual->map_entries = sizepalette;
-    }
-  else if (bitspixel == 1)
-    {
-      system_visual->visual.type = GDK_VISUAL_STATIC_GRAY;
-      system_visual->xvisual->map_entries = 2;
-    }
-  else if (bitspixel == 4)
-    {
-      system_visual->visual.type = GDK_VISUAL_STATIC_COLOR;
-      system_visual->xvisual->map_entries = 16;
-    }
-  else if (bitspixel == 8)
-    {
-      system_visual->visual.type = GDK_VISUAL_STATIC_COLOR;
-      system_visual->xvisual->map_entries = 256;
-    }
-  else if (bitspixel == 16)
-    {
-      system_visual->visual.type = GDK_VISUAL_TRUE_COLOR;
-#if 1
-      /* This code by Mike Enright,
-       * see http://www.users.cts.com/sd/m/menright/display.html
-       */
-      memset (&bmi, 0, sizeof (bmi));
-      bmi.bi.biSize = sizeof (bmi.bi);
-
-      hbm = CreateCompatibleBitmap (gdk_DC, 1, 1);
-      GetDIBits (gdk_DC, hbm, 0, 1, NULL,
-                (BITMAPINFO *) &bmi, DIB_RGB_COLORS);
-      GetDIBits (gdk_DC, hbm, 0, 1, NULL,
-                (BITMAPINFO *) &bmi, DIB_RGB_COLORS);
-      DeleteObject (hbm);
-
-      if (bmi.bi.biCompression != BI_BITFIELDS)
-       {
-         /* Either BI_RGB or BI_RLE_something
-          * .... or perhaps (!!) something else.
-          * Theoretically biCompression might be
-          * mmioFourCC('c','v','i','d') but I doubt it.
-          */
-         if (bmi.bi.biCompression == BI_RGB)
-           {
-             /* It's 555 */
-             bitspixel = 15;
-             system_visual->visual.red_mask   = 0x00007C00;
-             system_visual->visual.green_mask = 0x000003E0;
-             system_visual->visual.blue_mask  = 0x0000001F;
-           }
-         else
-           {
-             g_assert_not_reached ();
-           }
-       }
-      else
-       {
-         DWORD allmasks =
-           bmi.u.fields[0] | bmi.u.fields[1] | bmi.u.fields[2];
-         int k = 0;
-         while (allmasks)
-           {
-             if (allmasks&1)
-               k++;
-             allmasks/=2;
-           }
-         bitspixel = k;
-         system_visual->visual.red_mask = bmi.u.fields[0];
-         system_visual->visual.green_mask = bmi.u.fields[1];
-         system_visual->visual.blue_mask  = bmi.u.fields[2];
-       }
-#else
-      /* Old, incorrect (but still working) code. */
-#if 0
-      system_visual->visual.red_mask   = 0x0000F800;
-      system_visual->visual.green_mask = 0x000007E0;
-      system_visual->visual.blue_mask  = 0x0000001F;
-#else
-      system_visual->visual.red_mask   = 0x00007C00;
-      system_visual->visual.green_mask = 0x000003E0;
-      system_visual->visual.blue_mask  = 0x0000001F;
-#endif
-#endif
-    }
-  else if (bitspixel == 24 || bitspixel == 32)
-    {
-      bitspixel = 24;
-      system_visual->visual.type = GDK_VISUAL_TRUE_COLOR;
-      system_visual->visual.red_mask   = 0x00FF0000;
-      system_visual->visual.green_mask = 0x0000FF00;
-      system_visual->visual.blue_mask  = 0x000000FF;
-    }
-  else
-    g_error ("gdk_visual_init: unsupported BITSPIXEL: %d\n", bitspixel);
-
-  system_visual->visual.depth = bitspixel;
-  system_visual->visual.byte_order = GDK_LSB_FIRST;
-  system_visual->visual.bits_per_rgb = 42; /* Not used? */
-
-  if ((system_visual->visual.type == GDK_VISUAL_TRUE_COLOR) ||
-      (system_visual->visual.type == GDK_VISUAL_DIRECT_COLOR))
-    {
-      gdk_visual_decompose_mask (system_visual->visual.red_mask,
-                                &system_visual->visual.red_shift,
-                                &system_visual->visual.red_prec);
-
-      gdk_visual_decompose_mask (system_visual->visual.green_mask,
-                                &system_visual->visual.green_shift,
-                                &system_visual->visual.green_prec);
-
-      gdk_visual_decompose_mask (system_visual->visual.blue_mask,
-                                &system_visual->visual.blue_shift,
-                                &system_visual->visual.blue_prec);
-      system_visual->xvisual->map_entries =
-       1 << (MAX (system_visual->visual.red_prec,
-                  MAX (system_visual->visual.green_prec,
-                       system_visual->visual.blue_prec)));
-    }
-  else
-    {
-      system_visual->visual.red_mask = 0;
-      system_visual->visual.red_shift = 0;
-      system_visual->visual.red_prec = 0;
-
-      system_visual->visual.green_mask = 0;
-      system_visual->visual.green_shift = 0;
-      system_visual->visual.green_prec = 0;
-
-      system_visual->visual.blue_mask = 0;
-      system_visual->visual.blue_shift = 0;
-      system_visual->visual.blue_prec = 0;
-    }
-  system_visual->visual.colormap_size = system_visual->xvisual->map_entries;
-
-  available_depths[0] = system_visual->visual.depth;
-  available_types[0] = system_visual->visual.type;
-}
-
-GdkVisual*
-gdk_visual_ref (GdkVisual *visual)
-{
-  return visual;
-}
-
-void
-gdk_visual_unref (GdkVisual *visual)
-{
-  return;
-}
-
-gint
-gdk_visual_get_best_depth (void)
-{
-  return available_depths[0];
-}
-
-GdkVisualType
-gdk_visual_get_best_type (void)
-{
-  return available_types[0];
-}
-
-GdkVisual*
-gdk_visual_get_system (void)
-{
-  return ((GdkVisual*) system_visual);
-}
-
-GdkVisual*
-gdk_visual_get_best (void)
-{
-  return ((GdkVisual*) system_visual);
-}
-
-GdkVisual*
-gdk_visual_get_best_with_depth (gint depth)
-{
-  if (depth == system_visual->visual.depth)
-    return (GdkVisual*) system_visual;
-  else
-    return NULL;
-}
-
-GdkVisual*
-gdk_visual_get_best_with_type (GdkVisualType visual_type)
-{
-  if (visual_type == system_visual->visual.type)
-    return (GdkVisual*) system_visual;
-  else
-    return NULL;
-}
-
-GdkVisual*
-gdk_visual_get_best_with_both (gint          depth,
-                              GdkVisualType visual_type)
-{
-  if ((depth == system_visual->visual.depth) &&
-      (visual_type == system_visual->visual.type))
-    return (GdkVisual*) system_visual;
-  else
-    return NULL;
-}
-
-void
-gdk_query_depths  (gint **depths,
-                  gint  *count)
-{
-  *count = 1;
-  *depths = available_depths;
-}
-
-void
-gdk_query_visual_types (GdkVisualType **visual_types,
-                       gint           *count)
-{
-  *count = 1;
-  *visual_types = available_types;
-}
-
-GList*
-gdk_list_visuals (void)
-{
-  return g_list_append (NULL, (gpointer) system_visual);
-}
-
-GdkVisual*
-gdk_visual_lookup (Visual *xvisual)
-{
-  if (system_visual->xvisual == xvisual)
-    return (GdkVisual *) system_visual;
-  else
-    return NULL;
-}
-
-GdkVisual*
-gdkx_visual_get (VisualID xvisualid)
-{
-  if (xvisualid == system_visual->xvisual->visualid)
-    return (GdkVisual*) system_visual;
-  else
-    return NULL;
-}
-
-static void
-gdk_visual_decompose_mask (gulong  mask,
-                          gint   *shift,
-                          gint   *prec)
-{
-  *shift = 0;
-  *prec = 0;
-
-  while (!(mask & 0x1))
-    {
-      (*shift)++;
-      mask >>= 1;
-    }
-
-  while (mask & 0x1)
-    {
-      (*prec)++;
-      mask >>= 1;
-    }
-}
diff --git a/gdk/win32/gdkvisual.c b/gdk/win32/gdkvisual.c
deleted file mode 100644 (file)
index 635c515..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include "gdkvisual.h"
-#include "gdkprivate.h"
-
-static void  gdk_visual_decompose_mask (gulong     mask,
-                                       gint      *shift,
-                                       gint      *prec);
-
-static GdkVisualPrivate *system_visual;
-
-static gint available_depths[1];
-
-static GdkVisualType available_types[1];
-
-#ifdef G_ENABLE_DEBUG
-
-static const gchar* visual_names[] =
-{
-  "static gray",
-  "grayscale",
-  "static color",
-  "pseudo color",
-  "true color",
-  "direct color",
-};
-
-#endif /* G_ENABLE_DEBUG */
-
-void
-gdk_visual_init (void)
-{
-  struct
-  {
-    BITMAPINFOHEADER bi;
-    union
-    {
-      RGBQUAD colors[256];
-      DWORD fields[256];
-    } u;
-  } bmi;
-  HBITMAP hbm;
-
-  int rastercaps, numcolors, sizepalette, bitspixel;
-
-  system_visual = g_new (GdkVisualPrivate, 1);
-
-  bitspixel = GetDeviceCaps (gdk_DC, BITSPIXEL);
-  rastercaps = GetDeviceCaps (gdk_DC, RASTERCAPS);
-  system_visual->xvisual = g_new (Visual, 1);
-  system_visual->xvisual->visualid = 0;
-  system_visual->xvisual->bitspixel = bitspixel;
-
-  if (rastercaps & RC_PALETTE)
-    {
-      system_visual->visual.type = GDK_VISUAL_PSEUDO_COLOR;
-      numcolors = GetDeviceCaps (gdk_DC, NUMCOLORS);
-      sizepalette = GetDeviceCaps (gdk_DC, SIZEPALETTE);
-      system_visual->xvisual->map_entries = sizepalette;
-    }
-  else if (bitspixel == 1)
-    {
-      system_visual->visual.type = GDK_VISUAL_STATIC_GRAY;
-      system_visual->xvisual->map_entries = 2;
-    }
-  else if (bitspixel == 4)
-    {
-      system_visual->visual.type = GDK_VISUAL_STATIC_COLOR;
-      system_visual->xvisual->map_entries = 16;
-    }
-  else if (bitspixel == 8)
-    {
-      system_visual->visual.type = GDK_VISUAL_STATIC_COLOR;
-      system_visual->xvisual->map_entries = 256;
-    }
-  else if (bitspixel == 16)
-    {
-      system_visual->visual.type = GDK_VISUAL_TRUE_COLOR;
-#if 1
-      /* This code by Mike Enright,
-       * see http://www.users.cts.com/sd/m/menright/display.html
-       */
-      memset (&bmi, 0, sizeof (bmi));
-      bmi.bi.biSize = sizeof (bmi.bi);
-
-      hbm = CreateCompatibleBitmap (gdk_DC, 1, 1);
-      GetDIBits (gdk_DC, hbm, 0, 1, NULL,
-                (BITMAPINFO *) &bmi, DIB_RGB_COLORS);
-      GetDIBits (gdk_DC, hbm, 0, 1, NULL,
-                (BITMAPINFO *) &bmi, DIB_RGB_COLORS);
-      DeleteObject (hbm);
-
-      if (bmi.bi.biCompression != BI_BITFIELDS)
-       {
-         /* Either BI_RGB or BI_RLE_something
-          * .... or perhaps (!!) something else.
-          * Theoretically biCompression might be
-          * mmioFourCC('c','v','i','d') but I doubt it.
-          */
-         if (bmi.bi.biCompression == BI_RGB)
-           {
-             /* It's 555 */
-             bitspixel = 15;
-             system_visual->visual.red_mask   = 0x00007C00;
-             system_visual->visual.green_mask = 0x000003E0;
-             system_visual->visual.blue_mask  = 0x0000001F;
-           }
-         else
-           {
-             g_assert_not_reached ();
-           }
-       }
-      else
-       {
-         DWORD allmasks =
-           bmi.u.fields[0] | bmi.u.fields[1] | bmi.u.fields[2];
-         int k = 0;
-         while (allmasks)
-           {
-             if (allmasks&1)
-               k++;
-             allmasks/=2;
-           }
-         bitspixel = k;
-         system_visual->visual.red_mask = bmi.u.fields[0];
-         system_visual->visual.green_mask = bmi.u.fields[1];
-         system_visual->visual.blue_mask  = bmi.u.fields[2];
-       }
-#else
-      /* Old, incorrect (but still working) code. */
-#if 0
-      system_visual->visual.red_mask   = 0x0000F800;
-      system_visual->visual.green_mask = 0x000007E0;
-      system_visual->visual.blue_mask  = 0x0000001F;
-#else
-      system_visual->visual.red_mask   = 0x00007C00;
-      system_visual->visual.green_mask = 0x000003E0;
-      system_visual->visual.blue_mask  = 0x0000001F;
-#endif
-#endif
-    }
-  else if (bitspixel == 24 || bitspixel == 32)
-    {
-      bitspixel = 24;
-      system_visual->visual.type = GDK_VISUAL_TRUE_COLOR;
-      system_visual->visual.red_mask   = 0x00FF0000;
-      system_visual->visual.green_mask = 0x0000FF00;
-      system_visual->visual.blue_mask  = 0x000000FF;
-    }
-  else
-    g_error ("gdk_visual_init: unsupported BITSPIXEL: %d\n", bitspixel);
-
-  system_visual->visual.depth = bitspixel;
-  system_visual->visual.byte_order = GDK_LSB_FIRST;
-  system_visual->visual.bits_per_rgb = 42; /* Not used? */
-
-  if ((system_visual->visual.type == GDK_VISUAL_TRUE_COLOR) ||
-      (system_visual->visual.type == GDK_VISUAL_DIRECT_COLOR))
-    {
-      gdk_visual_decompose_mask (system_visual->visual.red_mask,
-                                &system_visual->visual.red_shift,
-                                &system_visual->visual.red_prec);
-
-      gdk_visual_decompose_mask (system_visual->visual.green_mask,
-                                &system_visual->visual.green_shift,
-                                &system_visual->visual.green_prec);
-
-      gdk_visual_decompose_mask (system_visual->visual.blue_mask,
-                                &system_visual->visual.blue_shift,
-                                &system_visual->visual.blue_prec);
-      system_visual->xvisual->map_entries =
-       1 << (MAX (system_visual->visual.red_prec,
-                  MAX (system_visual->visual.green_prec,
-                       system_visual->visual.blue_prec)));
-    }
-  else
-    {
-      system_visual->visual.red_mask = 0;
-      system_visual->visual.red_shift = 0;
-      system_visual->visual.red_prec = 0;
-
-      system_visual->visual.green_mask = 0;
-      system_visual->visual.green_shift = 0;
-      system_visual->visual.green_prec = 0;
-
-      system_visual->visual.blue_mask = 0;
-      system_visual->visual.blue_shift = 0;
-      system_visual->visual.blue_prec = 0;
-    }
-  system_visual->visual.colormap_size = system_visual->xvisual->map_entries;
-
-  available_depths[0] = system_visual->visual.depth;
-  available_types[0] = system_visual->visual.type;
-}
-
-GdkVisual*
-gdk_visual_ref (GdkVisual *visual)
-{
-  return visual;
-}
-
-void
-gdk_visual_unref (GdkVisual *visual)
-{
-  return;
-}
-
-gint
-gdk_visual_get_best_depth (void)
-{
-  return available_depths[0];
-}
-
-GdkVisualType
-gdk_visual_get_best_type (void)
-{
-  return available_types[0];
-}
-
-GdkVisual*
-gdk_visual_get_system (void)
-{
-  return ((GdkVisual*) system_visual);
-}
-
-GdkVisual*
-gdk_visual_get_best (void)
-{
-  return ((GdkVisual*) system_visual);
-}
-
-GdkVisual*
-gdk_visual_get_best_with_depth (gint depth)
-{
-  if (depth == system_visual->visual.depth)
-    return (GdkVisual*) system_visual;
-  else
-    return NULL;
-}
-
-GdkVisual*
-gdk_visual_get_best_with_type (GdkVisualType visual_type)
-{
-  if (visual_type == system_visual->visual.type)
-    return (GdkVisual*) system_visual;
-  else
-    return NULL;
-}
-
-GdkVisual*
-gdk_visual_get_best_with_both (gint          depth,
-                              GdkVisualType visual_type)
-{
-  if ((depth == system_visual->visual.depth) &&
-      (visual_type == system_visual->visual.type))
-    return (GdkVisual*) system_visual;
-  else
-    return NULL;
-}
-
-void
-gdk_query_depths  (gint **depths,
-                  gint  *count)
-{
-  *count = 1;
-  *depths = available_depths;
-}
-
-void
-gdk_query_visual_types (GdkVisualType **visual_types,
-                       gint           *count)
-{
-  *count = 1;
-  *visual_types = available_types;
-}
-
-GList*
-gdk_list_visuals (void)
-{
-  return g_list_append (NULL, (gpointer) system_visual);
-}
-
-GdkVisual*
-gdk_visual_lookup (Visual *xvisual)
-{
-  if (system_visual->xvisual == xvisual)
-    return (GdkVisual *) system_visual;
-  else
-    return NULL;
-}
-
-GdkVisual*
-gdkx_visual_get (VisualID xvisualid)
-{
-  if (xvisualid == system_visual->xvisual->visualid)
-    return (GdkVisual*) system_visual;
-  else
-    return NULL;
-}
-
-static void
-gdk_visual_decompose_mask (gulong  mask,
-                          gint   *shift,
-                          gint   *prec)
-{
-  *shift = 0;
-  *prec = 0;
-
-  while (!(mask & 0x1))
-    {
-      (*shift)++;
-      mask >>= 1;
-    }
-
-  while (mask & 0x1)
-    {
-      (*prec)++;
-      mask >>= 1;
-    }
-}
diff --git a/gdk/win32/gdkwin32.h b/gdk/win32/gdkwin32.h
deleted file mode 100644 (file)
index 5814c39..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#ifndef __GDK_X_H__
-#define __GDK_X_H__
-
-#include <gdk/gdk.h>
-#include <gdkprivate.h>
-
-#include <time.h>
-#include <locale.h>
-
-#define GDK_ROOT_WINDOW()             ((guint32) HWND_DESKTOP)
-#define GDK_ROOT_PARENT()             ((GdkWindow *) gdk_root_parent)
-#define GDK_DISPLAY()                 NULL
-#define GDK_DRAWABLE_XDISPLAY(win)    NULL
-#define GDK_DRAWABLE_XID(win)         (((GdkDrawablePrivate*) win)->xwindow)
-#define GDK_WINDOW_XDISPLAY          GDK_DRAWABLE_XDISPLAY
-#define GDK_WINDOW_XWINDOW           GDK_DRAWABLE_XID
-#define GDK_IMAGE_XDISPLAY(image)     NULL
-#define GDK_IMAGE_XIMAGE(image)       (((GdkImagePrivate*) image)->ximage)
-#define GDK_GC_XDISPLAY(gc)           NULL
-#define GDK_GC_XGC(gc)                (((GdkGCPrivate*) gc)->xgc)
-#define GDK_COLORMAP_XDISPLAY(cmap)   NULL
-#define GDK_COLORMAP_XCOLORMAP(cmap)  (((GdkColormapPrivate*) cmap)->xcolormap)
-#define GDK_VISUAL_XVISUAL(vis)       (((GdkVisualPrivate*) vis)->xvisual)
-#define GDK_FONT_XDISPLAY(font)       NULL
-
-GdkVisual*   gdkx_visual_get   (VisualID xvisualid);
-/* XXX: Do not use this function until it is fixed. An X Colormap
- *      is useless unless we also have the visual. */
-GdkColormap* gdkx_colormap_get (Colormap xcolormap);
-/* Functions to create GDK pixmaps and windows from their native equivalents */
-GdkPixmap    *gdk_pixmap_foreign_new (guint32     anid);
-GdkWindow    *gdk_window_foreign_new (guint32       anid);
-
-#endif /* __GDK_X_H__ */
diff --git a/gdk/win32/gdkwin32id.c b/gdk/win32/gdkwin32id.c
deleted file mode 100644 (file)
index 4cba645..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <gdk/gdk.h>
-
-#include "gdkprivate.h"
-
-static guint gdk_xid_hash    (XID *xid);
-static gint  gdk_xid_compare (XID *a,
-                             XID *b);
-
-
-static GHashTable *xid_ht = NULL;
-
-
-void
-gdk_xid_table_insert (XID      *xid,
-                     gpointer  data)
-{
-  g_return_if_fail (xid != NULL);
-
-  if (!xid_ht)
-    xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash,
-                              (GCompareFunc) gdk_xid_compare);
-
-  g_hash_table_insert (xid_ht, xid, data);
-}
-
-void
-gdk_xid_table_remove (XID xid)
-{
-  if (!xid_ht)
-    xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash,
-                              (GCompareFunc) gdk_xid_compare);
-
-  g_hash_table_remove (xid_ht, &xid);
-}
-
-gpointer
-gdk_xid_table_lookup (XID xid)
-{
-  gpointer data = NULL;
-
-  if (xid_ht)
-    data = g_hash_table_lookup (xid_ht, &xid);
-  
-  return data;
-}
-
-
-static guint
-gdk_xid_hash (XID *xid)
-{
-  return (guint) *xid;
-}
-
-static gint
-gdk_xid_compare (XID *a,
-                XID *b)
-{
-  return (*a == *b);
-}
diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c
deleted file mode 100644 (file)
index d8b5177..0000000
+++ /dev/null
@@ -1,2407 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1998-1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "gdkevents.h"
-#include "gdkpixmap.h"
-#include "gdkwindow.h"
-#include "gdkprivate.h"
-#include "gdkinputprivate.h"
-#include "gdkx.h"
-
-/* The Win API function AdjustWindowRect may return negative values
- * resulting in obscured title bars. This helper function is coreccting it.
- */
-BOOL
-SafeAdjustWindowRectEx (RECT* lpRect, 
-                       DWORD dwStyle, 
-                       BOOL bMenu, 
-                       DWORD dwExStyle)
-{
-  if (!AdjustWindowRectEx(lpRect, dwStyle, bMenu, dwExStyle))
-    return FALSE;
-  if (lpRect->left < 0)
-    {
-      lpRect->right -= lpRect->left;
-      lpRect->left = 0;
-    }
-  if (lpRect->top < 0)
-    {
-      lpRect->bottom -= lpRect->top;
-      lpRect->top = 0;
-    }
-  return TRUE;
-}
-
-/* Forward declarations */
-static gboolean gdk_window_gravity_works (void);
-static void     gdk_window_set_static_win_gravity (GdkWindow *window, 
-                                                  gboolean   on);
-
-/* 
- * 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.
- */
-HWND
-gdk_window_xid_at_coords (gint     x,
-                         gint     y,
-                         GList   *excludes,
-                         gboolean excl_child)
-{
-  POINT pt;
-  gboolean warned = FALSE;
-
-  pt.x = x;
-  pt.y = y;
-  /* This is probably not correct, just a quick hack */
-
-  if (!warned)
-    {
-      g_warning ("gdk_window_xid_at_coords probably not implemented correctly");
-      warned = TRUE;
-    }
-
-  /* XXX */
-  return WindowFromPoint (pt);
-}
-
-void
-gdk_window_init (void)
-{
-  RECT r;
-  guint width;
-  guint height;
-
-  SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
-  width  = r.right - r.left;
-  height = r.bottom - r.top;
-
-  gdk_root_parent = g_new (GdkWindowPrivate, 1);
-  gdk_root_parent->drawable.xwindow = gdk_root_window;
-  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->drawable.ref_count = 1;
-  gdk_root_parent->drawable.colormap = NULL;
-  gdk_root_parent->children = NULL;
-
-  gdk_xid_table_insert (&gdk_root_window, gdk_root_parent);
-}
-
-/* RegisterGdkClass
- *   is a wrapper function for RegisterWindowClassEx.
- *   It creates at least one unique class for every 
- *   GdkWindowType. If support for single window-specific icons
- *   is ever needed (e.g Dialog specific), every such window should
- *   get its own class
- */
-ATOM
-RegisterGdkClass(GdkWindowType wtype)
-{
-  static ATOM klassTOPLEVEL = 0;
-  static ATOM klassDIALOG   = 0;
-  static ATOM klassCHILD    = 0;
-  static ATOM klassTEMP     = 0;
-  static HICON hAppIcon = NULL;
-  static WNDCLASSEX wcl; 
-  ATOM klass = 0;
-
-  wcl.cbSize = sizeof(WNDCLASSEX);     
-  wcl.style = 0; /* DON'T set CS_<H,V>REDRAW. It causes total redraw
-                  * on WM_SIZE and WM_MOVE. Flicker, Performance!
-                  */
-  wcl.lpfnWndProc = gdk_WindowProc;
-  wcl.cbClsExtra = 0;
-  wcl.cbWndExtra = 0;
-  wcl.hInstance = gdk_ProgInstance;
-  wcl.hIcon = 0;
-  /* initialize once! */
-  if (0 == hAppIcon)
-    {
-      gchar sLoc [_MAX_PATH+1];
-      HINSTANCE hInst = GetModuleHandle(NULL);
-
-      if (0 != GetModuleFileName(hInst, sLoc, _MAX_PATH))
-       {
-         hAppIcon = ExtractIcon(hInst, sLoc, 0);
-         if (0 == hAppIcon)
-           {
-             char *gdklibname = g_strdup_printf ("gdk-%s.dll", GDK_VERSION);
-
-             hAppIcon = ExtractIcon(hInst, gdklibname, 0);
-             g_free (gdklibname);
-           }
-         
-         if (0 == hAppIcon) 
-           hAppIcon = LoadIcon (NULL, IDI_APPLICATION);
-       }
-    }
-
-  wcl.lpszMenuName = NULL;
-  wcl.hIconSm = 0;
-
-  /* initialize once per class */
-#define ONCE_PER_CLASS() \
-  wcl.hIcon = CopyIcon (hAppIcon); \
-  wcl.hIconSm = CopyIcon (hAppIcon); \
-  wcl.hbrBackground = CreateSolidBrush( RGB(0,0,0)); \
-  wcl.hCursor = LoadCursor (NULL, IDC_ARROW); 
-  
-  switch (wtype)
-  {
-    case GDK_WINDOW_TOPLEVEL:
-      if (0 == klassTOPLEVEL)
-      {
-       wcl.lpszClassName = "gdkWindowToplevel";
-
-       ONCE_PER_CLASS();
-       klassTOPLEVEL = RegisterClassEx(&wcl);
-      }
-      klass = klassTOPLEVEL;
-      break;
-    case GDK_WINDOW_CHILD:
-      if (0 == klassCHILD)
-      {
-       wcl.lpszClassName = "gdkWindowChild";
-
-        wcl.style |= CS_PARENTDC; /* MSDN: ... enhances system performance. */
-       ONCE_PER_CLASS();
-       klassCHILD = RegisterClassEx(&wcl);
-      }
-      klass = klassCHILD;
-      break;
-    case GDK_WINDOW_DIALOG:
-      if (0 == klassDIALOG)
-      {
-       wcl.lpszClassName = "gdkWindowDialog";
-        wcl.style |= CS_SAVEBITS;
-       ONCE_PER_CLASS();
-       klassDIALOG = RegisterClassEx(&wcl);
-      }
-      klass = klassDIALOG;
-      break;
-    case GDK_WINDOW_TEMP:
-      if (0 == klassTEMP)
-      {
-       wcl.lpszClassName = "gdkWindowTemp";
-        wcl.style |= CS_SAVEBITS;
-       ONCE_PER_CLASS();
-       klassTEMP = RegisterClassEx(&wcl);
-      }
-      klass = klassTEMP;
-      break;
-    case GDK_WINDOW_ROOT:
-      g_error ("cannot make windows of type GDK_WINDOW_ROOT");
-      break;
-    case GDK_DRAWABLE_PIXMAP:
-      g_error ("cannot make windows of type GDK_DRAWABLE_PIXMAP (use gdk_pixmap_new)");
-      break;
-  }
-
-  return klass;
-} /* RegisterGdkClass */
-
-
-GdkWindow*
-gdk_window_new (GdkWindow     *parent,
-               GdkWindowAttr *attributes,
-               gint           attributes_mask)
-{
-  GdkWindow *window;
-  GdkWindowPrivate *private;
-  GdkWindowPrivate *parent_private;
-  GdkVisual *visual;
-  HANDLE xparent;
-  Visual *xvisual;
-  ATOM klass = 0;
-  DWORD dwStyle, dwExStyle;
-  RECT rect;
-  UINT acp;
-  int width, height;
-  int x, y;
-  char *title;
-  gint titlelen;
-  wchar_t *wctitle;
-  gint wlen;
-  char *mbtitle;
-
-  g_return_val_if_fail (attributes != NULL, NULL);
-
-  if (!parent)
-    parent = (GdkWindow*) gdk_root_parent;
-
-  parent_private = (GdkWindowPrivate*) parent;
-  if (GDK_DRAWABLE_DESTROYED (parent))
-    return NULL;
-
-  xparent = parent_private->drawable.xwindow;
-
-  private = g_new (GdkWindowPrivate, 1);
-  window = (GdkWindow*) private;
-
-  private->parent = parent;
-
-  private->drawable.destroyed = FALSE;
-  private->mapped = FALSE;
-  private->guffaw_gravity = FALSE;
-  private->resize_count = 0;
-  private->drawable.ref_count = 1;
-
-  private->x = (attributes_mask & GDK_WA_X) ? attributes->x : 0;
-  private->y = (attributes_mask & GDK_WA_Y) ? attributes->y : 0;
-
-  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 = 0;
-  private->extension_events_selected = FALSE;
-
-  private->filters = NULL;
-  private->children = NULL;
-
-  window->user_data = NULL;
-
-  if (attributes_mask & GDK_WA_VISUAL)
-    visual = attributes->visual;
-  else
-    visual = gdk_visual_get_system ();
-  xvisual = ((GdkVisualPrivate*) visual)->xvisual;
-
-  if (attributes_mask & GDK_WA_TITLE)
-    title = attributes->title;
-  else
-    title = g_get_prgname ();
-
-  private->event_mask = GDK_STRUCTURE_MASK | attributes->event_mask;
-  private->bg_type = GDK_WIN32_BG_NORMAL;
-  private->hint_flags = 0;
-  private->xcursor = NULL;
-      
-  if (parent_private && parent_private->guffaw_gravity)
-    {
-      /* XXX ??? */
-    }
-
-  if (attributes->wclass == GDK_INPUT_OUTPUT)
-    {
-      dwExStyle = 0;
-      if (attributes_mask & GDK_WA_COLORMAP)
-       private->drawable.colormap = attributes->colormap;
-      else
-       private->drawable.colormap = gdk_colormap_get_system ();
-    }
-  else
-    {
-      dwExStyle = WS_EX_TRANSPARENT;
-      private->drawable.colormap = NULL;
-      private->bg_type = GDK_WIN32_BG_TRANSPARENT;
-      private->bg_pixmap = NULL;
-    }
-
-  if (attributes_mask & GDK_WA_X)
-    x = attributes->x;
-  else
-    x = CW_USEDEFAULT;
-
-  if (attributes_mask & GDK_WA_Y)
-    y = attributes->y;
-  else if (attributes_mask & GDK_WA_X)
-    y = 100;                   /* ??? We must put it somewhere... */
-  else
-    y = 500;                   /* x is CW_USEDEFAULT, y doesn't matter then */
-
-  if (parent_private)
-    parent_private->children = g_list_prepend (parent_private->children, window);
-
-  switch (private->drawable.window_type)
-    {
-    case GDK_WINDOW_TOPLEVEL:
-      dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN;
-      xparent = gdk_root_window;
-      break;
-    case GDK_WINDOW_CHILD:
-      dwStyle = WS_CHILDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
-      break;
-    case GDK_WINDOW_DIALOG:
-      dwStyle = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_CLIPCHILDREN;
-      dwExStyle |= WS_EX_TOPMOST; /* //HB: want this? */
-      xparent = gdk_root_window;
-      break;
-    case GDK_WINDOW_TEMP:
-      dwStyle = WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
-      dwExStyle |= WS_EX_TOOLWINDOW;
-      break;
-    case GDK_WINDOW_ROOT:
-      g_error ("cannot make windows of type GDK_WINDOW_ROOT");
-      break;
-    case GDK_DRAWABLE_PIXMAP:
-      g_error ("cannot make windows of type GDK_DRAWABLE_PIXMAP (use gdk_pixmap_new)");
-      break;
-    }
-
-  klass = RegisterGdkClass (private->drawable.window_type);
-  if (!klass)
-    g_error ("RegisterClassEx failed");
-
-  if (private->drawable.window_type != GDK_WINDOW_CHILD)
-    {
-      if (x == CW_USEDEFAULT)
-       {
-         rect.left = 100;
-         rect.top = 100;
-       }
-      else
-       {
-         rect.left = x;
-         rect.top = y;
-       }
-
-      rect.right = rect.left + private->drawable.width;
-      rect.bottom = rect.top + private->drawable.height;
-
-      if (!SafeAdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle))
-       g_warning ("gdk_window_new: AdjustWindowRectEx failed");
-
-      if (x != CW_USEDEFAULT)
-       {
-         x = rect.left;
-         y = rect.top;
-       }
-      width = rect.right - rect.left;
-      height = rect.bottom - rect.top;
-    }
-  else
-    {
-      width = private->drawable.width;
-      height = private->drawable.height;
-    }
-
-  acp = GetACP ();
-  private->input_locale = GetKeyboardLayout (0);
-  TranslateCharsetInfo ((DWORD FAR *) acp,
-                       &private->charset_info,
-                       TCI_SRCCODEPAGE);
-
-  titlelen = strlen (title);
-  wctitle = g_new (wchar_t, titlelen + 1);
-  mbtitle = g_new (char, 3*titlelen + 1);
-  wlen = gdk_nmbstowchar_ts (wctitle, title, titlelen, titlelen);
-  wctitle[wlen] = 0;
-  WideCharToMultiByte (GetACP (), 0, wctitle, -1,
-                      mbtitle, 3*titlelen, NULL, NULL);
-  
-  private->drawable.xwindow =
-    CreateWindowEx (dwExStyle,
-                   MAKEINTRESOURCE(klass),
-                   mbtitle,
-                   dwStyle,
-                   x, y, 
-                   width, height,
-                   xparent,
-                   NULL,
-                   gdk_ProgInstance,
-                   NULL);
-
-  GDK_NOTE (MISC,
-           g_print ("gdk_window_create: %s %s %dx%d@+%d+%d %#x = %#x\n"
-                    "...locale %#x codepage %d\n",
-                    (private->drawable.window_type == GDK_WINDOW_TOPLEVEL ? "TOPLEVEL" :
-                     (private->drawable.window_type == GDK_WINDOW_CHILD ? "CHILD" :
-                      (private->drawable.window_type == GDK_WINDOW_DIALOG ? "DIALOG" :
-                       (private->drawable.window_type == GDK_WINDOW_TEMP ? "TEMP" :
-                        "???")))),
-                    mbtitle,
-                    width, height, (x == CW_USEDEFAULT ? -9999 : x), y, 
-                    xparent,
-                    private->drawable.xwindow,
-                    private->input_locale,
-                    private->charset_info.ciACP));
-
-  g_free (mbtitle);
-  g_free (wctitle);
-
-  if (private->drawable.xwindow == NULL)
-    {
-      g_warning ("gdk_window_create: CreateWindowEx failed");
-      g_free (private);
-      return NULL;
-    }
-
-  gdk_window_ref (window);
-  gdk_xid_table_insert (&private->drawable.xwindow, window);
-
-  if (private->drawable.colormap)
-    gdk_colormap_ref (private->drawable.colormap);
-
-  gdk_window_set_cursor (window, ((attributes_mask & GDK_WA_CURSOR) ?
-                                 (attributes->cursor) :
-                                 NULL));
-
-  return window;
-}
-
-GdkWindow *
-gdk_window_foreign_new (guint32 anid)
-{
-  GdkWindow *window;
-  GdkWindowPrivate *private;
-  GdkWindowPrivate *parent_private;
-  HANDLE parent;
-  RECT rect;
-  POINT point;
-
-  private = g_new (GdkWindowPrivate, 1);
-  window = (GdkWindow*) private;
-
-  parent = GetParent ((HWND) anid);
-  private->parent = gdk_xid_table_lookup (parent);
-
-  parent_private = (GdkWindowPrivate *)private->parent;
-  
-  if (parent_private)
-    parent_private->children = g_list_prepend (parent_private->children, window);
-
-  private->drawable.xwindow = (HWND) anid;
-  GetClientRect ((HWND) anid, &rect);
-  point.x = rect.left;
-  point.y = rect.right;
-  ClientToScreen ((HWND) anid, &point);
-  if (parent != GetDesktopWindow ())
-    ScreenToClient (parent, &point);
-  private->x = point.x;
-  private->y = point.y;
-  private->drawable.width = rect.right - rect.left;
-  private->drawable.height = rect.bottom - rect.top;
-  private->resize_count = 0;
-  private->drawable.ref_count = 1;
-  private->drawable.window_type = GDK_WINDOW_FOREIGN;
-  private->drawable.destroyed = FALSE;
-  private->mapped = IsWindowVisible (private->drawable.xwindow);
-  private->guffaw_gravity = FALSE;
-  private->extension_events = 0;
-  private->extension_events_selected = FALSE;
-
-  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);
-
-  return window;
-}
-
-/* Call this function when you want a window and all its children to
- * disappear.  When xdestroy is true, a request to destroy the XWindow
- * is sent out.  When it is false, it is assumed that the XWindow has
- * been or will be destroyed by destroying some ancestor of this
- * window.
- */
-static void
-gdk_window_internal_destroy (GdkWindow *window,
-                            gboolean   xdestroy,
-                            gboolean   our_destroy)
-{
-  GdkWindowPrivate *private;
-  GdkWindowPrivate *temp_private;
-  GdkWindow *temp_window;
-  GList *children;
-  GList *tmp;
-
-  g_return_if_fail (window != NULL);
-
-  private = (GdkWindowPrivate*) window;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_internal_destroy %#x\n",
-                          private->drawable.xwindow));
-
-  switch (private->drawable.window_type)
-    {
-    case GDK_WINDOW_TOPLEVEL:
-    case GDK_WINDOW_CHILD:
-    case GDK_WINDOW_DIALOG:
-    case GDK_WINDOW_TEMP:
-    case GDK_WINDOW_FOREIGN:
-      if (!private->drawable.destroyed)
-       {
-         if (private->parent)
-           {
-             GdkWindowPrivate *parent_private = (GdkWindowPrivate *)private->parent;
-             if (parent_private->children)
-               parent_private->children = g_list_remove (parent_private->children, window);
-           }
-
-         if (GDK_DRAWABLE_TYPE (window) != GDK_WINDOW_FOREIGN)
-           {
-             children = tmp = private->children;
-             private->children = NULL;
-
-             while (tmp)
-               {
-                 temp_window = tmp->data;
-                 tmp = tmp->next;
-                 
-                 temp_private = (GdkWindowPrivate*) temp_window;
-                 if (temp_private)
-                   gdk_window_internal_destroy (temp_window, FALSE,
-                                                our_destroy);
-               }
-
-             g_list_free (children);
-           }
-
-         if (private->extension_events != 0)
-           gdk_input_window_destroy (window);
-
-         if (private->filters)
-           {
-             tmp = private->filters;
-
-             while (tmp)
-               {
-                 g_free (tmp->data);
-                 tmp = tmp->next;
-               }
-
-             g_list_free (private->filters);
-             private->filters = NULL;
-           }
-         
-         if (private->drawable.window_type == GDK_WINDOW_FOREIGN)
-           {
-             if (our_destroy && (private->parent != NULL))
-               {
-                 /* It's somebody elses window, but in our hierarchy,
-                  * so reparent it to the root window, and then send
-                  * it a delete event, as if we were a WM
-                  */
-                 gdk_window_hide (window);
-                 gdk_window_reparent (window, NULL, 0, 0);
-                 
-                 /* Is this too drastic? Many (most?) applications
-                  * quit if any window receives WM_QUIT I think.
-                  * OTOH, I don't think foreign windows are much
-                  * used, so the question is maybe academic.
-                  */
-                 PostMessage (private->drawable.xwindow, WM_QUIT, 0, 0);
-               }
-           }
-         else if (xdestroy)
-           DestroyWindow (private->drawable.xwindow);
-
-         if (private->drawable.colormap)
-           gdk_colormap_unref (private->drawable.colormap);
-
-         private->mapped = FALSE;
-         private->drawable.destroyed = TRUE;
-       }
-      break;
-
-    case GDK_WINDOW_ROOT:
-      g_error ("attempted to destroy root window");
-      break;
-
-    case GDK_DRAWABLE_PIXMAP:
-      g_error ("called gdk_window_destroy on a pixmap (use gdk_pixmap_unref)");
-      break;
-    }
-}
-
-/* Like internal_destroy, but also destroys the reference created by
-   gdk_window_new. */
-
-void
-gdk_window_destroy (GdkWindow *window)
-{
-  gdk_window_internal_destroy (window, TRUE, TRUE);
-  gdk_window_unref (window);
-}
-
-/* This function is called when the XWindow is really gone.  */
-
-void
-gdk_window_destroy_notify (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-
-  GDK_NOTE (EVENTS, g_print ("gdk_window_destroy_notify: %#x  %d\n",
-                            GDK_DRAWABLE_XID (window), GDK_DRAWABLE_DESTROYED (window)));
-
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      if (GDK_DRAWABLE_TYPE(window) != GDK_WINDOW_FOREIGN)
-       g_warning ("GdkWindow %#lx unexpectedly destroyed", GDK_DRAWABLE_XID (window));
-
-      gdk_window_internal_destroy (window, FALSE, FALSE);
-    }
-  
-  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;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_ref %#x %d\n",
-                          GDK_DRAWABLE_XID (window),
-                          private->drawable.ref_count));
-
-  return window;
-}
-
-void
-gdk_window_unref (GdkWindow *window)
-{
-  GdkWindowPrivate *private = (GdkWindowPrivate *)window;
-  g_return_if_fail (window != NULL);
-
-  private->drawable.ref_count -= 1;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_unref %#x %d%s\n",
-                          private->drawable.xwindow,
-                          private->drawable.ref_count,
-                          (private->drawable.ref_count == 0 ? " freeing" : "")));
-
-  if (private->drawable.ref_count == 0)
-    {
-      if (private->bg_type == GDK_WIN32_BG_PIXMAP
-         && private->bg_pixmap != NULL)
-       gdk_pixmap_unref (private->bg_pixmap);
-
-      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");
-       }
-      g_dataset_destroy (window);
-      g_free (window);
-    }
-}
-
-void
-gdk_window_show (GdkWindow *window)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  private = (GdkWindowPrivate*) window;
-  if (!private->drawable.destroyed)
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_show: %#x\n",
-                              private->drawable.xwindow));
-
-      private->mapped = TRUE;
-      if (private->drawable.window_type == GDK_WINDOW_TEMP)
-       {
-         ShowWindow (private->drawable.xwindow, SW_SHOWNOACTIVATE);
-         SetWindowPos (private->drawable.xwindow, HWND_TOPMOST, 0, 0, 0, 0,
-                       SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
-#if 0
-         ShowWindow (private->drawable.xwindow, SW_HIDE); /* Don't put on toolbar */
-#endif
-       }
-      else
-       {
-         ShowWindow (private->drawable.xwindow, SW_SHOWNORMAL);
-         ShowWindow (private->drawable.xwindow, SW_RESTORE);
-         SetForegroundWindow (private->drawable.xwindow);
-         BringWindowToTop (private->drawable.xwindow);
-#if 0
-         ShowOwnedPopups (private->drawable.xwindow, TRUE);
-#endif
-       }
-    }
-}
-
-void
-gdk_window_hide (GdkWindow *window)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  private = (GdkWindowPrivate*) window;
-  if (!private->drawable.destroyed)
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_hide: %#x\n",
-                              private->drawable.xwindow));
-
-      private->mapped = FALSE;
-      if (private->drawable.window_type == GDK_WINDOW_TOPLEVEL)
-       ShowOwnedPopups (private->drawable.xwindow, FALSE);
-#if 1
-      ShowWindow (private->drawable.xwindow, SW_HIDE);
-#elif 0
-      ShowWindow (private->drawable.xwindow, SW_MINIMIZE);
-#else
-      CloseWindow (private->drawable.xwindow);
-#endif
-    }
-}
-
-void
-gdk_window_withdraw (GdkWindow *window)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  private = (GdkWindowPrivate*) window;
-  if (!private->drawable.destroyed)
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_withdraw: %#x\n",
-                              private->drawable.xwindow));
-
-      gdk_window_hide (window);        /* XXX */
-    }
-}
-
-void
-gdk_window_move (GdkWindow *window,
-                gint       x,
-                gint       y)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  private = (GdkWindowPrivate*) window;
-  if (!private->drawable.destroyed)
-    {
-      RECT rect;
-
-      GDK_NOTE (MISC, g_print ("gdk_window_move: %#x +%d+%d\n",
-                              private->drawable.xwindow, x, y));
-
-      GetClientRect (private->drawable.xwindow, &rect);
-
-      if (private->drawable.window_type != GDK_WINDOW_CHILD)
-       {
-         POINT ptTL, ptBR;
-         DWORD dwStyle;
-         DWORD dwExStyle;
-
-         ptTL.x = 0;
-         ptTL.y = 0; 
-         ClientToScreen (private->drawable.xwindow, &ptTL);
-         rect.left = x;
-         rect.top = y;
-
-         ptBR.x = rect.right;
-         ptBR.y = rect.bottom;
-         ClientToScreen (private->drawable.xwindow, &ptBR);
-         rect.right = x + ptBR.x - ptTL.x;
-         rect.bottom = y + ptBR.y - ptTL.y;
-
-         dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-         dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-         if (!SafeAdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle))
-           g_warning ("gdk_window_move: AdjustWindowRectEx failed");
-
-         x = rect.left;
-         y = rect.top;
-       }
-      else
-       {
-         private->x = x;
-         private->y = y;
-       }
-      GDK_NOTE (MISC, g_print ("...MoveWindow(%#x,%dx%d@+%d+%d)\n",
-                              private->drawable.xwindow,
-                              rect.right - rect.left, rect.bottom - rect.top,
-                              x, y));
-      if (!MoveWindow (private->drawable.xwindow,
-                      x, y, rect.right - rect.left, rect.bottom - rect.top,
-                      TRUE))
-       g_warning ("gdk_window_move: MoveWindow failed");
-    }
-}
-
-void
-gdk_window_resize (GdkWindow *window,
-                  gint       width,
-                  gint       height)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  if ((gint16) width < 1)
-    width = 1;
-  if ((gint16) height < 1)
-    height = 1;
-
-  private = (GdkWindowPrivate*) window;
-
-  if (!private->drawable.destroyed &&
-      ((private->resize_count > 0) ||
-       (private->drawable.width != (guint16) width) ||
-       (private->drawable.height != (guint16) height)))
-    {
-      int x, y;
-
-      GDK_NOTE (MISC, g_print ("gdk_window_resize: %#x %dx%d\n",
-                              private->drawable.xwindow, width, height));
-      
-      if (private->drawable.window_type != GDK_WINDOW_CHILD)
-       {
-         POINT pt;
-         RECT rect;
-         DWORD dwStyle;
-         DWORD dwExStyle;
-
-         pt.x = 0;
-         pt.y = 0; 
-         ClientToScreen (private->drawable.xwindow, &pt);
-         rect.left = pt.x;
-         rect.top = pt.y;
-         rect.right = pt.x + width;
-         rect.bottom = pt.y + height;
-
-         dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-         dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-         if (!AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle))
-           g_warning ("gdk_window_resize: AdjustWindowRectEx failed");
-
-         x = rect.left;
-         y = rect.top;
-         width = rect.right - rect.left;
-         height = rect.bottom - rect.top;
-       }
-      else
-       {
-         x = private->x;
-         y = private->y;
-         private->drawable.width = width;
-         private->drawable.height = height;
-       }
-
-      private->resize_count += 1;
-
-      GDK_NOTE (MISC, g_print ("...MoveWindow(%#x,%dx%d@+%d+%d)\n",
-                              private->drawable.xwindow, width, height, x, y));
-      if (!MoveWindow (private->drawable.xwindow,
-                      x, y, width, height,
-                      TRUE))
-       g_warning ("gdk_window_resize: MoveWindow failed");
-    }
-}
-
-void
-gdk_window_move_resize (GdkWindow *window,
-                       gint       x,
-                       gint       y,
-                       gint       width,
-                       gint       height)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  if ((gint16) width < 1)
-    width = 1;
-  if ((gint16) height < 1)
-    height = 1;
-
-  private = (GdkWindowPrivate*) window;
-  if (!private->drawable.destroyed)
-    {
-      RECT rect;
-      DWORD dwStyle;
-      DWORD dwExStyle;
-
-      GDK_NOTE (MISC, g_print ("gdk_window_move_resize: %#x %dx%d@+%d+%d\n",
-                              private->drawable.xwindow, width, height, x, y));
-      
-      rect.left = x;
-      rect.top = y;
-      rect.right = x + width;
-      rect.bottom = y + height;
-
-      dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-      dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-      if (!AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle))
-       g_warning ("gdk_window_move_resize: AdjustWindowRectEx failed");
-
-      if (private->drawable.window_type == GDK_WINDOW_CHILD)
-       {
-         private->x = x;
-         private->y = y;
-         private->drawable.width = width;
-         private->drawable.height = height;
-       }
-      GDK_NOTE (MISC, g_print ("...MoveWindow(%#x,%dx%d@+%d+%d)\n",
-                              private->drawable.xwindow,
-                              rect.right - rect.left, rect.bottom - rect.top,
-                              rect.left, rect.top));
-      if (!MoveWindow (private->drawable.xwindow,
-                      rect.left, rect.top,
-                      rect.right - rect.left, rect.bottom - rect.top,
-                      TRUE))
-       g_warning ("gdk_window_move_resize: MoveWindow failed");
-
-      if (private->guffaw_gravity)
-       {
-         GList *tmp_list = private->children;
-         while (tmp_list)
-           {
-             GdkWindowPrivate *child_private = tmp_list->data;
-             
-             child_private->x -= x - private->x;
-             child_private->y -= y - private->y;
-             
-             tmp_list = tmp_list->next;
-           }
-       }
-      
-    }
-}
-
-void
-gdk_window_reparent (GdkWindow *window,
-                    GdkWindow *new_parent,
-                    gint       x,
-                    gint       y)
-{
-  GdkWindowPrivate *window_private;
-  GdkWindowPrivate *parent_private;
-  GdkWindowPrivate *old_parent_private;
-
-  g_return_if_fail (window != NULL);
-
-  if (!new_parent)
-    new_parent = (GdkWindow*) gdk_root_parent;
-
-  window_private = (GdkWindowPrivate*) window;
-  old_parent_private = (GdkWindowPrivate*)window_private->parent;
-  parent_private = (GdkWindowPrivate*) new_parent;
-
-  if (!window_private->drawable.destroyed && !parent_private->drawable.destroyed)
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_reparent: %#x %#x\n",
-                              window_private->drawable.xwindow,
-                              parent_private->drawable.xwindow));
-      if (!SetParent (window_private->drawable.xwindow, parent_private->drawable.xwindow))
-       g_warning ("gdk_window_reparent: SetParent failed");
-
-      if (!MoveWindow (window_private->drawable.xwindow,
-                      x, y,
-                      window_private->drawable.width, window_private->drawable.height,
-                      TRUE))
-       g_warning ("gdk_window_reparent: MoveWindow failed");
-    }
-  
-  window_private->parent = new_parent;
-
-  if (old_parent_private)
-    old_parent_private->children = g_list_remove (old_parent_private->children, window);
-
-  if ((old_parent_private &&
-       (!old_parent_private->guffaw_gravity != !parent_private->guffaw_gravity)) ||
-      (!old_parent_private && parent_private->guffaw_gravity))
-    gdk_window_set_static_win_gravity (window, parent_private->guffaw_gravity);
-  
-  parent_private->children = g_list_prepend (parent_private->children, window);
-}
-
-void
-gdk_window_clear (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    gdk_window_clear_area (window, 0, 0, -1, -1);
-}
-
-
-void
-gdk_window_clear_area (GdkWindow *window,
-                      gint       x,
-                      gint       y,
-                      gint       width,
-                      gint       height)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      HDC hdc;
-
-      if (width == -1)
-       width = G_MAXSHORT/2;           /* Yeah, right */
-      if (height == -1)
-       height = G_MAXSHORT/2;
-      GDK_NOTE (MISC, g_print ("gdk_window_clear_area: %#x %dx%d@+%d+%d\n",
-                              GDK_DRAWABLE_XID (window), width, height, x, y));
-      hdc = GetDC (GDK_DRAWABLE_XID (window));
-      IntersectClipRect (hdc, x, y, x + width, y + height);
-      SendMessage (GDK_DRAWABLE_XID (window), WM_ERASEBKGND, (WPARAM) hdc, 0);
-      ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-    }
-}
-
-void
-gdk_window_clear_area_e (GdkWindow *window,
-                        gint       x,
-                        gint       y,
-                        gint       width,
-                        gint       height)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      RECT rect;
-
-      GDK_NOTE (MISC, g_print ("gdk_window_clear_area_e: %#x %dx%d@+%d+%d\n",
-                              GDK_DRAWABLE_XID (window), width, height, x, y));
-
-      rect.left = x;
-      rect.right = x + width;
-      rect.top = y;
-      rect.bottom = y + height;
-      if (!InvalidateRect (GDK_DRAWABLE_XID (window), &rect, TRUE))
-       g_warning ("gdk_window_clear_area_e: InvalidateRect failed");
-      UpdateWindow (GDK_DRAWABLE_XID (window));
-    }
-}
-
-void
-gdk_window_raise (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_raise: %#x\n",
-                              GDK_DRAWABLE_XID (window)));
-
-      if (!BringWindowToTop (GDK_DRAWABLE_XID (window)))
-       g_warning ("gdk_window_raise: BringWindowToTop failed");
-    }
-}
-
-void
-gdk_window_lower (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_lower: %#x\n",
-                              GDK_DRAWABLE_XID (window)));
-
-      if (!SetWindowPos (GDK_DRAWABLE_XID (window), HWND_BOTTOM, 0, 0, 0, 0,
-                        SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE))
-       g_warning ("gdk_window_lower: SetWindowPos failed");
-    }
-}
-
-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,
-                     gint       min_width,
-                     gint       min_height,
-                     gint       max_width,
-                     gint       max_height,
-                     gint       flags)
-{
-  GdkWindowPrivate *private;
-  WINDOWPLACEMENT size_hints;
-  RECT rect;
-  DWORD dwStyle;
-  DWORD dwExStyle;
-  int diff;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-  
-  private = (GdkWindowPrivate*) window;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_set_hints: %#x %dx%d..%dx%d @+%d+%d\n",
-                          private->drawable.xwindow,
-                          min_width, min_height, max_width, max_height,
-                          x, y));
-
-  private->hint_flags = flags;
-  size_hints.length = sizeof (size_hints);
-
-  if (flags)
-    {
-      if (flags & GDK_HINT_POS)
-       if (!GetWindowPlacement (private->drawable.xwindow, &size_hints))
-         g_warning ("gdk_window_set_hints: GetWindowPlacement failed");
-       else
-         {
-           GDK_NOTE (MISC, g_print ("...rcNormalPosition:"
-                                    " (%d,%d)--(%d,%d)\n",
-                                    size_hints.rcNormalPosition.left,
-                                    size_hints.rcNormalPosition.top,
-                                    size_hints.rcNormalPosition.right,
-                                    size_hints.rcNormalPosition.bottom));
-           /* What are the corresponding window coordinates for client
-            * area coordinates x, y
-            */
-           rect.left = x;
-           rect.top = y;
-           rect.right = rect.left + 200;       /* dummy */
-           rect.bottom = rect.top + 200;
-           dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-           dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-           AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-           size_hints.flags = 0;
-           size_hints.showCmd = SW_SHOWNA;
-
-           /* Set the normal position hint to that location, with unchanged
-            * width and height.
-            */
-           diff = size_hints.rcNormalPosition.left - rect.left;
-           size_hints.rcNormalPosition.left = rect.left;
-           size_hints.rcNormalPosition.right -= diff;
-           diff = size_hints.rcNormalPosition.top - rect.top;
-           size_hints.rcNormalPosition.top = rect.top;
-           size_hints.rcNormalPosition.bottom -= diff;
-           GDK_NOTE (MISC, g_print ("...setting: (%d,%d)--(%d,%d)\n",
-                                    size_hints.rcNormalPosition.left,
-                                    size_hints.rcNormalPosition.top,
-                                    size_hints.rcNormalPosition.right,
-                                    size_hints.rcNormalPosition.bottom));
-           if (!SetWindowPlacement (private->drawable.xwindow, &size_hints))
-             g_warning ("gdk_window_set_hints: SetWindowPlacement failed");
-           private->hint_x = rect.left;
-           private->hint_y = rect.top;
-         }
-
-      if (flags & GDK_HINT_MIN_SIZE)
-       {
-         rect.left = 0;
-         rect.top = 0;
-         rect.right = min_width;
-         rect.bottom = min_height;
-         dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-         dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-         AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-         private->hint_min_width = rect.right - rect.left;
-         private->hint_min_height = rect.bottom - rect.top;
-
-         /* Also chek if he current size of the window is in bounds. */
-         GetClientRect (private->drawable.xwindow, &rect);
-         if (rect.right < min_width && rect.bottom < min_height)
-           gdk_window_resize (window, min_width, min_height);
-         else if (rect.right < min_width)
-           gdk_window_resize (window, min_width, rect.bottom);
-         else if (rect.bottom < min_height)
-           gdk_window_resize (window, rect.right, min_height);
-       }
-      if (flags & GDK_HINT_MAX_SIZE)
-       {
-         rect.left = 0;
-         rect.top = 0;
-         rect.right = max_width;
-         rect.bottom = max_height;
-         dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-         dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-         AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-         private->hint_max_width = rect.right - rect.left;
-         private->hint_max_height = rect.bottom - rect.top;
-         /* Again, check if the window is too large currently. */
-         GetClientRect (private->drawable.xwindow, &rect);
-         if (rect.right > max_width && rect.bottom > max_height)
-           gdk_window_resize (window, max_width, max_height);
-         else if (rect.right > max_width)
-           gdk_window_resize (window, max_width, rect.bottom);
-         else if (rect.bottom > max_height)
-           gdk_window_resize (window, rect.right, max_height);
-       }
-    }
-}
-
-void 
-gdk_window_set_geometry_hints (GdkWindow      *window,
-                              GdkGeometry    *geometry,
-                              GdkWindowHints  geom_mask)
-{
-  GdkWindowPrivate *private;
-  WINDOWPLACEMENT size_hints;
-  RECT rect;
-  DWORD dwStyle;
-  DWORD dwExStyle;
-  int diff;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  private = (GdkWindowPrivate*) window;
-  
-  size_hints.length = sizeof (size_hints);
-
-  private->hint_flags = geom_mask;
-
-  if (geom_mask & GDK_HINT_POS)
-    ; /* XXX */
-
-  if (geom_mask & GDK_HINT_MIN_SIZE)
-    {
-      rect.left = 0;
-      rect.top = 0;
-      rect.right = geometry->min_width;
-      rect.bottom = geometry->min_height;
-      dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-      dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-      AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-      private->hint_min_width = rect.right - rect.left;
-      private->hint_min_height = rect.bottom - rect.top;
-
-      /* Also check if he current size of the window is in bounds */
-      GetClientRect (private->drawable.xwindow, &rect);
-      if (rect.right < geometry->min_width
-         && rect.bottom < geometry->min_height)
-       gdk_window_resize (window, geometry->min_width, geometry->min_height);
-      else if (rect.right < geometry->min_width)
-       gdk_window_resize (window, geometry->min_width, rect.bottom);
-      else if (rect.bottom < geometry->min_height)
-       gdk_window_resize (window, rect.right, geometry->min_height);
-    }
-  
-  if (geom_mask & GDK_HINT_MAX_SIZE)
-    {
-      rect.left = 0;
-      rect.top = 0;
-      rect.right = geometry->max_width;
-      rect.bottom = geometry->max_height;
-      dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-      dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-      AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-      private->hint_max_width = rect.right - rect.left;
-      private->hint_max_height = rect.bottom - rect.top;
-
-      /* Again, check if the window is too large currently. */
-      GetClientRect (private->drawable.xwindow, &rect);
-      if (rect.right > geometry->max_width
-         && rect.bottom > geometry->max_height)
-       gdk_window_resize (window, geometry->max_width, geometry->max_height);
-      else if (rect.right > geometry->max_width)
-       gdk_window_resize (window, geometry->max_width, rect.bottom);
-      else if (rect.bottom > geometry->max_height)
-       gdk_window_resize (window, rect.right, geometry->max_height);
-    }
-  
-  /* I don't know what to do when called with zero base_width and height. */
-  if (geom_mask & GDK_HINT_BASE_SIZE
-      && geometry->base_width > 0
-      && geometry->base_height > 0)
-    if (!GetWindowPlacement (private->drawable.xwindow, &size_hints))
-      g_warning ("gdk_window_set_hints: GetWindowPlacement failed");
-    else
-      {
-       GDK_NOTE (MISC, g_print ("gdk_window_set_geometry_hints:"
-                                " rcNormalPosition: (%d,%d)--(%d,%d)\n",
-                                size_hints.rcNormalPosition.left,
-                                size_hints.rcNormalPosition.top,
-                                size_hints.rcNormalPosition.right,
-                                size_hints.rcNormalPosition.bottom));
-       size_hints.rcNormalPosition.right =
-         size_hints.rcNormalPosition.left + geometry->base_width;
-       size_hints.rcNormalPosition.bottom =
-         size_hints.rcNormalPosition.top + geometry->base_height;
-       GDK_NOTE (MISC, g_print ("...setting: rcNormal: (%d,%d)--(%d,%d)\n",
-                                size_hints.rcNormalPosition.left,
-                                size_hints.rcNormalPosition.top,
-                                size_hints.rcNormalPosition.right,
-                                size_hints.rcNormalPosition.bottom));
-       if (!SetWindowPlacement (private->drawable.xwindow, &size_hints))
-         g_warning ("gdk_window_set_hints: SetWindowPlacement failed");
-      }
-  
-  if (geom_mask & GDK_HINT_RESIZE_INC)
-    {
-      /* XXX */
-    }
-  
-  if (geom_mask & GDK_HINT_ASPECT)
-    {
-      /* XXX */
-    }
-}
-
-void
-gdk_window_set_title (GdkWindow   *window,
-                     const gchar *title)
-{
-  gint titlelen;
-  wchar_t *wcstr;
-  gint wlen;
-  char *mbstr;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  GDK_NOTE (MISC, g_print ("gdk_window_set_title: %#x %s\n",
-                          GDK_DRAWABLE_XID (window), title));
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      /* As the title most is in UTF-8 we must translate it
-       * to the system codepage.
-       */
-      titlelen = strlen (title);
-      wcstr = g_new (wchar_t, titlelen + 1);
-      mbstr = g_new (char, 3*titlelen + 1);
-      wlen = gdk_nmbstowchar_ts (wcstr, title, titlelen, titlelen);
-      wcstr[wlen] = 0;
-      WideCharToMultiByte (GetACP (), 0, wcstr, -1,
-                          mbstr, 3*titlelen, NULL, NULL);
-
-      if (!SetWindowText (GDK_DRAWABLE_XID (window), mbstr))
-       g_warning ("gdk_window_set_title: SetWindowText failed");
-
-      g_free (mbstr);
-      g_free (wcstr);
-    }
-}
-
-void          
-gdk_window_set_role (GdkWindow   *window,
-                    const gchar *role)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  GDK_NOTE (MISC, g_print ("gdk_window_set_role: %#x %s\n",
-                          GDK_DRAWABLE_XID (window), (role ? role : "NULL")));
-  /* XXX */
-}
-
-void          
-gdk_window_set_transient_for (GdkWindow *window, 
-                             GdkWindow *parent)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  GDK_NOTE (MISC, g_print ("gdk_window_set_transient_for: %#x %#x\n",
-                          GDK_DRAWABLE_XID (window),
-                          GDK_DRAWABLE_XID (parent)));
-  /* XXX */
-}
-
-void
-gdk_window_set_background (GdkWindow *window,
-                          GdkColor  *color)
-{
-  GdkWindowPrivate *private;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  private = (GdkWindowPrivate*) window;
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_set_background: %#x %s\n",
-                              private->drawable.xwindow, 
-                              gdk_color_to_string (color)));
-
-      if (private->bg_type == GDK_WIN32_BG_PIXMAP)
-       {
-         if (private->bg_pixmap != NULL)
-           {
-             gdk_pixmap_unref (private->bg_pixmap);
-             private->bg_pixmap = NULL;
-           }
-         private->bg_type = GDK_WIN32_BG_NORMAL;
-       }
-      private->bg_type = GDK_WIN32_BG_PIXEL;
-      private->bg_pixel = *color;
-    }
-}
-
-void
-gdk_window_set_back_pixmap (GdkWindow *window,
-                           GdkPixmap *pixmap,
-                           gint       parent_relative)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  private = (GdkWindowPrivate*) window;
-
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      if (private->bg_type == GDK_WIN32_BG_PIXMAP)
-       {
-         if (private->bg_pixmap != NULL)
-           {
-             gdk_pixmap_unref (private->bg_pixmap);
-             private->bg_pixmap = NULL;
-           }
-         private->bg_type = GDK_WIN32_BG_NORMAL;
-       }
-      if (parent_relative)
-       {
-         private->bg_type = GDK_WIN32_BG_PARENT_RELATIVE;
-       }
-      else if (!pixmap)
-       {
-         
-       }
-      else
-       {
-         /* We must cache the pixmap in the WindowPrivate and
-          * paint it each time we get WM_ERASEBKGND
-          */
-         private->bg_type = GDK_WIN32_BG_PIXMAP;
-         private->bg_pixmap = pixmap;
-         gdk_pixmap_ref (pixmap);
-       }
-    }
-}
-
-void
-gdk_window_set_cursor (GdkWindow *window,
-                      GdkCursor *cursor)
-{
-  GdkWindowPrivate *window_private;
-  GdkCursorPrivate *cursor_private;
-  HCURSOR xcursor;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  window_private = (GdkWindowPrivate*) window;
-  cursor_private = (GdkCursorPrivate*) cursor;
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      if (!cursor)
-       xcursor = LoadCursor (NULL, IDC_ARROW);
-      else
-       xcursor = cursor_private->xcursor;
-
-      GDK_NOTE (MISC, g_print ("gdk_window_set_cursor: %#x %#x\n",
-                              window_private->drawable.xwindow, xcursor));
-      window_private->xcursor = xcursor;
-    }
-}
-
-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,
-                        gint      *width,
-                        gint      *height,
-                        gint      *depth)
-{
-  g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
-  
-  if (!window)
-    window = (GdkWindow*) gdk_root_parent;
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      RECT rect;
-
-      if (!GetClientRect (GDK_DRAWABLE_XID (window), &rect))
-       g_warning ("gdk_window_get_geometry: GetClientRect failed");
-
-      if (x)
-       *x = rect.left;
-      if (y)
-       *y = rect.top;
-      if (width)
-       *width = rect.right - rect.left;
-      if (height)
-       *height = rect.bottom - rect.top;
-      if (depth)
-       *depth = gdk_drawable_get_visual (window)->depth;
-    }
-}
-
-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,
-                      gint      *y)
-{
-  gint return_val;
-  gint tx = 0;
-  gint ty = 0;
-
-  g_return_val_if_fail (window != NULL, 0);
-
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      POINT pt;
-
-      pt.x = 0;
-      pt.y = 0;
-      ClientToScreen (GDK_DRAWABLE_XID (window), &pt);
-      tx = pt.x;
-      ty = pt.y;
-      return_val = 1;
-    }
-  else
-    return_val = 0;
-  
-  if (x)
-    *x = tx;
-  if (y)
-    *y = ty;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_get_origin: %#x: +%d+%d\n",
-                          GDK_DRAWABLE_XID (window), tx, ty));
-  return return_val;
-}
-
-gboolean
-gdk_window_get_deskrelative_origin (GdkWindow *window,
-                                   gint      *x,
-                                   gint      *y)
-{
-  return gdk_window_get_origin (window, x, y);
-}
-
-void
-gdk_window_get_root_origin (GdkWindow *window,
-                           gint      *x,
-                           gint      *y)
-{
-  GdkWindowPrivate *private;
-  POINT pt;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  private = (GdkWindowPrivate*) window;
-  if (x)
-    *x = 0;
-  if (y)
-    *y = 0;
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-      
-  while (private->parent && ((GdkWindowPrivate*) private->parent)->parent)
-    private = (GdkWindowPrivate*) private->parent;
-  if (private->drawable.destroyed)
-    return;
-
-  pt.x = 0;
-  pt.y = 0;
-  ClientToScreen (private->drawable.xwindow, &pt);
-  if (x)
-    *x = pt.x;
-  if (y)
-    *y = pt.y;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_get_root_origin: %#x: (%#x) +%d+%d\n",
-                          GDK_DRAWABLE_XID (window),
-                          private->drawable.xwindow, pt.x, pt.y));
-}
-
-GdkWindow*
-gdk_window_get_pointer (GdkWindow       *window,
-                       gint            *x,
-                       gint            *y,
-                       GdkModifierType *mask)
-{
-  GdkWindow *return_val;
-  POINT pointc, point;
-  HWND hwnd, hwndc;
-
-  g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
-  
-  if (!window)
-    window = (GdkWindow*) gdk_root_parent;
-
-  return_val = NULL;
-  GetCursorPos (&pointc);
-  point = pointc;
-  ScreenToClient (GDK_DRAWABLE_XID (window), &point);
-
-  if (x)
-    *x = point.x;
-  if (y)
-    *y = point.y;
-
-  hwnd = WindowFromPoint (point);
-  point = pointc;
-  ScreenToClient (hwnd, &point);
-  
-  do {
-    hwndc = ChildWindowFromPoint (hwnd, point);
-    ClientToScreen (hwnd, &point);
-    ScreenToClient (hwndc, &point);
-  } while (hwndc != hwnd && (hwnd = hwndc, 1));        /* Ouch! */
-
-  return_val = gdk_window_lookup (hwnd);
-
-  if (mask)
-    {
-      BYTE kbd[256];
-
-      GetKeyboardState (kbd);
-      *mask = 0;
-      if (kbd[VK_SHIFT] & 0x80)
-       *mask |= GDK_SHIFT_MASK;
-      if (kbd[VK_CAPITAL] & 0x80)
-       *mask |= GDK_LOCK_MASK;
-      if (kbd[VK_CONTROL] & 0x80)
-       *mask |= GDK_CONTROL_MASK;
-      if (kbd[VK_MENU] & 0x80)
-       *mask |= GDK_MOD1_MASK;
-      if (kbd[VK_LBUTTON] & 0x80)
-       *mask |= GDK_BUTTON1_MASK;
-      if (kbd[VK_MBUTTON] & 0x80)
-       *mask |= GDK_BUTTON2_MASK;
-      if (kbd[VK_RBUTTON] & 0x80)
-       *mask |= GDK_BUTTON3_MASK;
-    }
-  
-  return return_val;
-}
-
-GdkWindow*
-gdk_window_at_pointer (gint *win_x,
-                      gint *win_y)
-{
-  GdkWindow *window;
-  POINT point, pointc;
-  HWND hwnd, hwndc;
-  RECT rect;
-
-  GetCursorPos (&pointc);
-  point = pointc;
-  hwnd = WindowFromPoint (point);
-
-  if (hwnd == NULL)
-    {
-      window = (GdkWindow *) gdk_root_parent;
-      if (win_x)
-       *win_x = pointc.x;
-      if (win_y)
-       *win_y = pointc.y;
-      return window;
-    }
-      
-  ScreenToClient (hwnd, &point);
-
-  do {
-    hwndc = ChildWindowFromPoint (hwnd, point);
-    ClientToScreen (hwnd, &point);
-    ScreenToClient (hwndc, &point);
-  } while (hwndc != hwnd && (hwnd = hwndc, 1));
-
-  window = gdk_window_lookup (hwnd);
-
-  if (window && (win_x || win_y))
-    {
-      GetClientRect (hwnd, &rect);
-      if (win_x)
-       *win_x = point.x - rect.left;
-      if (win_y)
-       *win_y = point.y - rect.top;
-    }
-
-  GDK_NOTE (MISC, g_print ("gdk_window_at_pointer: +%d+%d %#x%s\n",
-                          point.x, point.y, hwnd,
-                          (window == NULL ? " NULL" : "")));
-
-  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)
-{
-  g_return_val_if_fail (window != NULL, NULL);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
-
-  while (GDK_DRAWABLE_TYPE (window) == GDK_WINDOW_CHILD)
-    window = ((GdkWindowPrivate*) window)->parent;
-
-  return window;
-}
-
-GList*
-gdk_window_get_children (GdkWindow *window)
-{
-  GdkWindowPrivate *private;
-  GList *children;
-
-  g_return_val_if_fail (window != NULL, NULL);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-
-  /* XXX ??? */
-  g_warning ("gdk_window_get_children not implemented");
-  children = NULL;
-
-  return children;
-}
-
-GdkEventMask  
-gdk_window_get_events (GdkWindow *window)
-{
-  GdkWindowPrivate *private;
-
-  g_return_val_if_fail (window != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
-
-  private = (GdkWindowPrivate*) window;
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return 0;
-
-  return private->event_mask;
-}
-
-void          
-gdk_window_set_events (GdkWindow   *window,
-                      GdkEventMask event_mask)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  private = (GdkWindowPrivate*) window;
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  private->event_mask = event_mask;
-}
-
-void
-gdk_window_add_colormap_windows (GdkWindow *window)
-{
-  g_warning ("gdk_window_add_colormap_windows not implemented");
-}
-
-void
-gdk_window_shape_combine_mask (GdkWindow *window,
-                              GdkBitmap *mask,
-                              gint x, gint y)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (!mask)
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_shape_combine_mask: %#x none\n",
-                              GDK_DRAWABLE_XID (window)));
-      SetWindowRgn (GDK_DRAWABLE_XID (window), NULL, TRUE);
-    }
-  else
-    {
-      GdkDrawablePrivate *pixmap_private;
-      HRGN hrgn;
-      DWORD dwStyle;
-      DWORD dwExStyle;
-      RECT rect;
-
-      /* Convert mask bitmap to region */
-      pixmap_private = (GdkDrawablePrivate*) mask;
-      hrgn = BitmapToRegion (pixmap_private->xwindow);
-
-      GDK_NOTE (MISC, g_print ("gdk_window_shape_combine_mask: %#x %#x\n",
-                              GDK_DRAWABLE_XID (window),
-                              pixmap_private->xwindow));
-
-      /* SetWindowRgn wants window (not client) coordinates */ 
-      dwStyle = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_STYLE);
-      dwExStyle = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_EXSTYLE);
-      GetClientRect (GDK_DRAWABLE_XID (window), &rect);
-      AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-      OffsetRgn (hrgn, -rect.left, -rect.top);
-
-      OffsetRgn (hrgn, x, y);
-
-      /* If this is a top-level window, add the title bar to the region */
-      if (GDK_DRAWABLE_TYPE (window) == GDK_WINDOW_TOPLEVEL)
-       {
-         CombineRgn (hrgn, hrgn,
-                     CreateRectRgn (0, 0, rect.right - rect.left, -rect.top),
-                     RGN_OR);
-       }
-      
-      SetWindowRgn (GDK_DRAWABLE_XID (window), hrgn, TRUE);
-    }
-}
-
-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;
-  
-  tmp_list = private->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;
-  
-  private->filters = g_list_append (private->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;
-  
-  tmp_list = private->filters;
-  
-  while (tmp_list)
-    {
-      filter = (GdkEventFilter *)tmp_list->data;
-      node = tmp_list;
-      tmp_list = tmp_list->next;
-      
-      if ((filter->function == function) && (filter->data == data))
-       {
-         private->filters = g_list_remove_link (private->filters, node);
-
-         g_list_free_1 (node);
-         g_free (filter);
-         
-         return;
-       }
-    }
-}
-
-void
-gdk_window_set_override_redirect (GdkWindow *window,
-                                 gboolean   override_redirect)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  g_warning ("gdk_window_set_override_redirect not implemented");
-}
-
-void          
-gdk_window_set_icon (GdkWindow *window, 
-                    GdkWindow *icon_window,
-                    GdkPixmap *pixmap,
-                    GdkBitmap *mask)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-  
-  g_warning ("gdk_window_set_icon not implemented");
-}
-
-void
-gdk_window_set_icon_name (GdkWindow *window, 
-                         gchar     *name)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-  
-  if (!SetWindowText (GDK_DRAWABLE_XID (window), name))
-    g_warning ("gdk_window_set_icon_name: SetWindowText failed");
-}
-
-void          
-gdk_window_set_group (GdkWindow *window, 
-                     GdkWindow *leader)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  g_return_if_fail (leader != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (leader));
-
-  if (GDK_DRAWABLE_DESTROYED (window) || GDK_DRAWABLE_DESTROYED (leader))
-    return;
-  
-  g_warning ("gdk_window_set_group not implemented");
-}
-
-void
-gdk_window_set_decorations (GdkWindow      *window,
-                           GdkWMDecoration decorations)
-{
-  LONG style, exstyle;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  style = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_STYLE);
-  exstyle = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_EXSTYLE);
-
-  style &= (WS_OVERLAPPED|WS_POPUP|WS_CHILD|WS_MINIMIZE|WS_VISIBLE|WS_DISABLED
-           |WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_MAXIMIZE);
-
-  exstyle &= (WS_EX_TOPMOST|WS_EX_TRANSPARENT);
-
-  if (decorations & GDK_DECOR_ALL)
-    style |= (WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX);
-  if (decorations & GDK_DECOR_BORDER)
-    style |= (WS_BORDER);
-  if (decorations & GDK_DECOR_RESIZEH)
-    style |= (WS_THICKFRAME);
-  if (decorations & GDK_DECOR_TITLE)
-    style |= (WS_CAPTION);
-  if (decorations & GDK_DECOR_MENU)
-    style |= (WS_SYSMENU);
-  if (decorations & GDK_DECOR_MINIMIZE)
-    style |= (WS_MINIMIZEBOX);
-  if (decorations & GDK_DECOR_MAXIMIZE)
-    style |= (WS_MAXIMIZEBOX);
-  
-  SetWindowLong (GDK_DRAWABLE_XID (window), GWL_STYLE, style);
-}
-
-void
-gdk_window_set_functions (GdkWindow    *window,
-                         GdkWMFunction functions)
-{
-  LONG style, exstyle;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  style = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_STYLE);
-  exstyle = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_EXSTYLE);
-
-  style &= (WS_OVERLAPPED|WS_POPUP|WS_CHILD|WS_MINIMIZE|WS_VISIBLE|WS_DISABLED
-           |WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_MAXIMIZE|WS_CAPTION|WS_BORDER
-           |WS_SYSMENU);
-
-  exstyle &= (WS_EX_TOPMOST|WS_EX_TRANSPARENT);
-
-  if (functions & GDK_FUNC_ALL)
-    style |= (WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX);
-  if (functions & GDK_FUNC_RESIZE)
-    style |= (WS_THICKFRAME);
-  if (functions & GDK_FUNC_MOVE)
-    style |= (WS_THICKFRAME);
-  if (functions & GDK_FUNC_MINIMIZE)
-    style |= (WS_MINIMIZEBOX);
-  if (functions & GDK_FUNC_MAXIMIZE)
-    style |= (WS_MAXIMIZEBOX);
-  
-  SetWindowLong (GDK_DRAWABLE_XID (window), GWL_STYLE, style);
-}
-
-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
- */
-
-static void
-QueryTree (HWND hwnd,
-          HWND **children,
-          gint *nchildren)
-{
-  guint i, n;
-  HWND child;
-
-  n = 0;
-  do {
-    if (n == 0)
-      child = GetWindow (hwnd, GW_CHILD);
-    else
-      child = GetWindow (child, GW_HWNDNEXT);
-    if (child != NULL)
-      n++;
-  } while (child != NULL);
-
-  if (n > 0)
-    {
-      *children = g_new (HWND, n);
-      for (i = 0; i < n; i++)
-       {
-         if (i == 0)
-           child = GetWindow (hwnd, GW_CHILD);
-         else
-           child = GetWindow (child, GW_HWNDNEXT);
-         *children[i] = child;
-       }
-    }
-}
-
-static void
-gdk_propagate_shapes (HANDLE   win,
-                     gboolean merge)
-{
-   RECT emptyRect;
-   HRGN region, childRegion;
-   RECT rect;
-   HWND *list = NULL;
-   gint i, num;
-
-   SetRectEmpty (&emptyRect);
-   region = CreateRectRgnIndirect (&emptyRect);
-   if (merge)
-     GetWindowRgn (win, region);
-   
-   QueryTree (win, &list, &num);
-   if (list != NULL)
-     {
-       WINDOWPLACEMENT placement;
-
-       placement.length = sizeof (WINDOWPLACEMENT);
-       /* go through all child windows and combine regions */
-       for (i = 0; i < num; i++)
-        {
-          GetWindowPlacement (list[i], &placement);
-          if (placement.showCmd = SW_SHOWNORMAL)
-            {
-              childRegion = CreateRectRgnIndirect (&emptyRect);
-              GetWindowRgn (list[i], childRegion);
-              CombineRgn (region, region, childRegion, RGN_OR);
-              DeleteObject (childRegion);
-            }
-         }
-       SetWindowRgn (win, region, TRUE);
-     }
-   else
-     DeleteObject (region);
-}
-
-void
-gdk_window_set_child_shapes (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-   
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  gdk_propagate_shapes (GDK_DRAWABLE_XID (window), FALSE);
-}
-
-void
-gdk_window_merge_child_shapes (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  gdk_propagate_shapes (GDK_DRAWABLE_XID (window), TRUE);
-}
-
-/*************************************************************
- * 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)
- */
-
-static gboolean
-gdk_window_gravity_works (void)
-{
-  enum { UNKNOWN, NO, YES };
-  static gint gravity_works = UNKNOWN;
-  
-  if (gravity_works == UNKNOWN)
-    {
-      GdkWindowAttr attr;
-      GdkWindow *parent;
-      GdkWindow *child;
-      gint y;
-      
-      attr.window_type = GDK_WINDOW_TEMP;
-      attr.wclass = GDK_INPUT_OUTPUT;
-      attr.x = 0;
-      attr.y = 0;
-      attr.width = 100;
-      attr.height = 100;
-      attr.event_mask = 0;
-      
-      parent = gdk_window_new (NULL, &attr, GDK_WA_X | GDK_WA_Y);
-      
-      attr.window_type = GDK_WINDOW_CHILD;
-      child = gdk_window_new (parent, &attr, GDK_WA_X | GDK_WA_Y);
-      
-      gdk_window_set_static_win_gravity (child, TRUE);
-      
-      gdk_window_resize (parent, 100, 110);
-      gdk_window_move (parent, 0, -10);
-      gdk_window_move_resize (parent, 0, 0, 100, 100);
-      
-      gdk_window_resize (parent, 100, 110);
-      gdk_window_move (parent, 0, -10);
-      gdk_window_move_resize (parent, 0, 0, 100, 100);
-      
-      gdk_window_get_geometry (child, NULL, &y, NULL, NULL, NULL);
-      
-      gdk_window_destroy (parent);
-      gdk_window_destroy (child);
-      
-      gravity_works = ((y == -20) ? YES : NO);
-    }
-  
-  return (gravity_works == YES);
-}
-
-static void
-gdk_window_set_static_bit_gravity (GdkWindow *window, gboolean on)
-{
-  g_return_if_fail (window != NULL);
-
-  GDK_NOTE (MISC, g_print ("gdk_window_set_static_bit_gravity: Not implemented\n"));
-}
-
-static void
-gdk_window_set_static_win_gravity (GdkWindow *window, gboolean on)
-{
-  g_return_if_fail (window != NULL);
-
-  GDK_NOTE (MISC,
-           g_print ("gdk_window_set_static_win_gravity: Not implemented\n"));
-}
-
-/*************************************************************
- * gdk_window_set_static_gravities:
- *     Set the bit gravity of the given window to static,
- *     and flag it so all children get static subwindow
- *     gravity.
- *   arguments:
- *     window: window for which to set static gravity
- *     use_static: Whether to turn static gravity on or off.
- *   results:
- *     Does the XServer support static gravity?
- *************************************************************/
-
-gboolean 
-gdk_window_set_static_gravities (GdkWindow *window,
-                                gboolean   use_static)
-{
-  GdkWindowPrivate *private = (GdkWindowPrivate *)window;
-  GList *tmp_list;
-  
-  g_return_val_if_fail (window != NULL, FALSE);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
-
-  if (!use_static == !private->guffaw_gravity)
-    return TRUE;
-  
-  if (use_static && !gdk_window_gravity_works ())
-    return FALSE;
-  
-  private->guffaw_gravity = use_static;
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      gdk_window_set_static_bit_gravity (window, use_static);
-      
-      tmp_list = private->children;
-      while (tmp_list)
-       {
-         gdk_window_set_static_win_gravity (window, use_static);
-         
-         tmp_list = tmp_list->next;
-       }
-    }
-  
-  return TRUE;
-}
diff --git a/gdk/win32/gdkwindow.c b/gdk/win32/gdkwindow.c
deleted file mode 100644 (file)
index d8b5177..0000000
+++ /dev/null
@@ -1,2407 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- * Copyright (C) 1998-1999 Tor Lillqvist
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "gdkevents.h"
-#include "gdkpixmap.h"
-#include "gdkwindow.h"
-#include "gdkprivate.h"
-#include "gdkinputprivate.h"
-#include "gdkx.h"
-
-/* The Win API function AdjustWindowRect may return negative values
- * resulting in obscured title bars. This helper function is coreccting it.
- */
-BOOL
-SafeAdjustWindowRectEx (RECT* lpRect, 
-                       DWORD dwStyle, 
-                       BOOL bMenu, 
-                       DWORD dwExStyle)
-{
-  if (!AdjustWindowRectEx(lpRect, dwStyle, bMenu, dwExStyle))
-    return FALSE;
-  if (lpRect->left < 0)
-    {
-      lpRect->right -= lpRect->left;
-      lpRect->left = 0;
-    }
-  if (lpRect->top < 0)
-    {
-      lpRect->bottom -= lpRect->top;
-      lpRect->top = 0;
-    }
-  return TRUE;
-}
-
-/* Forward declarations */
-static gboolean gdk_window_gravity_works (void);
-static void     gdk_window_set_static_win_gravity (GdkWindow *window, 
-                                                  gboolean   on);
-
-/* 
- * 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.
- */
-HWND
-gdk_window_xid_at_coords (gint     x,
-                         gint     y,
-                         GList   *excludes,
-                         gboolean excl_child)
-{
-  POINT pt;
-  gboolean warned = FALSE;
-
-  pt.x = x;
-  pt.y = y;
-  /* This is probably not correct, just a quick hack */
-
-  if (!warned)
-    {
-      g_warning ("gdk_window_xid_at_coords probably not implemented correctly");
-      warned = TRUE;
-    }
-
-  /* XXX */
-  return WindowFromPoint (pt);
-}
-
-void
-gdk_window_init (void)
-{
-  RECT r;
-  guint width;
-  guint height;
-
-  SystemParametersInfo(SPI_GETWORKAREA, 0, &r, 0);
-  width  = r.right - r.left;
-  height = r.bottom - r.top;
-
-  gdk_root_parent = g_new (GdkWindowPrivate, 1);
-  gdk_root_parent->drawable.xwindow = gdk_root_window;
-  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->drawable.ref_count = 1;
-  gdk_root_parent->drawable.colormap = NULL;
-  gdk_root_parent->children = NULL;
-
-  gdk_xid_table_insert (&gdk_root_window, gdk_root_parent);
-}
-
-/* RegisterGdkClass
- *   is a wrapper function for RegisterWindowClassEx.
- *   It creates at least one unique class for every 
- *   GdkWindowType. If support for single window-specific icons
- *   is ever needed (e.g Dialog specific), every such window should
- *   get its own class
- */
-ATOM
-RegisterGdkClass(GdkWindowType wtype)
-{
-  static ATOM klassTOPLEVEL = 0;
-  static ATOM klassDIALOG   = 0;
-  static ATOM klassCHILD    = 0;
-  static ATOM klassTEMP     = 0;
-  static HICON hAppIcon = NULL;
-  static WNDCLASSEX wcl; 
-  ATOM klass = 0;
-
-  wcl.cbSize = sizeof(WNDCLASSEX);     
-  wcl.style = 0; /* DON'T set CS_<H,V>REDRAW. It causes total redraw
-                  * on WM_SIZE and WM_MOVE. Flicker, Performance!
-                  */
-  wcl.lpfnWndProc = gdk_WindowProc;
-  wcl.cbClsExtra = 0;
-  wcl.cbWndExtra = 0;
-  wcl.hInstance = gdk_ProgInstance;
-  wcl.hIcon = 0;
-  /* initialize once! */
-  if (0 == hAppIcon)
-    {
-      gchar sLoc [_MAX_PATH+1];
-      HINSTANCE hInst = GetModuleHandle(NULL);
-
-      if (0 != GetModuleFileName(hInst, sLoc, _MAX_PATH))
-       {
-         hAppIcon = ExtractIcon(hInst, sLoc, 0);
-         if (0 == hAppIcon)
-           {
-             char *gdklibname = g_strdup_printf ("gdk-%s.dll", GDK_VERSION);
-
-             hAppIcon = ExtractIcon(hInst, gdklibname, 0);
-             g_free (gdklibname);
-           }
-         
-         if (0 == hAppIcon) 
-           hAppIcon = LoadIcon (NULL, IDI_APPLICATION);
-       }
-    }
-
-  wcl.lpszMenuName = NULL;
-  wcl.hIconSm = 0;
-
-  /* initialize once per class */
-#define ONCE_PER_CLASS() \
-  wcl.hIcon = CopyIcon (hAppIcon); \
-  wcl.hIconSm = CopyIcon (hAppIcon); \
-  wcl.hbrBackground = CreateSolidBrush( RGB(0,0,0)); \
-  wcl.hCursor = LoadCursor (NULL, IDC_ARROW); 
-  
-  switch (wtype)
-  {
-    case GDK_WINDOW_TOPLEVEL:
-      if (0 == klassTOPLEVEL)
-      {
-       wcl.lpszClassName = "gdkWindowToplevel";
-
-       ONCE_PER_CLASS();
-       klassTOPLEVEL = RegisterClassEx(&wcl);
-      }
-      klass = klassTOPLEVEL;
-      break;
-    case GDK_WINDOW_CHILD:
-      if (0 == klassCHILD)
-      {
-       wcl.lpszClassName = "gdkWindowChild";
-
-        wcl.style |= CS_PARENTDC; /* MSDN: ... enhances system performance. */
-       ONCE_PER_CLASS();
-       klassCHILD = RegisterClassEx(&wcl);
-      }
-      klass = klassCHILD;
-      break;
-    case GDK_WINDOW_DIALOG:
-      if (0 == klassDIALOG)
-      {
-       wcl.lpszClassName = "gdkWindowDialog";
-        wcl.style |= CS_SAVEBITS;
-       ONCE_PER_CLASS();
-       klassDIALOG = RegisterClassEx(&wcl);
-      }
-      klass = klassDIALOG;
-      break;
-    case GDK_WINDOW_TEMP:
-      if (0 == klassTEMP)
-      {
-       wcl.lpszClassName = "gdkWindowTemp";
-        wcl.style |= CS_SAVEBITS;
-       ONCE_PER_CLASS();
-       klassTEMP = RegisterClassEx(&wcl);
-      }
-      klass = klassTEMP;
-      break;
-    case GDK_WINDOW_ROOT:
-      g_error ("cannot make windows of type GDK_WINDOW_ROOT");
-      break;
-    case GDK_DRAWABLE_PIXMAP:
-      g_error ("cannot make windows of type GDK_DRAWABLE_PIXMAP (use gdk_pixmap_new)");
-      break;
-  }
-
-  return klass;
-} /* RegisterGdkClass */
-
-
-GdkWindow*
-gdk_window_new (GdkWindow     *parent,
-               GdkWindowAttr *attributes,
-               gint           attributes_mask)
-{
-  GdkWindow *window;
-  GdkWindowPrivate *private;
-  GdkWindowPrivate *parent_private;
-  GdkVisual *visual;
-  HANDLE xparent;
-  Visual *xvisual;
-  ATOM klass = 0;
-  DWORD dwStyle, dwExStyle;
-  RECT rect;
-  UINT acp;
-  int width, height;
-  int x, y;
-  char *title;
-  gint titlelen;
-  wchar_t *wctitle;
-  gint wlen;
-  char *mbtitle;
-
-  g_return_val_if_fail (attributes != NULL, NULL);
-
-  if (!parent)
-    parent = (GdkWindow*) gdk_root_parent;
-
-  parent_private = (GdkWindowPrivate*) parent;
-  if (GDK_DRAWABLE_DESTROYED (parent))
-    return NULL;
-
-  xparent = parent_private->drawable.xwindow;
-
-  private = g_new (GdkWindowPrivate, 1);
-  window = (GdkWindow*) private;
-
-  private->parent = parent;
-
-  private->drawable.destroyed = FALSE;
-  private->mapped = FALSE;
-  private->guffaw_gravity = FALSE;
-  private->resize_count = 0;
-  private->drawable.ref_count = 1;
-
-  private->x = (attributes_mask & GDK_WA_X) ? attributes->x : 0;
-  private->y = (attributes_mask & GDK_WA_Y) ? attributes->y : 0;
-
-  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 = 0;
-  private->extension_events_selected = FALSE;
-
-  private->filters = NULL;
-  private->children = NULL;
-
-  window->user_data = NULL;
-
-  if (attributes_mask & GDK_WA_VISUAL)
-    visual = attributes->visual;
-  else
-    visual = gdk_visual_get_system ();
-  xvisual = ((GdkVisualPrivate*) visual)->xvisual;
-
-  if (attributes_mask & GDK_WA_TITLE)
-    title = attributes->title;
-  else
-    title = g_get_prgname ();
-
-  private->event_mask = GDK_STRUCTURE_MASK | attributes->event_mask;
-  private->bg_type = GDK_WIN32_BG_NORMAL;
-  private->hint_flags = 0;
-  private->xcursor = NULL;
-      
-  if (parent_private && parent_private->guffaw_gravity)
-    {
-      /* XXX ??? */
-    }
-
-  if (attributes->wclass == GDK_INPUT_OUTPUT)
-    {
-      dwExStyle = 0;
-      if (attributes_mask & GDK_WA_COLORMAP)
-       private->drawable.colormap = attributes->colormap;
-      else
-       private->drawable.colormap = gdk_colormap_get_system ();
-    }
-  else
-    {
-      dwExStyle = WS_EX_TRANSPARENT;
-      private->drawable.colormap = NULL;
-      private->bg_type = GDK_WIN32_BG_TRANSPARENT;
-      private->bg_pixmap = NULL;
-    }
-
-  if (attributes_mask & GDK_WA_X)
-    x = attributes->x;
-  else
-    x = CW_USEDEFAULT;
-
-  if (attributes_mask & GDK_WA_Y)
-    y = attributes->y;
-  else if (attributes_mask & GDK_WA_X)
-    y = 100;                   /* ??? We must put it somewhere... */
-  else
-    y = 500;                   /* x is CW_USEDEFAULT, y doesn't matter then */
-
-  if (parent_private)
-    parent_private->children = g_list_prepend (parent_private->children, window);
-
-  switch (private->drawable.window_type)
-    {
-    case GDK_WINDOW_TOPLEVEL:
-      dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN;
-      xparent = gdk_root_window;
-      break;
-    case GDK_WINDOW_CHILD:
-      dwStyle = WS_CHILDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
-      break;
-    case GDK_WINDOW_DIALOG:
-      dwStyle = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_CLIPCHILDREN;
-      dwExStyle |= WS_EX_TOPMOST; /* //HB: want this? */
-      xparent = gdk_root_window;
-      break;
-    case GDK_WINDOW_TEMP:
-      dwStyle = WS_POPUP | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
-      dwExStyle |= WS_EX_TOOLWINDOW;
-      break;
-    case GDK_WINDOW_ROOT:
-      g_error ("cannot make windows of type GDK_WINDOW_ROOT");
-      break;
-    case GDK_DRAWABLE_PIXMAP:
-      g_error ("cannot make windows of type GDK_DRAWABLE_PIXMAP (use gdk_pixmap_new)");
-      break;
-    }
-
-  klass = RegisterGdkClass (private->drawable.window_type);
-  if (!klass)
-    g_error ("RegisterClassEx failed");
-
-  if (private->drawable.window_type != GDK_WINDOW_CHILD)
-    {
-      if (x == CW_USEDEFAULT)
-       {
-         rect.left = 100;
-         rect.top = 100;
-       }
-      else
-       {
-         rect.left = x;
-         rect.top = y;
-       }
-
-      rect.right = rect.left + private->drawable.width;
-      rect.bottom = rect.top + private->drawable.height;
-
-      if (!SafeAdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle))
-       g_warning ("gdk_window_new: AdjustWindowRectEx failed");
-
-      if (x != CW_USEDEFAULT)
-       {
-         x = rect.left;
-         y = rect.top;
-       }
-      width = rect.right - rect.left;
-      height = rect.bottom - rect.top;
-    }
-  else
-    {
-      width = private->drawable.width;
-      height = private->drawable.height;
-    }
-
-  acp = GetACP ();
-  private->input_locale = GetKeyboardLayout (0);
-  TranslateCharsetInfo ((DWORD FAR *) acp,
-                       &private->charset_info,
-                       TCI_SRCCODEPAGE);
-
-  titlelen = strlen (title);
-  wctitle = g_new (wchar_t, titlelen + 1);
-  mbtitle = g_new (char, 3*titlelen + 1);
-  wlen = gdk_nmbstowchar_ts (wctitle, title, titlelen, titlelen);
-  wctitle[wlen] = 0;
-  WideCharToMultiByte (GetACP (), 0, wctitle, -1,
-                      mbtitle, 3*titlelen, NULL, NULL);
-  
-  private->drawable.xwindow =
-    CreateWindowEx (dwExStyle,
-                   MAKEINTRESOURCE(klass),
-                   mbtitle,
-                   dwStyle,
-                   x, y, 
-                   width, height,
-                   xparent,
-                   NULL,
-                   gdk_ProgInstance,
-                   NULL);
-
-  GDK_NOTE (MISC,
-           g_print ("gdk_window_create: %s %s %dx%d@+%d+%d %#x = %#x\n"
-                    "...locale %#x codepage %d\n",
-                    (private->drawable.window_type == GDK_WINDOW_TOPLEVEL ? "TOPLEVEL" :
-                     (private->drawable.window_type == GDK_WINDOW_CHILD ? "CHILD" :
-                      (private->drawable.window_type == GDK_WINDOW_DIALOG ? "DIALOG" :
-                       (private->drawable.window_type == GDK_WINDOW_TEMP ? "TEMP" :
-                        "???")))),
-                    mbtitle,
-                    width, height, (x == CW_USEDEFAULT ? -9999 : x), y, 
-                    xparent,
-                    private->drawable.xwindow,
-                    private->input_locale,
-                    private->charset_info.ciACP));
-
-  g_free (mbtitle);
-  g_free (wctitle);
-
-  if (private->drawable.xwindow == NULL)
-    {
-      g_warning ("gdk_window_create: CreateWindowEx failed");
-      g_free (private);
-      return NULL;
-    }
-
-  gdk_window_ref (window);
-  gdk_xid_table_insert (&private->drawable.xwindow, window);
-
-  if (private->drawable.colormap)
-    gdk_colormap_ref (private->drawable.colormap);
-
-  gdk_window_set_cursor (window, ((attributes_mask & GDK_WA_CURSOR) ?
-                                 (attributes->cursor) :
-                                 NULL));
-
-  return window;
-}
-
-GdkWindow *
-gdk_window_foreign_new (guint32 anid)
-{
-  GdkWindow *window;
-  GdkWindowPrivate *private;
-  GdkWindowPrivate *parent_private;
-  HANDLE parent;
-  RECT rect;
-  POINT point;
-
-  private = g_new (GdkWindowPrivate, 1);
-  window = (GdkWindow*) private;
-
-  parent = GetParent ((HWND) anid);
-  private->parent = gdk_xid_table_lookup (parent);
-
-  parent_private = (GdkWindowPrivate *)private->parent;
-  
-  if (parent_private)
-    parent_private->children = g_list_prepend (parent_private->children, window);
-
-  private->drawable.xwindow = (HWND) anid;
-  GetClientRect ((HWND) anid, &rect);
-  point.x = rect.left;
-  point.y = rect.right;
-  ClientToScreen ((HWND) anid, &point);
-  if (parent != GetDesktopWindow ())
-    ScreenToClient (parent, &point);
-  private->x = point.x;
-  private->y = point.y;
-  private->drawable.width = rect.right - rect.left;
-  private->drawable.height = rect.bottom - rect.top;
-  private->resize_count = 0;
-  private->drawable.ref_count = 1;
-  private->drawable.window_type = GDK_WINDOW_FOREIGN;
-  private->drawable.destroyed = FALSE;
-  private->mapped = IsWindowVisible (private->drawable.xwindow);
-  private->guffaw_gravity = FALSE;
-  private->extension_events = 0;
-  private->extension_events_selected = FALSE;
-
-  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);
-
-  return window;
-}
-
-/* Call this function when you want a window and all its children to
- * disappear.  When xdestroy is true, a request to destroy the XWindow
- * is sent out.  When it is false, it is assumed that the XWindow has
- * been or will be destroyed by destroying some ancestor of this
- * window.
- */
-static void
-gdk_window_internal_destroy (GdkWindow *window,
-                            gboolean   xdestroy,
-                            gboolean   our_destroy)
-{
-  GdkWindowPrivate *private;
-  GdkWindowPrivate *temp_private;
-  GdkWindow *temp_window;
-  GList *children;
-  GList *tmp;
-
-  g_return_if_fail (window != NULL);
-
-  private = (GdkWindowPrivate*) window;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_internal_destroy %#x\n",
-                          private->drawable.xwindow));
-
-  switch (private->drawable.window_type)
-    {
-    case GDK_WINDOW_TOPLEVEL:
-    case GDK_WINDOW_CHILD:
-    case GDK_WINDOW_DIALOG:
-    case GDK_WINDOW_TEMP:
-    case GDK_WINDOW_FOREIGN:
-      if (!private->drawable.destroyed)
-       {
-         if (private->parent)
-           {
-             GdkWindowPrivate *parent_private = (GdkWindowPrivate *)private->parent;
-             if (parent_private->children)
-               parent_private->children = g_list_remove (parent_private->children, window);
-           }
-
-         if (GDK_DRAWABLE_TYPE (window) != GDK_WINDOW_FOREIGN)
-           {
-             children = tmp = private->children;
-             private->children = NULL;
-
-             while (tmp)
-               {
-                 temp_window = tmp->data;
-                 tmp = tmp->next;
-                 
-                 temp_private = (GdkWindowPrivate*) temp_window;
-                 if (temp_private)
-                   gdk_window_internal_destroy (temp_window, FALSE,
-                                                our_destroy);
-               }
-
-             g_list_free (children);
-           }
-
-         if (private->extension_events != 0)
-           gdk_input_window_destroy (window);
-
-         if (private->filters)
-           {
-             tmp = private->filters;
-
-             while (tmp)
-               {
-                 g_free (tmp->data);
-                 tmp = tmp->next;
-               }
-
-             g_list_free (private->filters);
-             private->filters = NULL;
-           }
-         
-         if (private->drawable.window_type == GDK_WINDOW_FOREIGN)
-           {
-             if (our_destroy && (private->parent != NULL))
-               {
-                 /* It's somebody elses window, but in our hierarchy,
-                  * so reparent it to the root window, and then send
-                  * it a delete event, as if we were a WM
-                  */
-                 gdk_window_hide (window);
-                 gdk_window_reparent (window, NULL, 0, 0);
-                 
-                 /* Is this too drastic? Many (most?) applications
-                  * quit if any window receives WM_QUIT I think.
-                  * OTOH, I don't think foreign windows are much
-                  * used, so the question is maybe academic.
-                  */
-                 PostMessage (private->drawable.xwindow, WM_QUIT, 0, 0);
-               }
-           }
-         else if (xdestroy)
-           DestroyWindow (private->drawable.xwindow);
-
-         if (private->drawable.colormap)
-           gdk_colormap_unref (private->drawable.colormap);
-
-         private->mapped = FALSE;
-         private->drawable.destroyed = TRUE;
-       }
-      break;
-
-    case GDK_WINDOW_ROOT:
-      g_error ("attempted to destroy root window");
-      break;
-
-    case GDK_DRAWABLE_PIXMAP:
-      g_error ("called gdk_window_destroy on a pixmap (use gdk_pixmap_unref)");
-      break;
-    }
-}
-
-/* Like internal_destroy, but also destroys the reference created by
-   gdk_window_new. */
-
-void
-gdk_window_destroy (GdkWindow *window)
-{
-  gdk_window_internal_destroy (window, TRUE, TRUE);
-  gdk_window_unref (window);
-}
-
-/* This function is called when the XWindow is really gone.  */
-
-void
-gdk_window_destroy_notify (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-
-  GDK_NOTE (EVENTS, g_print ("gdk_window_destroy_notify: %#x  %d\n",
-                            GDK_DRAWABLE_XID (window), GDK_DRAWABLE_DESTROYED (window)));
-
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      if (GDK_DRAWABLE_TYPE(window) != GDK_WINDOW_FOREIGN)
-       g_warning ("GdkWindow %#lx unexpectedly destroyed", GDK_DRAWABLE_XID (window));
-
-      gdk_window_internal_destroy (window, FALSE, FALSE);
-    }
-  
-  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;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_ref %#x %d\n",
-                          GDK_DRAWABLE_XID (window),
-                          private->drawable.ref_count));
-
-  return window;
-}
-
-void
-gdk_window_unref (GdkWindow *window)
-{
-  GdkWindowPrivate *private = (GdkWindowPrivate *)window;
-  g_return_if_fail (window != NULL);
-
-  private->drawable.ref_count -= 1;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_unref %#x %d%s\n",
-                          private->drawable.xwindow,
-                          private->drawable.ref_count,
-                          (private->drawable.ref_count == 0 ? " freeing" : "")));
-
-  if (private->drawable.ref_count == 0)
-    {
-      if (private->bg_type == GDK_WIN32_BG_PIXMAP
-         && private->bg_pixmap != NULL)
-       gdk_pixmap_unref (private->bg_pixmap);
-
-      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");
-       }
-      g_dataset_destroy (window);
-      g_free (window);
-    }
-}
-
-void
-gdk_window_show (GdkWindow *window)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  private = (GdkWindowPrivate*) window;
-  if (!private->drawable.destroyed)
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_show: %#x\n",
-                              private->drawable.xwindow));
-
-      private->mapped = TRUE;
-      if (private->drawable.window_type == GDK_WINDOW_TEMP)
-       {
-         ShowWindow (private->drawable.xwindow, SW_SHOWNOACTIVATE);
-         SetWindowPos (private->drawable.xwindow, HWND_TOPMOST, 0, 0, 0, 0,
-                       SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
-#if 0
-         ShowWindow (private->drawable.xwindow, SW_HIDE); /* Don't put on toolbar */
-#endif
-       }
-      else
-       {
-         ShowWindow (private->drawable.xwindow, SW_SHOWNORMAL);
-         ShowWindow (private->drawable.xwindow, SW_RESTORE);
-         SetForegroundWindow (private->drawable.xwindow);
-         BringWindowToTop (private->drawable.xwindow);
-#if 0
-         ShowOwnedPopups (private->drawable.xwindow, TRUE);
-#endif
-       }
-    }
-}
-
-void
-gdk_window_hide (GdkWindow *window)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  private = (GdkWindowPrivate*) window;
-  if (!private->drawable.destroyed)
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_hide: %#x\n",
-                              private->drawable.xwindow));
-
-      private->mapped = FALSE;
-      if (private->drawable.window_type == GDK_WINDOW_TOPLEVEL)
-       ShowOwnedPopups (private->drawable.xwindow, FALSE);
-#if 1
-      ShowWindow (private->drawable.xwindow, SW_HIDE);
-#elif 0
-      ShowWindow (private->drawable.xwindow, SW_MINIMIZE);
-#else
-      CloseWindow (private->drawable.xwindow);
-#endif
-    }
-}
-
-void
-gdk_window_withdraw (GdkWindow *window)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  private = (GdkWindowPrivate*) window;
-  if (!private->drawable.destroyed)
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_withdraw: %#x\n",
-                              private->drawable.xwindow));
-
-      gdk_window_hide (window);        /* XXX */
-    }
-}
-
-void
-gdk_window_move (GdkWindow *window,
-                gint       x,
-                gint       y)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  private = (GdkWindowPrivate*) window;
-  if (!private->drawable.destroyed)
-    {
-      RECT rect;
-
-      GDK_NOTE (MISC, g_print ("gdk_window_move: %#x +%d+%d\n",
-                              private->drawable.xwindow, x, y));
-
-      GetClientRect (private->drawable.xwindow, &rect);
-
-      if (private->drawable.window_type != GDK_WINDOW_CHILD)
-       {
-         POINT ptTL, ptBR;
-         DWORD dwStyle;
-         DWORD dwExStyle;
-
-         ptTL.x = 0;
-         ptTL.y = 0; 
-         ClientToScreen (private->drawable.xwindow, &ptTL);
-         rect.left = x;
-         rect.top = y;
-
-         ptBR.x = rect.right;
-         ptBR.y = rect.bottom;
-         ClientToScreen (private->drawable.xwindow, &ptBR);
-         rect.right = x + ptBR.x - ptTL.x;
-         rect.bottom = y + ptBR.y - ptTL.y;
-
-         dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-         dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-         if (!SafeAdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle))
-           g_warning ("gdk_window_move: AdjustWindowRectEx failed");
-
-         x = rect.left;
-         y = rect.top;
-       }
-      else
-       {
-         private->x = x;
-         private->y = y;
-       }
-      GDK_NOTE (MISC, g_print ("...MoveWindow(%#x,%dx%d@+%d+%d)\n",
-                              private->drawable.xwindow,
-                              rect.right - rect.left, rect.bottom - rect.top,
-                              x, y));
-      if (!MoveWindow (private->drawable.xwindow,
-                      x, y, rect.right - rect.left, rect.bottom - rect.top,
-                      TRUE))
-       g_warning ("gdk_window_move: MoveWindow failed");
-    }
-}
-
-void
-gdk_window_resize (GdkWindow *window,
-                  gint       width,
-                  gint       height)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  if ((gint16) width < 1)
-    width = 1;
-  if ((gint16) height < 1)
-    height = 1;
-
-  private = (GdkWindowPrivate*) window;
-
-  if (!private->drawable.destroyed &&
-      ((private->resize_count > 0) ||
-       (private->drawable.width != (guint16) width) ||
-       (private->drawable.height != (guint16) height)))
-    {
-      int x, y;
-
-      GDK_NOTE (MISC, g_print ("gdk_window_resize: %#x %dx%d\n",
-                              private->drawable.xwindow, width, height));
-      
-      if (private->drawable.window_type != GDK_WINDOW_CHILD)
-       {
-         POINT pt;
-         RECT rect;
-         DWORD dwStyle;
-         DWORD dwExStyle;
-
-         pt.x = 0;
-         pt.y = 0; 
-         ClientToScreen (private->drawable.xwindow, &pt);
-         rect.left = pt.x;
-         rect.top = pt.y;
-         rect.right = pt.x + width;
-         rect.bottom = pt.y + height;
-
-         dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-         dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-         if (!AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle))
-           g_warning ("gdk_window_resize: AdjustWindowRectEx failed");
-
-         x = rect.left;
-         y = rect.top;
-         width = rect.right - rect.left;
-         height = rect.bottom - rect.top;
-       }
-      else
-       {
-         x = private->x;
-         y = private->y;
-         private->drawable.width = width;
-         private->drawable.height = height;
-       }
-
-      private->resize_count += 1;
-
-      GDK_NOTE (MISC, g_print ("...MoveWindow(%#x,%dx%d@+%d+%d)\n",
-                              private->drawable.xwindow, width, height, x, y));
-      if (!MoveWindow (private->drawable.xwindow,
-                      x, y, width, height,
-                      TRUE))
-       g_warning ("gdk_window_resize: MoveWindow failed");
-    }
-}
-
-void
-gdk_window_move_resize (GdkWindow *window,
-                       gint       x,
-                       gint       y,
-                       gint       width,
-                       gint       height)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-
-  if ((gint16) width < 1)
-    width = 1;
-  if ((gint16) height < 1)
-    height = 1;
-
-  private = (GdkWindowPrivate*) window;
-  if (!private->drawable.destroyed)
-    {
-      RECT rect;
-      DWORD dwStyle;
-      DWORD dwExStyle;
-
-      GDK_NOTE (MISC, g_print ("gdk_window_move_resize: %#x %dx%d@+%d+%d\n",
-                              private->drawable.xwindow, width, height, x, y));
-      
-      rect.left = x;
-      rect.top = y;
-      rect.right = x + width;
-      rect.bottom = y + height;
-
-      dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-      dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-      if (!AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle))
-       g_warning ("gdk_window_move_resize: AdjustWindowRectEx failed");
-
-      if (private->drawable.window_type == GDK_WINDOW_CHILD)
-       {
-         private->x = x;
-         private->y = y;
-         private->drawable.width = width;
-         private->drawable.height = height;
-       }
-      GDK_NOTE (MISC, g_print ("...MoveWindow(%#x,%dx%d@+%d+%d)\n",
-                              private->drawable.xwindow,
-                              rect.right - rect.left, rect.bottom - rect.top,
-                              rect.left, rect.top));
-      if (!MoveWindow (private->drawable.xwindow,
-                      rect.left, rect.top,
-                      rect.right - rect.left, rect.bottom - rect.top,
-                      TRUE))
-       g_warning ("gdk_window_move_resize: MoveWindow failed");
-
-      if (private->guffaw_gravity)
-       {
-         GList *tmp_list = private->children;
-         while (tmp_list)
-           {
-             GdkWindowPrivate *child_private = tmp_list->data;
-             
-             child_private->x -= x - private->x;
-             child_private->y -= y - private->y;
-             
-             tmp_list = tmp_list->next;
-           }
-       }
-      
-    }
-}
-
-void
-gdk_window_reparent (GdkWindow *window,
-                    GdkWindow *new_parent,
-                    gint       x,
-                    gint       y)
-{
-  GdkWindowPrivate *window_private;
-  GdkWindowPrivate *parent_private;
-  GdkWindowPrivate *old_parent_private;
-
-  g_return_if_fail (window != NULL);
-
-  if (!new_parent)
-    new_parent = (GdkWindow*) gdk_root_parent;
-
-  window_private = (GdkWindowPrivate*) window;
-  old_parent_private = (GdkWindowPrivate*)window_private->parent;
-  parent_private = (GdkWindowPrivate*) new_parent;
-
-  if (!window_private->drawable.destroyed && !parent_private->drawable.destroyed)
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_reparent: %#x %#x\n",
-                              window_private->drawable.xwindow,
-                              parent_private->drawable.xwindow));
-      if (!SetParent (window_private->drawable.xwindow, parent_private->drawable.xwindow))
-       g_warning ("gdk_window_reparent: SetParent failed");
-
-      if (!MoveWindow (window_private->drawable.xwindow,
-                      x, y,
-                      window_private->drawable.width, window_private->drawable.height,
-                      TRUE))
-       g_warning ("gdk_window_reparent: MoveWindow failed");
-    }
-  
-  window_private->parent = new_parent;
-
-  if (old_parent_private)
-    old_parent_private->children = g_list_remove (old_parent_private->children, window);
-
-  if ((old_parent_private &&
-       (!old_parent_private->guffaw_gravity != !parent_private->guffaw_gravity)) ||
-      (!old_parent_private && parent_private->guffaw_gravity))
-    gdk_window_set_static_win_gravity (window, parent_private->guffaw_gravity);
-  
-  parent_private->children = g_list_prepend (parent_private->children, window);
-}
-
-void
-gdk_window_clear (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    gdk_window_clear_area (window, 0, 0, -1, -1);
-}
-
-
-void
-gdk_window_clear_area (GdkWindow *window,
-                      gint       x,
-                      gint       y,
-                      gint       width,
-                      gint       height)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      HDC hdc;
-
-      if (width == -1)
-       width = G_MAXSHORT/2;           /* Yeah, right */
-      if (height == -1)
-       height = G_MAXSHORT/2;
-      GDK_NOTE (MISC, g_print ("gdk_window_clear_area: %#x %dx%d@+%d+%d\n",
-                              GDK_DRAWABLE_XID (window), width, height, x, y));
-      hdc = GetDC (GDK_DRAWABLE_XID (window));
-      IntersectClipRect (hdc, x, y, x + width, y + height);
-      SendMessage (GDK_DRAWABLE_XID (window), WM_ERASEBKGND, (WPARAM) hdc, 0);
-      ReleaseDC (GDK_DRAWABLE_XID (window), hdc);
-    }
-}
-
-void
-gdk_window_clear_area_e (GdkWindow *window,
-                        gint       x,
-                        gint       y,
-                        gint       width,
-                        gint       height)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      RECT rect;
-
-      GDK_NOTE (MISC, g_print ("gdk_window_clear_area_e: %#x %dx%d@+%d+%d\n",
-                              GDK_DRAWABLE_XID (window), width, height, x, y));
-
-      rect.left = x;
-      rect.right = x + width;
-      rect.top = y;
-      rect.bottom = y + height;
-      if (!InvalidateRect (GDK_DRAWABLE_XID (window), &rect, TRUE))
-       g_warning ("gdk_window_clear_area_e: InvalidateRect failed");
-      UpdateWindow (GDK_DRAWABLE_XID (window));
-    }
-}
-
-void
-gdk_window_raise (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_raise: %#x\n",
-                              GDK_DRAWABLE_XID (window)));
-
-      if (!BringWindowToTop (GDK_DRAWABLE_XID (window)))
-       g_warning ("gdk_window_raise: BringWindowToTop failed");
-    }
-}
-
-void
-gdk_window_lower (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_lower: %#x\n",
-                              GDK_DRAWABLE_XID (window)));
-
-      if (!SetWindowPos (GDK_DRAWABLE_XID (window), HWND_BOTTOM, 0, 0, 0, 0,
-                        SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE))
-       g_warning ("gdk_window_lower: SetWindowPos failed");
-    }
-}
-
-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,
-                     gint       min_width,
-                     gint       min_height,
-                     gint       max_width,
-                     gint       max_height,
-                     gint       flags)
-{
-  GdkWindowPrivate *private;
-  WINDOWPLACEMENT size_hints;
-  RECT rect;
-  DWORD dwStyle;
-  DWORD dwExStyle;
-  int diff;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-  
-  private = (GdkWindowPrivate*) window;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_set_hints: %#x %dx%d..%dx%d @+%d+%d\n",
-                          private->drawable.xwindow,
-                          min_width, min_height, max_width, max_height,
-                          x, y));
-
-  private->hint_flags = flags;
-  size_hints.length = sizeof (size_hints);
-
-  if (flags)
-    {
-      if (flags & GDK_HINT_POS)
-       if (!GetWindowPlacement (private->drawable.xwindow, &size_hints))
-         g_warning ("gdk_window_set_hints: GetWindowPlacement failed");
-       else
-         {
-           GDK_NOTE (MISC, g_print ("...rcNormalPosition:"
-                                    " (%d,%d)--(%d,%d)\n",
-                                    size_hints.rcNormalPosition.left,
-                                    size_hints.rcNormalPosition.top,
-                                    size_hints.rcNormalPosition.right,
-                                    size_hints.rcNormalPosition.bottom));
-           /* What are the corresponding window coordinates for client
-            * area coordinates x, y
-            */
-           rect.left = x;
-           rect.top = y;
-           rect.right = rect.left + 200;       /* dummy */
-           rect.bottom = rect.top + 200;
-           dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-           dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-           AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-           size_hints.flags = 0;
-           size_hints.showCmd = SW_SHOWNA;
-
-           /* Set the normal position hint to that location, with unchanged
-            * width and height.
-            */
-           diff = size_hints.rcNormalPosition.left - rect.left;
-           size_hints.rcNormalPosition.left = rect.left;
-           size_hints.rcNormalPosition.right -= diff;
-           diff = size_hints.rcNormalPosition.top - rect.top;
-           size_hints.rcNormalPosition.top = rect.top;
-           size_hints.rcNormalPosition.bottom -= diff;
-           GDK_NOTE (MISC, g_print ("...setting: (%d,%d)--(%d,%d)\n",
-                                    size_hints.rcNormalPosition.left,
-                                    size_hints.rcNormalPosition.top,
-                                    size_hints.rcNormalPosition.right,
-                                    size_hints.rcNormalPosition.bottom));
-           if (!SetWindowPlacement (private->drawable.xwindow, &size_hints))
-             g_warning ("gdk_window_set_hints: SetWindowPlacement failed");
-           private->hint_x = rect.left;
-           private->hint_y = rect.top;
-         }
-
-      if (flags & GDK_HINT_MIN_SIZE)
-       {
-         rect.left = 0;
-         rect.top = 0;
-         rect.right = min_width;
-         rect.bottom = min_height;
-         dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-         dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-         AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-         private->hint_min_width = rect.right - rect.left;
-         private->hint_min_height = rect.bottom - rect.top;
-
-         /* Also chek if he current size of the window is in bounds. */
-         GetClientRect (private->drawable.xwindow, &rect);
-         if (rect.right < min_width && rect.bottom < min_height)
-           gdk_window_resize (window, min_width, min_height);
-         else if (rect.right < min_width)
-           gdk_window_resize (window, min_width, rect.bottom);
-         else if (rect.bottom < min_height)
-           gdk_window_resize (window, rect.right, min_height);
-       }
-      if (flags & GDK_HINT_MAX_SIZE)
-       {
-         rect.left = 0;
-         rect.top = 0;
-         rect.right = max_width;
-         rect.bottom = max_height;
-         dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-         dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-         AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-         private->hint_max_width = rect.right - rect.left;
-         private->hint_max_height = rect.bottom - rect.top;
-         /* Again, check if the window is too large currently. */
-         GetClientRect (private->drawable.xwindow, &rect);
-         if (rect.right > max_width && rect.bottom > max_height)
-           gdk_window_resize (window, max_width, max_height);
-         else if (rect.right > max_width)
-           gdk_window_resize (window, max_width, rect.bottom);
-         else if (rect.bottom > max_height)
-           gdk_window_resize (window, rect.right, max_height);
-       }
-    }
-}
-
-void 
-gdk_window_set_geometry_hints (GdkWindow      *window,
-                              GdkGeometry    *geometry,
-                              GdkWindowHints  geom_mask)
-{
-  GdkWindowPrivate *private;
-  WINDOWPLACEMENT size_hints;
-  RECT rect;
-  DWORD dwStyle;
-  DWORD dwExStyle;
-  int diff;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  private = (GdkWindowPrivate*) window;
-  
-  size_hints.length = sizeof (size_hints);
-
-  private->hint_flags = geom_mask;
-
-  if (geom_mask & GDK_HINT_POS)
-    ; /* XXX */
-
-  if (geom_mask & GDK_HINT_MIN_SIZE)
-    {
-      rect.left = 0;
-      rect.top = 0;
-      rect.right = geometry->min_width;
-      rect.bottom = geometry->min_height;
-      dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-      dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-      AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-      private->hint_min_width = rect.right - rect.left;
-      private->hint_min_height = rect.bottom - rect.top;
-
-      /* Also check if he current size of the window is in bounds */
-      GetClientRect (private->drawable.xwindow, &rect);
-      if (rect.right < geometry->min_width
-         && rect.bottom < geometry->min_height)
-       gdk_window_resize (window, geometry->min_width, geometry->min_height);
-      else if (rect.right < geometry->min_width)
-       gdk_window_resize (window, geometry->min_width, rect.bottom);
-      else if (rect.bottom < geometry->min_height)
-       gdk_window_resize (window, rect.right, geometry->min_height);
-    }
-  
-  if (geom_mask & GDK_HINT_MAX_SIZE)
-    {
-      rect.left = 0;
-      rect.top = 0;
-      rect.right = geometry->max_width;
-      rect.bottom = geometry->max_height;
-      dwStyle = GetWindowLong (private->drawable.xwindow, GWL_STYLE);
-      dwExStyle = GetWindowLong (private->drawable.xwindow, GWL_EXSTYLE);
-      AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-      private->hint_max_width = rect.right - rect.left;
-      private->hint_max_height = rect.bottom - rect.top;
-
-      /* Again, check if the window is too large currently. */
-      GetClientRect (private->drawable.xwindow, &rect);
-      if (rect.right > geometry->max_width
-         && rect.bottom > geometry->max_height)
-       gdk_window_resize (window, geometry->max_width, geometry->max_height);
-      else if (rect.right > geometry->max_width)
-       gdk_window_resize (window, geometry->max_width, rect.bottom);
-      else if (rect.bottom > geometry->max_height)
-       gdk_window_resize (window, rect.right, geometry->max_height);
-    }
-  
-  /* I don't know what to do when called with zero base_width and height. */
-  if (geom_mask & GDK_HINT_BASE_SIZE
-      && geometry->base_width > 0
-      && geometry->base_height > 0)
-    if (!GetWindowPlacement (private->drawable.xwindow, &size_hints))
-      g_warning ("gdk_window_set_hints: GetWindowPlacement failed");
-    else
-      {
-       GDK_NOTE (MISC, g_print ("gdk_window_set_geometry_hints:"
-                                " rcNormalPosition: (%d,%d)--(%d,%d)\n",
-                                size_hints.rcNormalPosition.left,
-                                size_hints.rcNormalPosition.top,
-                                size_hints.rcNormalPosition.right,
-                                size_hints.rcNormalPosition.bottom));
-       size_hints.rcNormalPosition.right =
-         size_hints.rcNormalPosition.left + geometry->base_width;
-       size_hints.rcNormalPosition.bottom =
-         size_hints.rcNormalPosition.top + geometry->base_height;
-       GDK_NOTE (MISC, g_print ("...setting: rcNormal: (%d,%d)--(%d,%d)\n",
-                                size_hints.rcNormalPosition.left,
-                                size_hints.rcNormalPosition.top,
-                                size_hints.rcNormalPosition.right,
-                                size_hints.rcNormalPosition.bottom));
-       if (!SetWindowPlacement (private->drawable.xwindow, &size_hints))
-         g_warning ("gdk_window_set_hints: SetWindowPlacement failed");
-      }
-  
-  if (geom_mask & GDK_HINT_RESIZE_INC)
-    {
-      /* XXX */
-    }
-  
-  if (geom_mask & GDK_HINT_ASPECT)
-    {
-      /* XXX */
-    }
-}
-
-void
-gdk_window_set_title (GdkWindow   *window,
-                     const gchar *title)
-{
-  gint titlelen;
-  wchar_t *wcstr;
-  gint wlen;
-  char *mbstr;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  GDK_NOTE (MISC, g_print ("gdk_window_set_title: %#x %s\n",
-                          GDK_DRAWABLE_XID (window), title));
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      /* As the title most is in UTF-8 we must translate it
-       * to the system codepage.
-       */
-      titlelen = strlen (title);
-      wcstr = g_new (wchar_t, titlelen + 1);
-      mbstr = g_new (char, 3*titlelen + 1);
-      wlen = gdk_nmbstowchar_ts (wcstr, title, titlelen, titlelen);
-      wcstr[wlen] = 0;
-      WideCharToMultiByte (GetACP (), 0, wcstr, -1,
-                          mbstr, 3*titlelen, NULL, NULL);
-
-      if (!SetWindowText (GDK_DRAWABLE_XID (window), mbstr))
-       g_warning ("gdk_window_set_title: SetWindowText failed");
-
-      g_free (mbstr);
-      g_free (wcstr);
-    }
-}
-
-void          
-gdk_window_set_role (GdkWindow   *window,
-                    const gchar *role)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  GDK_NOTE (MISC, g_print ("gdk_window_set_role: %#x %s\n",
-                          GDK_DRAWABLE_XID (window), (role ? role : "NULL")));
-  /* XXX */
-}
-
-void          
-gdk_window_set_transient_for (GdkWindow *window, 
-                             GdkWindow *parent)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  GDK_NOTE (MISC, g_print ("gdk_window_set_transient_for: %#x %#x\n",
-                          GDK_DRAWABLE_XID (window),
-                          GDK_DRAWABLE_XID (parent)));
-  /* XXX */
-}
-
-void
-gdk_window_set_background (GdkWindow *window,
-                          GdkColor  *color)
-{
-  GdkWindowPrivate *private;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  private = (GdkWindowPrivate*) window;
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_set_background: %#x %s\n",
-                              private->drawable.xwindow, 
-                              gdk_color_to_string (color)));
-
-      if (private->bg_type == GDK_WIN32_BG_PIXMAP)
-       {
-         if (private->bg_pixmap != NULL)
-           {
-             gdk_pixmap_unref (private->bg_pixmap);
-             private->bg_pixmap = NULL;
-           }
-         private->bg_type = GDK_WIN32_BG_NORMAL;
-       }
-      private->bg_type = GDK_WIN32_BG_PIXEL;
-      private->bg_pixel = *color;
-    }
-}
-
-void
-gdk_window_set_back_pixmap (GdkWindow *window,
-                           GdkPixmap *pixmap,
-                           gint       parent_relative)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  private = (GdkWindowPrivate*) window;
-
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      if (private->bg_type == GDK_WIN32_BG_PIXMAP)
-       {
-         if (private->bg_pixmap != NULL)
-           {
-             gdk_pixmap_unref (private->bg_pixmap);
-             private->bg_pixmap = NULL;
-           }
-         private->bg_type = GDK_WIN32_BG_NORMAL;
-       }
-      if (parent_relative)
-       {
-         private->bg_type = GDK_WIN32_BG_PARENT_RELATIVE;
-       }
-      else if (!pixmap)
-       {
-         
-       }
-      else
-       {
-         /* We must cache the pixmap in the WindowPrivate and
-          * paint it each time we get WM_ERASEBKGND
-          */
-         private->bg_type = GDK_WIN32_BG_PIXMAP;
-         private->bg_pixmap = pixmap;
-         gdk_pixmap_ref (pixmap);
-       }
-    }
-}
-
-void
-gdk_window_set_cursor (GdkWindow *window,
-                      GdkCursor *cursor)
-{
-  GdkWindowPrivate *window_private;
-  GdkCursorPrivate *cursor_private;
-  HCURSOR xcursor;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  window_private = (GdkWindowPrivate*) window;
-  cursor_private = (GdkCursorPrivate*) cursor;
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      if (!cursor)
-       xcursor = LoadCursor (NULL, IDC_ARROW);
-      else
-       xcursor = cursor_private->xcursor;
-
-      GDK_NOTE (MISC, g_print ("gdk_window_set_cursor: %#x %#x\n",
-                              window_private->drawable.xwindow, xcursor));
-      window_private->xcursor = xcursor;
-    }
-}
-
-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,
-                        gint      *width,
-                        gint      *height,
-                        gint      *depth)
-{
-  g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
-  
-  if (!window)
-    window = (GdkWindow*) gdk_root_parent;
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      RECT rect;
-
-      if (!GetClientRect (GDK_DRAWABLE_XID (window), &rect))
-       g_warning ("gdk_window_get_geometry: GetClientRect failed");
-
-      if (x)
-       *x = rect.left;
-      if (y)
-       *y = rect.top;
-      if (width)
-       *width = rect.right - rect.left;
-      if (height)
-       *height = rect.bottom - rect.top;
-      if (depth)
-       *depth = gdk_drawable_get_visual (window)->depth;
-    }
-}
-
-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,
-                      gint      *y)
-{
-  gint return_val;
-  gint tx = 0;
-  gint ty = 0;
-
-  g_return_val_if_fail (window != NULL, 0);
-
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      POINT pt;
-
-      pt.x = 0;
-      pt.y = 0;
-      ClientToScreen (GDK_DRAWABLE_XID (window), &pt);
-      tx = pt.x;
-      ty = pt.y;
-      return_val = 1;
-    }
-  else
-    return_val = 0;
-  
-  if (x)
-    *x = tx;
-  if (y)
-    *y = ty;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_get_origin: %#x: +%d+%d\n",
-                          GDK_DRAWABLE_XID (window), tx, ty));
-  return return_val;
-}
-
-gboolean
-gdk_window_get_deskrelative_origin (GdkWindow *window,
-                                   gint      *x,
-                                   gint      *y)
-{
-  return gdk_window_get_origin (window, x, y);
-}
-
-void
-gdk_window_get_root_origin (GdkWindow *window,
-                           gint      *x,
-                           gint      *y)
-{
-  GdkWindowPrivate *private;
-  POINT pt;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  private = (GdkWindowPrivate*) window;
-  if (x)
-    *x = 0;
-  if (y)
-    *y = 0;
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-      
-  while (private->parent && ((GdkWindowPrivate*) private->parent)->parent)
-    private = (GdkWindowPrivate*) private->parent;
-  if (private->drawable.destroyed)
-    return;
-
-  pt.x = 0;
-  pt.y = 0;
-  ClientToScreen (private->drawable.xwindow, &pt);
-  if (x)
-    *x = pt.x;
-  if (y)
-    *y = pt.y;
-
-  GDK_NOTE (MISC, g_print ("gdk_window_get_root_origin: %#x: (%#x) +%d+%d\n",
-                          GDK_DRAWABLE_XID (window),
-                          private->drawable.xwindow, pt.x, pt.y));
-}
-
-GdkWindow*
-gdk_window_get_pointer (GdkWindow       *window,
-                       gint            *x,
-                       gint            *y,
-                       GdkModifierType *mask)
-{
-  GdkWindow *return_val;
-  POINT pointc, point;
-  HWND hwnd, hwndc;
-
-  g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
-  
-  if (!window)
-    window = (GdkWindow*) gdk_root_parent;
-
-  return_val = NULL;
-  GetCursorPos (&pointc);
-  point = pointc;
-  ScreenToClient (GDK_DRAWABLE_XID (window), &point);
-
-  if (x)
-    *x = point.x;
-  if (y)
-    *y = point.y;
-
-  hwnd = WindowFromPoint (point);
-  point = pointc;
-  ScreenToClient (hwnd, &point);
-  
-  do {
-    hwndc = ChildWindowFromPoint (hwnd, point);
-    ClientToScreen (hwnd, &point);
-    ScreenToClient (hwndc, &point);
-  } while (hwndc != hwnd && (hwnd = hwndc, 1));        /* Ouch! */
-
-  return_val = gdk_window_lookup (hwnd);
-
-  if (mask)
-    {
-      BYTE kbd[256];
-
-      GetKeyboardState (kbd);
-      *mask = 0;
-      if (kbd[VK_SHIFT] & 0x80)
-       *mask |= GDK_SHIFT_MASK;
-      if (kbd[VK_CAPITAL] & 0x80)
-       *mask |= GDK_LOCK_MASK;
-      if (kbd[VK_CONTROL] & 0x80)
-       *mask |= GDK_CONTROL_MASK;
-      if (kbd[VK_MENU] & 0x80)
-       *mask |= GDK_MOD1_MASK;
-      if (kbd[VK_LBUTTON] & 0x80)
-       *mask |= GDK_BUTTON1_MASK;
-      if (kbd[VK_MBUTTON] & 0x80)
-       *mask |= GDK_BUTTON2_MASK;
-      if (kbd[VK_RBUTTON] & 0x80)
-       *mask |= GDK_BUTTON3_MASK;
-    }
-  
-  return return_val;
-}
-
-GdkWindow*
-gdk_window_at_pointer (gint *win_x,
-                      gint *win_y)
-{
-  GdkWindow *window;
-  POINT point, pointc;
-  HWND hwnd, hwndc;
-  RECT rect;
-
-  GetCursorPos (&pointc);
-  point = pointc;
-  hwnd = WindowFromPoint (point);
-
-  if (hwnd == NULL)
-    {
-      window = (GdkWindow *) gdk_root_parent;
-      if (win_x)
-       *win_x = pointc.x;
-      if (win_y)
-       *win_y = pointc.y;
-      return window;
-    }
-      
-  ScreenToClient (hwnd, &point);
-
-  do {
-    hwndc = ChildWindowFromPoint (hwnd, point);
-    ClientToScreen (hwnd, &point);
-    ScreenToClient (hwndc, &point);
-  } while (hwndc != hwnd && (hwnd = hwndc, 1));
-
-  window = gdk_window_lookup (hwnd);
-
-  if (window && (win_x || win_y))
-    {
-      GetClientRect (hwnd, &rect);
-      if (win_x)
-       *win_x = point.x - rect.left;
-      if (win_y)
-       *win_y = point.y - rect.top;
-    }
-
-  GDK_NOTE (MISC, g_print ("gdk_window_at_pointer: +%d+%d %#x%s\n",
-                          point.x, point.y, hwnd,
-                          (window == NULL ? " NULL" : "")));
-
-  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)
-{
-  g_return_val_if_fail (window != NULL, NULL);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
-
-  while (GDK_DRAWABLE_TYPE (window) == GDK_WINDOW_CHILD)
-    window = ((GdkWindowPrivate*) window)->parent;
-
-  return window;
-}
-
-GList*
-gdk_window_get_children (GdkWindow *window)
-{
-  GdkWindowPrivate *private;
-  GList *children;
-
-  g_return_val_if_fail (window != NULL, NULL);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return NULL;
-
-  /* XXX ??? */
-  g_warning ("gdk_window_get_children not implemented");
-  children = NULL;
-
-  return children;
-}
-
-GdkEventMask  
-gdk_window_get_events (GdkWindow *window)
-{
-  GdkWindowPrivate *private;
-
-  g_return_val_if_fail (window != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
-
-  private = (GdkWindowPrivate*) window;
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return 0;
-
-  return private->event_mask;
-}
-
-void          
-gdk_window_set_events (GdkWindow   *window,
-                      GdkEventMask event_mask)
-{
-  GdkWindowPrivate *private;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  private = (GdkWindowPrivate*) window;
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  private->event_mask = event_mask;
-}
-
-void
-gdk_window_add_colormap_windows (GdkWindow *window)
-{
-  g_warning ("gdk_window_add_colormap_windows not implemented");
-}
-
-void
-gdk_window_shape_combine_mask (GdkWindow *window,
-                              GdkBitmap *mask,
-                              gint x, gint y)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (!mask)
-    {
-      GDK_NOTE (MISC, g_print ("gdk_window_shape_combine_mask: %#x none\n",
-                              GDK_DRAWABLE_XID (window)));
-      SetWindowRgn (GDK_DRAWABLE_XID (window), NULL, TRUE);
-    }
-  else
-    {
-      GdkDrawablePrivate *pixmap_private;
-      HRGN hrgn;
-      DWORD dwStyle;
-      DWORD dwExStyle;
-      RECT rect;
-
-      /* Convert mask bitmap to region */
-      pixmap_private = (GdkDrawablePrivate*) mask;
-      hrgn = BitmapToRegion (pixmap_private->xwindow);
-
-      GDK_NOTE (MISC, g_print ("gdk_window_shape_combine_mask: %#x %#x\n",
-                              GDK_DRAWABLE_XID (window),
-                              pixmap_private->xwindow));
-
-      /* SetWindowRgn wants window (not client) coordinates */ 
-      dwStyle = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_STYLE);
-      dwExStyle = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_EXSTYLE);
-      GetClientRect (GDK_DRAWABLE_XID (window), &rect);
-      AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle);
-      OffsetRgn (hrgn, -rect.left, -rect.top);
-
-      OffsetRgn (hrgn, x, y);
-
-      /* If this is a top-level window, add the title bar to the region */
-      if (GDK_DRAWABLE_TYPE (window) == GDK_WINDOW_TOPLEVEL)
-       {
-         CombineRgn (hrgn, hrgn,
-                     CreateRectRgn (0, 0, rect.right - rect.left, -rect.top),
-                     RGN_OR);
-       }
-      
-      SetWindowRgn (GDK_DRAWABLE_XID (window), hrgn, TRUE);
-    }
-}
-
-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;
-  
-  tmp_list = private->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;
-  
-  private->filters = g_list_append (private->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;
-  
-  tmp_list = private->filters;
-  
-  while (tmp_list)
-    {
-      filter = (GdkEventFilter *)tmp_list->data;
-      node = tmp_list;
-      tmp_list = tmp_list->next;
-      
-      if ((filter->function == function) && (filter->data == data))
-       {
-         private->filters = g_list_remove_link (private->filters, node);
-
-         g_list_free_1 (node);
-         g_free (filter);
-         
-         return;
-       }
-    }
-}
-
-void
-gdk_window_set_override_redirect (GdkWindow *window,
-                                 gboolean   override_redirect)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  g_warning ("gdk_window_set_override_redirect not implemented");
-}
-
-void          
-gdk_window_set_icon (GdkWindow *window, 
-                    GdkWindow *icon_window,
-                    GdkPixmap *pixmap,
-                    GdkBitmap *mask)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-  
-  g_warning ("gdk_window_set_icon not implemented");
-}
-
-void
-gdk_window_set_icon_name (GdkWindow *window, 
-                         gchar     *name)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-  
-  if (!SetWindowText (GDK_DRAWABLE_XID (window), name))
-    g_warning ("gdk_window_set_icon_name: SetWindowText failed");
-}
-
-void          
-gdk_window_set_group (GdkWindow *window, 
-                     GdkWindow *leader)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  g_return_if_fail (leader != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (leader));
-
-  if (GDK_DRAWABLE_DESTROYED (window) || GDK_DRAWABLE_DESTROYED (leader))
-    return;
-  
-  g_warning ("gdk_window_set_group not implemented");
-}
-
-void
-gdk_window_set_decorations (GdkWindow      *window,
-                           GdkWMDecoration decorations)
-{
-  LONG style, exstyle;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  style = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_STYLE);
-  exstyle = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_EXSTYLE);
-
-  style &= (WS_OVERLAPPED|WS_POPUP|WS_CHILD|WS_MINIMIZE|WS_VISIBLE|WS_DISABLED
-           |WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_MAXIMIZE);
-
-  exstyle &= (WS_EX_TOPMOST|WS_EX_TRANSPARENT);
-
-  if (decorations & GDK_DECOR_ALL)
-    style |= (WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX);
-  if (decorations & GDK_DECOR_BORDER)
-    style |= (WS_BORDER);
-  if (decorations & GDK_DECOR_RESIZEH)
-    style |= (WS_THICKFRAME);
-  if (decorations & GDK_DECOR_TITLE)
-    style |= (WS_CAPTION);
-  if (decorations & GDK_DECOR_MENU)
-    style |= (WS_SYSMENU);
-  if (decorations & GDK_DECOR_MINIMIZE)
-    style |= (WS_MINIMIZEBOX);
-  if (decorations & GDK_DECOR_MAXIMIZE)
-    style |= (WS_MAXIMIZEBOX);
-  
-  SetWindowLong (GDK_DRAWABLE_XID (window), GWL_STYLE, style);
-}
-
-void
-gdk_window_set_functions (GdkWindow    *window,
-                         GdkWMFunction functions)
-{
-  LONG style, exstyle;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  style = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_STYLE);
-  exstyle = GetWindowLong (GDK_DRAWABLE_XID (window), GWL_EXSTYLE);
-
-  style &= (WS_OVERLAPPED|WS_POPUP|WS_CHILD|WS_MINIMIZE|WS_VISIBLE|WS_DISABLED
-           |WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_MAXIMIZE|WS_CAPTION|WS_BORDER
-           |WS_SYSMENU);
-
-  exstyle &= (WS_EX_TOPMOST|WS_EX_TRANSPARENT);
-
-  if (functions & GDK_FUNC_ALL)
-    style |= (WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX);
-  if (functions & GDK_FUNC_RESIZE)
-    style |= (WS_THICKFRAME);
-  if (functions & GDK_FUNC_MOVE)
-    style |= (WS_THICKFRAME);
-  if (functions & GDK_FUNC_MINIMIZE)
-    style |= (WS_MINIMIZEBOX);
-  if (functions & GDK_FUNC_MAXIMIZE)
-    style |= (WS_MAXIMIZEBOX);
-  
-  SetWindowLong (GDK_DRAWABLE_XID (window), GWL_STYLE, style);
-}
-
-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
- */
-
-static void
-QueryTree (HWND hwnd,
-          HWND **children,
-          gint *nchildren)
-{
-  guint i, n;
-  HWND child;
-
-  n = 0;
-  do {
-    if (n == 0)
-      child = GetWindow (hwnd, GW_CHILD);
-    else
-      child = GetWindow (child, GW_HWNDNEXT);
-    if (child != NULL)
-      n++;
-  } while (child != NULL);
-
-  if (n > 0)
-    {
-      *children = g_new (HWND, n);
-      for (i = 0; i < n; i++)
-       {
-         if (i == 0)
-           child = GetWindow (hwnd, GW_CHILD);
-         else
-           child = GetWindow (child, GW_HWNDNEXT);
-         *children[i] = child;
-       }
-    }
-}
-
-static void
-gdk_propagate_shapes (HANDLE   win,
-                     gboolean merge)
-{
-   RECT emptyRect;
-   HRGN region, childRegion;
-   RECT rect;
-   HWND *list = NULL;
-   gint i, num;
-
-   SetRectEmpty (&emptyRect);
-   region = CreateRectRgnIndirect (&emptyRect);
-   if (merge)
-     GetWindowRgn (win, region);
-   
-   QueryTree (win, &list, &num);
-   if (list != NULL)
-     {
-       WINDOWPLACEMENT placement;
-
-       placement.length = sizeof (WINDOWPLACEMENT);
-       /* go through all child windows and combine regions */
-       for (i = 0; i < num; i++)
-        {
-          GetWindowPlacement (list[i], &placement);
-          if (placement.showCmd = SW_SHOWNORMAL)
-            {
-              childRegion = CreateRectRgnIndirect (&emptyRect);
-              GetWindowRgn (list[i], childRegion);
-              CombineRgn (region, region, childRegion, RGN_OR);
-              DeleteObject (childRegion);
-            }
-         }
-       SetWindowRgn (win, region, TRUE);
-     }
-   else
-     DeleteObject (region);
-}
-
-void
-gdk_window_set_child_shapes (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-   
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  gdk_propagate_shapes (GDK_DRAWABLE_XID (window), FALSE);
-}
-
-void
-gdk_window_merge_child_shapes (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  if (GDK_DRAWABLE_DESTROYED (window))
-    return;
-
-  gdk_propagate_shapes (GDK_DRAWABLE_XID (window), TRUE);
-}
-
-/*************************************************************
- * 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)
- */
-
-static gboolean
-gdk_window_gravity_works (void)
-{
-  enum { UNKNOWN, NO, YES };
-  static gint gravity_works = UNKNOWN;
-  
-  if (gravity_works == UNKNOWN)
-    {
-      GdkWindowAttr attr;
-      GdkWindow *parent;
-      GdkWindow *child;
-      gint y;
-      
-      attr.window_type = GDK_WINDOW_TEMP;
-      attr.wclass = GDK_INPUT_OUTPUT;
-      attr.x = 0;
-      attr.y = 0;
-      attr.width = 100;
-      attr.height = 100;
-      attr.event_mask = 0;
-      
-      parent = gdk_window_new (NULL, &attr, GDK_WA_X | GDK_WA_Y);
-      
-      attr.window_type = GDK_WINDOW_CHILD;
-      child = gdk_window_new (parent, &attr, GDK_WA_X | GDK_WA_Y);
-      
-      gdk_window_set_static_win_gravity (child, TRUE);
-      
-      gdk_window_resize (parent, 100, 110);
-      gdk_window_move (parent, 0, -10);
-      gdk_window_move_resize (parent, 0, 0, 100, 100);
-      
-      gdk_window_resize (parent, 100, 110);
-      gdk_window_move (parent, 0, -10);
-      gdk_window_move_resize (parent, 0, 0, 100, 100);
-      
-      gdk_window_get_geometry (child, NULL, &y, NULL, NULL, NULL);
-      
-      gdk_window_destroy (parent);
-      gdk_window_destroy (child);
-      
-      gravity_works = ((y == -20) ? YES : NO);
-    }
-  
-  return (gravity_works == YES);
-}
-
-static void
-gdk_window_set_static_bit_gravity (GdkWindow *window, gboolean on)
-{
-  g_return_if_fail (window != NULL);
-
-  GDK_NOTE (MISC, g_print ("gdk_window_set_static_bit_gravity: Not implemented\n"));
-}
-
-static void
-gdk_window_set_static_win_gravity (GdkWindow *window, gboolean on)
-{
-  g_return_if_fail (window != NULL);
-
-  GDK_NOTE (MISC,
-           g_print ("gdk_window_set_static_win_gravity: Not implemented\n"));
-}
-
-/*************************************************************
- * gdk_window_set_static_gravities:
- *     Set the bit gravity of the given window to static,
- *     and flag it so all children get static subwindow
- *     gravity.
- *   arguments:
- *     window: window for which to set static gravity
- *     use_static: Whether to turn static gravity on or off.
- *   results:
- *     Does the XServer support static gravity?
- *************************************************************/
-
-gboolean 
-gdk_window_set_static_gravities (GdkWindow *window,
-                                gboolean   use_static)
-{
-  GdkWindowPrivate *private = (GdkWindowPrivate *)window;
-  GList *tmp_list;
-  
-  g_return_val_if_fail (window != NULL, FALSE);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
-
-  if (!use_static == !private->guffaw_gravity)
-    return TRUE;
-  
-  if (use_static && !gdk_window_gravity_works ())
-    return FALSE;
-  
-  private->guffaw_gravity = use_static;
-  
-  if (!GDK_DRAWABLE_DESTROYED (window))
-    {
-      gdk_window_set_static_bit_gravity (window, use_static);
-      
-      tmp_list = private->children;
-      while (tmp_list)
-       {
-         gdk_window_set_static_win_gravity (window, use_static);
-         
-         tmp_list = tmp_list->next;
-       }
-    }
-  
-  return TRUE;
-}
diff --git a/gdk/win32/gdkx.h b/gdk/win32/gdkx.h
deleted file mode 100644 (file)
index 5814c39..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#ifndef __GDK_X_H__
-#define __GDK_X_H__
-
-#include <gdk/gdk.h>
-#include <gdkprivate.h>
-
-#include <time.h>
-#include <locale.h>
-
-#define GDK_ROOT_WINDOW()             ((guint32) HWND_DESKTOP)
-#define GDK_ROOT_PARENT()             ((GdkWindow *) gdk_root_parent)
-#define GDK_DISPLAY()                 NULL
-#define GDK_DRAWABLE_XDISPLAY(win)    NULL
-#define GDK_DRAWABLE_XID(win)         (((GdkDrawablePrivate*) win)->xwindow)
-#define GDK_WINDOW_XDISPLAY          GDK_DRAWABLE_XDISPLAY
-#define GDK_WINDOW_XWINDOW           GDK_DRAWABLE_XID
-#define GDK_IMAGE_XDISPLAY(image)     NULL
-#define GDK_IMAGE_XIMAGE(image)       (((GdkImagePrivate*) image)->ximage)
-#define GDK_GC_XDISPLAY(gc)           NULL
-#define GDK_GC_XGC(gc)                (((GdkGCPrivate*) gc)->xgc)
-#define GDK_COLORMAP_XDISPLAY(cmap)   NULL
-#define GDK_COLORMAP_XCOLORMAP(cmap)  (((GdkColormapPrivate*) cmap)->xcolormap)
-#define GDK_VISUAL_XVISUAL(vis)       (((GdkVisualPrivate*) vis)->xvisual)
-#define GDK_FONT_XDISPLAY(font)       NULL
-
-GdkVisual*   gdkx_visual_get   (VisualID xvisualid);
-/* XXX: Do not use this function until it is fixed. An X Colormap
- *      is useless unless we also have the visual. */
-GdkColormap* gdkx_colormap_get (Colormap xcolormap);
-/* Functions to create GDK pixmaps and windows from their native equivalents */
-GdkPixmap    *gdk_pixmap_foreign_new (guint32     anid);
-GdkWindow    *gdk_window_foreign_new (guint32       anid);
-
-#endif /* __GDK_X_H__ */
diff --git a/gdk/win32/gdkxid.c b/gdk/win32/gdkxid.c
deleted file mode 100644 (file)
index 4cba645..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/*
- * 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
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <gdk/gdk.h>
-
-#include "gdkprivate.h"
-
-static guint gdk_xid_hash    (XID *xid);
-static gint  gdk_xid_compare (XID *a,
-                             XID *b);
-
-
-static GHashTable *xid_ht = NULL;
-
-
-void
-gdk_xid_table_insert (XID      *xid,
-                     gpointer  data)
-{
-  g_return_if_fail (xid != NULL);
-
-  if (!xid_ht)
-    xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash,
-                              (GCompareFunc) gdk_xid_compare);
-
-  g_hash_table_insert (xid_ht, xid, data);
-}
-
-void
-gdk_xid_table_remove (XID xid)
-{
-  if (!xid_ht)
-    xid_ht = g_hash_table_new ((GHashFunc) gdk_xid_hash,
-                              (GCompareFunc) gdk_xid_compare);
-
-  g_hash_table_remove (xid_ht, &xid);
-}
-
-gpointer
-gdk_xid_table_lookup (XID xid)
-{
-  gpointer data = NULL;
-
-  if (xid_ht)
-    data = g_hash_table_lookup (xid_ht, &xid);
-  
-  return data;
-}
-
-
-static guint
-gdk_xid_hash (XID *xid)
-{
-  return (guint) *xid;
-}
-
-static gint
-gdk_xid_compare (XID *a,
-                XID *b)
-{
-  return (*a == *b);
-}
index 69c4648aaa9e8b7eace5a4f650ed09ac0a78e079..3b71ee4bd90392208660bd8fec34213888081a0f 100644 (file)
@@ -3,7 +3,7 @@
 
 # Change this to wherever you want to install the DLL. This directory
 # should be in your PATH.
-BIN = bin
+BIN = /bin
 
 # Location of the Wintab toolkit. Downloadable from http://www.pointing.com.
 # We use the wntab32x.lib archive library directly (copy it as libwntab32x.a).
@@ -28,66 +28,41 @@ GLIB = ../../../glib
 CFLAGS = $(OPTIMIZE) -I . -I .. -I ../.. -I $(WTKIT)/include -I $(GLIB) -DG_ENABLE_DEBUG -DHAVE_CONFIG_H -DGDK_VERSION=\"$(GTK_VER)\"
 
 all: \
-       gdk/gdkprivate.h \
-       gdk/gdkx.h      \
-       ../../config.h  \
-       gdk-$(GTK_VER).dll
+       ../../config.h \
+       gdk-win32-$(GTK_VER).dll
 
 install : all
-       $(INSTALL) gdk-$(GTK_VER).dll $(BIN)
-
-gdk_OBJECTS = \
-       gdk.o           \
-       gdkcc.o         \
-       gdkcolor.o      \
-       gdkcursor.o     \
-       gdkdnd.o        \
-       gdkdraw.o       \
-       gdkevents.o     \
-       gdkfont.o       \
-       gdkgc.o         \
-       gdkglobals.o    \
-       gdkim.o         \
-       gdkimage.o      \
-       gdkinput.o      \
-       gdkpixmap.o     \
-       gdkproperty.o   \
-       gdkrgb.o        \
-       gdkrectangle.o  \
-       gdkregion.o     \
-       gdkselection.o  \
-       gdkvisual.o     \
-       gdkwindow.o     \
-       gdkxid.o
-
-# We must have copies of gdkx.h and gdkprivate.h in the gdk
-# subdirectory, so that application sources which want to be
-# compilable with both GTk+ 1.2 (where there are no separate backend
-# gdk directories) and this 1.3 version (where the Win32 backend is in
-# the directory of *this* file you are reading right now) can use
-# #include <gdk/gdkprivate.h>.
-
-# Applications that depend on GTk+ 1.3 or later should include
-# gdkprivate.h and/or gdkx.h without the gdk/ prefix. The CFLAGS should
-# include an -I switch pointing to the backend-specific directory
-# (*this* directory in the Win32 case).
-
-gdk/gdkprivate.h : gdkprivate.h
-       -mkdir gdk
-       cp gdkprivate.h gdk
-
-gdk/gdkx.h : gdkx.h
-       -mkdir gdk
-       cp gdkx.h gdk
+       $(INSTALL) gdk-win32-$(GTK_VER).dll $(BIN)
+
+gdk_win32_OBJECTS = \
+       gdkcolor-win32.o \
+       gdkcursor-win32.o \
+       gdkdnd-win32.o \
+       gdkdrawable-win32.o \
+       gdkevents-win32.o \
+       gdkfont-win32.o \
+       gdkgc-win32.o \
+       gdkglobals-win32.o \
+       gdkim-win32.o \
+       gdkimage-win32.o \
+       gdkinput-win32.o \
+       gdkmain-win32.o \
+       gdkpixmap-win32.o \
+       gdkproperty-win32.o \
+       gdkregion-win32.o \
+       gdkselection-win32.o \
+       gdkvisual-win32.o \
+       gdkwin32id.o \
+       gdkwindow-win32.o
 
 ../../config.h : ../../config.h.win32
        $(CP) ../../config.h.win32 ../../config.h
 
-gdkres.o : rc/gdk.rc
-       windres --include-dir rc rc/gdk.rc gdkres.o
+gdk-win32res.o : rc/gdk.rc
+       windres --include-dir rc rc/gdk.rc gdk-win32res.o
 
-gdk-$(GTK_VER).dll : $(gdk_OBJECTS) gdk.def gdkres.o libwntab32x.a
-       $(GLIB)/build-dll gdk $(GTK_VER) gdk.def $(gdk_OBJECTS) -L $(GLIB) -lglib-$(GLIB_VER) -L . -lwntab32x -lgdi32 -luser32 -limm32 -lshell32 -lole32 -luuid $(LDFLAGS) gdkres.o
+gdk-win32-$(GTK_VER).dll : $(gdk_win32_OBJECTS) gdk-win32.def gdk-win32res.o libwntab32x.a
+       $(GLIB)/build-dll gdk-win32 $(GTK_VER) gdk-win32.def $(gdk_win32_OBJECTS) -L $(GLIB) -lglib-$(GLIB_VER) -L . -lwntab32x -lgdi32 -luser32 -limm32 -lshell32 -lole32 -luuid $(LDFLAGS) gdk-win32res.o
 
 libwntab32x.a : $(WTKIT)/lib/i386/wntab32x.lib
        cp $(WTKIT)/lib/i386/wntab32x.lib libwntab32x.a
@@ -100,11 +75,5 @@ libwntab32x.a : $(WTKIT)/lib/i386/wntab32x.lib
 .c.i :
        $(CC) $(CFLAGS) -E -DGDK_COMPILATION -DG_LOG_DOMAIN=\"Gdk\" $< >$@
 
-gdkrgb.c : ../gdkrgb.c
-       $(CP) ../gdkrgb.c .
-
-gdkrectangle.c : ../gdkrectangle.c
-       $(CP) ../gdkrectangle.c .
-
 clean:
        -rm *.exe *.o *.dll *.a *.exp *.base
index 3cc50be34c60a0ca7e640dcb5eb41b43c8f038cb..5d773fcefd105487cf231af68a35c9d2fbea04f1 100644 (file)
@@ -2,13 +2,13 @@
 #define __SURROGATE_DIMM_H__
 
 /* The Win32api headers doesn't include <dimm.h>, thus we need
- * this file, which coverr just the stuff we need from <dimm.h>.
+ * this file, which covers just the stuff we need from <dimm.h>.
  */
 
 typedef struct IActiveIMMApp IActiveIMMApp;
 typedef struct IActiveIMMMessagePumpOwner IActiveIMMMessagePumpOwner;
 
-/* Dummy vtable structs that contain real names and prototypes for
+/* Dummy vtable structs that contain real names and arg lists for
  * only those methods we need.
  */
 typedef struct {