diff options
author | Tor Lillqvist <tml@iki.fi> | 2003-07-29 23:35:40 +0000 |
---|---|---|
committer | Tor Lillqvist <tml@src.gnome.org> | 2003-07-29 23:35:40 +0000 |
commit | 09f777e5ea8aeeafe4ad626585c8ef176b2a7b7e (patch) | |
tree | 034c190db91697be5f311da24516a1d6e1092dca /gdk/win32 | |
parent | 05ce8747c2b45b5cda6552e67ec29415c4034f28 (diff) | |
download | gdk-pixbuf-09f777e5ea8aeeafe4ad626585c8ef176b2a7b7e.tar.gz |
Fix for #108007, #112402, #117042: There was confusion in gdk/win32 at
2003-07-29 Tor Lillqvist <tml@iki.fi>
Fix for #108007, #112402, #117042: There was confusion in
gdk/win32 at various places whether a window position refers to
the decoration position or the client area position. Also whether
window size includes decorations or not.
The correct interpretation apparently is that in GDK (like in
X11), a top-level window position means the decoration's position,
but size means the window's inner size (client area size). In the
Win32 API, the window size usually includes the decorations,
though.
* gdk/win32/gdkevents-win32.c (decode_key_lparam): Move inside
#ifdef G_ENABLE_DEBUG.
(handle_configure_event): New function, generates GDK_CONFIGURE
events from WM_SIZE and WM_MOVE messages. Even if no event is
generated because of the event mask, still set the private
position and size fields. Calculate position and size correctly.
(gdk_event_translate): Call handle_configure_event().
* gdk/win32/gdkgeometry-win32.c: Cosmetics.
* gdk/win32/gdkwindow-win32.c: Use GDI_CALL() and API_CALL()
macros. Cosmetic debugging output changes.
(SafeAdjustWindowRectEx): Remove. If an application wants to
locate a window outside of the screen, it's not GDK's business to
prevent it. And anyway, with multiple monitors, negative
coordinates are perfectly normal.
(gdk_window_new): Adjust the window size for decorations after
_gdk_window_init_position() has done its job. (But the big window
code currently is presumably broken on Win32 anyway.)
(gdk_window_move): The position passed in is supposed to be that
of the window border, so don't need to adjust for decorations.
(gdk_window_resize, gdk_window_move_resize): Simplify somewhat.
Diffstat (limited to 'gdk/win32')
-rw-r--r-- | gdk/win32/gdkevents-win32.c | 119 | ||||
-rw-r--r-- | gdk/win32/gdkgeometry-win32.c | 16 | ||||
-rw-r--r-- | gdk/win32/gdkwindow-win32.c | 361 |
3 files changed, 236 insertions, 260 deletions
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index 0e4fb543e..7aa0715ad 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -979,6 +979,25 @@ print_event (GdkEvent *event) g_print ("\n"); } +static char * +decode_key_lparam (LPARAM lParam) +{ + static char buf[100]; + char *p = buf; + + if (HIWORD (lParam) & KF_UP) + p += g_sprintf (p, "KF_UP "); + if (HIWORD (lParam) & KF_REPEAT) + p += g_sprintf (p, "KF_REPEAT "); + if (HIWORD (lParam) & KF_ALTDOWN) + p += g_sprintf (p, "KF_ALTDOWN "); + if (HIWORD (lParam) & KF_EXTENDED) + p += g_sprintf (p, "KF_EXTENDED "); + p += g_sprintf (p, "sc:%d rep:%d", LOBYTE (HIWORD (lParam)), LOWORD (lParam)); + + return buf; +} + #endif static void @@ -1552,23 +1571,53 @@ doesnt_want_scroll (gint mask, #endif } -static char * -decode_key_lparam (LPARAM lParam) +static void +handle_configure_event (MSG *msg, + GdkWindow *window) { - static char buf[100]; - char *p = buf; + RECT client_rect, outer_rect; + POINT point; + LONG style, exstyle; - if (HIWORD (lParam) & KF_UP) - p += g_sprintf (p, "KF_UP "); - if (HIWORD (lParam) & KF_REPEAT) - p += g_sprintf (p, "KF_REPEAT "); - if (HIWORD (lParam) & KF_ALTDOWN) - p += g_sprintf (p, "KF_ALTDOWN "); - if (HIWORD (lParam) & KF_EXTENDED) - p += g_sprintf (p, "KF_EXTENDED "); - p += g_sprintf (p, "sc:%d rep:%d", LOBYTE (HIWORD (lParam)), LOWORD (lParam)); + 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; + + point.x = client_rect.left; + point.y = client_rect.top; + ClientToScreen (msg->hwnd, &point); + outer_rect.left = point.x; + outer_rect.top = point.y; + + point.x = client_rect.right; + point.y = client_rect.bottom; + ClientToScreen (msg->hwnd, &point); + outer_rect.right = point.x; + outer_rect.bottom = point.y; + + style = GetWindowLong (msg->hwnd, GWL_STYLE); + exstyle = GetWindowLong (msg->hwnd, GWL_EXSTYLE); + + API_CALL (AdjustWindowRectEx, (&outer_rect, style, + FALSE, exstyle)); + + ((GdkWindowObject *) window)->x = outer_rect.left; + ((GdkWindowObject *) window)->y = outer_rect.top; + + if (((GdkWindowObject *) window)->event_mask & GDK_STRUCTURE_MASK) + { + GdkEvent *event = gdk_event_new (GDK_CONFIGURE); + event->configure.window = window; - return buf; + event->configure.width = client_rect.right - client_rect.left; + event->configure.height = client_rect.bottom - client_rect.top; + + event->configure.x = outer_rect.left; + event->configure.y = outer_rect.top; + + append_event (gdk_drawable_get_display (window), event); + } } static void @@ -1777,7 +1826,6 @@ gdk_event_translate (GdkDisplay *display, DWORD pidThis; PAINTSTRUCT paintstruct; HDC hdc; - RECT rect; POINT pt; MINMAXINFO *mmi; HWND hwnd; @@ -2752,26 +2800,9 @@ gdk_event_translate (GdkDisplay *display, GdkWindowState withdrawn_bit = IsWindowVisible (msg->hwnd) ? GDK_WINDOW_STATE_WITHDRAWN : 0; - if ((((GdkWindowObject *) window)->event_mask & GDK_STRUCTURE_MASK) && - !GDK_WINDOW_DESTROYED (window)) - { - event = gdk_event_new (GDK_CONFIGURE); - event->configure.window = window; - pt.x = 0; - pt.y = 0; - ClientToScreen (msg->hwnd, &pt); - event->configure.x = pt.x; - event->configure.y = pt.y; - event->configure.width = LOWORD (msg->lParam); - event->configure.height = HIWORD (msg->lParam); - append_event (display, event); - } - - ((GdkWindowObject *) window)->x = event->configure.x; - ((GdkWindowObject *) window)->y = event->configure.y; - GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->width = event->configure.width; - GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->height = event->configure.height; - + if (!GDK_WINDOW_DESTROYED (window)) + handle_configure_event (msg, window); + if (msg->wParam == SIZE_RESTORED) gdk_synthesize_window_state (window, GDK_WINDOW_STATE_ICONIFIED | @@ -2835,29 +2866,13 @@ gdk_event_translate (GdkDisplay *display, msg->hwnd, GET_X_LPARAM (msg->lParam), GET_Y_LPARAM (msg->lParam))); - if (!(((GdkWindowObject *) window)->event_mask & GDK_STRUCTURE_MASK)) - break; - if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && !IsIconic (msg->hwnd) && IsWindowVisible (msg->hwnd)) { if (!GDK_WINDOW_DESTROYED (window)) - { - event = gdk_event_new (GDK_CONFIGURE); - event->configure.window = window; - event->configure.x = GET_X_LPARAM (msg->lParam); - event->configure.y = GET_Y_LPARAM (msg->lParam); - GetClientRect (msg->hwnd, &rect); - event->configure.width = rect.right; - event->configure.height = rect.bottom; + handle_configure_event (msg, window); - append_event (display, event); - } - ((GdkWindowObject *) window)->x = event->configure.x; - ((GdkWindowObject *) window)->y = event->configure.y; - GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->width = event->configure.width; - GDK_WINDOW_IMPL_WIN32 (((GdkWindowObject *) window)->impl)->height = event->configure.height; return_val = TRUE; } break; diff --git a/gdk/win32/gdkgeometry-win32.c b/gdk/win32/gdkgeometry-win32.c index 698610751..8a3dc8ab8 100644 --- a/gdk/win32/gdkgeometry-win32.c +++ b/gdk/win32/gdkgeometry-win32.c @@ -193,9 +193,9 @@ gdk_window_copy_area_scroll (GdkWindow *window, static void compute_intermediate_position (GdkWin32PositionInfo *position_info, GdkWin32PositionInfo *new_info, - gint d_xoffset, - gint d_yoffset, - GdkRectangle *new_position) + gint d_xoffset, + gint d_yoffset, + GdkRectangle *new_position) { gint new_x0, new_x1, new_y0, new_y1; @@ -578,8 +578,8 @@ _gdk_window_move_resize_child (GdkWindow *window, static void gdk_window_compute_position (GdkWindowImplWin32 *window, - GdkWindowParentPos *parent_pos, - GdkWin32PositionInfo *info) + GdkWindowParentPos *parent_pos, + GdkWin32PositionInfo *info) { GdkWindowObject *wrapper; int parent_x_offset; @@ -675,7 +675,7 @@ gdk_window_compute_position (GdkWindowImplWin32 *window, } static void -gdk_window_compute_parent_pos (GdkWindowImplWin32 *window, +gdk_window_compute_parent_pos (GdkWindowImplWin32 *window, GdkWindowParentPos *parent_pos) { GdkWindowObject *wrapper; @@ -923,8 +923,8 @@ _gdk_windowing_window_queue_antiexpose (GdkWindow *window, } void -_gdk_window_process_expose (GdkWindow *window, - GdkRegion *invalidate_region) +_gdk_window_process_expose (GdkWindow *window, + GdkRegion *invalidate_region) { GdkWindowImplWin32 *impl; GdkRegion *clip_region; diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c index bba3521b3..3e1c447ca 100644 --- a/gdk/win32/gdkwindow-win32.c +++ b/gdk/win32/gdkwindow-win32.c @@ -135,8 +135,7 @@ gdk_window_impl_win32_finalize (GObject *object) { if (GetCursor () == window_impl->hcursor) SetCursor (NULL); - if (!DestroyCursor (window_impl->hcursor)) - WIN32_GDI_FAILED("DestroyCursor"); + GDI_CALL (DestroyCursor, (window_impl->hcursor)); window_impl->hcursor = NULL; } @@ -263,33 +262,6 @@ get_default_title (void) return title; } -/* The Win API function AdjustWindowRect may return negative values - * resulting in obscured title bars. This helper function is coreccting it. - */ -static BOOL -SafeAdjustWindowRectEx (RECT* lpRect, - DWORD dwStyle, - BOOL bMenu, - DWORD dwExStyle) -{ - if (!AdjustWindowRectEx(lpRect, dwStyle, bMenu, dwExStyle)) - { - WIN32_API_FAILED ("AdjustWindowRectEx"); - 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; -} - /* RegisterGdkClass * is a wrapper function for RegisterWindowClassEx. * It creates at least one unique class for every @@ -427,6 +399,7 @@ gdk_window_new (GdkWindow *parent, GdkVisual *visual; const gchar *title; char *mbtitle; + gint window_width, window_height; g_return_val_if_fail (attributes != NULL, NULL); @@ -514,7 +487,7 @@ gdk_window_new (GdkWindow *parent, private->input_only = TRUE; draw_impl->colormap = gdk_colormap_get_system (); g_object_ref (draw_impl->colormap); - GDK_NOTE (MISC, g_print ("...GDK_INPUT_ONLY, system colormap\n")); + GDK_NOTE (MISC, g_print ("...GDK_INPUT_ONLY, system colormap")); } switch (private->window_type) @@ -551,22 +524,24 @@ gdk_window_new (GdkWindow *parent, g_assert_not_reached (); } + _gdk_window_init_position (GDK_WINDOW (private)); + if (private->window_type != GDK_WINDOW_CHILD) { - rect.left = private->x; - rect.top = private->y; - rect.right = rect.left + impl->width; - rect.bottom = rect.top + impl->height; + rect.left = rect.top = 0; + rect.right = impl->position_info.width; + rect.bottom = impl->position_info.height; - SafeAdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle); + AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle); - private->x = rect.left; - private->y = rect.top; - impl->width = rect.right - rect.left; - impl->height = rect.bottom - rect.top; + window_width = rect.right - rect.left; + window_height = rect.bottom - rect.top; + } + else + { + window_width = impl->position_info.width; + window_height = impl->position_info.height; } - - _gdk_window_init_position (GDK_WINDOW (private)); if (impl->position_info.big) private->guffaw_gravity = TRUE; @@ -601,7 +576,7 @@ gdk_window_new (GdkWindow *parent, ((attributes_mask & GDK_WA_X) ? impl->position_info.x : CW_USEDEFAULT), impl->position_info.y, - impl->position_info.width, impl->position_info.height, + window_width, window_height, hparent, NULL, _gdk_app_hmodule, @@ -616,7 +591,7 @@ gdk_window_new (GdkWindow *parent, ((attributes_mask & GDK_WA_X) ? impl->position_info.x : CW_USEDEFAULT), impl->position_info.y, - impl->position_info.width, impl->position_info.height, + window_width, window_height, hparent, NULL, _gdk_app_hmodule, @@ -647,15 +622,14 @@ gdk_window_new (GdkWindow *parent, gdk_win32_handle_table_insert (&GDK_WINDOW_HWND (window), window); #endif - GDK_NOTE (MISC, - g_print ("... \"%s\" %dx%d@+%d+%d %p = %p\n", - mbtitle, - impl->position_info.width, impl->position_info.height, - ((attributes_mask & GDK_WA_X) ? - impl->position_info.x : CW_USEDEFAULT), - impl->position_info.y, - hparent, - GDK_WINDOW_HWND (window))); + GDK_NOTE (MISC, g_print ("... \"%s\" %dx%d@+%d+%d %p = %p\n", + mbtitle, + window_width, window_height, + ((attributes_mask & GDK_WA_X) ? + impl->position_info.x : CW_USEDEFAULT), + impl->position_info.y, + hparent, + GDK_WINDOW_HWND (window))); g_free (mbtitle); @@ -749,7 +723,7 @@ _gdk_windowing_window_destroy (GdkWindow *window, g_return_if_fail (GDK_IS_WINDOW (window)); - GDK_NOTE (MISC, g_print ("_gdk_windowing_window_destroy %p\n", + GDK_NOTE (MISC, g_print ("_gdk_windowing_window_destroy: %p\n", GDK_WINDOW_HWND (window))); if (private->extension_events != 0) @@ -790,9 +764,9 @@ gdk_window_destroy_notify (GdkWindow *window) g_return_if_fail (GDK_IS_WINDOW (window)); GDK_NOTE (EVENTS, - g_print ("gdk_window_destroy_notify: %p %s\n", + g_print ("gdk_window_destroy_notify: %p%s\n", GDK_WINDOW_HWND (window), - (GDK_WINDOW_DESTROYED (window) ? "(destroyed)" : ""))); + (GDK_WINDOW_DESTROYED (window) ? " (destroyed)" : ""))); if (!GDK_WINDOW_DESTROYED (window)) { @@ -820,7 +794,7 @@ show_window_internal (GdkWindow *window, if (private->destroyed) return; - GDK_NOTE (MISC, g_print ("show_window_internal: %p %s%s%s\n", + GDK_NOTE (MISC, g_print ("show_window_internal: %p: %s%s%s\n", GDK_WINDOW_HWND (window), _gdk_win32_window_state_to_string (private->state), (raise ? " raise" : ""), @@ -919,7 +893,7 @@ gdk_window_hide (GdkWindow *window) if (private->destroyed) return; - GDK_NOTE (MISC, g_print ("gdk_window_hide: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_hide: %p: %s\n", GDK_WINDOW_HWND (window), _gdk_win32_window_state_to_string (private->state))); @@ -955,7 +929,7 @@ gdk_window_withdraw (GdkWindow *window) if (private->destroyed) return; - GDK_NOTE (MISC, g_print ("gdk_window_withdraw: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_withdraw: %p: %s\n", GDK_WINDOW_HWND (window), _gdk_win32_window_state_to_string (private->state))); @@ -969,36 +943,24 @@ gdk_window_move (GdkWindow *window, { GdkWindowObject *private = (GdkWindowObject *)window; GdkWindowImplWin32 *impl; - RECT rect; - LONG style, extended_style; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); - GDK_NOTE (MISC, g_print ("gdk_window_move: %p +%d+%d\n", + GDK_NOTE (MISC, g_print ("gdk_window_move: %p: +%d+%d\n", GDK_WINDOW_HWND (window), x, y)); impl = GDK_WINDOW_IMPL_WIN32 (private->impl); - + if (!GDK_WINDOW_DESTROYED (window)) { if (GDK_WINDOW_TYPE (private) == GDK_WINDOW_CHILD) _gdk_window_move_resize_child (window, x, y, - impl->width, impl->height); + impl->width, impl->height); else { - /* SetWindowPos uses non-client coordinates, we have client - * coordinates. Thus offset them. - */ - style = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE); - extended_style = GetWindowLong (GDK_WINDOW_HWND (window), GWL_EXSTYLE); - GetClientRect (GDK_WINDOW_HWND (window), &rect); - AdjustWindowRectEx (&rect, style, FALSE, extended_style); - - if (!SetWindowPos (GDK_WINDOW_HWND (window), NULL, - x + rect.left, y + rect.top, 0, 0, - SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER)) - WIN32_API_FAILED ("SetWindowPos"); + API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL, x, y, 0, 0, + SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER)); } } } @@ -1010,7 +972,6 @@ gdk_window_resize (GdkWindow *window, { GdkWindowObject *private = (GdkWindowObject*) window; GdkWindowImplWin32 *impl; - int x, y; g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); @@ -1020,7 +981,7 @@ gdk_window_resize (GdkWindow *window, if (height < 1) height = 1; - GDK_NOTE (MISC, g_print ("gdk_window_resize: %p %dx%d\n", + GDK_NOTE (MISC, g_print ("gdk_window_resize: %p: %dx%d\n", GDK_WINDOW_HWND (window), width, height)); impl = GDK_WINDOW_IMPL_WIN32 (private->impl); @@ -1032,32 +993,23 @@ gdk_window_resize (GdkWindow *window, width, height); else { - POINT pt; RECT rect; - DWORD dwStyle; - DWORD dwExStyle; + LONG style; + LONG exstyle; - pt.x = 0; - pt.y = 0; - ClientToScreen (GDK_WINDOW_HWND (window), &pt); - rect.left = pt.x; - rect.top = pt.y; - rect.right = pt.x + width; - rect.bottom = pt.y + height; - - dwStyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE); - dwExStyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_EXSTYLE); - if (!AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle)) - WIN32_API_FAILED ("AdjustWindowRectEx"); - - x = rect.left; - y = rect.top; - width = rect.right - rect.left; - height = rect.bottom - rect.top; - if (!SetWindowPos (GDK_WINDOW_HWND (window), NULL, - x, y, width, height, - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER)) - WIN32_API_FAILED ("SetWindowPos"); + style = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE); + exstyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_EXSTYLE); + + rect.left = rect.top = 0; + rect.right = width; + rect.bottom = height; + + API_CALL (AdjustWindowRectEx, (&rect, style, FALSE, exstyle)); + + API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL, + 0, 0, + rect.right - rect.left, rect.bottom - rect.top, + SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER)); } private->resize_count += 1; } @@ -1073,10 +1025,6 @@ gdk_window_move_resize (GdkWindow *window, GdkWindowObject *private = (GdkWindowObject*) window; GdkWindowImplWin32 *impl; - RECT rect; - DWORD dwStyle; - DWORD dwExStyle; - g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); @@ -1087,36 +1035,34 @@ gdk_window_move_resize (GdkWindow *window, impl = GDK_WINDOW_IMPL_WIN32 (private->impl); - if (private->destroyed) - return; - - GDK_NOTE (MISC, g_print ("gdk_window_move_resize: %p %dx%d@+%d+%d\n", + GDK_NOTE (MISC, g_print ("gdk_window_move_resize: %p: %dx%d@+%d+%d\n", GDK_WINDOW_HWND (window), width, height, x, y)); - if (GDK_WINDOW_TYPE (private) == GDK_WINDOW_CHILD) - _gdk_window_move_resize_child (window, x, y, width, height); - else + if (!GDK_WINDOW_DESTROYED (window)) { - rect.left = x; - rect.top = y; - rect.right = x + width; - rect.bottom = y + height; - - dwStyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE); - dwExStyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_EXSTYLE); - if (!AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle)) - WIN32_API_FAILED ("AdjustWindowRectEx"); - - GDK_NOTE (MISC, g_print ("...SetWindowPos(%p,%ldx%ld@+%ld+%ld)\n", - GDK_WINDOW_HWND (window), - rect.right - rect.left, rect.bottom - rect.top, - rect.left, rect.top)); - if (!SetWindowPos (GDK_WINDOW_HWND (window), NULL, - rect.left, rect.top, - rect.right - rect.left, rect.bottom - rect.top, - SWP_NOACTIVATE | SWP_NOZORDER)) - WIN32_API_FAILED ("SetWindowPos"); + if (GDK_WINDOW_TYPE (private) == GDK_WINDOW_CHILD) + _gdk_window_move_resize_child (window, x, y, width, height); + else + { + RECT rect; + LONG style; + LONG exstyle; + + style = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE); + exstyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_EXSTYLE); + + rect.left = rect.top = 0; + rect.right = width; + rect.bottom = height; + + API_CALL (AdjustWindowRectEx, (&rect, style, FALSE, exstyle)); + + API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL, + x, y, + rect.right - rect.left, rect.bottom - rect.top, + SWP_NOACTIVATE | SWP_NOZORDER)); + } } } @@ -1146,16 +1092,15 @@ gdk_window_reparent (GdkWindow *window, if (!GDK_WINDOW_DESTROYED (window) && !GDK_WINDOW_DESTROYED (new_parent)) { - GDK_NOTE (MISC, g_print ("gdk_window_reparent: %p %p\n", + GDK_NOTE (MISC, g_print ("gdk_window_reparent: %p: %p\n", GDK_WINDOW_HWND (window), GDK_WINDOW_HWND (new_parent))); - if (!SetParent (GDK_WINDOW_HWND (window), - GDK_WINDOW_HWND (new_parent))) - WIN32_API_FAILED ("SetParent"); - if (!MoveWindow (GDK_WINDOW_HWND (window), - x, y, impl->width, impl->height, TRUE)) - WIN32_API_FAILED ("MoveWindow"); + API_CALL (SetParent, (GDK_WINDOW_HWND (window), + GDK_WINDOW_HWND (new_parent))); + + API_CALL (MoveWindow, (GDK_WINDOW_HWND (window), + x, y, impl->width, impl->height, TRUE)); } /* From here on, we treat parents of type GDK_WINDOW_FOREIGN like @@ -1203,15 +1148,14 @@ _gdk_windowing_window_clear_area (GdkWindow *window, width = impl->width - x; if (height == 0) height = impl->height - y; - GDK_NOTE (MISC, g_print ("_gdk_windowing_window_clear_area: " - "%p %dx%d@+%d+%d\n", + GDK_NOTE (MISC, g_print ("_gdk_windowing_window_clear_area: %p: " + "%dx%d@+%d+%d\n", GDK_WINDOW_HWND (window), width, height, x, y)); hdc = GetDC (GDK_WINDOW_HWND (window)); IntersectClipRect (hdc, x, y, x + width + 1, y + height + 1); SendMessage (GDK_WINDOW_HWND (window), WM_ERASEBKGND, (WPARAM) hdc, 0); - if (!ReleaseDC (GDK_WINDOW_HWND (window), hdc)) - WIN32_GDI_FAILED ("ReleaseDC"); + GDI_CALL (ReleaseDC, (GDK_WINDOW_HWND (window), hdc)); } } @@ -1229,8 +1173,8 @@ _gdk_windowing_window_clear_area_e (GdkWindow *window, { RECT rect; - GDK_NOTE (MISC, g_print ("_gdk_windowing_window_clear_area_e: " - "%p %dx%d@+%d+%d\n", + GDK_NOTE (MISC, g_print ("_gdk_windowing_window_clear_area_e: %p: " + "%dx%d@+%d+%d\n", GDK_WINDOW_HWND (window), width, height, x, y)); @@ -1238,8 +1182,7 @@ _gdk_windowing_window_clear_area_e (GdkWindow *window, rect.right = x + width + 1; rect.top = y; rect.bottom = y + height + 1; - if (!InvalidateRect (GDK_WINDOW_HWND (window), &rect, TRUE)) - WIN32_GDI_FAILED ("InvalidateRect"); + GDI_CALL (InvalidateRect, (GDK_WINDOW_HWND (window), &rect, TRUE)); UpdateWindow (GDK_WINDOW_HWND (window)); } } @@ -1255,8 +1198,7 @@ gdk_window_raise (GdkWindow *window) GDK_NOTE (MISC, g_print ("gdk_window_raise: %p\n", GDK_WINDOW_HWND (window))); - if (!BringWindowToTop (GDK_WINDOW_HWND (window))) - WIN32_API_FAILED ("BringWindowToTop"); + API_CALL (BringWindowToTop, (GDK_WINDOW_HWND (window))); } } @@ -1271,9 +1213,8 @@ gdk_window_lower (GdkWindow *window) GDK_NOTE (MISC, g_print ("gdk_window_lower: %p\n", GDK_WINDOW_HWND (window))); - if (!SetWindowPos (GDK_WINDOW_HWND (window), HWND_BOTTOM, 0, 0, 0, 0, - SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE)) - WIN32_API_FAILED ("SetWindowPos"); + API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), HWND_BOTTOM, 0, 0, 0, 0, + SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE)); } } @@ -1302,7 +1243,7 @@ gdk_window_set_hints (GdkWindow *window, impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl); - GDK_NOTE (MISC, g_print ("gdk_window_set_hints: %p %dx%d..%dx%d @+%d+%d\n", + GDK_NOTE (MISC, g_print ("gdk_window_set_hints: %p: %dx%d..%dx%d @+%d+%d\n", GDK_WINDOW_HWND (window), min_width, min_height, max_width, max_height, x, y)); @@ -1313,7 +1254,7 @@ gdk_window_set_hints (GdkWindow *window, if (flags) { GdkGeometry geom; - gint geom_mask = 0; + gint geom_mask = 0; geom.min_width = min_width; geom.min_height = min_height; @@ -1322,9 +1263,7 @@ gdk_window_set_hints (GdkWindow *window, if (flags & GDK_HINT_POS) { - if (!GetWindowPlacement (GDK_WINDOW_HWND (window), &size_hints)) - WIN32_API_FAILED ("GetWindowPlacement"); - else + if (API_CALL (GetWindowPlacement, (GDK_WINDOW_HWND (window), &size_hints))) { GDK_NOTE (MISC, g_print ("...rcNormalPosition:" " (%ld,%ld)--(%ld,%ld)\n", @@ -1335,6 +1274,8 @@ gdk_window_set_hints (GdkWindow *window, /* What are the corresponding window coordinates for client * area coordinates x, y */ + + /* FIXME: Is the hint client area pos or border? */ rect.left = x; rect.top = y; rect.right = rect.left + 200; /* dummy */ @@ -1359,8 +1300,8 @@ gdk_window_set_hints (GdkWindow *window, size_hints.rcNormalPosition.top, size_hints.rcNormalPosition.right, size_hints.rcNormalPosition.bottom)); - if (!SetWindowPlacement (GDK_WINDOW_HWND (window), &size_hints)) - WIN32_API_FAILED ("SetWindowPlacement"); + API_CALL (SetWindowPlacement, (GDK_WINDOW_HWND (window), + &size_hints)); impl->hint_x = rect.left; impl->hint_y = rect.top; } @@ -1394,6 +1335,9 @@ gdk_window_set_geometry_hints (GdkWindow *window, if (GDK_WINDOW_DESTROYED (window)) return; + GDK_NOTE (MISC, g_print ("gdk_window_set_geometry_hints: %p\n", + GDK_WINDOW_HWND (window))); + impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl); size_hints.length = sizeof (size_hints); @@ -1404,6 +1348,10 @@ gdk_window_set_geometry_hints (GdkWindow *window, if (geom_mask & GDK_HINT_MIN_SIZE) { + GDK_NOTE (MISC, g_print ("... MIN_SIZE: %dx%d\n", + geometry->min_width, geometry->min_height)); + + /* Assume size means client area size */ rect.left = 0; rect.top = 0; rect.right = geometry->min_width; @@ -1434,6 +1382,9 @@ gdk_window_set_geometry_hints (GdkWindow *window, if (geom_mask & GDK_HINT_MAX_SIZE) { + GDK_NOTE (MISC, g_print ("... MAX_SIZE: %dx%d\n", + geometry->max_width, geometry->max_height)); + rect.left = 0; rect.top = 0; rect.right = geometry->max_width; @@ -1441,7 +1392,7 @@ gdk_window_set_geometry_hints (GdkWindow *window, dwStyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE); dwExStyle = GetWindowLong (GDK_WINDOW_HWND (window), GWL_EXSTYLE); /* HB: dont' know why AdjustWindowRectEx is called here, ... */ - SafeAdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle); + AdjustWindowRectEx (&rect, dwStyle, FALSE, dwExStyle); impl->hint_max_width = rect.right - rect.left; impl->hint_max_height = rect.bottom - rect.top; /* ... but negative sizes are always wrong */ @@ -1474,16 +1425,17 @@ gdk_window_set_geometry_hints (GdkWindow *window, && geometry->base_width > 0 && geometry->base_height > 0) { - if (!GetWindowPlacement (GDK_WINDOW_HWND (window), &size_hints)) - WIN32_API_FAILED ("GetWindowPlacement"); - else + GDK_NOTE (MISC, g_print ("... BASE_SIZE: %dx%d\n", + geometry->base_width, geometry->base_height)); + + if (API_CALL (GetWindowPlacement, (GDK_WINDOW_HWND (window), &size_hints))) { - GDK_NOTE (MISC, g_print ("gdk_window_set_geometry_hints:" - " rcNormalPosition: (%ld,%ld)--(%ld,%ld)\n", - size_hints.rcNormalPosition.left, - size_hints.rcNormalPosition.top, - size_hints.rcNormalPosition.right, - size_hints.rcNormalPosition.bottom)); + GDK_NOTE (MISC, + g_print ("... rcNormalPosition: (%ld,%ld)--(%ld,%ld)\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 = @@ -1493,8 +1445,7 @@ gdk_window_set_geometry_hints (GdkWindow *window, size_hints.rcNormalPosition.top, size_hints.rcNormalPosition.right, size_hints.rcNormalPosition.bottom)); - if (!SetWindowPlacement (GDK_WINDOW_HWND (window), &size_hints)) - WIN32_API_FAILED ("SetWindowPlacement"); + API_CALL (SetWindowPlacement, (GDK_WINDOW_HWND (window), &size_hints)); } } @@ -1523,7 +1474,7 @@ gdk_window_set_title (GdkWindow *window, if (!title[0]) title = "."; - GDK_NOTE (MISC, g_print ("gdk_window_set_title: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_set_title: %p: %s\n", GDK_WINDOW_HWND (window), title)); if (!GDK_WINDOW_DESTROYED (window)) @@ -1532,9 +1483,7 @@ gdk_window_set_title (GdkWindow *window, * to the system codepage. */ mbtitle = g_locale_from_utf8 (title, -1, NULL, NULL, NULL); - if (!SetWindowText (GDK_WINDOW_HWND (window), mbtitle)) - WIN32_API_FAILED ("SetWindowText"); - + API_CALL (SetWindowText, (GDK_WINDOW_HWND (window), mbtitle)); g_free (mbtitle); } } @@ -1546,7 +1495,7 @@ gdk_window_set_role (GdkWindow *window, g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); - GDK_NOTE (MISC, g_print ("gdk_window_set_role: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_set_role: %p: %s\n", GDK_WINDOW_HWND (window), (role ? role : "NULL"))); /* XXX */ @@ -1561,7 +1510,7 @@ gdk_window_set_transient_for (GdkWindow *window, g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); - GDK_NOTE (MISC, g_print ("gdk_window_set_transient_for: %p %p\n", + GDK_NOTE (MISC, g_print ("gdk_window_set_transient_for: %p: %p\n", GDK_WINDOW_HWND (window), GDK_WINDOW_HWND (parent))); @@ -1597,7 +1546,7 @@ gdk_window_set_background (GdkWindow *window, g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); - GDK_NOTE (MISC, g_print ("gdk_window_set_background: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_set_background: %p: %s\n", GDK_WINDOW_HWND (window), _gdk_win32_color_to_string (color))); @@ -1672,7 +1621,7 @@ gdk_window_set_cursor (GdkWindow *window, else hcursor = cursor_private->hcursor; - GDK_NOTE (MISC, g_print ("gdk_window_set_cursor: %p %p\n", + GDK_NOTE (MISC, g_print ("gdk_window_set_cursor: %p: %p\n", GDK_WINDOW_HWND (window), hcursor)); @@ -1733,8 +1682,7 @@ gdk_window_set_cursor (GdkWindow *window, GDK_NOTE (MISC, g_print ("...DestroyCursor (%p)\n", hprevcursor)); - if (!DestroyCursor (hprevcursor)) - WIN32_API_FAILED ("DestroyCursor"); + API_CALL (DestroyCursor, (hprevcursor)); } } @@ -1755,8 +1703,7 @@ gdk_window_get_geometry (GdkWindow *window, { RECT rect; - if (!GetClientRect (GDK_WINDOW_HWND (window), &rect)) - WIN32_API_FAILED ("GetClientRect"); + API_CALL (GetClientRect, (GDK_WINDOW_HWND (window), &rect)); if (window != _gdk_parent_root) { @@ -1788,6 +1735,12 @@ gdk_window_get_geometry (GdkWindow *window, *height = rect.bottom - rect.top; if (depth) *depth = gdk_drawable_get_visual (window)->depth; + + GDK_NOTE (MISC, g_print ("gdk_window_get_geometry: %p: %ldx%ldx%d@+%ld+%ld\n", + GDK_WINDOW_HWND (window), + rect.right - rect.left, rect.bottom - rect.top, + gdk_drawable_get_visual (window)->depth, + rect.left, rect.top)); } } @@ -1851,6 +1804,9 @@ gdk_window_get_root_origin (GdkWindow *window, if (y) *y = rect.y; + + GDK_NOTE (MISC, g_print ("gdk_window_get_root_origin: %p: +%d+%d\n", + GDK_WINDOW_HWND (window), rect.x, rect.y)); } void @@ -1874,6 +1830,9 @@ gdk_window_get_frame_extents (GdkWindow *window, if (GDK_WINDOW_DESTROYED (window)) return; + /* FIXME: window is documented to be a toplevel GdkWindow, so is it really + * necessary to walk its parent chain? + */ while (private->parent && ((GdkWindowObject*) private->parent)->parent) private = (GdkWindowObject*) private->parent; @@ -1886,13 +1845,17 @@ gdk_window_get_frame_extents (GdkWindow *window, g_return_if_fail (NULL != hwnd); } - if (!GetWindowRect (hwnd, &r)) - WIN32_API_FAILED ("GetWindowRect"); + API_CALL (GetWindowRect, (hwnd, &r)); rect->x = r.left; rect->y = r.top; rect->width = r.right - r.left; rect->height = r.bottom - r.top; + + GDK_NOTE (MISC, g_print ("gdk_window_get_frame_extents: %p: %ldx%ld@+%ld+%ld\n", + GDK_WINDOW_HWND (window), + r.right - r.left, r.bottom - r.top, + r.left, r.top)); } GdkWindow* @@ -2060,7 +2023,7 @@ gdk_window_shape_combine_mask (GdkWindow *window, if (!mask) { - GDK_NOTE (MISC, g_print ("gdk_window_shape_combine_mask: %p none\n", + GDK_NOTE (MISC, g_print ("gdk_window_shape_combine_mask: %p: none\n", GDK_WINDOW_HWND (window))); SetWindowRgn (GDK_WINDOW_HWND (window), NULL, TRUE); } @@ -2074,7 +2037,7 @@ gdk_window_shape_combine_mask (GdkWindow *window, /* Convert mask bitmap to region */ hrgn = _gdk_win32_bitmap_to_hrgn (mask); - GDK_NOTE (MISC, g_print ("gdk_window_shape_combine_mask: %p %p\n", + GDK_NOTE (MISC, g_print ("gdk_window_shape_combine_mask: %p: %p\n", GDK_WINDOW_HWND (window), GDK_WINDOW_HWND (mask))); @@ -2153,8 +2116,7 @@ gdk_window_set_icon_name (GdkWindow *window, if (GDK_WINDOW_DESTROYED (window)) return; - if (!SetWindowText (GDK_WINDOW_HWND (window), name)) - WIN32_API_FAILED ("SetWindowText"); + API_CALL (SetWindowText, (GDK_WINDOW_HWND (window), name)); } void @@ -2182,7 +2144,7 @@ gdk_window_set_decorations (GdkWindow *window, g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); - GDK_NOTE (MISC, g_print ("gdk_window_set_decorations: %p %s%s%s%s%s%s%s\n", + GDK_NOTE (MISC, g_print ("gdk_window_set_decorations: %p: %s%s%s%s%s%s%s\n", GDK_WINDOW_HWND (window), (decorations & GDK_DECOR_ALL ? "ALL " : ""), (decorations & GDK_DECOR_BORDER ? "BORDER " : ""), @@ -2254,7 +2216,7 @@ gdk_window_set_functions (GdkWindow *window, g_return_if_fail (window != NULL); g_return_if_fail (GDK_IS_WINDOW (window)); - GDK_NOTE (MISC, g_print ("gdk_window_set_functions: %p %s%s%s%s%s%s\n", + GDK_NOTE (MISC, g_print ("gdk_window_set_functions: %p: %s%s%s%s%s%s\n", GDK_WINDOW_HWND (window), (functions & GDK_FUNC_ALL ? "ALL " : ""), (functions & GDK_FUNC_RESIZE ? "RESIZE " : ""), @@ -2418,7 +2380,7 @@ gdk_window_iconify (GdkWindow *window) if (GDK_WINDOW_DESTROYED (window)) return; - GDK_NOTE (MISC, g_print ("gdk_window_iconify: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_iconify: %p: %s\n", GDK_WINDOW_HWND (window), _gdk_win32_window_state_to_string (((GdkWindowObject *) window)->state))); @@ -2446,7 +2408,7 @@ gdk_window_deiconify (GdkWindow *window) if (GDK_WINDOW_DESTROYED (window)) return; - GDK_NOTE (MISC, g_print ("gdk_window_deiconify: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_deiconify: %p: %s\n", GDK_WINDOW_HWND (window), _gdk_win32_window_state_to_string (((GdkWindowObject *) window)->state))); @@ -2492,7 +2454,7 @@ gdk_window_maximize (GdkWindow *window) if (GDK_WINDOW_DESTROYED (window)) return; - GDK_NOTE (MISC, g_print ("gdk_window_maximize: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_maximize: %p: %s\n", GDK_WINDOW_HWND (window), _gdk_win32_window_state_to_string (((GdkWindowObject *) window)->state))); @@ -2512,7 +2474,7 @@ gdk_window_unmaximize (GdkWindow *window) if (GDK_WINDOW_DESTROYED (window)) return; - GDK_NOTE (MISC, g_print ("gdk_window_unmaximize: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_unmaximize: %p: %s\n", GDK_WINDOW_HWND (window), _gdk_win32_window_state_to_string (((GdkWindowObject *) window)->state))); @@ -2547,7 +2509,7 @@ gdk_window_focus (GdkWindow *window, if (GDK_WINDOW_DESTROYED (window)) return; - GDK_NOTE (MISC, g_print ("gdk_window_focus: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_focus: %p: %s\n", GDK_WINDOW_HWND (window), _gdk_win32_window_state_to_string (((GdkWindowObject *) window)->state))); @@ -2572,9 +2534,8 @@ gdk_window_set_modal_hint (GdkWindow *window, private->modal_hint = modal; if (GDK_WINDOW_IS_MAPPED (window)) - if (!SetWindowPos (GDK_WINDOW_HWND (window), HWND_TOPMOST, - 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE)) - WIN32_API_FAILED ("SetWindowPos"); + API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), HWND_TOPMOST, + 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE)); } void @@ -2585,7 +2546,7 @@ gdk_window_set_skip_taskbar_hint (GdkWindow *window, g_return_if_fail (GDK_IS_WINDOW (window)); - GDK_NOTE (MISC, g_print ("gdk_window_set_skip_taskbar_hint: %p %s\n", + GDK_NOTE (MISC, g_print ("gdk_window_set_skip_taskbar_hint: %p: %s\n", GDK_WINDOW_HWND (window), skips_taskbar ? "TRUE" : "FALSE")); @@ -2616,7 +2577,7 @@ gdk_window_set_type_hint (GdkWindow *window, if (GDK_WINDOW_DESTROYED (window)) return; - GDK_NOTE (MISC, g_print ("gdk_window_set_type_hint: %p %d\n", + GDK_NOTE (MISC, g_print ("gdk_window_set_type_hint: %p: %d\n", GDK_WINDOW_HWND (window), hint)); switch (hint) { |