diff --git a/include/labwc.h b/include/labwc.h index 0f8217d6..d203248e 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -309,8 +309,6 @@ struct output { struct wl_listener destroy; struct wl_listener frame; - - bool leased; }; #undef LAB_NR_LAYERS diff --git a/src/output.c b/src/output.c index 7764b3b3..41a1d45b 100644 --- a/src/output.c +++ b/src/output.c @@ -67,22 +67,16 @@ new_output_notify(struct wl_listener *listener, void *data) struct wlr_output *wlr_output = data; /* - * We offer any display as available for lease, some apps like - * gamescope, want to take ownership of a display when they can - * to use planes and present directly. - * This is also useful for debugging the DRM parts of - * another compositor. - */ - if (server->drm_lease_manager) { - wlr_drm_lease_v1_manager_offer_output( - server->drm_lease_manager, wlr_output); - } - - /* - * Don't configure any non-desktop displays, such as VR headsets; + * If this is a non-desktop output, offer it for leasing. + * We may want to do more logic here in future, if we choose + * to offer non-desktop outputs. */ if (wlr_output->non_desktop) { wlr_log(WLR_DEBUG, "Not configuring non-desktop output"); + if (server->drm_lease_manager) { + wlr_drm_lease_v1_manager_offer_output( + server->drm_lease_manager, wlr_output); + } return; } @@ -260,12 +254,11 @@ output_config_apply(struct server *server, wl_list_for_each(head, &config->heads, link) { struct wlr_output *o = head->state.output; struct output *output = output_from_wlr_output(server, o); - bool output_enabled = head->state.enabled && !output->leased; - bool need_to_add = output_enabled && !o->enabled; - bool need_to_remove = !output_enabled && o->enabled; + bool need_to_add = head->state.enabled && !o->enabled; + bool need_to_remove = !head->state.enabled && o->enabled; - wlr_output_enable(o, output_enabled); - if (output_enabled) { + wlr_output_enable(o, head->state.enabled); + if (head->state.enabled) { /* Output specifc actions only */ if (head->state.mode) { wlr_output_set_mode(o, head->state.mode); @@ -292,7 +285,7 @@ output_config_apply(struct server *server, assert(output->scene_output); } - if (output_enabled) { + if (head->state.enabled) { wlr_output_layout_move(server->output_layout, o, head->state.x, head->state.y); } diff --git a/src/server.c b/src/server.c index 457960c0..01676302 100644 --- a/src/server.c +++ b/src/server.c @@ -125,28 +125,16 @@ handle_input_disinhibit(struct wl_listener *listener, void *data) static void handle_drm_lease_request(struct wl_listener *listener, void *data) { + /* + * We only offer non-desktop outputs, but in the future we might want to do + * more logic here. + */ + struct wlr_drm_lease_request_v1 *req = data; struct wlr_drm_lease_v1 *lease = wlr_drm_lease_request_v1_grant(req); if (!lease) { wlr_log(WLR_ERROR, "Failed to grant lease request"); wlr_drm_lease_request_v1_reject(req); - return; - } - - for (size_t i = 0; i < req->n_connectors; ++i) { - struct output *output = req->connectors[i]->output->data; - if (!output) { - continue; - } - - wlr_output_enable(output->wlr_output, false); - wlr_output_commit(output->wlr_output); - - wlr_output_layout_remove(output->server->output_layout, - output->wlr_output); - output->scene_output = NULL; - - output->leased = true; } }