diff options
author | Tor Lillqvist <tml@iki.fi> | 2000-10-09 19:49:42 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 2000-10-09 19:49:42 +0000 |
commit | 658b4b1da879a76328b779676b34c0c15b41596d (patch) | |
tree | c585422c20b397cb79411b2d7e1ab34566118691 /gdk/win32 | |
parent | ea708d50f289d7c1494c557596e8dd28b916187e (diff) | |
download | gtk+-658b4b1da879a76328b779676b34c0c15b41596d.tar.gz |
Update.
2000-10-09 Tor Lillqvist <tml@iki.fi>
* README.win32: Update.
* gdk/win32/gdkgeometry-win32.c (gdk_window_clip_changed): Add two
lines that had been deleted by mistake (?).
* gdk/win32/gdkcursor-win32.c (gdk_cursor_new_from_pixmap): Handle
also the case fg==white and bg==black (but still not randomly
coloured cursors). Thanks to Wolfgang Sourdeau.
* gdk/win32/*.c: Silence gcc -Wall.
* gtk/gtk.def: Add missing entry points.
Fixes by Hans Breuer:
* gdk/makefile.msc
* gdk/win32/makefile.msc: Update.
* gdk/testgdk.c: If compiling with debugging (with _DEBUG defined,
some MSVC thing, presumably), cause breakpoint on failures. Add
GDK_NOR case. Call g_log_set_always_fatal.
* gdk/win32/gdkwin32id.c (gdk_win32_handle_table_insert): Handle
should be pased by reference.
* gdk/win32/gdkprivate-win32.h: Correct declaration accordingly.
* gdk/win32/*.c: Correct calls to gdk_win32_handle_table_insert.
* gdk/win32/gdkevents-win32.c
* gdk/win32/gdkwindow-win32.c: Handle WM_CREATE.
* gdk/win32/gdkgc-win32.c: Fix mixups of drawable and
implementation object.
* gdk/win32/gdkimage-win32.c (gdk_image_get): Handle drawables,
not just windows.
* gdk/win32/gdkpixmap-win32.c (gdk_pixmap_impl_win32_finalize):
Use the wrapper object.
Diffstat (limited to 'gdk/win32')
-rw-r--r-- | gdk/win32/gdkcursor-win32.c | 39 | ||||
-rw-r--r-- | gdk/win32/gdkdnd-win32.c | 17 | ||||
-rw-r--r-- | gdk/win32/gdkevents-win32.c | 26 | ||||
-rw-r--r-- | gdk/win32/gdkgc-win32.c | 8 | ||||
-rw-r--r-- | gdk/win32/gdkgeometry-win32.c | 18 | ||||
-rw-r--r-- | gdk/win32/gdkimage-win32.c | 4 | ||||
-rw-r--r-- | gdk/win32/gdkinput-win32.c | 9 | ||||
-rw-r--r-- | gdk/win32/gdkpixmap-win32.c | 22 | ||||
-rw-r--r-- | gdk/win32/gdkprivate-win32.h | 15 | ||||
-rw-r--r-- | gdk/win32/gdkwin32.h | 3 | ||||
-rw-r--r-- | gdk/win32/gdkwin32id.c | 5 | ||||
-rw-r--r-- | gdk/win32/gdkwindow-win32.c | 46 | ||||
-rw-r--r-- | gdk/win32/makefile.msc | 11 |
13 files changed, 164 insertions, 59 deletions
diff --git a/gdk/win32/gdkcursor-win32.c b/gdk/win32/gdkcursor-win32.c index 763bdb3887..95da391243 100644 --- a/gdk/win32/gdkcursor-win32.c +++ b/gdk/win32/gdkcursor-win32.c @@ -122,7 +122,7 @@ gdk_cursor_new (GdkCursorType cursor_type) if (hcursor == NULL) WIN32_API_FAILED ("LoadCursor"); GDK_NOTE (MISC, g_print ("gdk_cursor_new: %#x %d\n", - hcursor, cursor_type)); + (guint) hcursor, cursor_type)); } else { @@ -140,6 +140,14 @@ gdk_cursor_new (GdkCursorType cursor_type) return cursor; } +static gboolean +color_is_white (GdkColor *color) +{ + return (color->red == 0xFFFF + && color->green == 0xFFFF + && color->blue == 0xFFFF); +} + GdkCursor* gdk_cursor_new_from_pixmap (GdkPixmap *source, GdkPixmap *mask, @@ -157,6 +165,7 @@ gdk_cursor_new_from_pixmap (GdkPixmap *source, gint width, height, cursor_width, cursor_height; guchar residue; gint ix, iy; + const gboolean bg_is_white = color_is_white (bg); g_return_val_if_fail (GDK_IS_PIXMAP (source), NULL); g_return_val_if_fail (GDK_IS_PIXMAP (mask), NULL); @@ -193,7 +202,13 @@ gdk_cursor_new_from_pixmap (GdkPixmap *source, /* 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. + * bg == white, *or* the other way around. Random colours won't work. + * (Well, you will get a cursor, but not in those colours.) + */ + + /* Note: The comments below refer to the case fg==black and + * bg==white, as that was what was implemented first. The fg==white + * (the "if (fg->pixel)" branches) case was added later. */ /* First set masked-out source bits, as all source bits matter on Windoze. @@ -205,7 +220,10 @@ gdk_cursor_new_from_pixmap (GdkPixmap *source, q = (guchar *) mask_image->mem + iy*mask_image->bpl; for (ix = 0; ix < ((width-1)/8+1); ix++) - *p++ |= ~(*q++); + if (bg_is_white) + *p++ |= ~(*q++); + else + *p++ &= *q++; } /* XOR mask is initialized to zero */ @@ -217,7 +235,11 @@ gdk_cursor_new_from_pixmap (GdkPixmap *source, q = xor_mask + iy*cursor_width/8; for (ix = 0; ix < ((width-1)/8+1); ix++) - *q++ = ~(*p++); + if (bg_is_white) + *q++ = ~(*p++); + else + *q++ = *p++; + q[-1] &= ~residue; /* Clear left-over bits */ } @@ -232,6 +254,7 @@ gdk_cursor_new_from_pixmap (GdkPixmap *source, for (ix = 0; ix < ((width-1)/8+1); ix++) *q++ = ~(*p++); + q[-1] |= residue; /* Set left-over bits */ } @@ -240,11 +263,11 @@ gdk_cursor_new_from_pixmap (GdkPixmap *source, GDK_NOTE (MISC, g_print ("gdk_cursor_new_from_pixmap: " "%#x (%dx%d) %#x (%dx%d) = %#x (%dx%d)\n", - GDK_PIXMAP_HBITMAP (source), + (guint) GDK_PIXMAP_HBITMAP (source), source_impl->width, source_impl->height, - GDK_PIXMAP_HBITMAP (mask), + (guint) GDK_PIXMAP_HBITMAP (mask), mask_impl->width, mask_impl->height, - hcursor, cursor_width, cursor_height)); + (guint) hcursor, cursor_width, cursor_height)); g_free (xor_mask); g_free (and_mask); @@ -270,7 +293,7 @@ _gdk_cursor_destroy (GdkCursor *cursor) private = (GdkCursorPrivate *) cursor; GDK_NOTE (MISC, g_print ("_gdk_cursor_destroy: %#x\n", - (cursor->type == GDK_CURSOR_IS_PIXMAP) ? private->hcursor : 0)); + (cursor->type == GDK_CURSOR_IS_PIXMAP) ? (guint) private->hcursor : 0)); if (cursor->type == GDK_CURSOR_IS_PIXMAP) if (!DestroyCursor (private->hcursor)) diff --git a/gdk/win32/gdkdnd-win32.c b/gdk/win32/gdkdnd-win32.c index 43e135599e..42e2cd307e 100644 --- a/gdk/win32/gdkdnd-win32.c +++ b/gdk/win32/gdkdnd-win32.c @@ -791,7 +791,7 @@ target_context_new (void) result->context = gdk_drag_context_new (); result->context->is_source = FALSE; - GDK_NOTE (DND, g_print ("target_context_new: %#x\n", result)); + GDK_NOTE (DND, g_print ("target_context_new: %p\n", result)); return result; } @@ -810,7 +810,7 @@ source_context_new (void) result->context = gdk_drag_context_new (); result->context->is_source = TRUE; - GDK_NOTE (DND, g_print ("source_context_new: %#x\n", result)); + GDK_NOTE (DND, g_print ("source_context_new: %p\n", result)); return result; } @@ -951,7 +951,7 @@ gdk_dropfiles_filter (GdkXEvent *xev, MSG *msg = (MSG *) xev; HANDLE hdrop; POINT pt; - gint nfiles, i, k; + gint nfiles, i; guchar fileName[MAX_PATH], linkedFile[MAX_PATH]; if (text_uri_list_atom == GDK_NONE) @@ -959,7 +959,7 @@ gdk_dropfiles_filter (GdkXEvent *xev, if (msg->message == WM_DROPFILES) { - GDK_NOTE (DND, g_print ("WM_DROPFILES: %#x\n", msg->hwnd)); + GDK_NOTE (DND, g_print ("WM_DROPFILES: %#x\n", (guint) msg->hwnd)); context = gdk_drag_context_new (); private = PRIVATE_DATA (context); @@ -1075,9 +1075,9 @@ GdkDragContext * gdk_drag_begin (GdkWindow *window, GList *targets) { - GList *tmp_list; source_drag_context *ctx; #ifdef OLE2_DND + GList *tmp_list; data_object *dobj; HRESULT hResult; DWORD dwEffect; @@ -1149,12 +1149,11 @@ gdk_drag_find_window (GdkDragContext *context, GdkWindow **dest_window, GdkDragProtocol *protocol) { - GdkDragContextPrivateWin32 *private = PRIVATE_DATA (context); HWND recipient; POINT pt; GDK_NOTE (DND, g_print ("gdk_drag_find_window: %#x +%d+%d\n", - (drag_window ? GDK_WINDOW_HWND (drag_window) : 0), + (drag_window ? (guint) GDK_WINDOW_HWND (drag_window) : 0), x_root, y_root)); pt.x = x_root; @@ -1164,7 +1163,7 @@ gdk_drag_find_window (GdkDragContext *context, *dest_window = NULL; else { - *dest_window = gdk_win32_handle_table_lookup (recipient); + *dest_window = gdk_win32_handle_table_lookup (GPOINTER_TO_UINT(recipient)); if (*dest_window) gdk_drawable_ref (*dest_window); *protocol = GDK_DRAG_PROTO_WIN32_DROPFILES; @@ -1266,7 +1265,7 @@ gdk_window_register_dnd (GdkWindow *window) g_return_if_fail (window != NULL); GDK_NOTE (DND, g_print ("gdk_window_register_dnd: %#x\n", - GDK_WINDOW_HWND (window))); + (guint) GDK_WINDOW_HWND (window))); /* 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 diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index c211463b04..d63ce1af85 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -1197,7 +1197,7 @@ propagate (GdkWindow **window, if ((*doesnt_want_it) (GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (*window)->impl)->event_mask, msg)) { /* Owner doesn't want it, propagate to parent. */ - if (GDK_WINDOW (GDK_WINDOW_OBJECT (window)->parent) == gdk_parent_root) + if (GDK_WINDOW (GDK_WINDOW_OBJECT (*window)->parent) == gdk_parent_root) { /* No parent; check if grabbed */ if (grab_window != NULL) @@ -1396,6 +1396,30 @@ gdk_event_translate (GdkEvent *event, PostMessage (msg->hwnd, msg->message, msg->wParam, msg->lParam); } +#ifndef WITHOUT_WM_CREATE + else if (WM_CREATE == msg->message) + { + window = (UNALIGNED GdkWindow*) (((LPCREATESTRUCT) msg->lParam)->lpCreateParams); + GDK_WINDOW_HWND (window) = msg->hwnd; + GDK_NOTE (EVENTS, g_print ("gdk_event_translate: created %#x\n", + (guint) msg->hwnd)); +# if 0 + /* This should handle allmost all the other window==NULL cases. + * This code is executed while gdk_window_new is in it's + * CreateWindowEx call. + * Don't insert xid there a second time, if it's done here. + */ + gdk_drawable_ref (window); + gdk_win32_handle_table_insert (&GDK_WINDOW_HWND(window), window); +# endif + } + else + { + GDK_NOTE (EVENTS, g_print ("gdk_event_translate: %s for %#x (NULL)\n", + gdk_win32_message_name(msg->message), + (guint) msg->hwnd)); + } +#endif return FALSE; } diff --git a/gdk/win32/gdkgc-win32.c b/gdk/win32/gdkgc-win32.c index 1d6da1d23e..f441106cae 100644 --- a/gdk/win32/gdkgc-win32.c +++ b/gdk/win32/gdkgc-win32.c @@ -945,9 +945,9 @@ gdk_win32_hdc_get (GdkDrawable *drawable, g_assert (win32_gc->hdc == NULL); - win32_gc->hwnd = GDK_DRAWABLE_HANDLE (drawable); - - if (GDK_IS_PIXMAP (drawable)) + win32_gc->hwnd = GDK_DRAWABLE_IMPL_WIN32(drawable)->handle; + + if (GDK_IS_PIXMAP_IMPL_WIN32 (drawable)) { if ((win32_gc->hdc = CreateCompatibleDC (NULL)) == NULL) WIN32_GDI_FAILED ("CreateCompatibleDC"), ok = FALSE; @@ -1151,7 +1151,7 @@ gdk_win32_hdc_release (GdkDrawable *drawable, WIN32_GDI_FAILED ("UnrealizeObject"); } #endif - if (GDK_IS_PIXMAP (drawable)) + if (GDK_IS_PIXMAP_IMPL_WIN32 (drawable)) { if (!DeleteDC (win32_gc->hdc)) WIN32_GDI_FAILED ("DeleteDC"); diff --git a/gdk/win32/gdkgeometry-win32.c b/gdk/win32/gdkgeometry-win32.c index 20c34ae026..ffc015f997 100644 --- a/gdk/win32/gdkgeometry-win32.c +++ b/gdk/win32/gdkgeometry-win32.c @@ -682,8 +682,8 @@ gdk_window_queue_translation (GdkWindow *window, item->u.translate.dx = dx; item->u.translate.dy = dy; - GDK_NOTE (EVENTS, g_print ("gdk_window_queue_translation %#x %d %d,%d\n", - GDK_WINDOW_HWND (window), + GDK_NOTE (EVENTS, g_print ("gdk_window_queue_translation %#x %ld %d,%d\n", + (guint) GDK_WINDOW_HWND (window), item->serial, dx, dy)); @@ -702,8 +702,8 @@ _gdk_windowing_window_queue_antiexpose (GdkWindow *window, item->type = GDK_WINDOW_QUEUE_ANTIEXPOSE; item->u.antiexpose.area = area; - GDK_NOTE (EVENTS, g_print ("_gdk_windowing_window_queue_antiexpose %#x %d %dx%d@+%d+%d\n", - GDK_WINDOW_HWND (window), + GDK_NOTE (EVENTS, g_print ("_gdk_windowing_window_queue_antiexpose %#x %ld %dx%d@+%d+%d\n", + (guint) GDK_WINDOW_HWND (window), item->serial, area->extents.x2 - area->extents.x1, area->extents.y2 - area->extents.y1, @@ -727,8 +727,8 @@ _gdk_window_process_expose (GdkWindow *window, impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl); - GDK_NOTE (EVENTS, g_print ("_gdk_window_process_expose %#x %d %dx%d@+%d+%d\n", - GDK_WINDOW_HWND (window), serial, + GDK_NOTE (EVENTS, g_print ("_gdk_window_process_expose %#x %ld %dx%d@+%d+%d\n", + (guint) GDK_WINDOW_HWND (window), serial, area->width, area->height, area->x, area->y)); while (tmp_list) @@ -802,8 +802,6 @@ gdk_window_tmp_reset_bg (GdkWindow *window) if (obj->bg_pixmap) { - HBITMAP hbitmap; - /* ??? */ } else @@ -825,6 +823,9 @@ gdk_window_clip_changed (GdkWindow *window, if (((GdkWindowObject *)window)->input_only) return; + obj = (GdkWindowObject *) window; + impl = GDK_WINDOW_IMPL_WIN32 (obj->impl); + old_clip_region = gdk_region_rectangle (old_clip); new_clip_region = gdk_region_rectangle (new_clip); @@ -845,4 +846,3 @@ gdk_window_clip_changed (GdkWindow *window, gdk_region_destroy (new_clip_region); gdk_region_destroy (old_clip_region); } - diff --git a/gdk/win32/gdkimage-win32.c b/gdk/win32/gdkimage-win32.c index c9603158c7..54ac0d455f 100644 --- a/gdk/win32/gdkimage-win32.c +++ b/gdk/win32/gdkimage-win32.c @@ -344,9 +344,9 @@ gdk_image_get (GdkWindow *window, BITMAP bm; int i; - g_return_val_if_fail (GDK_IS_WINDOW (window), NULL); + g_return_val_if_fail (GDK_IS_DRAWABLE (window), NULL); - if (GDK_WINDOW_DESTROYED (window)) + if (GDK_IS_WINDOW (window) && GDK_WINDOW_DESTROYED (window)) return NULL; GDK_NOTE (MISC, g_print ("gdk_image_get: %#x %dx%d@+%d+%d\n", diff --git a/gdk/win32/gdkinput-win32.c b/gdk/win32/gdkinput-win32.c index c1256e4fa5..c6e0c9fed5 100644 --- a/gdk/win32/gdkinput-win32.c +++ b/gdk/win32/gdkinput-win32.c @@ -31,6 +31,7 @@ #include <stdio.h> #include <math.h> +#include "gdk.h" #include "gdkinput.h" #include "gdkinternals.h" #include "gdkprivate-win32.h" @@ -84,9 +85,6 @@ gdk_device_get_history (GdkDevice *device, GdkTimeCoord ***events, gint *n_events) { - GdkTimeCoord **coords; - int i; - g_return_val_if_fail (window != NULL, FALSE); g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE); g_return_val_if_fail (events != NULL, FALSE); @@ -720,7 +718,9 @@ _gdk_input_other_event (GdkEvent *event, GdkWindow *window) { #ifdef HAVE_WINTAB +#if !USE_SYSCONTEXT GdkWindow *current_window; +#endif GdkWindowObject *obj; GdkWindowImplWin32 *impl; GdkInputWindow *input_window; @@ -729,7 +729,6 @@ _gdk_input_other_event (GdkEvent *event, POINT pt; PACKET packet; - gint return_val; gint k; gint x, y; @@ -892,7 +891,7 @@ _gdk_input_other_event (GdkEvent *event, & (GDK_BUTTON1_MASK | GDK_BUTTON2_MASK | GDK_BUTTON3_MASK | GDK_BUTTON4_MASK | GDK_BUTTON5_MASK)); - GDK_NOTE (EVENTS, g_print ("WINTAB button %s:%d %g,%g %g %g,%g\n", + GDK_NOTE (EVENTS, g_print ("WINTAB button %s:%d %g,%g\n", (event->button.type == GDK_BUTTON_PRESS ? "press" : "release"), event->button.button, diff --git a/gdk/win32/gdkpixmap-win32.c b/gdk/win32/gdkpixmap-win32.c index 169132403d..c67e0f3595 100644 --- a/gdk/win32/gdkpixmap-win32.c +++ b/gdk/win32/gdkpixmap-win32.c @@ -106,12 +106,12 @@ gdk_pixmap_impl_win32_finalize (GObject *object) GdkPixmap *wrapper = GDK_PIXMAP (GDK_DRAWABLE_IMPL_WIN32 (impl)->wrapper); GDK_NOTE (MISC, g_print ("gdk_pixmap_impl_win32_finalize: %#x\n", - GDK_PIXMAP_HBITMAP (object))); + (guint) GDK_PIXMAP_HBITMAP (wrapper))); - if (!DeleteObject (GDK_PIXMAP_HBITMAP (object))) + if (!DeleteObject (GDK_PIXMAP_HBITMAP (wrapper))) WIN32_GDI_FAILED ("DeleteObject"); - gdk_win32_handle_table_remove (GDK_PIXMAP_HBITMAP (object)); + gdk_win32_handle_table_remove (GDK_PIXMAP_HBITMAP (wrapper)); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -268,9 +268,10 @@ gdk_pixmap_new (GdkWindow *window, } ReleaseDC (GDK_WINDOW_HWND (window), hdc); - GDK_NOTE (MISC, g_print ("... = %#x\n", GDK_PIXMAP_HBITMAP (pixmap))); + GDK_NOTE (MISC, g_print ("... = %#x\n", + (guint) GDK_PIXMAP_HBITMAP (pixmap))); - gdk_win32_handle_table_insert (GDK_PIXMAP_HBITMAP (pixmap), pixmap); + gdk_win32_handle_table_insert (&GDK_PIXMAP_HBITMAP (pixmap), pixmap); return pixmap; } @@ -352,12 +353,13 @@ gdk_bitmap_create_from_data (GdkWindow *window, draw_impl->handle = CreateBitmap (width, height, 1, 1, bits); GDK_NOTE (MISC, g_print ("gdk_bitmap_create_from_data: %dx%d = %#x\n", - width, height, GDK_PIXMAP_HBITMAP (pixmap))); + width, height, + (guint) GDK_PIXMAP_HBITMAP (pixmap))); g_free (bits); draw_impl->colormap = NULL; - gdk_win32_handle_table_insert (GDK_PIXMAP_HBITMAP (pixmap), pixmap); + gdk_win32_handle_table_insert (&GDK_PIXMAP_HBITMAP (pixmap), pixmap); return pixmap; } @@ -389,7 +391,7 @@ gdk_pixmap_create_from_data (GdkWindow *window, GDK_NOTE (MISC, g_print ("gdk_pixmap_create_from_data: %dx%dx%d = %#x\n", width, height, depth, - GDK_PIXMAP_HBITMAP (result))); + (guint) GDK_PIXMAP_HBITMAP (result))); return result; } @@ -402,7 +404,7 @@ gdk_pixmap_foreign_new (GdkNativeWindow anid) GdkPixmapImplWin32 *pix_impl; HBITMAP hbitmap; SIZE size; - unsigned int x_ret, y_ret, w_ret, h_ret, bw_ret, depth_ret; + unsigned int w_ret, h_ret; /* check to make sure we were passed a HBITMAP */ g_return_val_if_fail(GetObjectType ((HGDIOBJ) anid) == OBJ_BITMAP, NULL); @@ -427,7 +429,7 @@ gdk_pixmap_foreign_new (GdkNativeWindow anid) pix_impl->width = w_ret; pix_impl->height = h_ret; - gdk_win32_handle_table_insert (GDK_PIXMAP_HBITMAP (pixmap), pixmap); + gdk_win32_handle_table_insert (&GDK_PIXMAP_HBITMAP (pixmap), pixmap); return pixmap; } diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h index 98cf2a01df..6f65b74f2a 100644 --- a/gdk/win32/gdkprivate-win32.h +++ b/gdk/win32/gdkprivate-win32.h @@ -30,7 +30,20 @@ #include <gdk/gdkprivate.h> #include "gdkwin32.h" -void gdk_win32_handle_table_insert (HANDLE handle, +/* Routines from gdkgeometry-win32.c */ +void +_gdk_window_init_position (GdkWindow *window); +void +_gdk_window_move_resize_child (GdkWindow *window, + gint x, + gint y, + gint width, + gint height); + +void gdk_win32_selection_init (void); +void gdk_win32_dnd_exit (void); + +void gdk_win32_handle_table_insert (HANDLE *handle, gpointer data); void gdk_win32_handle_table_remove (HANDLE handle); diff --git a/gdk/win32/gdkwin32.h b/gdk/win32/gdkwin32.h index 0f30d4d362..135d8c4f9e 100644 --- a/gdk/win32/gdkwin32.h +++ b/gdk/win32/gdkwin32.h @@ -110,6 +110,9 @@ extern "C" { #endif /* Missing messages */ +#ifndef WM_SYNCPAINT +#define WM_SYNCPAINT 0x88 +#endif #ifndef WM_MOUSEWHEEL #define WM_MOUSEWHEEL 0X20A #endif diff --git a/gdk/win32/gdkwin32id.c b/gdk/win32/gdkwin32id.c index 7aab546c4f..88d126060f 100644 --- a/gdk/win32/gdkwin32id.c +++ b/gdk/win32/gdkwin32id.c @@ -43,9 +43,8 @@ gdk_handle_compare (HANDLE *a, return (*a == *b); } -/* Note that the handle is passed by value to this function! */ void -gdk_win32_handle_table_insert (HANDLE handle, +gdk_win32_handle_table_insert (HANDLE *handle, gpointer data) { g_return_if_fail (handle != NULL); @@ -54,7 +53,7 @@ gdk_win32_handle_table_insert (HANDLE handle, handle_ht = g_hash_table_new ((GHashFunc) gdk_handle_hash, (GCompareFunc) gdk_handle_compare); - g_hash_table_insert (handle_ht, &handle, data); + g_hash_table_insert (handle_ht, handle, data); } void diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c index 92ac2dfd17..7ab5ce67ef 100644 --- a/gdk/win32/gdkwindow-win32.c +++ b/gdk/win32/gdkwindow-win32.c @@ -222,7 +222,7 @@ _gdk_windowing_window_init (void) impl->width = width; impl->height = height; - gdk_win32_handle_table_insert (gdk_root_window, gdk_parent_root); + gdk_win32_handle_table_insert (&gdk_root_window, gdk_parent_root); } /* The Win API function AdjustWindowRect may return negative values @@ -570,6 +570,7 @@ gdk_window_new (GdkWindow *parent, WideCharToMultiByte (GetACP (), 0, wctitle, -1, mbtitle, 3*titlelen, NULL, NULL); +#ifdef WITHOUT_WM_CREATE draw_impl->handle = CreateWindowEx (dwExStyle, MAKEINTRESOURCE(klass), mbtitle, @@ -580,6 +581,43 @@ gdk_window_new (GdkWindow *parent, NULL, gdk_app_hmodule, NULL); +#else + { + HWND hwndNew = + CreateWindowEx (dwExStyle, + MAKEINTRESOURCE(klass), + mbtitle, + dwStyle, + x, y, + width, height, + hparent, + NULL, + gdk_app_hmodule, + window); + if (GDK_WINDOW_HWND (window) != hwndNew) + { + g_warning("gdk_window_new: gdk_event_translate::WM_CREATE (%#x, %#x) HWND mismatch.", + GDK_WINDOW_HWND (window), hwndNew); + + /* HB: IHMO due to a race condition the handle was increased by + * one, which causes much trouble. Because I can't find the + * real bug, try to workaround it ... + * To reproduce: compile with MSVC 5, DEBUG=1 + */ +# if 0 + gdk_win32_handle_table_remove (GDK_WINDOW_HWND (window)); + GDK_WINDOW_HWND (window) = hwndNew; + gdk_win32_handle_table_insert (&GDK_WINDOW_HWND (window), window); +# else + /* the old behaviour, but with warning */ + GDK_WINDOW_HWND (window) = hwndNew; +# endif + + } + } + gdk_drawable_ref (window); + gdk_win32_handle_table_insert (&GDK_WINDOW_HWND (window), window); +#endif GDK_NOTE (MISC, g_print ("gdk_window_new: %s %s %dx%d@+%d+%d %#x = %#x\n" @@ -606,8 +644,10 @@ gdk_window_new (GdkWindow *parent, return NULL; } +#ifdef WITHOUT_WM_CREATE gdk_drawable_ref (window); - gdk_win32_handle_table_insert (GDK_WINDOW_HWND (window), window); + gdk_win32_handle_table_insert (&GDK_WINDOW_HWND (window), window); +#endif gdk_window_set_cursor (window, ((attributes_mask & GDK_WA_CURSOR) ? (attributes->cursor) : @@ -659,7 +699,7 @@ gdk_window_foreign_new (GdkNativeWindow anid) private->depth = gdk_visual_get_system ()->depth; gdk_drawable_ref (window); - gdk_win32_handle_table_insert (GDK_WINDOW_HWND (window), window); + gdk_win32_handle_table_insert (&GDK_WINDOW_HWND (window), window); return window; } diff --git a/gdk/win32/makefile.msc b/gdk/win32/makefile.msc index 5a853444c4..1b4bed3063 100644 --- a/gdk/win32/makefile.msc +++ b/gdk/win32/makefile.msc @@ -8,6 +8,9 @@ WTKIT = ..\..\..\wtkit126 # Nothing much configurable below +TOP = ../../.. +!INCLUDE $(TOP)/build/win32/make.msc + !IFNDEF DEBUG # Full optimization: OPTIMIZE = -Ox -MD @@ -21,11 +24,9 @@ CC = cl -G5 -GF $(OPTIMIZE) -W3 -nologo LDFLAGS = /link /machine:ix86 $(LINKDEBUG) -GLIB_VER=1.3 GTK_VER=1.3 -GLIB = ..\..\..\glib -CFLAGS = -I. -I.. -I..\.. -I$(WTKIT)\include -I$(GLIB) -DG_ENABLE_DEBUG -DHAVE_CONFIG_H -DGDK_VERSION=\"$(GTK_VER)\" +CFLAGS = -I. -I.. -I..\.. $(GLIB_CFLAGS) $(PANGO_CFLAGS) -I$(WTKIT)\include -I$(GLIB) -DG_ENABLE_DEBUG -DHAVE_CONFIG_H -DGDK_VERSION=\"$(GTK_VER)\" all: \ ..\..\config.h \ @@ -46,11 +47,13 @@ gdk_win32_OBJECTS = \ gdkglobals-win32.obj \ gdkim-win32.obj \ gdkimage-win32.obj \ + gdkinput.obj \ gdkinput-win32.obj \ gdkmain-win32.obj \ + gdkpango-win32.obj \ gdkpixmap-win32.obj \ gdkproperty-win32.obj \ - gdkregion-win32.obj \ +# gdkregion-win32.obj \ gdkselection-win32.obj \ gdkvisual-win32.obj \ gdkwin32id.obj \ |