return !(mask & (GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK));
}
-static void
-handle_configure_event (MSG *msg,
- GdkWindow *window)
+void
+_gdk_win32_emit_configure_event (GdkWindow *window)
{
RECT client_rect;
POINT point;
+ HWND hwnd;
+
+ hwnd = GDK_WINDOW_HWND (window);
- GetClientRect (msg->hwnd, &client_rect);
+ GetClientRect (hwnd, &client_rect);
point.x = client_rect.left; /* always 0 */
point.y = client_rect.top;
/* top level windows need screen coords */
if (gdk_window_get_parent (window) == _gdk_root)
{
- ClientToScreen (msg->hwnd, &point);
+ ClientToScreen (hwnd, &point);
point.x += _gdk_offset_x;
point.y += _gdk_offset_y;
}
if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD &&
!IsIconic (msg->hwnd) &&
!GDK_WINDOW_DESTROYED (window))
- handle_configure_event (msg, window);
+ _gdk_win32_emit_configure_event (window);
if (window->extension_events != 0)
_gdk_device_wintab_update_window_coords (window);
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
if (window->state & GDK_WINDOW_STATE_FULLSCREEN)
- return;
+ {
+ _gdk_win32_emit_configure_event (window);
+ return;
+ }
/* Don't check GDK_WINDOW_TYPE (window) == GDK_WINDOW_CHILD.
* Foreign windows (another app's windows) might be children of our
else
{
RECT outer_rect;
+ RECT current_rect;
get_outer_rect (window, window->width, window->height, &outer_rect);
API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL,
x - _gdk_offset_x, y - _gdk_offset_y, 0, 0,
SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER));
+
+ /* Ensure we always send a configure event, and SetWindowPos doesn't if the window
+ is maximized, or the position/size doesn't change */
+ GetWindowRect (GDK_WINDOW_HWND (window), ¤t_rect);
+ if (IsZoomed (GDK_WINDOW_HWND (window)) ||
+ (current_rect.left == x - _gdk_offset_x &&
+ current_rect.top == y - _gdk_offset_y))
+ _gdk_win32_emit_configure_event (window);
}
}
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
if (window->state & GDK_WINDOW_STATE_FULLSCREEN)
- return;
+ {
+ _gdk_win32_emit_configure_event (window);
+ return;
+ }
if (GetAncestor (GDK_WINDOW_HWND (window), GA_PARENT) != GetDesktopWindow ())
{
else
{
RECT outer_rect;
+ RECT current_rect;
get_outer_rect (window, width, height, &outer_rect);
outer_rect.bottom - outer_rect.top,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER));
window->resize_count += 1;
+
+ /* Ensure we always send a configure event, and SetWindowPos doesn't if the window
+ is maximized, or the position/size doesn't change */
+ GetWindowRect (GDK_WINDOW_HWND (window), ¤t_rect);
+ if (IsZoomed (GDK_WINDOW_HWND (window)) ||
+ (current_rect.right - current_rect.left == outer_rect.right - outer_rect.left &&
+ current_rect.bottom - current_rect.top == outer_rect.bottom - outer_rect.top))
+ _gdk_win32_emit_configure_event (window);
}
}
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
if (window->state & GDK_WINDOW_STATE_FULLSCREEN)
- return;
+ {
+ _gdk_win32_emit_configure_event (window);
+ return;
+ }
GDK_NOTE (MISC, g_print ("gdk_win32_window_move_resize: %p: %dx%d@%+d%+d\n",
GDK_WINDOW_HWND (window),
else
{
RECT outer_rect;
+ RECT current_rect;
get_outer_rect (window, width, height, &outer_rect);
outer_rect.right - outer_rect.left,
outer_rect.bottom - outer_rect.top,
SWP_NOACTIVATE | SWP_NOZORDER));
+
+ /* Ensure we always send a configure event, and SetWindowPos doesn't if the window
+ is maximized, or the position/size doesn't change */
+ GetWindowRect (GDK_WINDOW_HWND (window), ¤t_rect);
+ if (IsZoomed (GDK_WINDOW_HWND (window)) ||
+ (current_rect.left == x - _gdk_offset_x &&
+ current_rect.top == y - _gdk_offset_y &&
+ current_rect.right - current_rect.left == outer_rect.right - outer_rect.left &&
+ current_rect.bottom - current_rect.top == outer_rect.bottom - outer_rect.top))
+ _gdk_win32_emit_configure_event (window);
}
}