summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorPaolo Borelli <pborelli@gnome.org>2015-12-18 00:36:57 +0100
committerIgnacio Casal Quinteiro <icq@gnome.org>2016-01-14 14:30:37 +0100
commit3cd79c11fcd14daf1058077e58a5ff154e09b06c (patch)
tree8c2d4f53e45c939ca0bd0945c4ddebd659f8802b /gdk
parente44b42061737ec4f6dbdad8f1a6dc2d53ea3dd02 (diff)
downloadgtk+-3cd79c11fcd14daf1058077e58a5ff154e09b06c.tar.gz
win32: remove _gdk_root global variable
Diffstat (limited to 'gdk')
-rw-r--r--gdk/win32/gdkdevice-win32.c15
-rw-r--r--gdk/win32/gdkdevice-wintab.c11
-rw-r--r--gdk/win32/gdkdevicemanager-win32.c7
-rw-r--r--gdk/win32/gdkdisplay-win32.c8
-rw-r--r--gdk/win32/gdkdnd-win32.c4
-rw-r--r--gdk/win32/gdkevents-win32.c4
-rw-r--r--gdk/win32/gdkglobals-win32.c1
-rw-r--r--gdk/win32/gdkprivate-win32.h7
-rw-r--r--gdk/win32/gdkproperty-win32.c7
-rw-r--r--gdk/win32/gdkscreen-win32.c66
-rw-r--r--gdk/win32/gdkwindow-win32.c95
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;