Skip to content

Commit

Permalink
chase: handle gamma-control-v1 set_gamma events
Browse files Browse the repository at this point in the history
  • Loading branch information
johanmalm committed Dec 1, 2023
1 parent 83e67b3 commit 9a37c17
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 1 deletion.
5 changes: 5 additions & 0 deletions include/labwc.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
#include <wlr/types/wlr_cursor.h>
#include <wlr/types/wlr_data_device.h>
#include <wlr/types/wlr_foreign_toplevel_management_v1.h>
#include <wlr/types/wlr_gamma_control_v1.h>
#include <wlr/types/wlr_input_device.h>
#include <wlr/types/wlr_keyboard.h>
#include <wlr/types/wlr_keyboard_group.h>
Expand Down Expand Up @@ -291,6 +292,9 @@ struct server {
*/
int pending_output_layout_change;

struct wlr_gamma_control_manager_v1 *gamma_control_manager_v1;
struct wl_listener gamma_control_set_gamma;

struct session_lock *session_lock;

struct wlr_foreign_toplevel_manager_v1 *foreign_toplevel_manager;
Expand Down Expand Up @@ -343,6 +347,7 @@ struct output {
struct wl_listener request_state;

bool leased;
bool gamma_lut_changed;
};

#undef LAB_NR_LAYERS
Expand Down
36 changes: 36 additions & 0 deletions src/output.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,24 @@ output_frame_notify(struct wl_listener *listener, void *data)
if (!output_is_usable(output)) {
return;
}

struct wlr_output *wlr_output = output->wlr_output;
struct server *server = output->server;

if (output->gamma_lut_changed) {
output->gamma_lut_changed = false;
struct wlr_gamma_control_v1 *gamma_control =
wlr_gamma_control_manager_v1_get_control(
server->gamma_control_manager_v1, wlr_output);
if (!wlr_gamma_control_v1_apply(gamma_control, &wlr_output->pending)) {
return;
}
if (!wlr_output_test(wlr_output)) {
wlr_output_rollback(wlr_output);
wlr_gamma_control_v1_send_failed_and_destroy(gamma_control);
}
}

if (lab_wlr_scene_output_commit(output->scene_output)) {
struct timespec now = { 0 };
clock_gettime(CLOCK_MONOTONIC, &now);
Expand Down Expand Up @@ -314,6 +332,9 @@ new_output_notify(struct wl_listener *listener, void *data)
void
output_init(struct server *server)
{
server->gamma_control_manager_v1 =
wlr_gamma_control_manager_v1_create(server->wl_display);

server->new_output.notify = new_output_notify;
wl_signal_add(&server->backend->events.new_output, &server->new_output);

Expand Down Expand Up @@ -529,6 +550,17 @@ 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)
{
struct server *server = wl_container_of(listener, server, gamma_control_set_gamma);
const struct wlr_gamma_control_manager_v1_set_gamma_event *event = data;

struct output *output = event->output->data;
output->gamma_lut_changed = true;
wlr_output_schedule_frame(output->wlr_output);
}

void
output_manager_init(struct server *server)
{
Expand All @@ -541,6 +573,10 @@ output_manager_init(struct server *server)
server->output_manager_apply.notify = handle_output_manager_apply;
wl_signal_add(&server->output_manager->events.apply,
&server->output_manager_apply);

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);
}

struct output *
Expand Down
1 change: 0 additions & 1 deletion src/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,6 @@ server_init(struct server *server)
wlr_export_dmabuf_manager_v1_create(server->wl_display);
wlr_screencopy_manager_v1_create(server->wl_display);
wlr_data_control_manager_v1_create(server->wl_display);
wlr_gamma_control_manager_v1_create(server->wl_display);
wlr_viewporter_create(server->wl_display);
wlr_single_pixel_buffer_manager_v1_create(server->wl_display);

Expand Down

0 comments on commit 9a37c17

Please sign in to comment.