[gtk/global-coords: 17/37] x11: Set surface position correctly
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/global-coords: 17/37] x11: Set surface position correctly
- Date: Wed, 29 May 2019 18:05:11 +0000 (UTC)
commit 0103c13632038b3630599e8bd057d5c0c2d9b024
Author: Matthias Clasen <mclasen redhat com>
Date: Wed May 29 00:31:04 2019 -0400
x11: Set surface position correctly
The X backend was storing global coordinates
in surface->x/y, and keeping the parent-relative
positions in its own fields. Switch this around
to store the relative position in x/y, as is
expected by the frontend.
gdk/x11/gdksurface-x11.c | 36 +++++++++++++++++++++++-------------
gdk/x11/gdksurface-x11.h | 4 ++--
2 files changed, 25 insertions(+), 15 deletions(-)
---
diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c
index d98b4e6bbf..aa5082f6bf 100644
--- a/gdk/x11/gdksurface-x11.c
+++ b/gdk/x11/gdksurface-x11.c
@@ -1271,13 +1271,18 @@ x11_surface_move (GdkSurface *surface,
if (impl->override_redirect)
{
- surface->x = x;
- surface->y = y;
+ impl->abs_x = x;
+ impl->abs_y = y;
if (surface->parent)
{
- impl->offset_x = surface->x - surface->parent->x;
- impl->offset_y = surface->y - surface->parent->y;
+ surface->x = impl->abs_x - GDK_X11_SURFACE (surface->parent)->abs_x;
+ surface->y = impl->abs_y - GDK_X11_SURFACE (surface->parent)->abs_y;
+ }
+ else
+ {
+ surface->x = x;
+ surface->y = y;
}
}
}
@@ -1340,8 +1345,8 @@ x11_surface_move_resize (GdkSurface *surface,
if (impl->override_redirect)
{
- surface->x = x;
- surface->y = y;
+ impl->abs_x = x;
+ impl->abs_y = y;
impl->unscaled_width = width * impl->surface_scale;
impl->unscaled_height = height * impl->surface_scale;
@@ -1352,8 +1357,13 @@ x11_surface_move_resize (GdkSurface *surface,
if (surface->parent)
{
- impl->offset_x = surface->x - surface->parent->x;
- impl->offset_y = surface->y - surface->parent->y;
+ surface->x = impl->abs_x - GDK_X11_SURFACE (surface->parent)->abs_x;
+ surface->y = impl->abs_y - GDK_X11_SURFACE (surface->parent)->abs_y;
+ }
+ else
+ {
+ surface->x = x;
+ surface->y = y;
}
}
else
@@ -1395,10 +1405,10 @@ gdk_x11_surface_update_popups (GdkSurface *parent)
{
GdkX11Surface *popup_impl = l->data;
GdkSurface *popup = GDK_SURFACE (popup_impl);
- int new_x = parent->x + popup_impl->offset_x;
- int new_y = parent->y + popup_impl->offset_y;
+ int new_x = GDK_X11_SURFACE (parent)->abs_x + popup->x;
+ int new_y = GDK_X11_SURFACE (parent)->abs_y + popup->y;
- if (new_x != popup->x || new_y != popup->y)
+ if (new_x != popup_impl->abs_x || new_y != popup_impl->abs_y)
x11_surface_move (popup, new_x, new_y);
gdk_x11_surface_restack_toplevel (popup, parent, TRUE);
}
@@ -2346,8 +2356,8 @@ gdk_x11_surface_get_frame_extents (GdkSurface *surface,
impl = GDK_X11_SURFACE (surface);
/* Refine our fallback answer a bit using local information */
- rect->x = surface->x * impl->surface_scale;
- rect->y = surface->y * impl->surface_scale;
+ rect->x = impl->abs_x * impl->surface_scale;
+ rect->y = impl->abs_y * impl->surface_scale;
rect->width = surface->width * impl->surface_scale;
rect->height = surface->height * impl->surface_scale;
diff --git a/gdk/x11/gdksurface-x11.h b/gdk/x11/gdksurface-x11.h
index 6c6744a71d..c890d6c13f 100644
--- a/gdk/x11/gdksurface-x11.h
+++ b/gdk/x11/gdksurface-x11.h
@@ -76,8 +76,8 @@ struct _GdkX11Surface
Damage damage;
#endif
- int offset_x;
- int offset_y;
+ int abs_x;
+ int abs_y;
};
struct _GdkX11SurfaceClass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]