diff options
author | Paolo Borelli <pborelli@gnome.org> | 2015-12-18 00:36:57 +0100 |
---|---|---|
committer | Ignacio Casal Quinteiro <icq@gnome.org> | 2016-01-14 14:30:37 +0100 |
commit | 3cd79c11fcd14daf1058077e58a5ff154e09b06c (patch) | |
tree | 8c2d4f53e45c939ca0bd0945c4ddebd659f8802b /gdk | |
parent | e44b42061737ec4f6dbdad8f1a6dc2d53ea3dd02 (diff) | |
download | gtk+-3cd79c11fcd14daf1058077e58a5ff154e09b06c.tar.gz |
win32: remove _gdk_root global variable
Diffstat (limited to 'gdk')
-rw-r--r-- | gdk/win32/gdkdevice-win32.c | 15 | ||||
-rw-r--r-- | gdk/win32/gdkdevice-wintab.c | 11 | ||||
-rw-r--r-- | gdk/win32/gdkdevicemanager-win32.c | 7 | ||||
-rw-r--r-- | gdk/win32/gdkdisplay-win32.c | 8 | ||||
-rw-r--r-- | gdk/win32/gdkdnd-win32.c | 4 | ||||
-rw-r--r-- | gdk/win32/gdkevents-win32.c | 4 | ||||
-rw-r--r-- | gdk/win32/gdkglobals-win32.c | 1 | ||||
-rw-r--r-- | gdk/win32/gdkprivate-win32.h | 7 | ||||
-rw-r--r-- | gdk/win32/gdkproperty-win32.c | 7 | ||||
-rw-r--r-- | gdk/win32/gdkscreen-win32.c | 66 | ||||
-rw-r--r-- | gdk/win32/gdkwindow-win32.c | 95 |
11 files changed, 124 insertions, 101 deletions
diff --git a/gdk/win32/gdkdevice-win32.c b/gdk/win32/gdkdevice-win32.c index d27034cd5d..167ad4adc4 100644 --- a/gdk/win32/gdkdevice-win32.c +++ b/gdk/win32/gdkdevice-win32.c @@ -175,9 +175,12 @@ gdk_device_win32_query_state (GdkDevice *device, gdouble *win_y, GdkModifierType *mask) { + GdkScreen *screen; POINT point; HWND hwnd, hwndc; + screen = gdk_window_get_screen (window); + hwnd = GDK_WINDOW_HWND (window); GetCursorPos (&point); @@ -195,7 +198,7 @@ gdk_device_win32_query_state (GdkDevice *device, if (win_y) *win_y = point.y; - if (window == _gdk_root) + if (window == gdk_screen_get_root_window (screen)) { if (win_x) *win_x += _gdk_offset_x; @@ -221,12 +224,7 @@ gdk_device_win32_query_state (GdkDevice *device, } if (root_window) - { - GdkScreen *screen; - - screen = gdk_window_get_screen (window); - *root_window = gdk_screen_get_root_window (screen); - } + *root_window = gdk_screen_get_root_window (screen); if (mask) *mask = get_current_mask (); @@ -322,7 +320,8 @@ _gdk_device_win32_window_at_position (GdkDevice *device, *win_x = screen_pt.x + _gdk_offset_x; if (win_y) *win_y = screen_pt.y + _gdk_offset_y; - return _gdk_root; + + return gdk_get_default_root_window (); } window = gdk_win32_handle_table_lookup (hwnd); diff --git a/gdk/win32/gdkdevice-wintab.c b/gdk/win32/gdkdevice-wintab.c index e411bfd28d..585a6f1f70 100644 --- a/gdk/win32/gdkdevice-wintab.c +++ b/gdk/win32/gdkdevice-wintab.c @@ -184,10 +184,12 @@ gdk_device_wintab_query_state (GdkDevice *device, GdkModifierType *mask) { GdkDeviceWintab *device_wintab; + GdkScreen *screen; POINT point; HWND hwnd, hwndc; device_wintab = GDK_DEVICE_WINTAB (device); + screen = gdk_window_get_screen (window); hwnd = GDK_WINDOW_HWND (window); GetCursorPos (&point); @@ -206,7 +208,7 @@ gdk_device_wintab_query_state (GdkDevice *device, if (win_y) *win_y = point.y; - if (window == _gdk_root) + if (window == gdk_get_default_root_window ()) { if (win_x) *win_x += _gdk_offset_x; @@ -226,12 +228,7 @@ gdk_device_wintab_query_state (GdkDevice *device, } if (root_window) - { - GdkScreen *screen; - - screen = gdk_window_get_screen (window); - *root_window = gdk_screen_get_root_window (screen); - } + *root_window = gdk_screen_get_root_window (screen); if (mask) { diff --git a/gdk/win32/gdkdevicemanager-win32.c b/gdk/win32/gdkdevicemanager-win32.c index e6a239cca5..8f38d516f1 100644 --- a/gdk/win32/gdkdevicemanager-win32.c +++ b/gdk/win32/gdkdevicemanager-win32.c @@ -919,7 +919,7 @@ _gdk_input_other_event (GdkEvent *event, device_manager = GDK_DEVICE_MANAGER_WIN32 (gdk_display_get_device_manager (_gdk_display)); window = gdk_device_get_window_at_position (device_manager->core_pointer, &x, &y); if (window == NULL) - window = _gdk_root; + window = gdk_get_default_root_window (); g_object_ref (window); @@ -961,7 +961,7 @@ _gdk_input_other_event (GdkEvent *event, window = g_object_ref (last_grab->window); } - if (window == _gdk_root) + if (window == gdk_get_default_root_window ()) { GDK_NOTE (EVENTS_OR_INPUT, g_print ("... is root\n")); return FALSE; @@ -1038,8 +1038,7 @@ _gdk_input_other_event (GdkEvent *event, { GDK_NOTE (EVENTS_OR_INPUT, g_print ("... not selected\n")); - if (window->parent == GDK_WINDOW (_gdk_root) || - window->parent == NULL) + if (window->parent == gdk_get_default_root_window () || window->parent == NULL) return FALSE; pt.x = x; diff --git a/gdk/win32/gdkdisplay-win32.c b/gdk/win32/gdkdisplay-win32.c index c963b52b12..29d6e6032e 100644 --- a/gdk/win32/gdkdisplay-win32.c +++ b/gdk/win32/gdkdisplay-win32.c @@ -260,7 +260,7 @@ inner_display_change_window_procedure (HWND hwnd, case WM_DISPLAYCHANGE: { _gdk_monitor_init (); - _gdk_root_window_size_init (); + _gdk_screen_init_root_window_size (GDK_WIN32_SCREEN (_gdk_screen)); g_signal_emit_by_name (_gdk_screen, "size_changed"); return 0; @@ -345,7 +345,7 @@ _gdk_win32_display_open (const gchar *display_name) _gdk_monitor_init (); _gdk_visual_init (_gdk_screen); - _gdk_windowing_window_init (_gdk_screen); + _gdk_screen_init_root_window (GDK_WIN32_SCREEN (_gdk_screen)); _gdk_events_init (); _gdk_input_init (_gdk_display); _gdk_dnd_init (); @@ -520,9 +520,8 @@ inner_clipboard_window_procedure (HWND hwnd, GDK_NOTE (DND, g_print (" \n")); - event = gdk_event_new (GDK_OWNER_CHANGE); - event->owner_change.window = _gdk_root; + event->owner_change.window = gdk_get_default_root_window (); event->owner_change.owner = owner; event->owner_change.reason = GDK_OWNER_CHANGE_NEW_OWNER; event->owner_change.selection = GDK_SELECTION_CLIPBOARD; @@ -575,7 +574,6 @@ register_clipboard_notification (GdkDisplay *display) { GdkWin32Display *display_win32 = GDK_WIN32_DISPLAY (display); WNDCLASS wclass = { 0, }; - HWND hwnd; ATOM klass; wclass.lpszClassName = "GdkClipboardNotification"; diff --git a/gdk/win32/gdkdnd-win32.c b/gdk/win32/gdkdnd-win32.c index 376ea0f654..379c80db19 100644 --- a/gdk/win32/gdkdnd-win32.c +++ b/gdk/win32/gdkdnd-win32.c @@ -728,7 +728,7 @@ idropsource_givefeedback (LPDROPSOURCE This, else { if (ctx->context->dest_window == NULL) - ctx->context->dest_window = g_object_ref (_gdk_root); + ctx->context->dest_window = g_object_ref (gdk_get_default_root_window ()); } return DRAGDROP_S_USEDEFAULTCURSORS; @@ -1445,7 +1445,7 @@ gdk_dropfiles_filter (GdkXEvent *xev, device = gdk_device_manager_get_client_pointer (device_manager); gdk_drag_context_set_device (context, device); - context->source_window = _gdk_root; + context->source_window = gdk_get_default_root_window (); g_object_ref (context->source_window); context->dest_window = event->any.window; diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c index 77241ad37f..bb2a2dea1a 100644 --- a/gdk/win32/gdkevents-win32.c +++ b/gdk/win32/gdkevents-win32.c @@ -1357,7 +1357,7 @@ propagate (GdkWindow **window, { /* Owner doesn't want it, propagate to parent. */ GdkWindow *parent = gdk_window_get_parent (*window); - if (parent == _gdk_root || parent == NULL) + if (parent == gdk_get_default_root_window () || parent == NULL) { /* No parent; check if grabbed */ if (grab_window != NULL) @@ -1431,7 +1431,7 @@ _gdk_win32_emit_configure_event (GdkWindow *window) point.y = client_rect.top; /* top level windows need screen coords */ - if (gdk_window_get_parent (window) == _gdk_root) + if (gdk_window_get_parent (window) == gdk_get_default_root_window ()) { ClientToScreen (hwnd, &point); point.x += _gdk_offset_x; diff --git a/gdk/win32/gdkglobals-win32.c b/gdk/win32/gdkglobals-win32.c index d678e351d8..c03a230a4c 100644 --- a/gdk/win32/gdkglobals-win32.c +++ b/gdk/win32/gdkglobals-win32.c @@ -29,7 +29,6 @@ GdkDisplay *_gdk_display = NULL; GdkScreen *_gdk_screen = NULL; -GdkWindow *_gdk_root = NULL; gint _gdk_num_monitors; GdkWin32Monitor *_gdk_monitors = NULL; diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h index f216d3816b..a4e68091b1 100644 --- a/gdk/win32/gdkprivate-win32.h +++ b/gdk/win32/gdkprivate-win32.h @@ -38,6 +38,7 @@ #include <gdk/gdkcursorprivate.h> #include <gdk/win32/gdkwindow-win32.h> #include <gdk/win32/gdkwin32display.h> +#include <gdk/win32/gdkwin32screen.h> #include "gdkinternals.h" @@ -254,8 +255,6 @@ void _gdk_other_api_failed (const gchar *where, extern LRESULT CALLBACK _gdk_win32_window_procedure (HWND, UINT, WPARAM, LPARAM); -extern GdkWindow *_gdk_root; - extern GdkDisplay *_gdk_display; extern GdkScreen *_gdk_screen; @@ -545,8 +544,8 @@ void _gdk_win32_emit_configure_event (GdkWindow *window); /* Initialization */ void _gdk_win32_windowing_init (void); -void _gdk_windowing_window_init (GdkScreen *screen); -void _gdk_root_window_size_init (void); +void _gdk_screen_init_root_window (GdkWin32Screen *screen_win32); +void _gdk_screen_init_root_window_size (GdkWin32Screen *screen); void _gdk_monitor_init(void); void _gdk_visual_init (GdkScreen *screen); void _gdk_dnd_init (void); diff --git a/gdk/win32/gdkproperty-win32.c b/gdk/win32/gdkproperty-win32.c index dd98bc86ee..a3936998d5 100644 --- a/gdk/win32/gdkproperty-win32.c +++ b/gdk/win32/gdkproperty-win32.c @@ -293,7 +293,12 @@ _gdk_win32_window_delete_property (GdkWindow *window, if (property == _gdk_selection) _gdk_selection_property_delete (window); else if (property == _wm_transient_for) - gdk_window_set_transient_for (window, _gdk_root); + { + GdkScreen *screen; + + screen = gdk_window_get_screen (window); + gdk_window_set_transient_for (window, gdk_screen_get_root_window (screen)); + } else { prop_name = gdk_atom_name (property); diff --git a/gdk/win32/gdkscreen-win32.c b/gdk/win32/gdkscreen-win32.c index c637b95b81..efbbce0147 100644 --- a/gdk/win32/gdkscreen-win32.c +++ b/gdk/win32/gdkscreen-win32.c @@ -20,12 +20,16 @@ #include "gdkprivate-win32.h" #include "gdkscreenprivate.h" #include "gdkwin32screen.h" +#include "gdkdisplayprivate.h" +#include "gdkvisualprivate.h" #include <dwmapi.h> struct _GdkWin32Screen { GdkScreen parent_instance; + + GdkWindow *root_window; }; struct _GdkWin32ScreenClass @@ -36,9 +40,9 @@ struct _GdkWin32ScreenClass G_DEFINE_TYPE (GdkWin32Screen, gdk_win32_screen, GDK_TYPE_SCREEN) static void -gdk_win32_screen_init (GdkWin32Screen *display) +gdk_win32_screen_init (GdkWin32Screen *win32_screen) { - GdkScreen *screen = GDK_SCREEN (display); + GdkScreen *screen = GDK_SCREEN (win32_screen); HDC screen_dc; int logpixelsx = -1; const gchar *font_resolution; @@ -63,6 +67,58 @@ gdk_win32_screen_init (GdkWin32Screen *display) _gdk_screen_set_resolution (screen, logpixelsx); } +void +_gdk_screen_init_root_window_size (GdkWin32Screen *screen) +{ + GdkRectangle rect; + int i; + + rect = _gdk_monitors[0].rect; + for (i = 1; i < _gdk_num_monitors; i++) + gdk_rectangle_union (&rect, &_gdk_monitors[i].rect, &rect); + + screen->root_window->width = rect.width; + screen->root_window->height = rect.height; +} + +void +_gdk_screen_init_root_window (GdkWin32Screen *screen_win32) +{ + GdkScreen *screen; + GdkWindow *window; + GdkWindowImplWin32 *impl_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->visual = gdk_screen_get_system_visual (screen); + + window->window_type = GDK_WINDOW_ROOT; + window->depth = window->visual->depth; + + screen_win32->root_window = window; + + _gdk_screen_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 _gdk_screen_init_root_window_size() */ + window->viewable = TRUE; + + gdk_win32_handle_table_insert ((HANDLE *) &impl_win32->handle, window); + + GDK_NOTE (MISC, g_print ("screen->root_window=%p\n", window)); +} + static GdkDisplay * gdk_win32_screen_get_display (GdkScreen *screen) { @@ -72,13 +128,13 @@ gdk_win32_screen_get_display (GdkScreen *screen) static gint gdk_win32_screen_get_width (GdkScreen *screen) { - return GDK_WINDOW (_gdk_root)->width; + return GDK_WIN32_SCREEN (screen)->root_window->width; } static gint gdk_win32_screen_get_height (GdkScreen *screen) { - return GDK_WINDOW (_gdk_root)->height; + return GDK_WIN32_SCREEN (screen)->root_window->height; } static gint @@ -96,7 +152,7 @@ gdk_win32_screen_get_height_mm (GdkScreen *screen) static GdkWindow * gdk_win32_screen_get_root_window (GdkScreen *screen) { - return _gdk_root; + return GDK_WIN32_SCREEN (screen)->root_window; } static gint diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c index b3ee42271b..83ab48bfe2 100644 --- a/gdk/win32/gdkwindow-win32.c +++ b/gdk/win32/gdkwindow-win32.c @@ -195,60 +195,10 @@ _gdk_win32_adjust_client_rect (GdkWindow *window, API_CALL (AdjustWindowRectEx, (rect, style, FALSE, exstyle)); } -void -_gdk_root_window_size_init (void) -{ - GdkWindow *window; - GdkRectangle rect; - int i; - - window = GDK_WINDOW (_gdk_root); - rect = _gdk_monitors[0].rect; - for (i = 1; i < _gdk_num_monitors; i++) - gdk_rectangle_union (&rect, &_gdk_monitors[i].rect, &rect); - - window->width = rect.width; - window->height = rect.height; -} - -void -_gdk_windowing_window_init (GdkScreen *screen) -{ - GdkWindow *window; - GdkWindowImplWin32 *impl_win32; - - g_assert (_gdk_root == NULL); - - _gdk_root = _gdk_display_create_window (_gdk_display); - - window = (GdkWindow *)_gdk_root; - 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->visual = gdk_screen_get_system_visual (screen); - - window->window_type = GDK_WINDOW_ROOT; - window->depth = window->visual->depth; - - _gdk_root_window_size_init (); - - window->x = 0; - window->y = 0; - window->abs_x = 0; - window->abs_y = 0; - /* width and height already initialised in _gdk_root_window_size_init() */ - window->viewable = TRUE; - - gdk_win32_handle_table_insert ((HANDLE *) &impl_win32->handle, _gdk_root); - - GDK_NOTE (MISC, g_print ("_gdk_root=%p\n", GDK_WINDOW_HWND (_gdk_root))); -} - gboolean _gdk_win32_window_enable_transparency (GdkWindow *window) { + GdkScreen *screen; DWM_BLURBEHIND blur_behind; HRGN empty_region; HRESULT call_result; @@ -257,10 +207,12 @@ _gdk_win32_window_enable_transparency (GdkWindow *window) if (window == NULL || GDK_WINDOW_HWND (window) == NULL) return FALSE; - if (!gdk_screen_is_composited (gdk_window_get_screen (window))) + screen = gdk_window_get_screen (window); + + if (!gdk_screen_is_composited (screen)) return FALSE; - if (window == _gdk_root) + if (window == gdk_screen_get_root_window (screen)) return FALSE; thiswindow = GDK_WINDOW_HWND (window); @@ -591,7 +543,7 @@ _gdk_win32_display_create_window_impl (GdkDisplay *display, case GDK_WINDOW_TEMP: /* A temp window is not necessarily a top level window */ - dwStyle = (_gdk_root == real_parent ? WS_POPUP : WS_CHILDWINDOW); + dwStyle = (gdk_screen_get_root_window (screen) == real_parent ? WS_POPUP : WS_CHILDWINDOW); dwStyle |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS; dwExStyle |= WS_EX_TOOLWINDOW | WS_EX_TOPMOST; offset_x = _gdk_offset_x; @@ -766,7 +718,7 @@ gdk_win32_window_foreign_new_for_display (GdkDisplay *display, window->parent = gdk_win32_handle_table_lookup (parent); if (!window->parent || GDK_WINDOW_TYPE (window->parent) == GDK_WINDOW_FOREIGN) - window->parent = _gdk_root; + window->parent = gdk_get_default_root_window (); window->parent->children = g_list_concat (&window->children_list_node, window->parent->children); window->parent->impl_window->native_children = @@ -1445,14 +1397,23 @@ gdk_win32_window_reparent (GdkWindow *window, gint x, gint y) { + GdkScreen *screen; GdkWindow *parent; GdkWindow *old_parent; GdkWindowImplWin32 *impl; + gboolean new_parent_is_root; gboolean was_toplevel; LONG style; + screen = gdk_window_get_screen (window); + if (!new_parent) - new_parent = _gdk_root; + { + new_parent = gdk_screen_get_root_window (screen); + new_parent_is_root = TRUE; + } + else + new_parent_is_root = (gdk_screen_get_root_window (screen) == new_parent); old_parent = window->parent; parent = new_parent; @@ -1465,7 +1426,7 @@ gdk_win32_window_reparent (GdkWindow *window, style = GetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE); was_toplevel = GetAncestor (GDK_WINDOW_HWND (window), GA_PARENT) == GetDesktopWindow (); - if (was_toplevel && new_parent != _gdk_root) + if (was_toplevel && !new_parent_is_root) { /* Reparenting from top-level (child of desktop). Clear out * decorations. @@ -1474,7 +1435,7 @@ gdk_win32_window_reparent (GdkWindow *window, style |= WS_CHILD; SetWindowLong (GDK_WINDOW_HWND (window), GWL_STYLE, style); } - else if (new_parent == _gdk_root) + else if (new_parent_is_root) { /* Reparenting to top-level. Add decorations. */ style &= ~(WS_CHILD); @@ -1492,7 +1453,7 @@ gdk_win32_window_reparent (GdkWindow *window, * the root window */ if (GDK_WINDOW_TYPE (new_parent) == GDK_WINDOW_FOREIGN) - new_parent = _gdk_root; + new_parent = gdk_screen_get_root_window (screen); window->parent = new_parent; @@ -2005,8 +1966,18 @@ gdk_win32_window_get_geometry (GdkWindow *window, gint *width, gint *height) { + GdkScreen *screen; + gboolean window_is_root; + + screen = gdk_window_get_screen (window); + if (!window) - window = _gdk_root; + { + window = gdk_screen_get_root_window (screen); + window_is_root = TRUE; + } + else + window_is_root = (gdk_screen_get_root_window (screen) == window); if (!GDK_WINDOW_DESTROYED (window)) { @@ -2014,7 +1985,7 @@ gdk_win32_window_get_geometry (GdkWindow *window, API_CALL (GetClientRect, (GDK_WINDOW_HWND (window), &rect)); - if (window != _gdk_root) + if (!window_is_root) { POINT pt; GdkWindow *parent = gdk_window_get_parent (window); @@ -2033,7 +2004,7 @@ gdk_win32_window_get_geometry (GdkWindow *window, rect.right = pt.x; rect.bottom = pt.y; - if (parent == _gdk_root) + if (gdk_screen_get_root_window (screen) == parent) { rect.left += _gdk_offset_x; rect.top += _gdk_offset_y; |