mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-10 10:50:10 +00:00
wayland: Layout drag icon from GdkSurface::layout
This commit is contained in:
parent
3b140a05a4
commit
ecd40fa265
@ -283,6 +283,11 @@ static void gdk_wayland_surface_maybe_resize (GdkSurface *surface,
|
||||
int height,
|
||||
int scale);
|
||||
|
||||
static void gdk_wayland_surface_resize (GdkSurface *surface,
|
||||
int width,
|
||||
int height,
|
||||
int scale);
|
||||
|
||||
static void gdk_wayland_surface_configure (GdkSurface *surface);
|
||||
|
||||
static void maybe_set_gtk_surface_dbus_properties (GdkWaylandSurface *impl);
|
||||
@ -622,6 +627,17 @@ configure_popup_geometry (GdkSurface *surface)
|
||||
impl->next_layout.configured_height);
|
||||
}
|
||||
|
||||
static void
|
||||
configure_drag_surface_geometry (GdkSurface *surface)
|
||||
{
|
||||
GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface);
|
||||
|
||||
gdk_wayland_surface_resize (surface,
|
||||
impl->next_layout.configured_width,
|
||||
impl->next_layout.configured_height,
|
||||
impl->scale);
|
||||
}
|
||||
|
||||
static void
|
||||
gdk_wayland_surface_compute_size (GdkSurface *surface)
|
||||
{
|
||||
@ -633,6 +649,8 @@ gdk_wayland_surface_compute_size (GdkSurface *surface)
|
||||
configure_toplevel_geometry (surface);
|
||||
else if (GDK_IS_POPUP (impl))
|
||||
configure_popup_geometry (surface);
|
||||
else if (GDK_IS_DRAG_SURFACE (impl))
|
||||
configure_drag_surface_geometry (surface);
|
||||
|
||||
impl->next_layout.surface_geometry_dirty = FALSE;
|
||||
}
|
||||
@ -5041,8 +5059,13 @@ gdk_wayland_drag_surface_present (GdkDragSurface *drag_surface,
|
||||
GdkSurface *surface = GDK_SURFACE (drag_surface);
|
||||
GdkWaylandSurface *impl = GDK_WAYLAND_SURFACE (surface);
|
||||
|
||||
gdk_wayland_surface_resize (surface, width, height, impl->scale);
|
||||
gdk_wayland_surface_show (surface, FALSE);
|
||||
|
||||
impl->next_layout.configured_width = width;
|
||||
impl->next_layout.configured_height = height;
|
||||
impl->next_layout.surface_geometry_dirty = TRUE;
|
||||
gdk_surface_request_layout (surface);
|
||||
|
||||
maybe_notify_mapped (surface);
|
||||
|
||||
return TRUE;
|
||||
|
@ -155,14 +155,7 @@ gtk_drag_icon_native_check_resize (GtkNative *native)
|
||||
if (!_gtk_widget_get_alloc_needed (widget))
|
||||
gtk_widget_ensure_allocate (widget);
|
||||
else if (gtk_widget_get_visible (widget))
|
||||
{
|
||||
gtk_drag_icon_move_resize (icon);
|
||||
if (icon->surface)
|
||||
gtk_widget_allocate (widget,
|
||||
gdk_surface_get_width (icon->surface),
|
||||
gdk_surface_get_height (icon->surface),
|
||||
-1, NULL);
|
||||
}
|
||||
gtk_drag_icon_move_resize (icon);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -174,6 +167,15 @@ gtk_drag_icon_native_init (GtkNativeInterface *iface)
|
||||
iface->check_resize = gtk_drag_icon_native_check_resize;
|
||||
}
|
||||
|
||||
static void
|
||||
surface_layout (GdkSurface *surface,
|
||||
int width,
|
||||
int height,
|
||||
GtkWidget *widget)
|
||||
{
|
||||
gtk_widget_allocate (widget, width, height, -1, NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
surface_render (GdkSurface *surface,
|
||||
cairo_region_t *region,
|
||||
@ -192,6 +194,7 @@ gtk_drag_icon_realize (GtkWidget *widget)
|
||||
|
||||
gdk_surface_set_widget (icon->surface, widget);
|
||||
|
||||
g_signal_connect (icon->surface, "layout", G_CALLBACK (surface_layout), widget);
|
||||
g_signal_connect (icon->surface, "render", G_CALLBACK (surface_render), widget);
|
||||
|
||||
GTK_WIDGET_CLASS (gtk_drag_icon_parent_class)->realize (widget);
|
||||
@ -211,6 +214,7 @@ gtk_drag_icon_unrealize (GtkWidget *widget)
|
||||
|
||||
if (icon->surface)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (icon->surface, surface_layout, widget);
|
||||
g_signal_handlers_disconnect_by_func (icon->surface, surface_render, widget);
|
||||
gdk_surface_set_widget (icon->surface, NULL);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user