forked from AuroraMiddleware/gtk
Fix calculation of edge input window size in case the real window is too small.
This error resulted in warnings like "pixman_region32_init_rect: Invalid rectangle passed" In case the window is smaller than handle_size * 2 the resulting edge window got a negative size. Prevent that by limiting the handle size to half the respective edge length. This also prevents the corner windows from overlapping in case the window is too small.
This commit is contained in:
parent
97e728580c
commit
3c9cca596f
@ -6642,7 +6642,7 @@ update_border_windows (GtkWindow *window)
|
|||||||
GtkWidget *widget = (GtkWidget *)window;
|
GtkWidget *widget = (GtkWidget *)window;
|
||||||
GtkWindowPrivate *priv = window->priv;
|
GtkWindowPrivate *priv = window->priv;
|
||||||
gboolean resize_h, resize_v;
|
gboolean resize_h, resize_v;
|
||||||
gint handle;
|
gint handle, handle_h, handle_v;
|
||||||
cairo_region_t *region;
|
cairo_region_t *region;
|
||||||
cairo_rectangle_int_t rect;
|
cairo_rectangle_int_t rect;
|
||||||
gint width, height;
|
gint width, height;
|
||||||
@ -6696,30 +6696,33 @@ update_border_windows (GtkWindow *window)
|
|||||||
width = gtk_widget_get_allocated_width (widget) - (window_border.left + window_border.right);
|
width = gtk_widget_get_allocated_width (widget) - (window_border.left + window_border.right);
|
||||||
height = gtk_widget_get_allocated_height (widget) - (window_border.top + window_border.bottom);
|
height = gtk_widget_get_allocated_height (widget) - (window_border.top + window_border.bottom);
|
||||||
|
|
||||||
|
handle_h = MIN (handle, width / 2);
|
||||||
|
handle_v = MIN (handle, height / 2);
|
||||||
|
|
||||||
if (resize_h && resize_v)
|
if (resize_h && resize_v)
|
||||||
{
|
{
|
||||||
gdk_window_move_resize (priv->border_window[GDK_WINDOW_EDGE_NORTH_WEST],
|
gdk_window_move_resize (priv->border_window[GDK_WINDOW_EDGE_NORTH_WEST],
|
||||||
window_border.left - border.left, window_border.top - border.top,
|
window_border.left - border.left, window_border.top - border.top,
|
||||||
border.left + handle, border.top + handle);
|
border.left + handle_h, border.top + handle_v);
|
||||||
gdk_window_move_resize (priv->border_window[GDK_WINDOW_EDGE_NORTH_EAST],
|
gdk_window_move_resize (priv->border_window[GDK_WINDOW_EDGE_NORTH_EAST],
|
||||||
window_border.left + width - handle, window_border.top - border.top,
|
window_border.left + width - handle_h, window_border.top - border.top,
|
||||||
border.right + handle, border.top + handle);
|
border.right + handle_h, border.top + handle_v);
|
||||||
gdk_window_move_resize (priv->border_window[GDK_WINDOW_EDGE_SOUTH_WEST],
|
gdk_window_move_resize (priv->border_window[GDK_WINDOW_EDGE_SOUTH_WEST],
|
||||||
window_border.left - border.left, window_border.top + height - handle,
|
window_border.left - border.left, window_border.top + height - handle_v,
|
||||||
border.left + handle, border.bottom + handle);
|
border.left + handle_h, border.bottom + handle_v);
|
||||||
gdk_window_move_resize (priv->border_window[GDK_WINDOW_EDGE_SOUTH_EAST],
|
gdk_window_move_resize (priv->border_window[GDK_WINDOW_EDGE_SOUTH_EAST],
|
||||||
window_border.left + width - handle, window_border.top + height - handle,
|
window_border.left + width - handle_h, window_border.top + height - handle_v,
|
||||||
border.right + handle, border.bottom + handle);
|
border.right + handle_h, border.bottom + handle_v);
|
||||||
|
|
||||||
rect.x = 0;
|
rect.x = 0;
|
||||||
rect.y = 0;
|
rect.y = 0;
|
||||||
rect.width = border.left + handle;
|
rect.width = border.left + handle_h;
|
||||||
rect.height = border.top + handle;
|
rect.height = border.top + handle_v;
|
||||||
region = cairo_region_create_rectangle (&rect);
|
region = cairo_region_create_rectangle (&rect);
|
||||||
rect.x = border.left;
|
rect.x = border.left;
|
||||||
rect.y = border.top;
|
rect.y = border.top;
|
||||||
rect.width = handle;
|
rect.width = handle_h;
|
||||||
rect.height = handle;
|
rect.height = handle_v;
|
||||||
cairo_region_subtract_rectangle (region, &rect);
|
cairo_region_subtract_rectangle (region, &rect);
|
||||||
gdk_window_shape_combine_region (priv->border_window[GDK_WINDOW_EDGE_NORTH_WEST],
|
gdk_window_shape_combine_region (priv->border_window[GDK_WINDOW_EDGE_NORTH_WEST],
|
||||||
region, 0, 0);
|
region, 0, 0);
|
||||||
@ -6727,13 +6730,13 @@ update_border_windows (GtkWindow *window)
|
|||||||
|
|
||||||
rect.x = 0;
|
rect.x = 0;
|
||||||
rect.y = 0;
|
rect.y = 0;
|
||||||
rect.width = border.right + handle;
|
rect.width = border.right + handle_h;
|
||||||
rect.height = border.top + handle;
|
rect.height = border.top + handle_v;
|
||||||
region = cairo_region_create_rectangle (&rect);
|
region = cairo_region_create_rectangle (&rect);
|
||||||
rect.x = 0;
|
rect.x = 0;
|
||||||
rect.y = border.top;
|
rect.y = border.top;
|
||||||
rect.width = handle;
|
rect.width = handle_h;
|
||||||
rect.height = handle;
|
rect.height = handle_v;
|
||||||
cairo_region_subtract_rectangle (region, &rect);
|
cairo_region_subtract_rectangle (region, &rect);
|
||||||
gdk_window_shape_combine_region (priv->border_window[GDK_WINDOW_EDGE_NORTH_EAST],
|
gdk_window_shape_combine_region (priv->border_window[GDK_WINDOW_EDGE_NORTH_EAST],
|
||||||
region, 0, 0);
|
region, 0, 0);
|
||||||
@ -6741,13 +6744,13 @@ update_border_windows (GtkWindow *window)
|
|||||||
|
|
||||||
rect.x = 0;
|
rect.x = 0;
|
||||||
rect.y = 0;
|
rect.y = 0;
|
||||||
rect.width = border.left + handle;
|
rect.width = border.left + handle_h;
|
||||||
rect.height = border.bottom + handle;
|
rect.height = border.bottom + handle_v;
|
||||||
region = cairo_region_create_rectangle (&rect);
|
region = cairo_region_create_rectangle (&rect);
|
||||||
rect.x = border.left;
|
rect.x = border.left;
|
||||||
rect.y = 0;
|
rect.y = 0;
|
||||||
rect.width = handle;
|
rect.width = handle_h;
|
||||||
rect.height = handle;
|
rect.height = handle_v;
|
||||||
cairo_region_subtract_rectangle (region, &rect);
|
cairo_region_subtract_rectangle (region, &rect);
|
||||||
gdk_window_shape_combine_region (priv->border_window[GDK_WINDOW_EDGE_SOUTH_WEST],
|
gdk_window_shape_combine_region (priv->border_window[GDK_WINDOW_EDGE_SOUTH_WEST],
|
||||||
region, 0, 0);
|
region, 0, 0);
|
||||||
@ -6755,13 +6758,13 @@ update_border_windows (GtkWindow *window)
|
|||||||
|
|
||||||
rect.x = 0;
|
rect.x = 0;
|
||||||
rect.y = 0;
|
rect.y = 0;
|
||||||
rect.width = border.right + handle;
|
rect.width = border.right + handle_h;
|
||||||
rect.height = border.bottom + handle;
|
rect.height = border.bottom + handle_v;
|
||||||
region = cairo_region_create_rectangle (&rect);
|
region = cairo_region_create_rectangle (&rect);
|
||||||
rect.x = 0;
|
rect.x = 0;
|
||||||
rect.y = 0;
|
rect.y = 0;
|
||||||
rect.width = handle;
|
rect.width = handle_h;
|
||||||
rect.height = handle;
|
rect.height = handle_v;
|
||||||
cairo_region_subtract_rectangle (region, &rect);
|
cairo_region_subtract_rectangle (region, &rect);
|
||||||
gdk_window_shape_combine_region (priv->border_window[GDK_WINDOW_EDGE_SOUTH_EAST],
|
gdk_window_shape_combine_region (priv->border_window[GDK_WINDOW_EDGE_SOUTH_EAST],
|
||||||
region, 0, 0);
|
region, 0, 0);
|
||||||
@ -6786,8 +6789,8 @@ update_border_windows (GtkWindow *window)
|
|||||||
|
|
||||||
if (resize_h)
|
if (resize_h)
|
||||||
{
|
{
|
||||||
x = window_border.left + handle;
|
x = window_border.left + handle_h;
|
||||||
w = width - 2 * handle;
|
w = width - 2 * handle_h;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -6817,8 +6820,8 @@ update_border_windows (GtkWindow *window)
|
|||||||
|
|
||||||
if (resize_v)
|
if (resize_v)
|
||||||
{
|
{
|
||||||
y = window_border.top + handle;
|
y = window_border.top + handle_v;
|
||||||
h = height - 2 * handle;
|
h = height - 2 * handle_v;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user