backend/multi: disallow multiple renderers at the same time

This commit is contained in:
emersion 2018-05-15 22:08:08 +01:00
parent a1631dd9ee
commit 52bd8aa716
No known key found for this signature in database
GPG Key ID: 0FDE7BE0E88F5E48
2 changed files with 16 additions and 6 deletions

View File

@ -130,20 +130,29 @@ static struct subbackend_state *multi_backend_get_subbackend(struct wlr_multi_ba
return NULL; return NULL;
} }
void wlr_multi_backend_add(struct wlr_backend *_multi, bool wlr_multi_backend_add(struct wlr_backend *_multi,
struct wlr_backend *backend) { struct wlr_backend *backend) {
assert(wlr_backend_is_multi(_multi)); assert(wlr_backend_is_multi(_multi));
struct wlr_multi_backend *multi = (struct wlr_multi_backend *)_multi; struct wlr_multi_backend *multi = (struct wlr_multi_backend *)_multi;
if (multi_backend_get_subbackend(multi, backend)) { if (multi_backend_get_subbackend(multi, backend)) {
// already added // already added
return; return true;
} }
struct subbackend_state *sub; struct wlr_renderer *multi_renderer =
if (!(sub = calloc(1, sizeof(struct subbackend_state)))) { multi_backend_get_renderer(&multi->backend);
struct wlr_renderer *backend_renderer = wlr_backend_get_renderer(backend);
if (multi_renderer != NULL && backend_renderer != NULL) {
wlr_log(L_ERROR, "Could not add backend: multiple renderers at the "
"same time aren't supported");
return false;
}
struct subbackend_state *sub = calloc(1, sizeof(struct subbackend_state));
if (sub == NULL) {
wlr_log(L_ERROR, "Could not add backend: allocation failed"); wlr_log(L_ERROR, "Could not add backend: allocation failed");
return; return false;
} }
wl_list_insert(&multi->backends, &sub->link); wl_list_insert(&multi->backends, &sub->link);
@ -160,6 +169,7 @@ void wlr_multi_backend_add(struct wlr_backend *_multi,
sub->new_output.notify = new_output_reemit; sub->new_output.notify = new_output_reemit;
wlr_signal_emit_safe(&multi->events.backend_add, backend); wlr_signal_emit_safe(&multi->events.backend_add, backend);
return true;
} }
void wlr_multi_backend_remove(struct wlr_backend *_multi, void wlr_multi_backend_remove(struct wlr_backend *_multi,

View File

@ -13,7 +13,7 @@ struct wlr_backend *wlr_multi_backend_create(struct wl_display *display);
* Adds the given backend to the multi backend. This should be done before the * Adds the given backend to the multi backend. This should be done before the
* new backend is started. * new backend is started.
*/ */
void wlr_multi_backend_add(struct wlr_backend *multi, bool wlr_multi_backend_add(struct wlr_backend *multi,
struct wlr_backend *backend); struct wlr_backend *backend);
void wlr_multi_backend_remove(struct wlr_backend *multi, void wlr_multi_backend_remove(struct wlr_backend *multi,