Fix view geometry updates when screens added/removed
Screen geometry changed events could end up connected to the wrong views, or not at all. This could cause greeters not to be visible (and as such desktop contents visible), greeters at the wrong size or position and/or overlapped. We map Qt screens() by index to our own list of m_views, but Qt is free to reorder screens, and when screens are removed, what used to be e.g. index 0 could be removed, leading to connect() pointer to pointer mappings being incorrect. Since we also set geometry on add/remove this can lead to us changing to the correct geometry then back to geometry that is not covered by active screen, essentially making the greeter invisible, and no valid greeter visible. Since there is no uniqueness constraint for lambda connections, we can also end up with multiple screens updating different geometries on the same view, or repeated signals from the same screen. Fix this by only connecting screens once, and having the receiving lambda res...