aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/multi/backend.c20
-rw-r--r--include/wlr/backend/multi.h2
2 files changed, 16 insertions, 6 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,
diff --git a/include/wlr/backend/multi.h b/include/wlr/backend/multi.h
index 842eed67..1e04dba4 100644
--- a/include/wlr/backend/multi.h
+++ b/include/wlr/backend/multi.h
@@ -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
* 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);
void wlr_multi_backend_remove(struct wlr_backend *multi,