Index: gdk/win32/gdkevents-win32.c
===================================================================
RCS file: /cvs/gnome/gtk+/gdk/win32/gdkevents-win32.c,v
retrieving revision 1.100.2.16
diff -u -r1.100.2.16 gdkevents-win32.c
--- gdk/win32/gdkevents-win32.c	8 Aug 2003 07:12:13 -0000	1.100.2.16
+++ gdk/win32/gdkevents-win32.c	15 Aug 2003 19:47:53 -0000
@@ -113,6 +113,7 @@
 static GdkEventMask p_grab_mask;
 static gboolean p_grab_owner_events, k_grab_owner_events;
 static HCURSOR p_grab_cursor;
+static gboolean resizing = FALSE;
 
 static GSourceFuncs event_funcs = {
   gdk_event_prepare,
@@ -3115,6 +3116,70 @@
 	  return_val = TRUE;
 	}
       break;
+
+   case WM_ENTERSIZEMOVE:
+            resizing = TRUE;
+            break;
+
+    case WM_EXITSIZEMOVE:
+            resizing = FALSE;
+            break;
+
+    case WM_WINDOWPOSCHANGED :
+            /* Once we've entered the moving or sizing modal loop, we won't
+               return to the main loop until we're done sizing or moving. */
+            if(resizing &&
+               GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD &&
+               !GDK_WINDOW_DESTROYED (window)) {
+                    RECT client_rect;
+
+                    GetClientRect (msg->hwnd, &client_rect);
+  
+                    GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->width = client_rect.right - client_rect.left;
+                    GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->height = client_rect.bottom - client_rect.top;
+  
+                    ((GdkWindowObject *) window)->x = client_rect.left;
+                    ((GdkWindowObject *) window)->y = client_rect.top;
+  
+                    if (((GdkWindowObject *) window)->event_mask & GDK_STRUCTURE_MASK) {
+                            POINT point;
+                            GdkEvent *event = gdk_event_new (GDK_CONFIGURE);
+                            
+                            point.x = point.y = 0;
+                            ClientToScreen (msg->hwnd, &point);
+                            
+                            event->configure.window = window;
+                            
+                            event->configure.width = client_rect.right - client_rect.left;
+                            event->configure.height = client_rect.bottom - client_rect.top;
+                            
+                            event->configure.x = point.x;
+                            event->configure.y = point.y;
+                                    
+                            if (gdk_window_get_parent (window) == _gdk_parent_root) {
+                                    event->configure.x += _gdk_offset_x;
+                                    event->configure.y += _gdk_offset_y;
+                            }
+
+                            if (((GdkWindowObject *) window)->resize_count > 1)
+                                    ((GdkWindowObject *) window)->resize_count -= 1;
+
+                            /* Dispatch it now */
+                            fixup_event (event);
+                            if (_gdk_event_func)
+                                    (*_gdk_event_func) (event, _gdk_event_data);
+                            gdk_event_free (event);
+                                    
+                            /* dispatch main loop - to realize resizes..*/
+                            while (g_main_context_pending (NULL))
+                                    g_main_context_iteration (NULL, FALSE);
+                                    
+                            /* claim as handled, so that WM_SIZE and WM_MOVE are avoided */
+                            return_val = TRUE;
+                            *ret_valp = 1;
+                    }
+            }
+            break;
 
     case WM_CLOSE:
       GDK_NOTE (EVENTS, g_print ("WM_CLOSE: %p\n", msg->hwnd));
