]> Pileus Git - ~andy/gtk/blobdiff - gdk/win32/gdk.c
Add new keysyms from X11R6.4 (including EuroSign).
[~andy/gtk] / gdk / win32 / gdk.c
index 78a64e25c1dac58a541358b1db611204d43397b4..9e5cb9f0cabb2f6dea1bdc292df2e1b03e719241 100644 (file)
 #include <limits.h>
 #include <io.h>
 
-#include <gdk/gdk.h>
-#include <gdk/gdkkeysyms.h>
-#include <gdk/gdki18n.h>
-#include "gdkx.h"
-#include "gdkinput.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);
-#define XConvertCase gdkx_XConvertCase
-
 static void        gdk_exit_func                (void);
 
-static RETSIGTYPE   gdk_signal                  (int          signum);
-
 
 /* Private variable declarations
  */
 static int gdk_initialized = 0;        /* 1 if the library is initialized,
                                 * 0 otherwise.
                                 */
-static guint start;            /* We use the millisecond
-                                * timestamps from GetTickCount
-                                */
-static gboolean timerp = TRUE; /* If TRUE use timeouts when waiting
-                                * for Windows messages
-                                */
-static guint32 timer_val = 20; /* Timeout in milliseconds.
-                                */
-
 #ifdef G_ENABLE_DEBUG
 static const GDebugKey gdk_debug_keys[] = {
   {"events",       GDK_DEBUG_EVENTS},
@@ -112,7 +100,6 @@ gboolean
 gdk_init_check (int    *argc,
                char ***argv)
 {
-  HRESULT hres;
   gint i, j, k;
   
   if (gdk_initialized)
@@ -121,8 +108,6 @@ gdk_init_check (int    *argc,
   if (g_thread_supported ())
     gdk_threads_mutex = g_mutex_new ();
   
-  start = GetTickCount ();
-
 #ifdef G_ENABLE_DEBUG
   {
     gchar *debug_string = getenv("GDK_DEBUG");
@@ -136,6 +121,9 @@ gdk_init_check (int    *argc,
   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)
@@ -216,6 +204,11 @@ gdk_init_check (int    *argc,
                (*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;
        }
       
@@ -241,6 +234,9 @@ gdk_init_check (int    *argc,
   
   gdk_ProgInstance = GetModuleHandle (NULL);
   gdk_DC = CreateDC ("DISPLAY", NULL, NULL, NULL);
+  gdk_root_window = GetDesktopWindow ();
+
+  CoInitialize (NULL);
 
   gdk_selection_request_msg = RegisterWindowMessage ("gdk-selection-request");
   gdk_selection_notify_msg = RegisterWindowMessage ("gdk-selection-notify");
@@ -254,8 +250,6 @@ gdk_init_check (int    *argc,
   gdk_progclass = g_basename (g_get_prgname ());
   gdk_progclass[0] = toupper (gdk_progclass[0]);
 
-  gdk_root_window = HWND_DESKTOP;
-
   g_atexit (gdk_exit_func);
   
   gdk_events_init ();
@@ -301,7 +295,7 @@ gdk_init (int *argc, char ***argv)
  */
 
 void
-gdk_exit (int errorcode)
+gdk_exit (gint errorcode)
 {
   /* de-initialisation is done by the gdk_exit_func(),
      no need to do this here (Alex J.) */
@@ -320,113 +314,6 @@ gdk_get_use_xshm (void)
   return TRUE;
 }
 
-/*
- *--------------------------------------------------------------
- * gdk_time_get
- *
- *   Get the number of milliseconds since the library was
- *   initialized.
- *
- * Arguments:
- *
- * Results:
- *   The time since the library was initialized is returned.
- *   This time value is accurate to milliseconds even though
- *   a more accurate time down to the microsecond could be
- *   returned.
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-guint32
-gdk_time_get (void)
-{
-  guint32 milliseconds;
-  guint32 end = GetTickCount ();
-
-  if (end < start)
-    milliseconds = 0xFFFFFFFF - (start - end) + 1;
-  else
-    milliseconds = end - start;
-
-  return milliseconds;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_timer_get
- *
- *   Returns the current timer.
- *
- * Arguments:
- *
- * Results:
- *   Returns the current timer interval. This interval is
- *   in units of milliseconds.
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-guint32
-gdk_timer_get (void)
-{
-  return timer_val;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_timer_set
- *
- *   Sets the timer interval.
- *
- * Arguments:
- *   "milliseconds" is the new value for the timer.
- *
- * Results:
- *
- * Side effects:
- *   Calls to "gdk_event_get" will last for a maximum
- *   of time of "milliseconds". However, a value of 0
- *   milliseconds will cause "gdk_event_get" to block
- *   indefinately until an event is received.
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_timer_set (guint32 milliseconds)
-{
-  timer_val = milliseconds;
-#ifdef USE_PEEKNAMEDPIPE
-  /* When using PeekNamedPipe, can't have too long timeouts.
-   */
-  if (timer_val > 10)
-    timer_val = 10;
-  else if (timer_val == 0)
-    timer_val = 0;
-#endif
-}
-
-void
-gdk_timer_enable (void)
-{
-  timerp = TRUE;
-}
-
-void
-gdk_timer_disable (void)
-{
-#ifdef USE_PEEKNAMEDPIPE
-  /* Can't disable timeouts when using PeekNamedPipe */
-#else
-  timerp = FALSE;
-#endif
-}
-
 /*
  *--------------------------------------------------------------
  * gdk_screen_width
@@ -447,7 +334,7 @@ gdk_screen_width (void)
 {
   gint return_val;
   
-  return_val = gdk_root_parent.width;
+  return_val = gdk_root_parent->drawable.width;
 
   return return_val;
 }
@@ -472,7 +359,7 @@ gdk_screen_height (void)
 {
   gint return_val;
   
-  return_val = gdk_root_parent.height;
+  return_val = gdk_root_parent->drawable.height;
 
   return return_val;
 }
@@ -612,6 +499,11 @@ gdk_exit_func (void)
       gdk_input_exit ();
       gdk_key_repeat_restore ();
       gdk_dnd_exit ();
+
+      CoUninitialize ();
+
+      DeleteDC (gdk_DC);
+      gdk_DC = NULL;
       gdk_initialized = 0;
     }
 }
@@ -1782,6 +1674,22 @@ static struct gdk_key {
   { 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" },
@@ -1938,11 +1846,21 @@ static struct gdk_key {
   { 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" },
-  { 0x00ff3d, "Zen_Koho" },
-  { 0x00ff3e, "Mae_Koho" },
   { 0x00ff3e, "PreviousCandidate" },
+  { 0x00ff3f, "Hangul_Special" },
   { 0x00ff50, "Home" },
   { 0x00ff51, "Left" },
   { 0x00ff52, "Up" },
@@ -2061,21 +1979,6 @@ static struct gdk_key {
   { 0x00ffed, "Hyper_L" },
   { 0x00ffee, "Hyper_R" },
   { 0x00ffff, "Delete" },
-  { 0x00ff31, "Hangul" },
-  { 0x00ff32, "Hangul_Start" },
-  { 0x00ff33, "Hangul_End" },
-  { 0x00ff34, "Hangul_Hanja" },
-  { 0x00ff35, "Hangul_Jamo" },
-  { 0x00ff36, "Hangul_Romaja" },
-  { 0x00ff37, "Hangul_Codeinput" },
-  { 0x00ff38, "Hangul_Jeonja" },
-  { 0x00ff39, "Hangul_Banja" },
-  { 0x00ff3a, "Hangul_PreHanja" },
-  { 0x00ff3b, "Hangul_PostHanja" },
-  { 0x00ff3c, "Hangul_SingleCandidate" },
-  { 0x00ff3d, "Hangul_MultipleCandidate" },
-  { 0x00ff3e, "Hangul_PreviousCandidate" },
-  { 0x00ff3f, "Hangul_Special" },
   { 0xffffff, "VoidSymbol" },
 };
 
@@ -2097,7 +2000,7 @@ gdk_keyval_name (guint          keyval)
             GDK_NUM_KEYS, sizeof (struct gdk_key),
             gdk_keys_keyval_compare);
   if (found != NULL)
-    return found->name;
+    return (gchar *) found->name;
   else
     return NULL;
 }
@@ -2149,7 +2052,7 @@ gdk_keyval_to_upper (guint          keyval)
       KeySym lower_val = 0;
       KeySym upper_val = 0;
       
-      XConvertCase (keyval, &lower_val, &upper_val);
+      gdkx_XConvertCase (keyval, &lower_val, &upper_val);
       return upper_val;
     }
   return 0;
@@ -2163,7 +2066,7 @@ gdk_keyval_to_lower (guint          keyval)
       KeySym lower_val = 0;
       KeySym upper_val = 0;
       
-      XConvertCase (keyval, &lower_val, &upper_val);
+      gdkx_XConvertCase (keyval, &lower_val, &upper_val);
       return lower_val;
     }
   return 0;
@@ -2177,7 +2080,7 @@ gdk_keyval_is_upper (guint          keyval)
       KeySym lower_val = 0;
       KeySym upper_val = 0;
       
-      XConvertCase (keyval, &lower_val, &upper_val);
+      gdkx_XConvertCase (keyval, &lower_val, &upper_val);
       return upper_val == keyval;
     }
   return TRUE;
@@ -2191,7 +2094,7 @@ gdk_keyval_is_lower (guint        keyval)
       KeySym lower_val = 0;
       KeySym upper_val = 0;
       
-      XConvertCase (keyval, &lower_val, &upper_val);
+      gdkx_XConvertCase (keyval, &lower_val, &upper_val);
       return lower_val == keyval;
     }
   return TRUE;