diff --git a/include/labwc.h b/include/labwc.h index 88860de2..7425e22f 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -274,7 +274,6 @@ struct server { struct wl_listener renderer_lost; struct wlr_gamma_control_manager_v1 *gamma_control_manager_v1; - struct wl_listener gamma_control_set_gamma; struct session_lock_manager *session_lock_manager; diff --git a/include/output.h b/include/output.h index 2b1e4bcf..b81ff2b6 100644 --- a/include/output.h +++ b/include/output.h @@ -39,8 +39,6 @@ struct output { * disconnected and connected again. */ uint64_t id_bit; - - bool gamma_lut_changed; }; #undef LAB_NR_LAYERS diff --git a/src/output.c b/src/output.c index f62dd87e..04fbf25a 100644 --- a/src/output.c +++ b/src/output.c @@ -79,36 +79,6 @@ output_get_tearing_allowance(struct output *output) return view->force_tearing == LAB_STATE_ENABLED; } -static void -output_apply_gamma(struct output *output) -{ - assert(output); - assert(output->gamma_lut_changed); - - struct server *server = output->server; - struct wlr_scene_output *scene_output = output->scene_output; - - struct wlr_output_state pending; - wlr_output_state_init(&pending); - - output->gamma_lut_changed = false; - struct wlr_gamma_control_v1 *gamma_control = - wlr_gamma_control_manager_v1_get_control( - server->gamma_control_manager_v1, - output->wlr_output); - - if (!wlr_gamma_control_v1_apply(gamma_control, &pending)) { - wlr_output_state_finish(&pending); - return; - } - - if (!lab_wlr_scene_output_commit(scene_output, &pending)) { - wlr_gamma_control_v1_send_failed_and_destroy(gamma_control); - } - - wlr_output_state_finish(&pending); -} - static void handle_output_frame(struct wl_listener *listener, void *data) { @@ -128,16 +98,7 @@ handle_output_frame(struct wl_listener *listener, void *data) return; } - if (output->gamma_lut_changed) { - /* - * We are not mixing the gamma state with - * other pending output changes to make it - * easier to handle a failed output commit - * due to gamma without impacting other - * unrelated output changes. - */ - output_apply_gamma(output); - } else { + { struct wlr_scene_output *scene_output = output->scene_output; struct wlr_output_state *pending = &output->pending; @@ -588,6 +549,8 @@ output_init(struct server *server) { server->gamma_control_manager_v1 = wlr_gamma_control_manager_v1_create(server->wl_display); + wlr_scene_set_gamma_control_manager_v1(server->scene, + server->gamma_control_manager_v1); server->new_output.notify = handle_new_output; wl_signal_add(&server->backend->events.new_output, &server->new_output); @@ -905,19 +868,6 @@ handle_output_layout_change(struct wl_listener *listener, void *data) do_output_layout_change(server); } -static void -handle_gamma_control_set_gamma(struct wl_listener *listener, void *data) -{ - const struct wlr_gamma_control_manager_v1_set_gamma_event *event = data; - - struct output *output = event->output->data; - if (!output_is_usable(output)) { - return; - } - output->gamma_lut_changed = true; - wlr_output_schedule_frame(output->wlr_output); -} - static void output_manager_init(struct server *server) { @@ -934,10 +884,6 @@ output_manager_init(struct server *server) server->output_manager_test.notify = handle_output_manager_test; wl_signal_add(&server->output_manager->events.test, &server->output_manager_test); - - server->gamma_control_set_gamma.notify = handle_gamma_control_set_gamma; - wl_signal_add(&server->gamma_control_manager_v1->events.set_gamma, - &server->gamma_control_set_gamma); } static void @@ -946,7 +892,6 @@ output_manager_finish(struct server *server) wl_list_remove(&server->output_layout_change.link); wl_list_remove(&server->output_manager_apply.link); wl_list_remove(&server->output_manager_test.link); - wl_list_remove(&server->gamma_control_set_gamma.link); } struct output *