Skip to content
  • Lindsay Roberts's avatar
    Fix view geometry updates when screens added/removed · 6f2ef923
    Lindsay Roberts authored
    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 resolve the index to index mapping so connections are persistant
    with the life of the screen.
    
    BUG: 347934
    6f2ef923