Bug 541162 – [Win32] Update for the new GdkWindowImpl stuff

2008-07-02  Cody Russell  <bratsche@gnome.org>

        Bug 541162 – [Win32] Update for the new GdkWindowImpl stuff

        * gdk/win32/gdkprivate-win32.h:
        * gdk/win32/gdkgeometry-win32.c:
        * gdk/win32/gdkevents-win32.c:
        * gdk/win32/gdkwindow-win32.c: Update Win32 backend according to
        the newly refactored GdkWindow code.


svn path=/trunk/; revision=20729
This commit is contained in:
Cody Russell 2008-07-02 06:06:29 +00:00 committed by Cody Russell
parent 2b5d149c61
commit e625b41a1d
5 changed files with 172 additions and 271 deletions

View File

@ -1,3 +1,13 @@
2008-07-02 Cody Russell <bratsche@gnome.org>
Bug 541162 [Win32] Update for the new GdkWindowImpl stuff
* gdk/win32/gdkprivate-win32.h:
* gdk/win32/gdkgeometry-win32.c:
* gdk/win32/gdkevents-win32.c:
* gdk/win32/gdkwindow-win32.c: Update Win32 backend according to
the newly refactored GdkWindow code.
2008-07-01 Cody Russell <bratsche@gnome.org> 2008-07-01 Cody Russell <bratsche@gnome.org>
Bug 539164 Windows' System Menu blocks main loop Bug 539164 Windows' System Menu blocks main loop

View File

@ -1366,7 +1366,7 @@ synthesize_enter_or_leave_event (GdkWindow *window,
event->crossing.window = window; event->crossing.window = window;
event->crossing.subwindow = NULL; event->crossing.subwindow = NULL;
event->crossing.time = _gdk_win32_get_next_tick (msg->time); event->crossing.time = _gdk_win32_get_next_tick (msg->time);
_gdk_windowing_window_get_offsets (window, &xoffset, &yoffset); _gdk_win32_windowing_window_get_offsets (window, &xoffset, &yoffset);
event->crossing.x = x + xoffset; event->crossing.x = x + xoffset;
event->crossing.y = y + yoffset; event->crossing.y = y + yoffset;
event->crossing.x_root = msg->pt.x + _gdk_offset_x; event->crossing.x_root = msg->pt.x + _gdk_offset_x;
@ -2012,7 +2012,7 @@ handle_wm_paint (MSG *msg,
update_region = _gdk_win32_hrgn_to_region (hrgn); update_region = _gdk_win32_hrgn_to_region (hrgn);
_gdk_windowing_window_get_offsets (window, &xoffset, &yoffset); _gdk_win32_windowing_window_get_offsets (window, &xoffset, &yoffset);
gdk_region_offset (update_region, xoffset, yoffset); gdk_region_offset (update_region, xoffset, yoffset);
_gdk_window_process_expose (window, update_region); _gdk_window_process_expose (window, update_region);
@ -2063,7 +2063,7 @@ generate_button_event (GdkEventType type,
translate_mouse_coords (orig_window, window, msg); translate_mouse_coords (orig_window, window, msg);
event->button.x = current_x = (gint16) GET_X_LPARAM (msg->lParam); event->button.x = current_x = (gint16) GET_X_LPARAM (msg->lParam);
event->button.y = current_y = (gint16) GET_Y_LPARAM (msg->lParam); event->button.y = current_y = (gint16) GET_Y_LPARAM (msg->lParam);
_gdk_windowing_window_get_offsets (window, &xoffset, &yoffset); _gdk_win32_windowing_window_get_offsets (window, &xoffset, &yoffset);
event->button.x += xoffset; event->button.x += xoffset;
event->button.y += yoffset; event->button.y += yoffset;
event->button.x_root = msg->pt.x + _gdk_offset_x; event->button.x_root = msg->pt.x + _gdk_offset_x;
@ -2633,7 +2633,7 @@ gdk_event_translate (MSG *msg,
event->motion.time = _gdk_win32_get_next_tick (msg->time); event->motion.time = _gdk_win32_get_next_tick (msg->time);
event->motion.x = current_x = (gint16) GET_X_LPARAM (msg->lParam); event->motion.x = current_x = (gint16) GET_X_LPARAM (msg->lParam);
event->motion.y = current_y = (gint16) GET_Y_LPARAM (msg->lParam); event->motion.y = current_y = (gint16) GET_Y_LPARAM (msg->lParam);
_gdk_windowing_window_get_offsets (window, &xoffset, &yoffset); _gdk_win32_windowing_window_get_offsets (window, &xoffset, &yoffset);
event->motion.x += xoffset; event->motion.x += xoffset;
event->motion.y += yoffset; event->motion.y += yoffset;
event->motion.x_root = current_root_x; event->motion.x_root = current_root_x;
@ -2724,7 +2724,7 @@ gdk_event_translate (MSG *msg,
event->scroll.direction = (((short) HIWORD (msg->wParam)) > 0) ? event->scroll.direction = (((short) HIWORD (msg->wParam)) > 0) ?
GDK_SCROLL_UP : GDK_SCROLL_DOWN; GDK_SCROLL_UP : GDK_SCROLL_DOWN;
event->scroll.time = _gdk_win32_get_next_tick (msg->time); event->scroll.time = _gdk_win32_get_next_tick (msg->time);
_gdk_windowing_window_get_offsets (window, &xoffset, &yoffset); _gdk_win32_windowing_window_get_offsets (window, &xoffset, &yoffset);
event->scroll.x = (gint16) point.x + xoffset; event->scroll.x = (gint16) point.x + xoffset;
event->scroll.y = (gint16) point.y + yoffset; event->scroll.y = (gint16) point.y + yoffset;
event->scroll.x_root = (gint16) GET_X_LPARAM (msg->lParam) + _gdk_offset_x; event->scroll.x_root = (gint16) GET_X_LPARAM (msg->lParam) + _gdk_offset_x;

View File

@ -75,7 +75,7 @@ static void gdk_window_post_scroll (GdkWindow *window,
GdkRegion *new_clip_region); GdkRegion *new_clip_region);
void void
_gdk_windowing_window_get_offsets (GdkWindow *window, _gdk_win32_windowing_window_get_offsets (GdkWindow *window,
gint *x_offset, gint *x_offset,
gint *y_offset) gint *y_offset)
{ {
@ -101,7 +101,7 @@ _gdk_window_init_position (GdkWindow *window)
} }
void void
gdk_window_scroll (GdkWindow *window, _gdk_win32_window_scroll (GdkWindow *window,
gint dx, gint dx,
gint dy) gint dy)
{ {
@ -112,11 +112,6 @@ gdk_window_scroll (GdkWindow *window,
GdkWindowParentPos parent_pos; GdkWindowParentPos parent_pos;
HRGN native_invalidate_region; HRGN native_invalidate_region;
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window))
return;
GDK_NOTE (EVENTS, g_print ("gdk_window_scroll: %p %d,%d\n", GDK_NOTE (EVENTS, g_print ("gdk_window_scroll: %p %d,%d\n",
GDK_WINDOW_HWND (window), dx, dy)); GDK_WINDOW_HWND (window), dx, dy));
@ -172,7 +167,7 @@ gdk_window_scroll (GdkWindow *window,
} }
void void
gdk_window_move_region (GdkWindow *window, _gdk_win32_window_move_region (GdkWindow *window,
const GdkRegion *region, const GdkRegion *region,
gint dx, gint dx,
gint dy) gint dy)
@ -184,11 +179,6 @@ gdk_window_move_region (GdkWindow *window,
HRGN hrgn; HRGN hrgn;
RECT clipRect, destRect; RECT clipRect, destRect;
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window))
return;
obj = GDK_WINDOW_OBJECT (window); obj = GDK_WINDOW_OBJECT (window);
impl = GDK_WINDOW_IMPL_WIN32 (obj->impl); impl = GDK_WINDOW_IMPL_WIN32 (obj->impl);

View File

@ -209,6 +209,20 @@ void _gdk_window_move_resize_child (GdkWindow *window,
gint y, gint y,
gint width, gint width,
gint height); gint height);
/* GdkWindowImpl methods */
void _gdk_win32_window_scroll (GdkWindow *window,
gint dx,
gint dy);
void _gdk_win32_window_move_region (GdkWindow *window,
const GdkRegion *region,
gint dx,
gint dy);
void _gdk_win32_windowing_window_get_offsets (GdkWindow *window,
gint *x_offset,
gint *y_offset);
void _gdk_window_process_expose (GdkWindow *window, void _gdk_window_process_expose (GdkWindow *window,
GdkRegion *invalidate_region); GdkRegion *invalidate_region);

View File

@ -31,6 +31,7 @@
#include <stdlib.h> #include <stdlib.h>
#include "gdk.h" #include "gdk.h"
#include "gdkwindowimpl.h"
#include "gdkprivate-win32.h" #include "gdkprivate-win32.h"
#include "gdkinput-win32.h" #include "gdkinput-win32.h"
@ -61,6 +62,8 @@ static gboolean _gdk_window_get_functions (GdkWindow *window,
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \ (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN) GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
static void gdk_window_impl_iface_init (GdkWindowImplIface *iface);
GType GType
_gdk_window_impl_win32_get_type (void) _gdk_window_impl_win32_get_type (void)
{ {
@ -81,9 +84,19 @@ _gdk_window_impl_win32_get_type (void)
(GInstanceInitFunc) gdk_window_impl_win32_init, (GInstanceInitFunc) gdk_window_impl_win32_init,
}; };
const GInterfaceInfo window_impl_info =
{
(GInterfaceInitFunc) gdk_window_impl_iface_init,
NULL,
NULL
};
object_type = g_type_register_static (GDK_TYPE_DRAWABLE_IMPL_WIN32, object_type = g_type_register_static (GDK_TYPE_DRAWABLE_IMPL_WIN32,
"GdkWindowImplWin32", "GdkWindowImplWin32",
&object_info, 0); &object_info, 0);
g_type_add_interface_static (object_type,
GDK_TYPE_WINDOW_IMPL,
&window_impl_info);
} }
return object_type; return object_type;
@ -282,6 +295,7 @@ _gdk_windowing_window_init (void)
_gdk_root = g_object_new (GDK_TYPE_WINDOW, NULL); _gdk_root = g_object_new (GDK_TYPE_WINDOW, NULL);
private = (GdkWindowObject *)_gdk_root; private = (GdkWindowObject *)_gdk_root;
private->impl = g_object_new (_gdk_window_impl_get_type (), NULL);
draw_impl = GDK_DRAWABLE_IMPL_WIN32 (private->impl); draw_impl = GDK_DRAWABLE_IMPL_WIN32 (private->impl);
draw_impl->handle = GetDesktopWindow (); draw_impl->handle = GetDesktopWindow ();
@ -522,6 +536,7 @@ gdk_window_new_internal (GdkWindow *parent,
window = g_object_new (GDK_TYPE_WINDOW, NULL); window = g_object_new (GDK_TYPE_WINDOW, NULL);
private = (GdkWindowObject *)window; private = (GdkWindowObject *)window;
private->impl = g_object_new (_gdk_window_impl_get_type (), NULL);
impl = GDK_WINDOW_IMPL_WIN32 (private->impl); impl = GDK_WINDOW_IMPL_WIN32 (private->impl);
draw_impl = GDK_DRAWABLE_IMPL_WIN32 (private->impl); draw_impl = GDK_DRAWABLE_IMPL_WIN32 (private->impl);
draw_impl->wrapper = GDK_DRAWABLE (window); draw_impl->wrapper = GDK_DRAWABLE (window);
@ -1124,28 +1139,16 @@ show_window_internal (GdkWindow *window,
} }
void void
gdk_window_show_unraised (GdkWindow *window) gdk_win32_window_show (GdkWindow *window, gboolean raise)
{ {
g_return_if_fail (GDK_IS_WINDOW (window)); show_window_internal (window, raise, FALSE);
show_window_internal (window, FALSE, FALSE);
} }
void void
gdk_window_show (GdkWindow *window) gdk_win32_window_hide (GdkWindow *window)
{
g_return_if_fail (GDK_IS_WINDOW (window));
show_window_internal (window, TRUE, FALSE);
}
void
gdk_window_hide (GdkWindow *window)
{ {
GdkWindowObject *private; GdkWindowObject *private;
g_return_if_fail (GDK_IS_WINDOW (window));
private = (GdkWindowObject*) window; private = (GdkWindowObject*) window;
if (private->destroyed) if (private->destroyed)
return; return;
@ -1177,12 +1180,10 @@ gdk_window_hide (GdkWindow *window)
} }
void void
gdk_window_withdraw (GdkWindow *window) gdk_win32_window_withdraw (GdkWindow *window)
{ {
GdkWindowObject *private; GdkWindowObject *private;
g_return_if_fail (GDK_IS_WINDOW (window));
private = (GdkWindowObject*) window; private = (GdkWindowObject*) window;
if (private->destroyed) if (private->destroyed)
return; return;
@ -1195,106 +1196,8 @@ gdk_window_withdraw (GdkWindow *window)
} }
void void
gdk_window_move (GdkWindow *window, gdk_win32_window_move_resize (GdkWindow *window,
gint x, gboolean with_move,
gint y)
{
GdkWindowObject *private = (GdkWindowObject *)window;
GdkWindowImplWin32 *impl;
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window))
return;
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 (private->state & GDK_WINDOW_STATE_FULLSCREEN)
return;
/* Don't check GDK_WINDOW_TYPE (private) == GDK_WINDOW_CHILD.
* Foreign windows (another app's windows) might be children of our
* windows! Especially in the case of gtkplug/socket.
*/
if (GetAncestor (GDK_WINDOW_HWND (window), GA_PARENT) != GetDesktopWindow ())
{
_gdk_window_move_resize_child (window, x, y, impl->width, impl->height);
}
else
{
RECT outer_rect;
get_outer_rect (window, impl->width, impl->height, &outer_rect);
adjust_for_gravity_hints (impl, &outer_rect, &x, &y);
GDK_NOTE (MISC, g_print ("... SetWindowPos(%p,NULL,%d,%d,0,0,"
"NOACTIVATE|NOSIZE|NOZORDER)\n",
GDK_WINDOW_HWND (window),
x - _gdk_offset_x, y - _gdk_offset_y));
API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL,
x - _gdk_offset_x, y - _gdk_offset_y, 0, 0,
SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOZORDER));
}
}
void
gdk_window_resize (GdkWindow *window,
gint width,
gint height)
{
GdkWindowObject *private = (GdkWindowObject*) window;
GdkWindowImplWin32 *impl;
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window))
return;
if (width < 1)
width = 1;
if (height < 1)
height = 1;
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);
if (private->state & GDK_WINDOW_STATE_FULLSCREEN)
return;
if (GetAncestor (GDK_WINDOW_HWND (window), GA_PARENT) != GetDesktopWindow ())
{
_gdk_window_move_resize_child (window, private->x, private->y, width, height);
}
else
{
RECT outer_rect;
get_outer_rect (window, width, height, &outer_rect);
GDK_NOTE (MISC, g_print ("... SetWindowPos(%p,NULL,0,0,%ld,%ld,"
"NOACTIVATE|NOMOVE|NOZORDER)\n",
GDK_WINDOW_HWND (window),
outer_rect.right - outer_rect.left,
outer_rect.bottom - outer_rect.top));
API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL,
0, 0,
outer_rect.right - outer_rect.left,
outer_rect.bottom - outer_rect.top,
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER));
private->resize_count += 1;
}
}
void
gdk_window_move_resize (GdkWindow *window,
gint x, gint x,
gint y, gint y,
gint width, gint width,
@ -1303,11 +1206,6 @@ gdk_window_move_resize (GdkWindow *window,
GdkWindowObject *private = (GdkWindowObject*) window; GdkWindowObject *private = (GdkWindowObject*) window;
GdkWindowImplWin32 *impl; GdkWindowImplWin32 *impl;
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window))
return;
if (width < 1) if (width < 1)
width = 1; width = 1;
if (height < 1) if (height < 1)
@ -1341,16 +1239,22 @@ gdk_window_move_resize (GdkWindow *window,
outer_rect.right - outer_rect.left, outer_rect.right - outer_rect.left,
outer_rect.bottom - outer_rect.top)); outer_rect.bottom - outer_rect.top));
UINT uflags = SWP_NOACTIVATE | SWP_NOZORDER;
if (with_move == FALSE)
uflags |= SWP_NOMOVE;
if (width == -1 || height == -1)
uflags |= SWP_NOSIZE;
API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL, API_CALL (SetWindowPos, (GDK_WINDOW_HWND (window), NULL,
x - _gdk_offset_x, y - _gdk_offset_y, x - _gdk_offset_x, y - _gdk_offset_y,
outer_rect.right - outer_rect.left, outer_rect.right - outer_rect.left,
outer_rect.bottom - outer_rect.top, outer_rect.bottom - outer_rect.top,
SWP_NOACTIVATE | SWP_NOZORDER)); uflags));
} }
} }
void static gboolean
_gdk_window_reparent (GdkWindow *window, gdk_win32_window_reparent (GdkWindow *window,
GdkWindow *new_parent, GdkWindow *new_parent,
gint x, gint x,
gint y) gint y)
@ -1439,6 +1343,8 @@ _gdk_window_reparent (GdkWindow *window,
parent_private->children = g_list_prepend (parent_private->children, window); parent_private->children = g_list_prepend (parent_private->children, window);
_gdk_window_init_position (GDK_WINDOW (window_private)); _gdk_window_init_position (GDK_WINDOW (window_private));
return TRUE;
} }
static void static void
@ -1575,22 +1481,26 @@ erase_background (GdkWindow *window,
} }
void void
_gdk_windowing_window_clear_area (GdkWindow *window, _gdk_win32_window_clear_area (GdkWindow *window,
gint x, gint x,
gint y, gint y,
gint width, gint width,
gint height) gint height,
gboolean send_expose)
{ {
GdkWindowImplWin32 *impl; GdkWindowImplWin32 *impl;
g_return_if_fail (GDK_IS_WINDOW (window));
impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl); impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl);
if (!GDK_WINDOW_DESTROYED (window)) if (!GDK_WINDOW_DESTROYED (window))
{ {
HDC hdc; HDC hdc;
RECT rect;
hdc = GetDC (GDK_WINDOW_HWND (window));
if (!send_expose)
{
if (width == 0) if (width == 0)
width = impl->width - x; width = impl->width - x;
if (height == 0) if (height == 0)
@ -1599,35 +1509,14 @@ _gdk_windowing_window_clear_area (GdkWindow *window,
"%dx%d@%+d%+d\n", "%dx%d@%+d%+d\n",
GDK_WINDOW_HWND (window), GDK_WINDOW_HWND (window),
width, height, x, y)); width, height, x, y));
hdc = GetDC (GDK_WINDOW_HWND (window));
IntersectClipRect (hdc, x, y, x + width, y + height); IntersectClipRect (hdc, x, y, x + width, y + height);
erase_background (window, hdc); erase_background (window, hdc);
GDI_CALL (ReleaseDC, (GDK_WINDOW_HWND (window), hdc)); GDI_CALL (ReleaseDC, (GDK_WINDOW_HWND (window), hdc));
} }
} else
void
_gdk_windowing_window_clear_area_e (GdkWindow *window,
gint x,
gint y,
gint width,
gint height)
{ {
g_return_if_fail (GDK_IS_WINDOW (window));
if (!GDK_WINDOW_DESTROYED (window))
{
HDC hdc;
RECT rect;
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));
/* The background should be erased before the expose event is /* The background should be erased before the expose event is
generated */ generated */
hdc = GetDC (GDK_WINDOW_HWND (window));
IntersectClipRect (hdc, x, y, x + width, y + height); IntersectClipRect (hdc, x, y, x + width, y + height);
erase_background (window, hdc); erase_background (window, hdc);
GDI_CALL (ReleaseDC, (GDK_WINDOW_HWND (window), hdc)); GDI_CALL (ReleaseDC, (GDK_WINDOW_HWND (window), hdc));
@ -1641,12 +1530,11 @@ _gdk_windowing_window_clear_area_e (GdkWindow *window,
UpdateWindow (GDK_WINDOW_HWND (window)); UpdateWindow (GDK_WINDOW_HWND (window));
} }
} }
}
void void
gdk_window_raise (GdkWindow *window) gdk_win32_window_raise (GdkWindow *window)
{ {
g_return_if_fail (GDK_IS_WINDOW (window));
if (!GDK_WINDOW_DESTROYED (window)) if (!GDK_WINDOW_DESTROYED (window))
{ {
GDK_NOTE (MISC, g_print ("gdk_window_raise: %p\n", GDK_NOTE (MISC, g_print ("gdk_window_raise: %p\n",
@ -1666,10 +1554,8 @@ gdk_window_raise (GdkWindow *window)
} }
void void
gdk_window_lower (GdkWindow *window) gdk_win32_window_lower (GdkWindow *window)
{ {
g_return_if_fail (GDK_IS_WINDOW (window));
if (!GDK_WINDOW_DESTROYED (window)) if (!GDK_WINDOW_DESTROYED (window))
{ {
GDK_NOTE (MISC, g_print ("gdk_window_lower: %p\n" GDK_NOTE (MISC, g_print ("gdk_window_lower: %p\n"
@ -2074,13 +1960,11 @@ _gdk_modal_current ()
} }
void void
gdk_window_set_background (GdkWindow *window, gdk_win32_window_set_background (GdkWindow *window,
const GdkColor *color) const GdkColor *color)
{ {
GdkWindowObject *private = (GdkWindowObject *)window; GdkWindowObject *private = (GdkWindowObject *)window;
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_WINDOW_HWND (window),
_gdk_win32_color_to_string (color))); _gdk_win32_color_to_string (color)));
@ -2097,16 +1981,12 @@ gdk_window_set_background (GdkWindow *window,
} }
void void
gdk_window_set_back_pixmap (GdkWindow *window, gdk_win32_window_set_back_pixmap (GdkWindow *window,
GdkPixmap *pixmap, GdkPixmap *pixmap,
gint parent_relative) gint parent_relative)
{ {
GdkWindowObject *private = (GdkWindowObject *)window; GdkWindowObject *private = (GdkWindowObject *)window;
g_return_if_fail (GDK_IS_WINDOW (window));
g_return_if_fail (pixmap == NULL || !parent_relative);
g_return_if_fail (pixmap == NULL || gdk_drawable_get_depth (window) == gdk_drawable_get_depth (pixmap));
if (pixmap && !gdk_drawable_get_colormap (pixmap)) if (pixmap && !gdk_drawable_get_colormap (pixmap))
{ {
g_warning ("gdk_window_set_back_pixmap(): pixmap must have a colormap"); g_warning ("gdk_window_set_back_pixmap(): pixmap must have a colormap");
@ -2138,7 +2018,7 @@ gdk_window_set_back_pixmap (GdkWindow *window,
} }
void void
gdk_window_set_cursor (GdkWindow *window, gdk_win32_window_set_cursor (GdkWindow *window,
GdkCursor *cursor) GdkCursor *cursor)
{ {
GdkWindowImplWin32 *impl; GdkWindowImplWin32 *impl;
@ -2147,8 +2027,6 @@ gdk_window_set_cursor (GdkWindow *window,
HCURSOR hcursor; HCURSOR hcursor;
HCURSOR hprevcursor; HCURSOR hprevcursor;
g_return_if_fail (GDK_IS_WINDOW (window));
impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl); impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl);
cursor_private = (GdkCursorPrivate*) cursor; cursor_private = (GdkCursorPrivate*) cursor;
@ -2246,15 +2124,13 @@ gdk_window_set_cursor (GdkWindow *window,
} }
void void
gdk_window_get_geometry (GdkWindow *window, gdk_win32_window_get_geometry (GdkWindow *window,
gint *x, gint *x,
gint *y, gint *y,
gint *width, gint *width,
gint *height, gint *height,
gint *depth) gint *depth)
{ {
g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
if (!window) if (!window)
window = _gdk_root; window = _gdk_root;
@ -2312,7 +2188,7 @@ gdk_window_get_geometry (GdkWindow *window,
} }
gint gint
gdk_window_get_origin (GdkWindow *window, gdk_win32_window_get_origin (GdkWindow *window,
gint *x, gint *x,
gint *y) gint *y)
{ {
@ -2320,8 +2196,6 @@ gdk_window_get_origin (GdkWindow *window,
gint tx = 0; gint tx = 0;
gint ty = 0; gint ty = 0;
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
if (!GDK_WINDOW_DESTROYED (window)) if (!GDK_WINDOW_DESTROYED (window))
{ {
POINT pt; POINT pt;
@ -2561,10 +2435,8 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display,
} }
GdkEventMask GdkEventMask
gdk_window_get_events (GdkWindow *window) gdk_win32_window_get_events (GdkWindow *window)
{ {
g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
if (GDK_WINDOW_DESTROYED (window)) if (GDK_WINDOW_DESTROYED (window))
return 0; return 0;
@ -2572,14 +2444,9 @@ gdk_window_get_events (GdkWindow *window)
} }
void void
gdk_window_set_events (GdkWindow *window, gdk_win32_window_set_events (GdkWindow *window,
GdkEventMask event_mask) GdkEventMask event_mask)
{ {
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window))
return;
/* gdk_window_new() always sets the GDK_STRUCTURE_MASK, so better /* gdk_window_new() always sets the GDK_STRUCTURE_MASK, so better
* set it here, too. Not that I know or remember why it is * set it here, too. Not that I know or remember why it is
* necessary, will have to test some day. * necessary, will have to test some day.
@ -2612,14 +2479,12 @@ do_shape_combine_region (GdkWindow *window,
} }
void void
gdk_window_shape_combine_mask (GdkWindow *window, gdk_win32_window_shape_combine_mask (GdkWindow *window,
GdkBitmap *mask, GdkBitmap *mask,
gint x, gint y) gint x, gint y)
{ {
GdkWindowObject *private = (GdkWindowObject *)window; GdkWindowObject *private = (GdkWindowObject *)window;
g_return_if_fail (GDK_IS_WINDOW (window));
if (!mask) 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",
@ -3135,10 +3000,8 @@ gdk_propagate_shapes (HANDLE win,
} }
void void
gdk_window_set_child_shapes (GdkWindow *window) gdk_win32_window_set_child_shapes (GdkWindow *window)
{ {
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window)) if (GDK_WINDOW_DESTROYED (window))
return; return;
@ -3146,10 +3009,8 @@ gdk_window_set_child_shapes (GdkWindow *window)
} }
void void
gdk_window_merge_child_shapes (GdkWindow *window) gdk_win32_window_merge_child_shapes (GdkWindow *window)
{ {
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window)) if (GDK_WINDOW_DESTROYED (window))
return; return;
@ -3177,7 +3038,7 @@ gdk_window_merge_child_input_shapes (GdkWindow *window)
} }
gboolean gboolean
gdk_window_set_static_gravities (GdkWindow *window, gdk_win32_window_set_static_gravities (GdkWindow *window,
gboolean use_static) gboolean use_static)
{ {
g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE); g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
@ -3666,15 +3527,13 @@ gdk_window_get_type_hint (GdkWindow *window)
} }
void void
gdk_window_shape_combine_region (GdkWindow *window, gdk_win32_window_shape_combine_region (GdkWindow *window,
const GdkRegion *shape_region, const GdkRegion *shape_region,
gint offset_x, gint offset_x,
gint offset_y) gint offset_y)
{ {
GdkWindowObject *private = (GdkWindowObject *)window; GdkWindowObject *private = (GdkWindowObject *)window;
g_return_if_fail (GDK_IS_WINDOW (window));
if (GDK_WINDOW_DESTROYED (window)) if (GDK_WINDOW_DESTROYED (window))
return; return;
@ -3784,3 +3643,31 @@ void
_gdk_windowing_window_set_composited (GdkWindow *window, gboolean composited) _gdk_windowing_window_set_composited (GdkWindow *window, gboolean composited)
{ {
} }
static void
gdk_window_impl_iface_init (GdkWindowImplIface *iface)
{
iface->show = gdk_win32_window_show;
iface->hide = gdk_win32_window_hide;
iface->withdraw = gdk_win32_window_withdraw;
iface->set_events = gdk_win32_window_set_events;
iface->get_events = gdk_win32_window_get_events;
iface->clear_area = _gdk_win32_window_clear_area;
iface->raise = gdk_win32_window_raise;
iface->lower = gdk_win32_window_lower;
iface->move_resize = gdk_win32_window_move_resize;
iface->scroll = _gdk_win32_window_scroll;
iface->move_region = _gdk_win32_window_move_region;
iface->set_background = gdk_win32_window_set_background;
iface->set_back_pixmap = gdk_win32_window_set_back_pixmap;
iface->reparent = gdk_win32_window_reparent;
iface->set_cursor = gdk_win32_window_set_cursor;
iface->get_geometry = gdk_win32_window_get_geometry;
iface->get_origin = gdk_win32_window_get_origin;
iface->shape_combine_mask = gdk_win32_window_shape_combine_mask;
iface->shape_combine_region = gdk_win32_window_shape_combine_region;
iface->set_child_shapes = gdk_win32_window_set_child_shapes;
iface->merge_child_shapes = gdk_win32_window_merge_child_shapes;
iface->set_static_gravities = gdk_win32_window_set_static_gravities;
iface->get_offsets = _gdk_win32_windowing_window_get_offsets;
}