diff --git a/include/wlr/types/wlr_gamma_control_v1.h b/include/wlr/types/wlr_gamma_control_v1.h index 7a03a73e..66d23b3b 100644 --- a/include/wlr/types/wlr_gamma_control_v1.h +++ b/include/wlr/types/wlr_gamma_control_v1.h @@ -43,5 +43,6 @@ struct wlr_gamma_control_v1 *wlr_gamma_control_manager_v1_get_control( struct wlr_gamma_control_manager_v1 *manager, struct wlr_output *output); bool wlr_gamma_control_v1_apply(struct wlr_gamma_control_v1 *gamma_control, struct wlr_output_state *output_state); +void wlr_gamma_control_v1_send_failed_and_destroy(struct wlr_gamma_control_v1 *gamma_control); #endif diff --git a/types/wlr_gamma_control_v1.c b/types/wlr_gamma_control_v1.c index 5f3b750b..17124eaf 100644 --- a/types/wlr_gamma_control_v1.c +++ b/types/wlr_gamma_control_v1.c @@ -42,12 +42,6 @@ static void gamma_control_destroy(struct wlr_gamma_control_v1 *gamma_control) { wl_signal_emit_mutable(&manager->events.set_gamma, &event); } -static void gamma_control_send_failed( - struct wlr_gamma_control_v1 *gamma_control) { - zwlr_gamma_control_v1_send_failed(gamma_control->resource); - gamma_control_destroy(gamma_control); -} - static void gamma_control_apply(struct wlr_gamma_control_v1 *gamma_control) { uint16_t *r = gamma_control->table; uint16_t *g = gamma_control->table + gamma_control->ramp_size; @@ -56,7 +50,7 @@ static void gamma_control_apply(struct wlr_gamma_control_v1 *gamma_control) { wlr_output_set_gamma(gamma_control->output, gamma_control->ramp_size, r, g, b); if (!wlr_output_test(gamma_control->output)) { wlr_output_rollback(gamma_control->output); - gamma_control_send_failed(gamma_control); + wlr_gamma_control_v1_send_failed_and_destroy(gamma_control); return; } @@ -112,12 +106,12 @@ static void gamma_control_handle_set_gamma(struct wl_client *client, int fd_flags = fcntl(fd, F_GETFL, 0); if (fd_flags == -1) { wlr_log_errno(WLR_ERROR, "failed to get FD flags"); - gamma_control_send_failed(gamma_control); + wlr_gamma_control_v1_send_failed_and_destroy(gamma_control); goto error_fd; } if (fcntl(fd, F_SETFL, fd_flags | O_NONBLOCK) == -1) { wlr_log_errno(WLR_ERROR, "failed to set FD flags"); - gamma_control_send_failed(gamma_control); + wlr_gamma_control_v1_send_failed_and_destroy(gamma_control); goto error_fd; } @@ -131,7 +125,7 @@ static void gamma_control_handle_set_gamma(struct wl_client *client, ssize_t n_read = pread(fd, table, table_size, 0); if (n_read < 0) { wlr_log_errno(WLR_ERROR, "failed to read gamma table"); - gamma_control_send_failed(gamma_control); + wlr_gamma_control_v1_send_failed_and_destroy(gamma_control); goto error_table; } else if ((size_t)n_read != table_size) { wl_resource_post_error(gamma_control_resource, @@ -320,3 +314,11 @@ bool wlr_gamma_control_v1_apply(struct wlr_gamma_control_v1 *gamma_control, return wlr_output_state_set_gamma_lut(output_state, gamma_control->ramp_size, r, g, b); } + +void wlr_gamma_control_v1_send_failed_and_destroy(struct wlr_gamma_control_v1 *gamma_control) { + if (gamma_control == NULL) { + return; + } + zwlr_gamma_control_v1_send_failed(gamma_control->resource); + gamma_control_destroy(gamma_control); +}