1
0
Fork 0

core/window: Do not rely on Monitor Numbering

When the monitors change meta_window_update_for_monitors_changed is
called which is responsible for updating window->monitor. It however can
go through the entire window placement and constraint machinery before
it's able to do so. In this period window->monitor points to the old
MetaMonitor where the monitor number doesn't reflect the index into the
MonitorManager anymore.

Avoid relying on the window->monitor->number and go through the Monitor
directly.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3402
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3691>
This commit is contained in:
Sebastian Wick 2024-04-08 12:13:45 +02:00 committed by Marge Bot
parent 74a01e3f39
commit f91851154e

View file

@ -2227,7 +2227,7 @@ meta_window_show (MetaWindow *window)
window->has_maximize_func)
{
MtkRectangle work_area;
meta_window_get_work_area_for_monitor (window, window->monitor->number, &work_area);
meta_window_get_work_area_current_monitor (window, &work_area);
/* Automaximize windows that map with a size > MAX_UNMAXIMIZED_WINDOW_AREA of the work area */
if (window->rect.width * window->rect.height > work_area.width * work_area.height * MAX_UNMAXIMIZED_WINDOW_AREA)
{
@ -3101,7 +3101,7 @@ meta_window_unmaximize (MetaWindow *window,
MtkRectangle old_frame_rect, old_buffer_rect;
gboolean has_target_size;
meta_window_get_work_area_for_monitor (window, window->monitor->number, &work_area);
meta_window_get_work_area_current_monitor (window, &work_area);
meta_window_get_frame_rect (window, &old_frame_rect);
meta_window_get_buffer_rect (window, &old_buffer_rect);
@ -5837,9 +5837,7 @@ void
meta_window_get_work_area_current_monitor (MetaWindow *window,
MtkRectangle *area)
{
meta_window_get_work_area_for_monitor (window,
window->monitor->number,
area);
meta_window_get_work_area_for_logical_monitor (window, window->monitor, area);
}
/**