summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/reference/gdk/gdk4-sections.txt1
-rw-r--r--gdk/broadway/gdksurface-broadway.c14
-rw-r--r--gdk/broadway/gdksurface-broadway.h5
-rw-r--r--gdk/gdksurface.c63
-rw-r--r--gdk/gdksurface.h7
-rw-r--r--gdk/gdksurfaceprivate.h13
-rw-r--r--gdk/macos/gdkmacospopupsurface.c4
-rw-r--r--gdk/macos/gdkmacossurface-private.h5
-rw-r--r--gdk/macos/gdkmacossurface.c3
-rw-r--r--gdk/macos/gdkmacostoplevelsurface.c9
-rw-r--r--gdk/wayland/gdksurface-wayland.c21
-rw-r--r--gdk/win32/gdksurface-win32.c16
-rw-r--r--gdk/x11/gdksurface-x11.c15
-rw-r--r--gtk/gtkwindow.c4
14 files changed, 77 insertions, 103 deletions
diff --git a/docs/reference/gdk/gdk4-sections.txt b/docs/reference/gdk/gdk4-sections.txt
index 1680e9e3e5..f480652627 100644
--- a/docs/reference/gdk/gdk4-sections.txt
+++ b/docs/reference/gdk/gdk4-sections.txt
@@ -203,7 +203,6 @@ gdk_surface_get_cursor
gdk_surface_set_input_region
gdk_surface_get_width
gdk_surface_get_height
-gdk_surface_set_shadow_width
gdk_surface_get_device_position
GdkModifierType
GDK_MODIFIER_MASK
diff --git a/gdk/broadway/gdksurface-broadway.c b/gdk/broadway/gdksurface-broadway.c
index bc5f3eb6c9..d8667d0028 100644
--- a/gdk/broadway/gdksurface-broadway.c
+++ b/gdk/broadway/gdksurface-broadway.c
@@ -558,6 +558,7 @@ gdk_broadway_surface_layout_popup (GdkSurface *surface,
int height,
GdkPopupLayout *layout)
{
+ GdkBroadwaySurface *impl = GDK_BROADWAY_SURFACE (surface);
GdkMonitor *monitor;
GdkRectangle bounds;
GdkRectangle final_rect;
@@ -570,6 +571,10 @@ gdk_broadway_surface_layout_popup (GdkSurface *surface,
gdk_surface_layout_popup_helper (surface,
width,
height,
+ impl->shadow_left,
+ impl->shadow_right,
+ impl->shadow_top,
+ impl->shadow_bottom,
monitor,
&bounds,
layout,
@@ -1529,6 +1534,7 @@ gdk_broadway_toplevel_present (GdkToplevel *toplevel,
GdkToplevelLayout *layout)
{
GdkSurface *surface = GDK_SURFACE (toplevel);
+ GdkBroadwaySurface *impl = GDK_BROADWAY_SURFACE (surface);
GdkDisplay *display = gdk_surface_get_display (surface);
GdkMonitor *monitor;
GdkToplevelSize size;
@@ -1582,6 +1588,14 @@ gdk_broadway_toplevel_present (GdkToplevel *toplevel,
else
gdk_broadway_surface_unmaximize (surface);
+ if (size.margin.is_valid)
+ {
+ impl->shadow_left = size.margin.left;
+ impl->shadow_right = size.margin.right;
+ impl->shadow_top = size.margin.top;
+ impl->shadow_bottom = size.margin.bottom;
+ }
+
show_surface (surface);
}
diff --git a/gdk/broadway/gdksurface-broadway.h b/gdk/broadway/gdksurface-broadway.h
index 0ca144fc80..95cb02ce6d 100644
--- a/gdk/broadway/gdksurface-broadway.h
+++ b/gdk/broadway/gdksurface-broadway.h
@@ -64,6 +64,11 @@ struct _GdkBroadwaySurface
int root_x;
int root_y;
+
+ int shadow_left;
+ int shadow_right;
+ int shadow_top;
+ int shadow_bottom;
};
struct _GdkBroadwaySurfaceClass
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index d0cdcc33f2..e4240a3706 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -285,6 +285,10 @@ void
gdk_surface_layout_popup_helper (GdkSurface *surface,
int width,
int height,
+ int shadow_left,
+ int shadow_right,
+ int shadow_top,
+ int shadow_bottom,
GdkMonitor *monitor,
GdkRectangle *bounds,
GdkPopupLayout *layout,
@@ -315,8 +319,8 @@ gdk_surface_layout_popup_helper (GdkSurface *surface,
gdk_popup_layout_get_offset (layout, &rect_anchor_dx, &rect_anchor_dy);
anchor_hints = gdk_popup_layout_get_anchor_hints (layout);
- final_rect.width = width - surface->shadow_left - surface->shadow_right;
- final_rect.height = height - surface->shadow_top - surface->shadow_bottom;
+ final_rect.width = width - shadow_left - shadow_right;
+ final_rect.height = height - shadow_top - shadow_bottom;
final_rect.x = maybe_flip_position (bounds->x,
bounds->width,
root_rect.x,
@@ -380,10 +384,10 @@ gdk_surface_layout_popup_helper (GdkSurface *surface,
final_rect.height = bounds->y + bounds->height - final_rect.y;
}
- final_rect.x -= surface->shadow_left;
- final_rect.y -= surface->shadow_top;
- final_rect.width += surface->shadow_left + surface->shadow_right;
- final_rect.height += surface->shadow_top + surface->shadow_bottom;
+ final_rect.x -= shadow_left;
+ final_rect.y -= shadow_top;
+ final_rect.width += shadow_left + shadow_right;
+ final_rect.height += shadow_top + shadow_bottom;
gdk_surface_get_origin (surface->parent, &x, &y);
final_rect.x -= x;
@@ -2646,53 +2650,6 @@ gdk_surface_set_opaque_region (GdkSurface *surface,
class->set_opaque_region (surface, region);
}
-/**
- * gdk_surface_set_shadow_width:
- * @surface: a #GdkSurface
- * @left: The left extent
- * @right: The right extent
- * @top: The top extent
- * @bottom: The bottom extent
- *
- * Newer GTK windows using client-side decorations use extra geometry
- * around their frames for effects like shadows and invisible borders.
- * Window managers that want to maximize windows or snap to edges need
- * to know where the extents of the actual frame lie, so that users
- * don’t feel like windows are snapping against random invisible edges.
- *
- * Note that this property is automatically updated by GTK, so this
- * function should only be used by applications which do not use GTK
- * to create toplevel surfaces.
- */
-void
-gdk_surface_set_shadow_width (GdkSurface *surface,
- int left,
- int right,
- int top,
- int bottom)
-{
- GdkSurfaceClass *class;
-
- g_return_if_fail (GDK_IS_SURFACE (surface));
- g_return_if_fail (!GDK_SURFACE_DESTROYED (surface));
- g_return_if_fail (left >= 0 && right >= 0 && top >= 0 && bottom >= 0);
-
- if (surface->shadow_left == left &&
- surface->shadow_right == right &&
- surface->shadow_top == top &&
- surface->shadow_bottom == bottom)
- return;
-
- surface->shadow_top = top;
- surface->shadow_left = left;
- surface->shadow_right = right;
- surface->shadow_bottom = bottom;
-
- class = GDK_SURFACE_GET_CLASS (surface);
- if (class->set_shadow_width)
- class->set_shadow_width (surface, left, right, top, bottom);
-}
-
void
gdk_surface_set_state (GdkSurface *surface,
GdkToplevelState new_state)
diff --git a/gdk/gdksurface.h b/gdk/gdksurface.h
index 4c47fe659b..4e083ec07b 100644
--- a/gdk/gdksurface.h
+++ b/gdk/gdksurface.h
@@ -129,13 +129,6 @@ void gdk_surface_set_opaque_region (GdkSurface *surface,
cairo_region_t *region);
GDK_AVAILABLE_IN_ALL
-void gdk_surface_set_shadow_width (GdkSurface *surface,
- int left,
- int right,
- int top,
- int bottom);
-
-GDK_AVAILABLE_IN_ALL
GdkCairoContext *gdk_surface_create_cairo_context(GdkSurface *surface);
GDK_AVAILABLE_IN_ALL
GdkGLContext * gdk_surface_create_gl_context (GdkSurface *surface,
diff --git a/gdk/gdksurfaceprivate.h b/gdk/gdksurfaceprivate.h
index 6a4a820faa..4fb40a376b 100644
--- a/gdk/gdksurfaceprivate.h
+++ b/gdk/gdksurfaceprivate.h
@@ -84,10 +84,6 @@ struct _GdkSurface
guint update_and_descendants_freeze_count;
int width, height;
- int shadow_top;
- int shadow_left;
- int shadow_right;
- int shadow_bottom;
GdkCursor *cursor;
GHashTable *device_cursor;
@@ -161,11 +157,6 @@ struct _GdkSurfaceClass
void (* set_opaque_region) (GdkSurface *surface,
cairo_region_t *region);
- void (* set_shadow_width) (GdkSurface *surface,
- int left,
- int right,
- int top,
- int bottom);
GdkGLContext *(*create_gl_context) (GdkSurface *surface,
gboolean attached,
GdkGLContext *share,
@@ -190,6 +181,10 @@ GdkMonitor * gdk_surface_get_layout_monitor (GdkSurface *surface,
void gdk_surface_layout_popup_helper (GdkSurface *surface,
int width,
int height,
+ int shadow_left,
+ int shadow_right,
+ int shadow_top,
+ int shadow_bottom,
GdkMonitor *monitor,
GdkRectangle *bounds,
GdkPopupLayout *layout,
diff --git a/gdk/macos/gdkmacospopupsurface.c b/gdk/macos/gdkmacospopupsurface.c
index 48c2ca02b8..23c44a70a8 100644
--- a/gdk/macos/gdkmacospopupsurface.c
+++ b/gdk/macos/gdkmacospopupsurface.c
@@ -69,6 +69,10 @@ gdk_macos_popup_surface_layout (GdkMacosPopupSurface *self,
gdk_surface_layout_popup_helper (GDK_SURFACE (self),
width,
height,
+ self->parent_instance.shadow_left,
+ self->parent_instance.shadow_right,
+ self->parent_instance.shadow_top,
+ self->parent_instance.shadow_bottom,
monitor,
&bounds,
self->layout,
diff --git a/gdk/macos/gdkmacossurface-private.h b/gdk/macos/gdkmacossurface-private.h
index 074fd28854..9dd2a7ba52 100644
--- a/gdk/macos/gdkmacossurface-private.h
+++ b/gdk/macos/gdkmacossurface-private.h
@@ -125,6 +125,11 @@ void _gdk_macos_surface_set_opacity (GdkMacosSurface
void _gdk_macos_surface_get_root_coords (GdkMacosSurface *self,
int *x,
int *y);
+void _gdk_macos_surface_set_shadow_width (GdkSurface *surface,
+ int left,
+ int right,
+ int top,
+ int bottom);
G_END_DECLS
diff --git a/gdk/macos/gdkmacossurface.c b/gdk/macos/gdkmacossurface.c
index 7c1c03f44d..4f0617e878 100644
--- a/gdk/macos/gdkmacossurface.c
+++ b/gdk/macos/gdkmacossurface.c
@@ -139,7 +139,7 @@ gdk_macos_surface_get_scale_factor (GdkSurface *surface)
return [self->window backingScaleFactor];
}
-static void
+void
gdk_macos_surface_set_shadow_width (GdkSurface *surface,
int left,
int right,
@@ -491,7 +491,6 @@ gdk_macos_surface_class_init (GdkMacosSurfaceClass *klass)
surface_class->hide = gdk_macos_surface_hide;
surface_class->set_input_region = gdk_macos_surface_set_input_region;
surface_class->set_opaque_region = gdk_macos_surface_set_opaque_region;
- surface_class->set_shadow_width = gdk_macos_surface_set_shadow_width;
properties [PROP_NATIVE] =
g_param_spec_pointer ("native",
diff --git a/gdk/macos/gdkmacostoplevelsurface.c b/gdk/macos/gdkmacostoplevelsurface.c
index 7af4725b35..da6b7e6c18 100644
--- a/gdk/macos/gdkmacostoplevelsurface.c
+++ b/gdk/macos/gdkmacostoplevelsurface.c
@@ -155,6 +155,15 @@ _gdk_macos_toplevel_surface_present (GdkToplevel *toplevel,
if (style_mask != [nswindow styleMask])
[nswindow setStyleMask:style_mask];
+ if (size.margin.is_valid)
+ {
+ _gdk_macos_surface_set_shadow_width (surface,
+ size.margin.left,
+ size.margin.right,
+ size.margin.top,
+ size.margin.bottom);
+ }
+
_gdk_macos_surface_set_geometry_hints (GDK_MACOS_SURFACE (self), &geometry, mask);
gdk_surface_constrain_size (&geometry, mask, width, height, &width, &height);
_gdk_macos_surface_resize (GDK_MACOS_SURFACE (self), width, height);
diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c
index 69d9776131..8282e25ea6 100644
--- a/gdk/wayland/gdksurface-wayland.c
+++ b/gdk/wayland/gdksurface-wayland.c
@@ -1537,6 +1537,7 @@ static void
gdk_wayland_surface_configure_popup (GdkSurface *surface)
{
GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface);
+ GdkWaylandSurface *parent_impl = GDK_WAYLAND_SURFACE (surface->parent);
int x, y, width, height;
if (impl->display_server.xdg_popup)
@@ -1576,8 +1577,8 @@ gdk_wayland_surface_configure_popup (GdkSurface *surface)
width = impl->pending.popup.width;
height = impl->pending.popup.height;
- x += surface->parent->shadow_left;
- y += surface->parent->shadow_top;
+ x += parent_impl->margin_left;
+ y += parent_impl->margin_top;
update_popup_layout_state (surface,
x, y,
@@ -2449,6 +2450,7 @@ create_dynamic_positioner (GdkSurface *surface,
{
GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface);
GdkSurface *parent = surface->parent;
+ GdkWaylandSurface *parent_impl = GDK_WAYLAND_SURFACE (parent);
GdkWaylandDisplay *display =
GDK_WAYLAND_DISPLAY (gdk_surface_get_display (surface));
GdkRectangle geometry;
@@ -2470,8 +2472,8 @@ create_dynamic_positioner (GdkSurface *surface,
};
anchor_rect = gdk_popup_layout_get_anchor_rect (layout);
- real_anchor_rect_x = anchor_rect->x - parent->shadow_left;
- real_anchor_rect_y = anchor_rect->y - parent->shadow_top;
+ real_anchor_rect_x = anchor_rect->x - parent_impl->margin_left;
+ real_anchor_rect_y = anchor_rect->y - parent_impl->margin_top;
anchor_rect_width = MAX (anchor_rect->width, 1);
anchor_rect_height = MAX (anchor_rect->height, 1);
@@ -2530,7 +2532,6 @@ create_dynamic_positioner (GdkSurface *surface,
xdg_positioner_get_version (positioner) >=
XDG_POSITIONER_SET_PARENT_CONFIGURE_SINCE_VERSION)
{
- GdkWaylandSurface *parent_impl = GDK_WAYLAND_SURFACE (parent);
int parent_width;
int parent_height;
@@ -4068,15 +4069,6 @@ gdk_wayland_surface_set_opaque_region (GdkSurface *surface,
impl->opaque_region_dirty = TRUE;
}
-static void
-gdk_wayland_surface_set_shadow_width (GdkSurface *surface,
- int left,
- int right,
- int top,
- int bottom)
-{
-}
-
static gboolean
gdk_wayland_surface_show_window_menu (GdkSurface *surface,
GdkEvent *event)
@@ -4161,7 +4153,6 @@ gdk_wayland_surface_class_init (GdkWaylandSurfaceClass *klass)
impl_class->drag_begin = _gdk_wayland_surface_drag_begin;
impl_class->get_scale_factor = gdk_wayland_surface_get_scale_factor;
impl_class->set_opaque_region = gdk_wayland_surface_set_opaque_region;
- impl_class->set_shadow_width = gdk_wayland_surface_set_shadow_width;
impl_class->create_gl_context = gdk_wayland_surface_create_gl_context;
impl_class->request_layout = gdk_wayland_surface_request_layout;
impl_class->compute_size = gdk_wayland_surface_compute_size;
diff --git a/gdk/win32/gdksurface-win32.c b/gdk/win32/gdksurface-win32.c
index 1f76b5bbb3..238be977af 100644
--- a/gdk/win32/gdksurface-win32.c
+++ b/gdk/win32/gdksurface-win32.c
@@ -1217,6 +1217,7 @@ gdk_win32_surface_layout_popup (GdkSurface *surface,
int height,
GdkPopupLayout *layout)
{
+ GdkWin32Surface *impl = GDK_WIN32_SURFACE (surface);
GdkMonitor *monitor;
GdkRectangle bounds;
GdkRectangle final_rect;
@@ -1229,6 +1230,10 @@ gdk_win32_surface_layout_popup (GdkSurface *surface,
gdk_surface_layout_popup_helper (surface,
width,
height,
+ impl->margins.left,
+ impl->margins.right,
+ impl->margins.top,
+ impl->margins.bottom,
monitor,
&bounds,
layout,
@@ -4615,8 +4620,6 @@ gdk_win32_surface_class_init (GdkWin32SurfaceClass *klass)
//impl_class->beep = gdk_x11_surface_beep;
-
- impl_class->set_shadow_width = gdk_win32_surface_set_shadow_width;
impl_class->destroy_notify = gdk_win32_surface_destroy_notify;
impl_class->drag_begin = _gdk_win32_surface_drag_begin;
impl_class->create_gl_context = _gdk_win32_surface_create_gl_context;
@@ -4992,6 +4995,15 @@ gdk_win32_toplevel_present (GdkToplevel *toplevel,
show_surface (surface);
+ if (size.margin.is_valid)
+ {
+ gdk_win32_surface_set_shadow_width (surface,
+ size.margin.left,
+ size.margin.right,
+ size.margin.top,
+ size.margin.bottom);
+ }
+
return TRUE;
}
diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c
index a207c8964b..a531659267 100644
--- a/gdk/x11/gdksurface-x11.c
+++ b/gdk/x11/gdksurface-x11.c
@@ -1664,6 +1664,7 @@ gdk_x11_surface_layout_popup (GdkSurface *surface,
int height,
GdkPopupLayout *layout)
{
+ GdkX11Surface *impl = GDK_X11_SURFACE (surface);
GdkMonitor *monitor;
GdkRectangle bounds;
GdkRectangle final_rect;
@@ -1676,6 +1677,10 @@ gdk_x11_surface_layout_popup (GdkSurface *surface,
gdk_surface_layout_popup_helper (surface,
width,
height,
+ impl->shadow_left,
+ impl->shadow_right,
+ impl->shadow_top,
+ impl->shadow_bottom,
monitor,
&bounds,
layout,
@@ -2924,15 +2929,6 @@ gdk_x11_surface_set_utf8_property (GdkSurface *surface,
}
}
-static void
-gdk_x11_surface_set_shadow_width (GdkSurface *surface,
- int left,
- int right,
- int top,
- int bottom)
-{
-}
-
/**
* gdk_x11_surface_set_theme_variant:
* @surface: (type GdkX11Surface): a #GdkSurface
@@ -4658,7 +4654,6 @@ gdk_x11_surface_class_init (GdkX11SurfaceClass *klass)
impl_class->drag_begin = _gdk_x11_surface_drag_begin;
impl_class->get_scale_factor = gdk_x11_surface_get_scale_factor;
impl_class->set_opaque_region = gdk_x11_surface_set_opaque_region;
- impl_class->set_shadow_width = gdk_x11_surface_set_shadow_width;
impl_class->create_gl_context = gdk_x11_surface_create_gl_context;
impl_class->get_unscaled_size = gdk_x11_surface_get_unscaled_size;
impl_class->request_layout = gdk_x11_surface_request_layout;
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 90864cea57..b3f848f8e1 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -4139,10 +4139,6 @@ update_realized_window_properties (GtkWindow *window)
if (!priv->client_decorated)
return;
- if (priv->surface && priv->use_client_shadow)
- gdk_surface_set_shadow_width (priv->surface,
- shadow.left, shadow.right, shadow.top, shadow.bottom);
-
gtk_native_get_surface_transform (GTK_NATIVE (window), &native_x, &native_y);
/* update the input shape, which makes it so that clicks