chase wlroots: wlr_scene_set_gamma_control_manager_v1

Ref: 515275ee7214bf91f8a758b660093eb4b932195a
(wlr_scene: Introduce wlr_scene_set_gamma_control_manager_v1)

This wlroots change eliminates the need for separate event tracking for gamma
control application.

v2: Fix code style
This commit is contained in:
Christopher Snowhill 2026-03-02 18:05:04 -08:00
parent 368ec938a5
commit 055d089066
3 changed files with 3 additions and 61 deletions

View file

@ -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;

View file

@ -39,8 +39,6 @@ struct output {
* disconnected and connected again.
*/
uint64_t id_bit;
bool gamma_lut_changed;
};
#undef LAB_NR_LAYERS

View file

@ -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 *