Skip to content
  • Owen W. Taylor's avatar
    Fix crash when struts change during grab operation · 1031d4df
    Owen W. Taylor authored and Alberts Muktupāvels's avatar Alberts Muktupāvels committed
    Since meta_workspace_invalidate_work_area() frees the edges
    workspace->screen_edges and workspace->monitor_edges, we must clean up
    our cached edge resistance data when the invalidate_work_area() is
    called on the active workspace, or when the workspace changes.
    
    Make the computation of the edge resistance data lazy so that it
    will be recomputed the next time we try to access it.
    meta_display_compute_resistance_and_snapping_edges() is made
    private to edge-resistance.c
    
    Invaliding the data when active workspace changes also will improve
    correctness for edge resistance when the current workspace changes
    during a grab operation. (Even with this fix we still don't try to
    handle window positions changing during a grab operation; that can't
    cause a crash since, unlike screen and monitor edges, the window edges
    are freshly allocated, it will just cause slight oddness in that
    corner case.)
    
    Root cause tracked down due to much effort by Jon Nettleton.
    https://bugzilla.gnome.org/show_bug.cgi?id=608800 (Mutter)
    https://bugzilla.gnome.org/show_bug.cgi?id=603632 (Metacity)
    1031d4df