aboutsummaryrefslogtreecommitdiff
path: root/backend/multi
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-05-15 22:08:08 +0100
committeremersion <contact@emersion.fr>2018-05-19 09:09:03 +0100
commit52bd8aa71671fbdcf091a8b68b4eb2bb200b624d (patch)
treea8ee930d236132a530e009b74474470eb903adf5 /backend/multi
parenta1631dd9ee148ac2adfe664be44b0e463e29950a (diff)
backend/multi: disallow multiple renderers at the same time
Diffstat (limited to 'backend/multi')
-rw-r--r--backend/multi/backend.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/backend/multi/backend.c b/backend/multi/backend.c
index b70d7003..33dfc6c5 100644
--- a/backend/multi/backend.c
+++ b/backend/multi/backend.c
@@ -130,20 +130,29 @@ static struct subbackend_state *multi_backend_get_subbackend(struct wlr_multi_ba
return NULL;
}
-void wlr_multi_backend_add(struct wlr_backend *_multi,
+bool wlr_multi_backend_add(struct wlr_backend *_multi,
struct wlr_backend *backend) {
assert(wlr_backend_is_multi(_multi));
struct wlr_multi_backend *multi = (struct wlr_multi_backend *)_multi;
if (multi_backend_get_subbackend(multi, backend)) {
// already added
- return;
+ return true;
}
- struct subbackend_state *sub;
- if (!(sub = calloc(1, sizeof(struct subbackend_state)))) {
+ struct wlr_renderer *multi_renderer =
+ 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");
- return;
+ return false;
}
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;
wlr_signal_emit_safe(&multi->events.backend_add, backend);
+ return true;
}
void wlr_multi_backend_remove(struct wlr_backend *_multi,