mirror of
https://github.com/brl/mutter.git
synced 2025-04-13 05:39:38 +00:00
screen: Don't use monitor indices in check_fullscreen_func
Rewrite check_fullscreen_func to not use indexes (and offset-index-as-pointer) tricks. This also removes the usage of an API constructing temporary logical monitor arrays carrying indices. https://bugzilla.gnome.org/show_bug.cgi?id=777732
This commit is contained in:
parent
c98bab8327
commit
410bad88a8
@ -2633,30 +2633,31 @@ check_fullscreen_func (gpointer data)
|
|||||||
else if (window->maximized_horizontally &&
|
else if (window->maximized_horizontally &&
|
||||||
window->maximized_vertically)
|
window->maximized_vertically)
|
||||||
{
|
{
|
||||||
int monitor_index = meta_window_get_monitor (window);
|
MetaLogicalMonitor *logical_monitor;
|
||||||
/* + 1 to avoid NULL */
|
|
||||||
gpointer monitor_p = GINT_TO_POINTER(monitor_index + 1);
|
logical_monitor = meta_window_get_main_logical_monitor (window);
|
||||||
if (!g_slist_find (obscured_monitors, monitor_p))
|
if (!g_slist_find (obscured_monitors, logical_monitor))
|
||||||
obscured_monitors = g_slist_prepend (obscured_monitors, monitor_p);
|
obscured_monitors = g_slist_prepend (obscured_monitors,
|
||||||
|
logical_monitor);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (covers_monitors)
|
if (covers_monitors)
|
||||||
{
|
{
|
||||||
int *monitors;
|
MetaRectangle window_rect;
|
||||||
gsize n_monitors;
|
|
||||||
gsize j;
|
|
||||||
|
|
||||||
monitors = meta_window_get_all_monitors (window, &n_monitors);
|
meta_window_get_frame_rect (window, &window_rect);
|
||||||
for (j = 0; j < n_monitors; j++)
|
|
||||||
|
for (i = 0; i < n_logical_monitors; i++)
|
||||||
{
|
{
|
||||||
/* + 1 to avoid NULL */
|
MetaLogicalMonitor *logical_monitor = &logical_monitors[i];
|
||||||
gpointer monitor_p = GINT_TO_POINTER(monitors[j] + 1);
|
|
||||||
if (!g_slist_find (fullscreen_monitors, monitor_p) &&
|
|
||||||
!g_slist_find (obscured_monitors, monitor_p))
|
|
||||||
fullscreen_monitors = g_slist_prepend (fullscreen_monitors, monitor_p);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_free (monitors);
|
if (meta_rectangle_overlap (&window_rect,
|
||||||
|
&logical_monitor->rect) &&
|
||||||
|
!g_slist_find (fullscreen_monitors, logical_monitor) &&
|
||||||
|
!g_slist_find (obscured_monitors, logical_monitor))
|
||||||
|
fullscreen_monitors = g_slist_prepend (fullscreen_monitors,
|
||||||
|
logical_monitor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2665,7 +2666,10 @@ check_fullscreen_func (gpointer data)
|
|||||||
for (i = 0; i < n_logical_monitors; i++)
|
for (i = 0; i < n_logical_monitors; i++)
|
||||||
{
|
{
|
||||||
MetaLogicalMonitor *logical_monitor = &logical_monitors[i];
|
MetaLogicalMonitor *logical_monitor = &logical_monitors[i];
|
||||||
gboolean in_fullscreen = g_slist_find (fullscreen_monitors, GINT_TO_POINTER (i + 1)) != NULL;
|
gboolean in_fullscreen;
|
||||||
|
|
||||||
|
in_fullscreen = g_slist_find (fullscreen_monitors,
|
||||||
|
logical_monitor) != NULL;
|
||||||
if (in_fullscreen != logical_monitor->in_fullscreen)
|
if (in_fullscreen != logical_monitor->in_fullscreen)
|
||||||
{
|
{
|
||||||
logical_monitor->in_fullscreen = in_fullscreen;
|
logical_monitor->in_fullscreen = in_fullscreen;
|
||||||
|
@ -731,6 +731,7 @@ void meta_window_activate_full (MetaWindow *window,
|
|||||||
|
|
||||||
MetaLogicalMonitor * meta_window_calculate_main_logical_monitor (MetaWindow *window);
|
MetaLogicalMonitor * meta_window_calculate_main_logical_monitor (MetaWindow *window);
|
||||||
|
|
||||||
|
MetaLogicalMonitor * meta_window_get_main_logical_monitor (MetaWindow *window);
|
||||||
void meta_window_update_monitor (MetaWindow *window,
|
void meta_window_update_monitor (MetaWindow *window,
|
||||||
gboolean user_op);
|
gboolean user_op);
|
||||||
|
|
||||||
|
@ -3548,6 +3548,12 @@ meta_window_get_monitor (MetaWindow *window)
|
|||||||
return window->monitor->number;
|
return window->monitor->number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MetaLogicalMonitor *
|
||||||
|
meta_window_get_main_logical_monitor (MetaWindow *window)
|
||||||
|
{
|
||||||
|
return window->monitor;
|
||||||
|
}
|
||||||
|
|
||||||
static MetaLogicalMonitor *
|
static MetaLogicalMonitor *
|
||||||
find_monitor_by_winsys_id (MetaWindow *window,
|
find_monitor_by_winsys_id (MetaWindow *window,
|
||||||
guint winsys_id)
|
guint winsys_id)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user