aboutsummaryrefslogtreecommitdiff
path: root/backend/multi/backend.c
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2018-05-20 16:21:02 -0400
committerGitHub <noreply@github.com>2018-05-20 16:21:02 -0400
commit341af97125b4376d7a38f00299539ebb050b235c (patch)
tree91edcbccc67230f5feb2bace51a151e858757108 /backend/multi/backend.c
parent327aa7f49d14d22aacf987625fef65b80496eddb (diff)
parent9e3dd6b5600ac3304d33d053714530ac066237db (diff)
Merge pull request #978 from emersion/wlr-backend-env
backend: add WLR_BACKEND env variable
Diffstat (limited to 'backend/multi/backend.c')
-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,