mirror of
https://github.com/brl/mutter.git
synced 2024-12-23 03:22:04 +00:00
constraints: Don't use intersection when sliding with custom rule
If an intersection is empty, the (x, y) coordinates are undefined, so just use the work area and in-progress constrained window rect when sliding according to the SLIDE_X or SLIDE_Y custom placement rule. https://gitlab.gnome.org/GNOME/mutter/merge_requests/496
This commit is contained in:
parent
86b5247770
commit
00b4556051
@ -910,18 +910,42 @@ constrain_custom_rule (MetaWindow *window,
|
||||
if (current_rule.constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_X)
|
||||
{
|
||||
if (info->current.x != intersection.x)
|
||||
info->current.x = intersection.x;
|
||||
else if (info->current.width != intersection.width)
|
||||
info->current.x -= info->current.width - intersection.width;
|
||||
int current_x2;
|
||||
int work_area_monitor_x2;
|
||||
|
||||
current_x2 = info->current.x + info->current.width;
|
||||
work_area_monitor_x2 = (info->work_area_monitor.x +
|
||||
info->work_area_monitor.width);
|
||||
|
||||
if (current_x2 > work_area_monitor_x2)
|
||||
{
|
||||
info->current.x = MAX (info->work_area_monitor.x,
|
||||
work_area_monitor_x2 - info->current.width);
|
||||
}
|
||||
else if (info->current.x < info->work_area_monitor.x)
|
||||
{
|
||||
info->current.x = info->work_area_monitor.x;
|
||||
}
|
||||
}
|
||||
if (current_rule.constraint_adjustment &
|
||||
META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_Y)
|
||||
{
|
||||
if (info->current.y != intersection.y)
|
||||
info->current.y = intersection.y;
|
||||
else if (info->current.height != intersection.height)
|
||||
info->current.y -= info->current.height - intersection.height;
|
||||
int current_y2;
|
||||
int work_area_monitor_y2;
|
||||
|
||||
current_y2 = info->current.y + info->current.height;
|
||||
work_area_monitor_y2 = (info->work_area_monitor.y +
|
||||
info->work_area_monitor.height);
|
||||
|
||||
if (current_y2 > work_area_monitor_y2)
|
||||
{
|
||||
info->current.y = MAX (info->work_area_monitor.y,
|
||||
work_area_monitor_y2 - info->current.height);
|
||||
}
|
||||
else if (info->current.y < info->work_area_monitor.y)
|
||||
{
|
||||
info->current.y = info->work_area_monitor.y;
|
||||
}
|
||||
}
|
||||
|
||||
meta_rectangle_intersect (&info->current, &info->work_area_monitor,
|
||||
|
Loading…
Reference in New Issue
Block a user