win32: Remove all uses of get_root_window

This is following similar changes done in the x11 and
broadway backends, but it has not been built.
Some fixups may be needed.
This commit is contained in:
Matthias Clasen 2017-11-14 18:05:41 -05:00
parent 77efc60a15
commit e2682e62a8
9 changed files with 69 additions and 109 deletions

View File

@ -108,30 +108,39 @@ gdk_device_win32_query_state (GdkDevice *device,
{ {
POINT point; POINT point;
HWND hwnd, hwndc; HWND hwnd, hwndc;
GdkWindowImplWin32 *impl; gint scale;
if (window == NULL)
window = gdk_win32_display_get_root_window (gdk_display_get_default ());
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
if (window)
{
scale = GDK_WINDOW_IMPL_WIN32 (window->impl)->window_scale;
hwnd = GDK_WINDOW_HWND (window); hwnd = GDK_WINDOW_HWND (window);
}
else
{
GdkDisplay *display = gdk_device_get_display (device);
scale = GDK_WIN32_SCREEN (GDK_WIN32_DISPLAY (display)->screen)->window_scale;
hwnd = NULL;
}
GetCursorPos (&point); GetCursorPos (&point);
if (root_x) if (root_x)
*root_x = point.x / impl->window_scale; *root_x = point.x / scale;
if (root_y) if (root_y)
*root_y = point.y / impl->window_scale; *root_y = point.y / scale;
if (hwnd)
ScreenToClient (hwnd, &point); ScreenToClient (hwnd, &point);
if (win_x) if (win_x)
*win_x = point.x / impl->window_scale; *win_x = point.x / scale;
if (win_y) if (win_y)
*win_y = point.y / impl->window_scale; *win_y = point.y / scale;
if (window == gdk_win32_display_get_root_window (gdk_display_get_default ())) if (window)
{ {
if (win_x) if (win_x)
*win_x += _gdk_offset_x; *win_x += _gdk_offset_x;
@ -146,7 +155,7 @@ gdk_device_win32_query_state (GdkDevice *device,
*root_y += _gdk_offset_y; *root_y += _gdk_offset_y;
} }
if (child_window) if (hwnd && child_window)
{ {
hwndc = ChildWindowFromPoint (hwnd, point); hwndc = ChildWindowFromPoint (hwnd, point);
@ -247,15 +256,12 @@ _gdk_device_win32_window_at_position (GdkDevice *device,
/* If we didn't hit any window at that point, return the desktop */ /* If we didn't hit any window at that point, return the desktop */
if (hwnd == NULL) if (hwnd == NULL)
{ {
window = gdk_win32_display_get_root_window (gdk_display_get_default ());
impl = GDK_WINDOW_IMPL_WIN32 (window->impl);
if (win_x) if (win_x)
*win_x = (screen_pt.x + _gdk_offset_x) / impl->window_scale; *win_x = screen_pt.x + _gdk_offset_x;
if (win_y) if (win_y)
*win_y = (screen_pt.y + _gdk_offset_y) / impl->window_scale; *win_y = screen_pt.y + _gdk_offset_y;
return window; return NULL;
} }
window = gdk_win32_handle_table_lookup (hwnd); window = gdk_win32_handle_table_lookup (hwnd);

View File

@ -120,30 +120,40 @@ gdk_device_wintab_query_state (GdkDevice *device,
POINT point; POINT point;
HWND hwnd, hwndc; HWND hwnd, hwndc;
GdkWindowImplWin32 *impl; GdkWindowImplWin32 *impl;
int scale;
device_wintab = GDK_DEVICE_WINTAB (device); device_wintab = GDK_DEVICE_WINTAB (device);
if (window == NULL) if (window)
window = gdk_win32_display_get_root_window (gdk_display_get_default ()); {
impl = GDK_WINDOW_IMPL_WIN32 (window->impl); scale = GDK_WINDOW_IMPL_WIN32 (window->impl)->window_scale;
hwnd = GDK_WINDOW_HWND (window); hwnd = GDK_WINDOW_HWND (window);
}
else
{
GdkDisplay *display = gdk_device_get_display (device);
scale = GDK_WIN32_SCREEN (GDK_WIN32_DISPLAY (display)->screen)->window_scale;
hwnd = NULL;
}
GetCursorPos (&point); GetCursorPos (&point);
if (root_x) if (root_x)
*root_x = point.x / impl->window_scale; *root_x = point.x / scale;
if (root_y) if (root_y)
*root_y = point.y / impl->window_scale; *root_y = point.y / scale;
if (hwn)
ScreenToClient (hwnd, &point); ScreenToClient (hwnd, &point);
if (win_x) if (win_x)
*win_x = point.x / impl->window_scale; *win_x = point.x / scale;
if (win_y) if (win_y)
*win_y = point.y / impl->window_scale; *win_y = point.y / scale;
if (window == gdk_win32_display_get_root_window (gdk_display_get_default ())) if (!window)
{ {
if (win_x) if (win_x)
*win_x += _gdk_offset_x; *win_x += _gdk_offset_x;
@ -152,7 +162,7 @@ gdk_device_wintab_query_state (GdkDevice *device,
*win_y += _gdk_offset_y; *win_y += _gdk_offset_y;
} }
if (child_window) if (hwnd && child_window)
{ {
hwndc = ChildWindowFromPoint (hwnd, point); hwndc = ChildWindowFromPoint (hwnd, point);
@ -217,18 +227,20 @@ _gdk_device_wintab_translate_axes (GdkDeviceWintab *device_wintab,
gdouble *y) gdouble *y)
{ {
GdkDevice *device; GdkDevice *device;
GdkWindow *impl_window, *root_window; GdkWindow *impl_window;
gint root_x, root_y; gint root_x, root_y;
gdouble temp_x, temp_y; gdouble temp_x, temp_y;
gint i; gint i;
GdkDisplay *display;
device = GDK_DEVICE (device_wintab); device = GDK_DEVICE (device_wintab);
root_window = gdk_win32_display_get_root_window (gdk_window_get_display (window));
impl_window = _gdk_window_get_impl_window (window); impl_window = _gdk_window_get_impl_window (window);
temp_x = temp_y = 0; temp_x = temp_y = 0;
gdk_window_get_origin (impl_window, &root_x, &root_y); gdk_window_get_origin (impl_window, &root_x, &root_y);
display = gdk_device_get_display (device);
for (i = 0; i < gdk_device_get_n_axes (device); i++) for (i = 0; i < gdk_device_get_n_axes (device); i++)
{ {
GdkAxisUse use; GdkAxisUse use;
@ -246,8 +258,8 @@ _gdk_device_wintab_translate_axes (GdkDeviceWintab *device_wintab,
else else
_gdk_device_translate_screen_coord (device, window, _gdk_device_translate_screen_coord (device, window,
root_x, root_y, root_x, root_y,
gdk_window_get_width (root_window), GDK_WIN32_SCREEN (GDK_WIN32_DISPLAY (display)->screen)->width,
gdk_window_get_height (root_window), GDK_WIN32_SCREEN (GDK_WIN32_DISPLAY (display)->screen)->height,
i, i,
device_wintab->last_axis_data[i], device_wintab->last_axis_data[i],
&axes[i]); &axes[i]);

View File

@ -353,7 +353,6 @@ static void
wintab_init_check (GdkDeviceManagerWin32 *device_manager) wintab_init_check (GdkDeviceManagerWin32 *device_manager)
{ {
GdkDisplay *display = gdk_device_manager_get_display (GDK_DEVICE_MANAGER (device_manager)); GdkDisplay *display = gdk_device_manager_get_display (GDK_DEVICE_MANAGER (device_manager));
GdkWindow *root = gdk_win32_display_get_root_window (display);
static gboolean wintab_initialized = FALSE; static gboolean wintab_initialized = FALSE;
GdkDeviceWintab *device; GdkDeviceWintab *device;
WORD specversion; WORD specversion;
@ -960,14 +959,13 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
device_manager = GDK_DEVICE_MANAGER_WIN32 (gdk_display_get_device_manager (display)); device_manager = GDK_DEVICE_MANAGER_WIN32 (gdk_display_get_device_manager (display));
G_GNUC_END_IGNORE_DEPRECATIONS; G_GNUC_END_IGNORE_DEPRECATIONS;
window = gdk_device_get_window_at_position (device_manager->core_pointer, &x, &y); window = gdk_device_get_window_at_position (device_manager->core_pointer, &x, &y);
if (window == NULL)
window = gdk_win32_display_get_root_window (gdk_display_get_default ());
if (window)
g_object_ref (window); g_object_ref (window);
GDK_NOTE (EVENTS_OR_INPUT, GDK_NOTE (EVENTS_OR_INPUT,
g_print ("gdk_input_other_event: window=%p %+d%+d\n", g_print ("gdk_input_other_event: window=%p %+d%+d\n",
GDK_WINDOW_HWND (window), x, y)); window ? GDK_WINDOW_HWND (window) : NULL, x, y));
if (msg->message == WT_PACKET || msg->message == WT_CSRCHANGE) if (msg->message == WT_PACKET || msg->message == WT_CSRCHANGE)
{ {
@ -1004,7 +1002,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS;
window = g_object_ref (last_grab->window); window = g_object_ref (last_grab->window);
} }
if (window == gdk_win32_display_get_root_window (gdk_display_get_default ())) if (window == NULL)
{ {
GDK_NOTE (EVENTS_OR_INPUT, g_print ("... is root\n")); GDK_NOTE (EVENTS_OR_INPUT, g_print ("... is root\n"));
return FALSE; return FALSE;

View File

@ -619,7 +619,7 @@ inner_clipboard_window_procedure (HWND hwnd,
GDK_NOTE (DND, g_print (" \n")); GDK_NOTE (DND, g_print (" \n"));
event = gdk_event_new (GDK_OWNER_CHANGE); event = gdk_event_new (GDK_OWNER_CHANGE);
event->owner_change.window = gdk_win32_display_get_root_window (gdk_display_get_default ()); event->owner_change.window = NULL;
event->owner_change.reason = GDK_OWNER_CHANGE_NEW_OWNER; event->owner_change.reason = GDK_OWNER_CHANGE_NEW_OWNER;
event->owner_change.selection = GDK_SELECTION_CLIPBOARD; event->owner_change.selection = GDK_SELECTION_CLIPBOARD;
event->owner_change.time = _gdk_win32_get_next_tick (0); event->owner_change.time = _gdk_win32_get_next_tick (0);
@ -1225,12 +1225,6 @@ gdk_win32_display_get_setting (GdkDisplay *display,
value); value);
} }
GdkWindow *
gdk_win32_display_get_root_window (GdkDisplay *display)
{
return gdk_win32_screen_get_root_window (GDK_WIN32_DISPLAY (display)->screen);
}
static void static void
gdk_win32_display_class_init (GdkWin32DisplayClass *klass) gdk_win32_display_class_init (GdkWin32DisplayClass *klass)
{ {

View File

@ -729,11 +729,6 @@ idropsource_givefeedback (LPDROPSOURCE This,
ctx->context->dest_window = NULL; ctx->context->dest_window = NULL;
} }
} }
else
{
if (ctx->context->dest_window == NULL)
ctx->context->dest_window = g_object_ref (gdk_win32_display_get_root_window (gdk_display_get_default ()));
}
return DRAGDROP_S_USEDEFAULTCURSORS; return DRAGDROP_S_USEDEFAULTCURSORS;
} }
@ -1431,8 +1426,7 @@ gdk_dropfiles_filter (GdkXEvent *xev,
context->protocol = GDK_DRAG_PROTO_WIN32_DROPFILES; context->protocol = GDK_DRAG_PROTO_WIN32_DROPFILES;
context->is_source = FALSE; context->is_source = FALSE;
context->source_window = gdk_win32_display_get_root_window (gdk_display_get_default ()); context->source_window = NULL;
g_object_ref (context->source_window);
context->dest_window = event->any.window; context->dest_window = event->any.window;
g_object_ref (context->dest_window); g_object_ref (context->dest_window);

View File

@ -2160,9 +2160,7 @@ gdk_event_translate (MSG *msg,
{ {
/* Apply global filters */ /* Apply global filters */
GdkFilterReturn result = apply_event_filters (window ? window : gdk_win32_display_get_root_window (display), GdkFilterReturn result = apply_event_filters (window, msg, &_gdk_default_filters);
msg,
&_gdk_default_filters);
/* If result is GDK_FILTER_CONTINUE, we continue as if nothing /* If result is GDK_FILTER_CONTINUE, we continue as if nothing
* happened. If it is GDK_FILTER_REMOVE or GDK_FILTER_TRANSLATE, * happened. If it is GDK_FILTER_REMOVE or GDK_FILTER_TRANSLATE,

View File

@ -295,7 +295,7 @@ _gdk_win32_window_delete_property (GdkWindow *window,
if (property == _gdk_selection) if (property == _gdk_selection)
_gdk_selection_property_delete (window); _gdk_selection_property_delete (window);
else if (property == _wm_transient_for) else if (property == _wm_transient_for)
gdk_window_set_transient_for (window, gdk_win32_display_get_root_window (gdk_window_get_display (window))); gdk_window_set_transient_for (window, NULL);
else else
{ {
prop_name = gdk_atom_name (property); prop_name = gdk_atom_name (property);

View File

@ -33,7 +33,8 @@ struct _GdkWin32Screen
{ {
GdkScreen parent_instance; GdkScreen parent_instance;
GdkWindow *root_window; int width, height;
int window_scale;
}; };
struct _GdkWin32ScreenClass struct _GdkWin32ScreenClass
@ -66,61 +67,29 @@ init_root_window_size (GdkWin32Screen *screen)
gdk_rectangle_union (&result, &rect, &result); gdk_rectangle_union (&result, &rect, &result);
} }
screen->root_window->width = result.width; screen->width = result.width;
screen->root_window->height = result.height; screen->height = result.height;
root_impl = GDK_WINDOW_IMPL_WIN32 (screen->root_window->impl);
root_impl->unscaled_width = result.width * root_impl->window_scale;
root_impl->unscaled_height = result.height * root_impl->window_scale;
} }
static void static void
init_root_window (GdkWin32Screen *screen_win32) init_root_window (GdkWin32Screen *screen_win32)
{ {
GdkScreen *screen; GdkScreen *screen;
GdkWindow *window;
GdkWindowImplWin32 *impl_win32;
GdkWin32Display *win32_display; GdkWin32Display *win32_display;
screen = GDK_SCREEN (screen_win32); screen = GDK_SCREEN (screen_win32);
g_assert (screen_win32->root_window == NULL);
window = _gdk_display_create_window (_gdk_display);
window->impl = g_object_new (GDK_TYPE_WINDOW_IMPL_WIN32, NULL);
impl_win32 = GDK_WINDOW_IMPL_WIN32 (window->impl);
impl_win32->wrapper = window;
window->impl_window = window;
window->window_type = GDK_WINDOW_ROOT;
screen_win32->root_window = window;
init_root_window_size (screen_win32); init_root_window_size (screen_win32);
window->x = 0;
window->y = 0;
window->abs_x = 0;
window->abs_y = 0;
/* width and height already initialised in init_root_window_size() */
window->viewable = TRUE;
win32_display = GDK_WIN32_DISPLAY (_gdk_display); win32_display = GDK_WIN32_DISPLAY (_gdk_display);
if (win32_display->dpi_aware_type != PROCESS_DPI_UNAWARE) if (win32_display->dpi_aware_type != PROCESS_DPI_UNAWARE)
impl_win32->window_scale = _gdk_win32_display_get_monitor_scale_factor (win32_display, screen_win32->window_scale = _gdk_win32_display_get_monitor_scale_factor (win32_display,
NULL,
NULL, NULL,
impl_win32->handle,
NULL); NULL);
else else
impl_win32->window_scale = 1; screen_win32->window_scale = 1;
impl_win32->unscaled_width = window->width * impl_win32->window_scale;
impl_win32->unscaled_height = window->height * impl_win32->window_scale;
gdk_win32_handle_table_insert ((HANDLE *) &impl_win32->handle, window);
GDK_NOTE (MISC, g_print ("screen->root_window=%p\n", window));
} }
static void static void
@ -140,12 +109,6 @@ _gdk_win32_screen_on_displaychange_event (GdkWin32Screen *screen)
init_root_window_size (screen); init_root_window_size (screen);
} }
GdkWindow *
gdk_win32_screen_get_root_window (GdkScreen *screen)
{
return GDK_WIN32_SCREEN (screen)->root_window;
}
static void static void
gdk_win32_screen_finalize (GObject *object) gdk_win32_screen_finalize (GObject *object)
{ {

View File

@ -465,9 +465,6 @@ _gdk_win32_window_enable_transparency (GdkWindow *window)
if (!gdk_display_is_composited (gdk_window_get_display (window))) if (!gdk_display_is_composited (gdk_window_get_display (window)))
return FALSE; return FALSE;
if (window == gdk_win32_display_get_root_window (gdk_window_get_display (window)))
return FALSE;
thiswindow = GDK_WINDOW_HWND (window); thiswindow = GDK_WINDOW_HWND (window);
/* Blurbehind only works on toplevel windows */ /* Blurbehind only works on toplevel windows */
@ -744,9 +741,7 @@ _gdk_win32_display_create_window_impl (GdkDisplay *display,
case GDK_WINDOW_TEMP: case GDK_WINDOW_TEMP:
/* A temp window is not necessarily a top level window */ /* A temp window is not necessarily a top level window */
dwStyle = (real_parent == NULL || dwStyle = real_parent == NULL ? WS_POPUP : WS_CHILDWINDOW;
gdk_win32_display_get_root_window (display) == real_parent) ?
WS_POPUP : WS_CHILDWINDOW;
dwStyle |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS; dwStyle |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
dwExStyle |= WS_EX_TOOLWINDOW | WS_EX_TOPMOST; dwExStyle |= WS_EX_TOOLWINDOW | WS_EX_TOPMOST;
offset_x = _gdk_offset_x; offset_x = _gdk_offset_x;