Clients set their surface state, and can use those states to inform Mir/Shell if a surface should be visible not. That is what WindowInfo::is_visible decides for us.
But the mir_surface_attrib_visibility is how Mir/Shell tells the client that its surface is occluded or not. Then client can decide to stop drawing useless frames.
They're different concepts, but with similar names, so I separated them and renamed the later to "exposed" to hopefully reduce the confusion.
They have different purposes.
Clients set their surface state, and can use those states to inform Mir/Shell if a surface should be visible not. That is what WindowInfo: :is_visible decides for us.
But the mir_surface_ attrib_ visibility is how Mir/Shell tells the client that its surface is occluded or not. Then client can decide to stop drawing useless frames.
They're different concepts, but with similar names, so I separated them and renamed the later to "exposed" to hopefully reduce the confusion.