]> Pileus Git - ~andy/gtk/commitdiff
Remove the event_mask, it is now in GdkWindowObject.
authorTor Lillqvist <tml@iki.fi>
Thu, 28 Feb 2002 23:38:55 +0000 (23:38 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Thu, 28 Feb 2002 23:38:55 +0000 (23:38 +0000)
2002-03-01  Tor Lillqvist  <tml@iki.fi>

* gdk/win32/gdkwindow-win32.h (struct _GdkWindowImplWin32): Remove
the event_mask, it is now in GdkWindowObject.

* gdk/win32/gdkwindow-win32.c: Change accordingly. Set the
GDK_STRUCTURE_MASK in gdk_window_set_events(), as it is always set
in gdk_window_new(), too. (Bug#72921)

* gdk/win32/gdkevents-win32.c: Change accordingly here, too.
(vk_from_char): New function, calculates the virtual keycode
corresponding to the char in a WM_CHAR message.
(build_keypress_event, build_keyrelease_event): Use it.
(build_keypress_event): Call ImmReleaseContext() after using the
input context. This might plug a memory or resource leak.
(build_key_event_state): Remove #if 0 code.
(gdk_event_translate): Actually, it would be preferrable to always
handle just the WM_KEYDOWN and WM_KEYUP messages, not WM_CHAR at
all, and thus drop the contorted logic with ignore_wm_char etc.

* gdk/win32/gdkkeys-win32.c: (gdk_keymap_get_entries_for_keyval):
Debugging output.
(gdk_keymap_translate_keyboard_state): Return correct value. (But
_gtk_key_hash_lookup() doesn't check the return value...)

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
gdk/win32/gdkevents-win32.c
gdk/win32/gdkkeys-win32.c
gdk/win32/gdkwindow-win32.c
gdk/win32/gdkwindow-win32.h

index 9433733c2251f55de682023fa7d4b85c17491683..7548153bc92d68342f19f646fcdc58dc4e14c82c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2002-03-01  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkwindow-win32.h (struct _GdkWindowImplWin32): Remove
+       the event_mask, it is now in GdkWindowObject.
+
+       * gdk/win32/gdkwindow-win32.c: Change accordingly. Set the
+       GDK_STRUCTURE_MASK in gdk_window_set_events(), as it is always set
+       in gdk_window_new(), too. (Bug#72921)
+
+       * gdk/win32/gdkevents-win32.c: Change accordingly here, too.
+       (vk_from_char): New function, calculates the virtual keycode
+       corresponding to the char in a WM_CHAR message.
+       (build_keypress_event, build_keyrelease_event): Use it.
+       (build_keypress_event): Call ImmReleaseContext() after using the
+       input context. This might plug a memory or resource leak.
+       (build_key_event_state): Remove #if 0 code.
+       (gdk_event_translate): Actually, it would be preferrable to always
+       handle just the WM_KEYDOWN and WM_KEYUP messages, not WM_CHAR at
+       all, and thus drop the contorted logic with ignore_wm_char etc.
+
+       * gdk/win32/gdkkeys-win32.c: (gdk_keymap_get_entries_for_keyval):
+       Debugging output.
+       (gdk_keymap_translate_keyboard_state): Return correct value. (But
+       _gtk_key_hash_lookup() doesn't check the return value...)
+
 Thu Feb 28 14:49:08 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/x11/gdkwindow-x11.c (gdk_window_foreign_new): Initialize
index 9433733c2251f55de682023fa7d4b85c17491683..7548153bc92d68342f19f646fcdc58dc4e14c82c 100644 (file)
@@ -1,3 +1,28 @@
+2002-03-01  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkwindow-win32.h (struct _GdkWindowImplWin32): Remove
+       the event_mask, it is now in GdkWindowObject.
+
+       * gdk/win32/gdkwindow-win32.c: Change accordingly. Set the
+       GDK_STRUCTURE_MASK in gdk_window_set_events(), as it is always set
+       in gdk_window_new(), too. (Bug#72921)
+
+       * gdk/win32/gdkevents-win32.c: Change accordingly here, too.
+       (vk_from_char): New function, calculates the virtual keycode
+       corresponding to the char in a WM_CHAR message.
+       (build_keypress_event, build_keyrelease_event): Use it.
+       (build_keypress_event): Call ImmReleaseContext() after using the
+       input context. This might plug a memory or resource leak.
+       (build_key_event_state): Remove #if 0 code.
+       (gdk_event_translate): Actually, it would be preferrable to always
+       handle just the WM_KEYDOWN and WM_KEYUP messages, not WM_CHAR at
+       all, and thus drop the contorted logic with ignore_wm_char etc.
+
+       * gdk/win32/gdkkeys-win32.c: (gdk_keymap_get_entries_for_keyval):
+       Debugging output.
+       (gdk_keymap_translate_keyboard_state): Return correct value. (But
+       _gtk_key_hash_lookup() doesn't check the return value...)
+
 Thu Feb 28 14:49:08 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/x11/gdkwindow-x11.c (gdk_window_foreign_new): Initialize
index 9433733c2251f55de682023fa7d4b85c17491683..7548153bc92d68342f19f646fcdc58dc4e14c82c 100644 (file)
@@ -1,3 +1,28 @@
+2002-03-01  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkwindow-win32.h (struct _GdkWindowImplWin32): Remove
+       the event_mask, it is now in GdkWindowObject.
+
+       * gdk/win32/gdkwindow-win32.c: Change accordingly. Set the
+       GDK_STRUCTURE_MASK in gdk_window_set_events(), as it is always set
+       in gdk_window_new(), too. (Bug#72921)
+
+       * gdk/win32/gdkevents-win32.c: Change accordingly here, too.
+       (vk_from_char): New function, calculates the virtual keycode
+       corresponding to the char in a WM_CHAR message.
+       (build_keypress_event, build_keyrelease_event): Use it.
+       (build_keypress_event): Call ImmReleaseContext() after using the
+       input context. This might plug a memory or resource leak.
+       (build_key_event_state): Remove #if 0 code.
+       (gdk_event_translate): Actually, it would be preferrable to always
+       handle just the WM_KEYDOWN and WM_KEYUP messages, not WM_CHAR at
+       all, and thus drop the contorted logic with ignore_wm_char etc.
+
+       * gdk/win32/gdkkeys-win32.c: (gdk_keymap_get_entries_for_keyval):
+       Debugging output.
+       (gdk_keymap_translate_keyboard_state): Return correct value. (But
+       _gtk_key_hash_lookup() doesn't check the return value...)
+
 Thu Feb 28 14:49:08 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/x11/gdkwindow-x11.c (gdk_window_foreign_new): Initialize
index 9433733c2251f55de682023fa7d4b85c17491683..7548153bc92d68342f19f646fcdc58dc4e14c82c 100644 (file)
@@ -1,3 +1,28 @@
+2002-03-01  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkwindow-win32.h (struct _GdkWindowImplWin32): Remove
+       the event_mask, it is now in GdkWindowObject.
+
+       * gdk/win32/gdkwindow-win32.c: Change accordingly. Set the
+       GDK_STRUCTURE_MASK in gdk_window_set_events(), as it is always set
+       in gdk_window_new(), too. (Bug#72921)
+
+       * gdk/win32/gdkevents-win32.c: Change accordingly here, too.
+       (vk_from_char): New function, calculates the virtual keycode
+       corresponding to the char in a WM_CHAR message.
+       (build_keypress_event, build_keyrelease_event): Use it.
+       (build_keypress_event): Call ImmReleaseContext() after using the
+       input context. This might plug a memory or resource leak.
+       (build_key_event_state): Remove #if 0 code.
+       (gdk_event_translate): Actually, it would be preferrable to always
+       handle just the WM_KEYDOWN and WM_KEYUP messages, not WM_CHAR at
+       all, and thus drop the contorted logic with ignore_wm_char etc.
+
+       * gdk/win32/gdkkeys-win32.c: (gdk_keymap_get_entries_for_keyval):
+       Debugging output.
+       (gdk_keymap_translate_keyboard_state): Return correct value. (But
+       _gtk_key_hash_lookup() doesn't check the return value...)
+
 Thu Feb 28 14:49:08 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/x11/gdkwindow-x11.c (gdk_window_foreign_new): Initialize
index 9433733c2251f55de682023fa7d4b85c17491683..7548153bc92d68342f19f646fcdc58dc4e14c82c 100644 (file)
@@ -1,3 +1,28 @@
+2002-03-01  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkwindow-win32.h (struct _GdkWindowImplWin32): Remove
+       the event_mask, it is now in GdkWindowObject.
+
+       * gdk/win32/gdkwindow-win32.c: Change accordingly. Set the
+       GDK_STRUCTURE_MASK in gdk_window_set_events(), as it is always set
+       in gdk_window_new(), too. (Bug#72921)
+
+       * gdk/win32/gdkevents-win32.c: Change accordingly here, too.
+       (vk_from_char): New function, calculates the virtual keycode
+       corresponding to the char in a WM_CHAR message.
+       (build_keypress_event, build_keyrelease_event): Use it.
+       (build_keypress_event): Call ImmReleaseContext() after using the
+       input context. This might plug a memory or resource leak.
+       (build_key_event_state): Remove #if 0 code.
+       (gdk_event_translate): Actually, it would be preferrable to always
+       handle just the WM_KEYDOWN and WM_KEYUP messages, not WM_CHAR at
+       all, and thus drop the contorted logic with ignore_wm_char etc.
+
+       * gdk/win32/gdkkeys-win32.c: (gdk_keymap_get_entries_for_keyval):
+       Debugging output.
+       (gdk_keymap_translate_keyboard_state): Return correct value. (But
+       _gtk_key_hash_lookup() doesn't check the return value...)
+
 Thu Feb 28 14:49:08 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/x11/gdkwindow-x11.c (gdk_window_foreign_new): Initialize
index 9433733c2251f55de682023fa7d4b85c17491683..7548153bc92d68342f19f646fcdc58dc4e14c82c 100644 (file)
@@ -1,3 +1,28 @@
+2002-03-01  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkwindow-win32.h (struct _GdkWindowImplWin32): Remove
+       the event_mask, it is now in GdkWindowObject.
+
+       * gdk/win32/gdkwindow-win32.c: Change accordingly. Set the
+       GDK_STRUCTURE_MASK in gdk_window_set_events(), as it is always set
+       in gdk_window_new(), too. (Bug#72921)
+
+       * gdk/win32/gdkevents-win32.c: Change accordingly here, too.
+       (vk_from_char): New function, calculates the virtual keycode
+       corresponding to the char in a WM_CHAR message.
+       (build_keypress_event, build_keyrelease_event): Use it.
+       (build_keypress_event): Call ImmReleaseContext() after using the
+       input context. This might plug a memory or resource leak.
+       (build_key_event_state): Remove #if 0 code.
+       (gdk_event_translate): Actually, it would be preferrable to always
+       handle just the WM_KEYDOWN and WM_KEYUP messages, not WM_CHAR at
+       all, and thus drop the contorted logic with ignore_wm_char etc.
+
+       * gdk/win32/gdkkeys-win32.c: (gdk_keymap_get_entries_for_keyval):
+       Debugging output.
+       (gdk_keymap_translate_keyboard_state): Return correct value. (But
+       _gtk_key_hash_lookup() doesn't check the return value...)
+
 Thu Feb 28 14:49:08 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/x11/gdkwindow-x11.c (gdk_window_foreign_new): Initialize
index 9433733c2251f55de682023fa7d4b85c17491683..7548153bc92d68342f19f646fcdc58dc4e14c82c 100644 (file)
@@ -1,3 +1,28 @@
+2002-03-01  Tor Lillqvist  <tml@iki.fi>
+
+       * gdk/win32/gdkwindow-win32.h (struct _GdkWindowImplWin32): Remove
+       the event_mask, it is now in GdkWindowObject.
+
+       * gdk/win32/gdkwindow-win32.c: Change accordingly. Set the
+       GDK_STRUCTURE_MASK in gdk_window_set_events(), as it is always set
+       in gdk_window_new(), too. (Bug#72921)
+
+       * gdk/win32/gdkevents-win32.c: Change accordingly here, too.
+       (vk_from_char): New function, calculates the virtual keycode
+       corresponding to the char in a WM_CHAR message.
+       (build_keypress_event, build_keyrelease_event): Use it.
+       (build_keypress_event): Call ImmReleaseContext() after using the
+       input context. This might plug a memory or resource leak.
+       (build_key_event_state): Remove #if 0 code.
+       (gdk_event_translate): Actually, it would be preferrable to always
+       handle just the WM_KEYDOWN and WM_KEYUP messages, not WM_CHAR at
+       all, and thus drop the contorted logic with ignore_wm_char etc.
+
+       * gdk/win32/gdkkeys-win32.c: (gdk_keymap_get_entries_for_keyval):
+       Debugging output.
+       (gdk_keymap_translate_keyboard_state): Return correct value. (But
+       _gtk_key_hash_lookup() doesn't check the return value...)
+
 Thu Feb 28 14:49:08 2002  Owen Taylor  <otaylor@redhat.com>
 
        * gdk/x11/gdkwindow-x11.c (gdk_window_foreign_new): Initialize
index 9c38663fd746a6ab3c81d7f8f42ec309459d8536..c9479921f8f0ff271511eb5fea8ae38a7a5778f1 100644 (file)
@@ -791,20 +791,7 @@ build_key_event_state (GdkEvent *event)
   if (!is_altgr_key)
     {
       if (GetKeyState (VK_CONTROL) < 0)
-       {
-         event->key.state |= GDK_CONTROL_MASK;
-#if 0
-         if (event->key.keyval < ' ')
-           event->key.keyval += '@';
-#endif
-       }
-#if 0
-      else if (event->key.keyval < ' ')
-       {
-         event->key.state |= GDK_CONTROL_MASK;
-         event->key.keyval += '@';
-       }
-#endif
+       event->key.state |= GDK_CONTROL_MASK;
       if (GetKeyState (VK_MENU) < 0)
        event->key.state |= GDK_MOD1_MASK;
     }
@@ -836,10 +823,23 @@ build_pointer_event_state (MSG *msg)
   return state;
 }
 
+static guint
+vk_from_char (guint c)
+{
+  switch (c)
+    {
+    case '\b':
+      return 'H';
+    case '\t':
+      return 'I';
+    default:
+      return (VkKeyScanEx (c, _gdk_input_locale) & 0xFF);
+    }
+}
+
 static void
-build_keypress_event (GdkWindowImplWin32 *impl,
-                     GdkEvent           *event,
-                     MSG                *msg)
+build_keypress_event (GdkEvent *event,
+                     MSG      *msg)
 {
   HIMC himc;
   gint i, bytecount, ucount;
@@ -854,24 +854,26 @@ build_keypress_event (GdkWindowImplWin32 *impl,
   if (msg->message == WM_IME_COMPOSITION)
     {
       himc = ImmGetContext (msg->hwnd);
-
       bytecount = ImmGetCompositionStringW (himc, GCS_RESULTSTR,
                                            wbuf, sizeof (wbuf));
+      ImmReleaseContext (msg->hwnd, himc);
+
       ucount = bytecount / 2;
       event->key.hardware_keycode = wbuf[0]; /* ??? */
     }
   else
     {
-      event->key.hardware_keycode = msg->wParam;
       if (msg->message == WM_CHAR || msg->message == WM_SYSCHAR)
        {
          bytecount = MIN ((msg->lParam & 0xFFFF), sizeof (buf));
          for (i = 0; i < bytecount; i++)
            buf[i] = msg->wParam;
+         event->key.hardware_keycode = vk_from_char (msg->wParam);
        }
       else /* WM_IME_CHAR */
        {
          event->key.keyval = GDK_VoidSymbol;
+         event->key.hardware_keycode = 0; /* ??? */
          if (msg->wParam & 0xFF00)
            {
              /* Contrary to some versions of the documentation,
@@ -930,9 +932,8 @@ build_keypress_event (GdkWindowImplWin32 *impl,
 }
 
 static void
-build_keyrelease_event (GdkWindowImplWin32 *impl,
-                       GdkEvent           *event,
-                       MSG                *msg)
+build_keyrelease_event (GdkEvent *event,
+                       MSG      *msg)
 {
   guchar buf;
   wchar_t wbuf;
@@ -944,7 +945,6 @@ build_keyrelease_event (GdkWindowImplWin32 *impl,
 
   if (msg->message == WM_CHAR || msg->message == WM_SYSCHAR)
     {
-      event->key.hardware_keycode = msg->wParam;
       if (msg->wParam < ' ')
        event->key.keyval = msg->wParam + '@';
       else
@@ -955,6 +955,7 @@ build_keyrelease_event (GdkWindowImplWin32 *impl,
          
          event->key.keyval = gdk_unicode_to_keyval (wbuf);
        }
+      event->key.hardware_keycode = vk_from_char (msg->wParam);
     }
   else
     {
@@ -1158,7 +1159,7 @@ synthesize_leave_event (GdkWindow    *window,
 {
   POINT pt;
 
-  if (!(GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl)->event_mask & GDK_LEAVE_NOTIFY_MASK))
+  if (!(GDK_WINDOW_OBJECT (window)->event_mask & GDK_LEAVE_NOTIFY_MASK))
     return;
 
   /* Leave events are at (current_x,current_y) in current_window */
@@ -1183,7 +1184,7 @@ synthesize_enter_event (GdkWindow    *window,
 {
   POINT pt;
 
-  if (!(GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl)->event_mask & GDK_ENTER_NOTIFY_MASK))
+  if (!(GDK_WINDOW_OBJECT (window)->event_mask & GDK_ENTER_NOTIFY_MASK))
     return;
 
   /* Enter events are at LOWORD (msg->lParam), HIWORD
@@ -1468,7 +1469,7 @@ propagate (GdkWindow  **window,
     }
   while (TRUE)
     {
-     if ((*doesnt_want_it) (GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (*window)->impl)->event_mask, msg))
+     if ((*doesnt_want_it) (GDK_WINDOW_OBJECT (*window)->event_mask, msg))
        {
          /* Owner doesn't want it, propagate to parent. */
          if (GDK_WINDOW (GDK_WINDOW_OBJECT (*window)->parent) == _gdk_parent_root)
@@ -1809,13 +1810,16 @@ gdk_event_translate (GdkEvent *event,
   CHARSETINFO charset_info;
 
   /* Invariant:
-   * window_impl == GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl)
+   * private == GDK_WINDOW_OBJECT (window)
    */
   GdkWindow *window;
-  GdkWindowImplWin32 *window_impl;
+  GdkWindowObject *private;
+
 #define ASSIGN_WINDOW(rhs)                                                \
   (window = rhs,                                                          \
-   window_impl = (window ? GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl) : NULL))
+   private = (GdkWindowObject *) window)
+
+  GdkWindowImplWin32 *impl;
 
   GdkWindow *orig_window, *new_window;
   gint xoffset, yoffset;
@@ -2392,29 +2396,29 @@ gdk_event_translate (GdkEvent *event,
       return_val = !GDK_WINDOW_DESTROYED (window);
 
       if (return_val && (event->key.window == k_grab_window
-                        || (window_impl->event_mask & GDK_KEY_RELEASE_MASK)))
+                        || (private->event_mask & GDK_KEY_RELEASE_MASK)))
        {
          if (window == k_grab_window
-             || (window_impl->event_mask & GDK_KEY_PRESS_MASK))
+             || (private->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_impl, event2, msg);
+             build_keypress_event (event2, msg);
              event2->key.window = window;
              gdk_drawable_ref (window);
              _gdk_event_queue_append (event2);
              GDK_NOTE (EVENTS, print_event (event2));
            }
          /* Return the key release event.  */
-         build_keyrelease_event (window_impl, event, msg);
+         build_keyrelease_event (event, msg);
        }
-      else if (return_val && (window_impl->event_mask & GDK_KEY_PRESS_MASK))
+      else if (return_val && (private->event_mask & GDK_KEY_PRESS_MASK))
        {
          /* Return just the key press event. */
-         build_keypress_event (window_impl, event, msg);
+         build_keypress_event (event, msg);
        }
       else
        return_val = FALSE;
@@ -2468,13 +2472,12 @@ gdk_event_translate (GdkEvent *event,
       if (!p_grab_window)
        {
          /* No explicit active grab, let's start one automatically */
-         gint owner_events = window_impl->event_mask
-           & (GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK);
+         gint owner_events = (private->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_impl->event_mask,
+                           private->event_mask,
                            NULL, NULL, 0);
          p_grab_automatic = TRUE;
        }
@@ -2623,7 +2626,7 @@ gdk_event_translate (GdkEvent *event,
                         LOWORD (msg->lParam), HIWORD (msg->lParam)));
       if (track_mouse_event == NULL
          && current_window != NULL
-         && (GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (current_window)->impl)->event_mask & GDK_LEAVE_NOTIFY_MASK))
+         && (GDK_WINDOW_OBJECT (current_window)->event_mask & GDK_LEAVE_NOTIFY_MASK))
        {
          GDK_NOTE (EVENTS, g_print ("...synthesizing LEAVE_NOTIFY event\n"));
 
@@ -2712,7 +2715,7 @@ gdk_event_translate (GdkEvent *event,
     case WM_MOUSELEAVE:
       GDK_NOTE (EVENTS, g_print ("WM_MOUSELEAVE: %p\n", msg->hwnd));
 
-      if (!(window_impl->event_mask & GDK_LEAVE_NOTIFY_MASK))
+      if (!(private->event_mask & GDK_LEAVE_NOTIFY_MASK))
        break;
 
       event->crossing.type = GDK_LEAVE_NOTIFY;
@@ -2787,7 +2790,7 @@ gdk_event_translate (GdkEvent *event,
                                  "SET" : "KILL"),
                                 msg->hwnd));
       
-      if (!(window_impl->event_mask & GDK_FOCUS_CHANGE_MASK))
+      if (!(private->event_mask & GDK_FOCUS_CHANGE_MASK))
        break;
 
       event->focus_change.type = GDK_FOCUS_CHANGE;
@@ -2836,7 +2839,7 @@ gdk_event_translate (GdkEvent *event,
       if (GDK_WINDOW_OBJECT (window)->input_only)
        break;
 
-      if (!(window_impl->event_mask & GDK_EXPOSURE_MASK))
+      if (!(private->event_mask & GDK_EXPOSURE_MASK))
        break;
 
 #if 0 /* we need to process exposes even with GDK_NO_BG
@@ -2919,7 +2922,7 @@ gdk_event_translate (GdkEvent *event,
       if (p_grab_window != NULL && p_grab_cursor != NULL)
        hcursor = p_grab_cursor;
       else if (!GDK_WINDOW_DESTROYED (window))
-       hcursor = window_impl->hcursor;
+       hcursor = GDK_WINDOW_IMPL_WIN32 (private->impl)->hcursor;
       else
        hcursor = NULL;
 
@@ -2936,7 +2939,7 @@ gdk_event_translate (GdkEvent *event,
       GDK_NOTE (EVENTS, g_print ("WM_SHOWWINDOW: %p  %d\n",
                                 msg->hwnd, msg->wParam));
 
-      if (!(window_impl->event_mask & GDK_STRUCTURE_MASK))
+      if (!(private->event_mask & GDK_STRUCTURE_MASK))
        break;
 
       event->any.type = (msg->wParam ? GDK_MAP : GDK_UNMAP);
@@ -2964,7 +2967,7 @@ gdk_event_translate (GdkEvent *event,
                             (msg->wParam == SIZE_RESTORED ? "RESTORED" : "?"))))),
                         LOWORD (msg->lParam), HIWORD (msg->lParam)));
 
-      if (!(window_impl->event_mask & GDK_STRUCTURE_MASK))
+      if (!(private->event_mask & GDK_STRUCTURE_MASK))
        break;
 
       if (msg->wParam == SIZE_MINIMIZED)
@@ -2999,17 +3002,16 @@ gdk_event_translate (GdkEvent *event,
          event->configure.y = pt.y;
          event->configure.width = LOWORD (msg->lParam);
          event->configure.height = HIWORD (msg->lParam);
-         GDK_WINDOW_OBJECT (window)->x = event->configure.x;
-         GDK_WINDOW_OBJECT (window)->y = event->configure.y;
-         window_impl->width = event->configure.width;
-         window_impl->height = event->configure.height;
+         private->x = event->configure.x;
+         private->y = event->configure.y;
+         GDK_WINDOW_IMPL_WIN32 (private->impl)->width = event->configure.width;
+         GDK_WINDOW_IMPL_WIN32 (private->impl)->height = event->configure.height;
 
-         if (GDK_WINDOW_OBJECT (window)->resize_count > 1)
-           GDK_WINDOW_OBJECT (window)->resize_count -= 1;
+         if (private->resize_count > 1)
+           private->resize_count -= 1;
          
          return_val = !GDK_WINDOW_DESTROYED (window);
-         if (return_val
-             && GDK_WINDOW_OBJECT (window)->extension_events != 0)
+         if (return_val && private->extension_events != 0)
            _gdk_input_configure_event (&event->configure, window);
        }
       break;
@@ -3031,17 +3033,16 @@ gdk_event_translate (GdkEvent *event,
          event->configure.y = lpr->top + ncm.iCaptionHeight;
          event->configure.width = lpr->right - lpr->left - 2 * ncm.iBorderWidth;
          event->configure.height = lpr->bottom - lpr->top - ncm.iCaptionHeight;
-         GDK_WINDOW_OBJECT (window)->x = event->configure.x;
-         GDK_WINDOW_OBJECT (window)->y = event->configure.y;
-         window_impl->width = event->configure.width;
-         window_impl->height = event->configure.height;
+         private->x = event->configure.x;
+         private->y = event->configure.y;
+         GDK_WINDOW_IMPL_WIN32 (private->impl)->width = event->configure.width;
+         GDK_WINDOW_IMPL_WIN32 (private->impl)->height = event->configure.height;
 
-         if (GDK_WINDOW_OBJECT (window)->resize_count > 1)
-           GDK_WINDOW_OBJECT (window)->resize_count -= 1;
+         if (private->resize_count > 1)
+           private->resize_count -= 1;
 
          return_val = !GDK_WINDOW_DESTROYED (window);
-         if (return_val
-             && GDK_WINDOW_OBJECT (window)->extension_events != 0)
+         if (return_val && private->extension_events != 0)
            _gdk_input_configure_event (&event->configure, window);
       }
       break;
@@ -3049,32 +3050,33 @@ gdk_event_translate (GdkEvent *event,
     case WM_GETMINMAXINFO:
       GDK_NOTE (EVENTS, g_print ("WM_GETMINMAXINFO: %p\n", msg->hwnd));
 
+      impl = GDK_WINDOW_IMPL_WIN32 (private->impl);
       mmi = (MINMAXINFO*) msg->lParam;
-      if (window_impl->hint_flags & GDK_HINT_MIN_SIZE)
+      if (impl->hint_flags & GDK_HINT_MIN_SIZE)
        {
-         mmi->ptMinTrackSize.x = window_impl->hint_min_width;
-         mmi->ptMinTrackSize.y = window_impl->hint_min_height;
+         mmi->ptMinTrackSize.x = impl->hint_min_width;
+         mmi->ptMinTrackSize.y = impl->hint_min_height;
        }
-      if (window_impl->hint_flags & GDK_HINT_MAX_SIZE)
+      if (impl->hint_flags & GDK_HINT_MAX_SIZE)
        {
-         mmi->ptMaxTrackSize.x = window_impl->hint_max_width;
-         mmi->ptMaxTrackSize.y = window_impl->hint_max_height;
+         mmi->ptMaxTrackSize.x = impl->hint_max_width;
+         mmi->ptMaxTrackSize.y = impl->hint_max_height;
 
          /* kind of WM functionality, limit maximized size to screen */
-         mmi->ptMaxPosition.x = 0; mmi->ptMaxPosition.y = 0;       
-         mmi->ptMaxSize.x = MIN(window_impl->hint_max_width, gdk_screen_width ());
-         mmi->ptMaxSize.y = MIN(window_impl->hint_max_height, gdk_screen_height ());
+         mmi->ptMaxPosition.x = 0;
+         mmi->ptMaxPosition.y = 0;         
+         mmi->ptMaxSize.x = MIN (impl->hint_max_width, gdk_screen_width ());
+         mmi->ptMaxSize.y = MIN (impl->hint_max_height, gdk_screen_height ());
        }
-       else if (window_impl->hint_flags & GDK_HINT_MIN_SIZE)
+      else if (impl->hint_flags & GDK_HINT_MIN_SIZE)
        {
          /* need to initialize */
          mmi->ptMaxSize.x = gdk_screen_width ();
          mmi->ptMaxSize.y = gdk_screen_height ();
        }
-       /* lovely API inconsistence: return FALSE when handled */
-       if (ret_val_flagp)
-         *ret_val_flagp = !(window_impl->hint_flags &
-                            (GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE));
+      /* lovely API inconsistence: return FALSE when handled */
+      if (ret_val_flagp)
+       *ret_val_flagp = !(impl->hint_flags & (GDK_HINT_MIN_SIZE | GDK_HINT_MAX_SIZE));
       break;
 
     case WM_MOVE:
@@ -3082,7 +3084,7 @@ gdk_event_translate (GdkEvent *event,
                                 msg->hwnd,
                                 LOWORD (msg->lParam), HIWORD (msg->lParam)));
 
-      if (!(window_impl->event_mask & GDK_STRUCTURE_MASK))
+      if (!(private->event_mask & GDK_STRUCTURE_MASK))
        break;
 
       if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD
@@ -3096,20 +3098,21 @@ gdk_event_translate (GdkEvent *event,
          GetClientRect (msg->hwnd, &rect);
          event->configure.width = rect.right;
          event->configure.height = rect.bottom;
-         GDK_WINDOW_OBJECT (window)->x = event->configure.x;
-         GDK_WINDOW_OBJECT (window)->y = event->configure.y;
-         window_impl->width = event->configure.width;
-         window_impl->height = event->configure.height;
+         private->x = event->configure.x;
+         private->y = event->configure.y;
+         GDK_WINDOW_IMPL_WIN32 (private->impl)->width = event->configure.width;
+         GDK_WINDOW_IMPL_WIN32 (private->impl)->height = event->configure.height;
          
          return_val = !GDK_WINDOW_DESTROYED (window);
        }
       break;
-#if 0 /* not quite right, otherwise it may be faster/better than WM_(MOVE|SIZE) 
-       * remove decoration (frame) sizes ?
+
+#if 0 /* Not quite right, otherwise it may be faster/better than
+       * WM_(MOVE|SIZE) remove decoration (frame) sizes ?
        */
     case WM_WINDOWPOSCHANGED :
 
-      if (!(window_impl->event_mask & GDK_STRUCTURE_MASK))
+      if (!(private->event_mask & GDK_STRUCTURE_MASK))
        break;
 
       if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD
@@ -3124,10 +3127,10 @@ gdk_event_translate (GdkEvent *event,
          event->configure.y = lpwp->y;
          event->configure.width = lpwp->cx;
          event->configure.height = lpwp->cy;
-         GDK_WINDOW_OBJECT (window)->x = event->configure.x;
-         GDK_WINDOW_OBJECT (window)->y = event->configure.y;
-         window_impl->width = event->configure.width;
-         window_impl->height = event->configure.height;
+         private->x = event->configure.x;
+         private->y = event->configure.y;
+         GDK_WINDOW_IMPL_WIN32 (private->impl)->width = event->configure.width;
+         GDK_WINDOW_IMPL_WIN32 (private->impl)->height = event->configure.height;
          
          return_val = !GDK_WINDOW_DESTROYED (window);
 
index ca33615b5df37d4452f3c1b7ae0792a9eb99a657..eaf32412036c08eb765684aae2e28f0a82a840f2 100644 (file)
@@ -376,6 +376,22 @@ gdk_keymap_get_entries_for_keyval (GdkKeymap     *keymap,
        }
     }
 
+#ifdef G_ENABLE_DEBUG
+  if (_gdk_debug_flags & GDK_DEBUG_EVENTS)
+    {
+      gint i;
+
+      g_print ("gdk_keymap_get_entries_for_keyval: %#.04x (%s):",
+              keyval, gdk_keyval_name (keyval));
+      for (i = 0; i < retval->len; i++)
+       {
+         GdkKeymapKey *entry = (GdkKeymapKey *) retval->data + i;
+         g_print ("  %#.02x %d %d", entry->keycode, entry->group, entry->level);
+       }
+      g_print ("\n");
+    }
+#endif
+
   if (retval->len > 0)
     {
       *keys = (GdkKeymapKey*) retval->data;
@@ -638,7 +654,7 @@ gdk_keymap_translate_keyboard_state (GdkKeymap       *keymap,
   if (keyval)
     *keyval = tmp_keyval;
 
-  return FALSE;
+  return tmp_keyval != GDK_VoidSymbol;
 }
 
 /* Key handling not part of the keymap */
index 91221942ecceb86fa8215a73b753709526e10a4e..a4457d9a96595ab26788786027a7e786b2630214 100644 (file)
@@ -91,7 +91,6 @@ gdk_window_impl_win32_init (GdkWindowImplWin32 *impl)
   impl->width = 1;
   impl->height = 1;
 
-  impl->event_mask = 0;
   impl->hcursor = NULL;
   impl->hint_flags = 0;
   impl->extension_events_selected = FALSE;
@@ -486,8 +485,7 @@ gdk_window_new (GdkWindow     *parent,
   if (!title || !*title)
     title = "GDK client window";
 
-  impl->event_mask = GDK_STRUCTURE_MASK | attributes->event_mask;
-  private->event_mask = impl->event_mask;
+  private->event_mask = GDK_STRUCTURE_MASK | attributes->event_mask;
       
   if (private->parent && private->parent->guffaw_gravity)
     {
@@ -707,6 +705,7 @@ gdk_window_foreign_new (GdkNativeWindow anid)
   impl->height = rect.bottom - rect.top;
   private->window_type = GDK_WINDOW_FOREIGN;
   private->destroyed = FALSE;
+  private->event_mask = GDK_ALL_EVENTS_MASK; /* XXX */
   if (IsWindowVisible ((HWND) anid))
     private->state &= (~GDK_WINDOW_STATE_WITHDRAWN);
   else
@@ -1929,7 +1928,7 @@ gdk_window_get_events (GdkWindow *window)
   if (GDK_WINDOW_DESTROYED (window))
     return 0;
 
-  return GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl)->event_mask;
+  return GDK_WINDOW_OBJECT (window)->event_mask;
 }
 
 void          
@@ -1942,8 +1941,11 @@ gdk_window_set_events (GdkWindow   *window,
   if (GDK_WINDOW_DESTROYED (window))
     return;
 
-  GDK_WINDOW_OBJECT (window)->event_mask = event_mask;
-  GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl)->event_mask = event_mask;
+  /* gdk_window_new() always sets the GDK_STRUCTURE_MASK, so better
+   * set it here, too. Not that I know or remember why it is
+   * necessary, will have to test some day.
+   */
+  GDK_WINDOW_OBJECT (window)->event_mask = GDK_STRUCTURE_MASK | event_mask;
 }
 
 void
index d084f724923b93de4bee442201c3dac8e3b712e6..6194ba1faf74b1d5f40a04c18beb754413c7fcac 100644 (file)
@@ -75,9 +75,6 @@ struct _GdkWindowImplWin32
   
   GdkWin32PositionInfo position_info;
 
-  /* We must keep the event mask here to filter them ourselves */
-  gint event_mask;
-
   HCURSOR hcursor;
 
   /* Window size hints */