Subject: Is handle_surface_created() still needed?

From: Alan Griffiths <[email-masked]>
Date: Mon, 09 Mar 2015 09:58:57 +0000

Background:

I've been looking at our legacy defaults for window management and came
across the handle_surface_created() method.

This is used to set the focus to a session after a surface has been
supplied to the client but before that surface has had a frame posted.
Hence, in a lot of cases we are setting focus to a surface that is
invisible to the user.

Both the unity downstreams (unity-system-compositor and qtmir) disable
this behaviour. USC replaces it with behaviour that waits for the first
posted frame and then sets the focus - which seems like it would make a
far better default. It isn't immediately obvious what Unity8 does, but
it doesn't use handle_surface_created().

I've spiked removing this function and it breaks a couple of our tests.
One (DefaultShell.
offers_create_surface_parameters_to_placement_strategy) is an
unitentional overconstraint and the other is an explicit test for the
above behaviour.

I don't see any regressions with e.g. "mir_demo_server --window-manager
canonical".

So do we really want this default behaviour and the function to support it?

Alan

---

From: Gerry Boland <[email-masked]>
Date: Mon, 09 Mar 2015 10:10:04 +0000

> it doesn't use handle_surface_created().

Like USC, Unity8/QtMir will only give input focus to a surface which has
posted at least one frame.
-G

---

From: Daniel van Vugt <[email-masked]>
Date: Mon, 09 Mar 2015 18:29:15 +0800

scene::Surface::visible() does the first-frame check for you. Although 
you probably know that already.

Be aware however; surfaces go into the Scene (SurfaceStack) immediately. 
Long before they are visible().