Skip to content

Commit bf23425

Browse files
committed
meta-compositor-x11.c: Don't disable fractional scaling when
unredirecting a fullscreen window. Issue when unredirecting a screen-sized window (such as the cinnamon-screensaver stage window): - Fractional scaling is disabled, triggering a reconfigure due to the screen size changing. - This means a screen-sized window is no longer screen-sized, resulting in muffin re-enabling unredirection on this window. - Since there are now no unredirected windows, fractional scaling can be re-enabled, causing the screen and window sizes to match once more. - Repeat the cycle.
1 parent a275589 commit bf23425

File tree

3 files changed

+13
-128
lines changed

3 files changed

+13
-128
lines changed

src/backends/meta-monitor-manager-private.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,6 @@ struct _MetaMonitorManager
125125
int screen_height;
126126

127127
GList *monitors;
128-
GList *scale_override_monitors;
129128

130129
GList *logical_monitors;
131130
MetaLogicalMonitor *primary_logical_monitor;
@@ -378,9 +377,6 @@ gboolean meta_monitor_manager_is_scale_supported (MetaMonitorManager
378377

379378
float meta_monitor_manager_get_maximum_crtc_scale (MetaMonitorManager *manager);
380379

381-
gboolean meta_monitor_manager_disable_scale_for_monitor (MetaMonitorManager *manager,
382-
MetaLogicalMonitor *monitor);
383-
384380
MetaMonitorManagerCapability
385381
meta_monitor_manager_get_capabilities (MetaMonitorManager *manager);
386382

src/backends/meta-monitor-manager.c

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -561,9 +561,6 @@ meta_monitor_manager_calculate_monitor_mode_scale (MetaMonitorManager
561561
monitor,
562562
monitor_mode);
563563

564-
if (g_list_find (manager->scale_override_monitors, monitor))
565-
return ceilf (scale);
566-
567564
return scale;
568565
}
569566

@@ -678,8 +675,7 @@ static gboolean
678675
should_use_stored_config (MetaMonitorManager *manager)
679676
{
680677
return (manager->in_init ||
681-
(!manager->scale_override_monitors &&
682-
!meta_monitor_manager_has_hotplug_mode_update (manager)));
678+
!meta_monitor_manager_has_hotplug_mode_update (manager));
683679
}
684680

685681
MetaMonitorsConfig *
@@ -1537,41 +1533,6 @@ request_persistent_confirmation (MetaMonitorManager *manager)
15371533
g_signal_emit (manager, signals[CONFIRM_DISPLAY_CHANGE], 0);
15381534
}
15391535

1540-
gboolean
1541-
meta_monitor_manager_disable_scale_for_monitor (MetaMonitorManager *manager,
1542-
MetaLogicalMonitor *monitor)
1543-
{
1544-
switch (manager->layout_mode)
1545-
{
1546-
case META_LOGICAL_MONITOR_LAYOUT_MODE_LOGICAL:
1547-
case META_LOGICAL_MONITOR_LAYOUT_MODE_GLOBAL_UI_LOGICAL:
1548-
break;
1549-
default:
1550-
return FALSE;
1551-
}
1552-
1553-
if (monitor && fmodf (monitor->scale, 1.0) != 0.0f)
1554-
{
1555-
if (manager->scale_override_monitors)
1556-
{
1557-
g_clear_pointer (&manager->scale_override_monitors, g_list_free);
1558-
g_object_unref (meta_monitor_config_manager_pop_previous (manager->config_manager));
1559-
}
1560-
1561-
manager->scale_override_monitors = g_list_copy (monitor->monitors);
1562-
meta_monitor_manager_ensure_configured (manager);
1563-
return TRUE;
1564-
}
1565-
1566-
if (manager->scale_override_monitors)
1567-
{
1568-
g_clear_pointer (&manager->scale_override_monitors, g_list_free);
1569-
restore_previous_config (manager);
1570-
}
1571-
1572-
return FALSE;
1573-
}
1574-
15751536
#define META_DISPLAY_CONFIG_MODE_FLAGS_PREFERRED (1 << 0)
15761537
#define META_DISPLAY_CONFIG_MODE_FLAGS_CURRENT (1 << 1)
15771538

src/compositor/meta-compositor-x11.c

Lines changed: 12 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -271,91 +271,20 @@ shape_cow_for_window (MetaCompositorX11 *compositor_x11,
271271
}
272272
}
273273

274-
static void
275-
on_redirected_monitor_changed (MetaWindow *window,
276-
int old_monitor,
277-
MetaCompositorX11 *compositor_x11)
278-
{
279-
MetaBackend *backend = meta_get_backend ();
280-
MetaMonitorManager *monitor_manager =
281-
meta_backend_get_monitor_manager (backend);
282-
283-
if (old_monitor >= 0 && window->monitor &&
284-
window->monitor->number != old_monitor)
285-
{
286-
g_signal_handlers_block_by_func (window,
287-
on_redirected_monitor_changed,
288-
compositor_x11);
289-
290-
if (!compositor_x11->randr_scale_disabled)
291-
{
292-
compositor_x11->randr_scale_disabled =
293-
meta_monitor_manager_disable_scale_for_monitor (monitor_manager,
294-
window->monitor);
295-
}
296-
297-
g_signal_handlers_unblock_by_func (window,
298-
on_redirected_monitor_changed,
299-
compositor_x11);
300-
}
301-
else
302-
shape_cow_for_window (META_COMPOSITOR_X11 (compositor_x11), window);
303-
}
304-
305-
static MetaWindow *
306-
get_unredirectable_window (MetaCompositorX11 *compositor_x11)
307-
{
308-
MetaCompositor *compositor = META_COMPOSITOR (compositor_x11);
309-
MetaWindowActor *window_actor;
310-
MetaWindowActorX11 *window_actor_x11;
311-
312-
window_actor = meta_compositor_get_top_window_actor (compositor);
313-
if (!window_actor)
314-
return NULL;
315-
316-
window_actor_x11 = META_WINDOW_ACTOR_X11 (window_actor);
317-
if (!meta_window_actor_x11_should_unredirect (window_actor_x11))
318-
return NULL;
319-
320-
return meta_window_actor_get_meta_window (window_actor);
321-
}
322-
323274
static void
324275
set_unredirected_window (MetaCompositorX11 *compositor_x11,
325276
MetaWindow *window)
326277
{
327-
MetaBackend *backend;
328-
MetaMonitorManager *monitor_manager;
329278
MetaWindow *prev_unredirected_window = compositor_x11->unredirected_window;
330279

331280
if (prev_unredirected_window == window)
332-
{
333-
if (!window && compositor_x11->randr_scale_disabled &&
334-
!get_unredirectable_window (compositor_x11))
335-
{
336-
backend = meta_get_backend ();
337-
monitor_manager = meta_backend_get_monitor_manager (backend);
338-
339-
compositor_x11->randr_scale_disabled =
340-
meta_monitor_manager_disable_scale_for_monitor (monitor_manager,
341-
NULL);
342-
}
343-
344-
return;
345-
}
346-
347-
backend = meta_get_backend ();
348-
monitor_manager = meta_backend_get_monitor_manager (backend);
281+
return;
349282

350283
if (prev_unredirected_window)
351284
{
352285
MetaWindowActor *window_actor;
353286
MetaWindowActorX11 *window_actor_x11;
354287

355-
g_signal_handlers_disconnect_by_func (prev_unredirected_window,
356-
on_redirected_monitor_changed,
357-
compositor_x11);
358-
359288
window_actor = meta_window_actor_from_window (prev_unredirected_window);
360289
window_actor_x11 = META_WINDOW_ACTOR_X11 (window_actor);
361290
meta_window_actor_x11_set_unredirected (window_actor_x11, FALSE);
@@ -369,17 +298,6 @@ set_unredirected_window (MetaCompositorX11 *compositor_x11,
369298
MetaWindowActor *window_actor;
370299
MetaWindowActorX11 *window_actor_x11;
371300

372-
if (!compositor_x11->randr_scale_disabled)
373-
{
374-
compositor_x11->randr_scale_disabled =
375-
meta_monitor_manager_disable_scale_for_monitor (monitor_manager,
376-
window->monitor);
377-
}
378-
379-
g_signal_connect_object (window, "monitor-changed",
380-
G_CALLBACK (on_redirected_monitor_changed),
381-
compositor_x11, 0);
382-
383301
window_actor = meta_window_actor_from_window (window);
384302
window_actor_x11 = META_WINDOW_ACTOR_X11 (window_actor);
385303
meta_window_actor_x11_set_unredirected (window_actor_x11, TRUE);
@@ -391,11 +309,21 @@ maybe_unredirect_top_window (MetaCompositorX11 *compositor_x11)
391309
{
392310
MetaCompositor *compositor = META_COMPOSITOR (compositor_x11);
393311
MetaWindow *window_to_unredirect = NULL;
312+
MetaWindowActor *window_actor;
313+
MetaWindowActorX11 *window_actor_x11;
394314

395315
if (meta_compositor_is_unredirect_inhibited (compositor))
396316
goto out;
397317

398-
window_to_unredirect = get_unredirectable_window (compositor_x11);
318+
window_actor = meta_compositor_get_top_window_actor (compositor);
319+
if (!window_actor)
320+
goto out;
321+
322+
window_actor_x11 = META_WINDOW_ACTOR_X11 (window_actor);
323+
if (!meta_window_actor_x11_should_unredirect (window_actor_x11))
324+
goto out;
325+
326+
window_to_unredirect = meta_window_actor_get_meta_window (window_actor);
399327

400328
out:
401329
set_unredirected_window (compositor_x11, window_to_unredirect);

0 commit comments

Comments
 (0)