diff options
-rw-r--r-- | docs/reference/gdk/gdk4-sections.txt | 1 | ||||
-rw-r--r-- | gdk/broadway/gdksurface-broadway.c | 14 | ||||
-rw-r--r-- | gdk/broadway/gdksurface-broadway.h | 5 | ||||
-rw-r--r-- | gdk/gdksurface.c | 63 | ||||
-rw-r--r-- | gdk/gdksurface.h | 7 | ||||
-rw-r--r-- | gdk/gdksurfaceprivate.h | 13 | ||||
-rw-r--r-- | gdk/macos/gdkmacospopupsurface.c | 4 | ||||
-rw-r--r-- | gdk/macos/gdkmacossurface-private.h | 5 | ||||
-rw-r--r-- | gdk/macos/gdkmacossurface.c | 3 | ||||
-rw-r--r-- | gdk/macos/gdkmacostoplevelsurface.c | 9 | ||||
-rw-r--r-- | gdk/wayland/gdksurface-wayland.c | 21 | ||||
-rw-r--r-- | gdk/win32/gdksurface-win32.c | 16 | ||||
-rw-r--r-- | gdk/x11/gdksurface-x11.c | 15 | ||||
-rw-r--r-- | gtk/gtkwindow.c | 4 |
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 |