backend/drm: Implement support for renderer loss recovery

This implementation is nearly identical to Sway's, except that
it also reloads the configuration, to spur on reloading the
server-side decorations.

v2: Fix style.
v3: Add a reset to the magnifier.
v4: Oops, restructure reset handler a bit.
v5: Commit the magnifier reset immediately, before freeing the
    lost allocator and renderer.
v6: Also check for failed render pass, which may return NULL.
v7: Add a second NULL test, just in case.
This commit is contained in:
Christopher Snowhill 2024-07-17 17:13:51 -07:00 committed by Consolatis
parent e934c7a417
commit 3879f1f080
4 changed files with 76 additions and 4 deletions

View file

@ -318,6 +318,8 @@ struct server {
*/
int pending_output_layout_change;
struct wl_listener renderer_lost;
struct wlr_gamma_control_manager_v1 *gamma_control_manager_v1;
struct wl_listener gamma_control_set_gamma;

View file

@ -20,5 +20,6 @@ bool output_wants_magnification(struct output *output);
void magnify(struct output *output, struct wlr_buffer *output_buffer,
struct wlr_box *damage);
bool is_magnify_on(void);
void magnify_reset(void);
#endif /* LABWC_MAGNIFIER_H */