1
1
Fork 0
mirror of https://github.com/swaywm/sway synced 2024-05-19 17:36:11 +02:00

desktop/output: Debounce modesets

Output changes often happen in rapid succession. Instead of doing the
modesets one by one, set a 10 millisecond debounce timer.
This commit is contained in:
Kenny Levinsen 2024-03-28 00:34:30 +01:00
parent 2686afb95c
commit cc8f9ff6f6
2 changed files with 25 additions and 9 deletions

View File

@ -133,6 +133,8 @@ struct sway_server {
// Stores the nodes that have been marked as "dirty" and will be put into
// the pending transaction.
list_t *dirty_nodes;
struct wl_event_source *delayed_modeset;
};
extern struct sway_server server;

View File

@ -362,6 +362,26 @@ static void update_output_manager_config(struct sway_server *server) {
ipc_event_output();
}
static int timer_modeset_handle(void *data) {
struct sway_server *server = data;
wl_event_source_remove(server->delayed_modeset);
server->delayed_modeset = NULL;
apply_all_output_configs();
transaction_commit_dirty();
update_output_manager_config(server);
return 0;
}
static void request_modeset(struct sway_server *server) {
if (server->delayed_modeset == NULL) {
server->delayed_modeset = wl_event_loop_add_timer(server->wl_event_loop,
timer_modeset_handle, server);
wl_event_source_timer_update(server->delayed_modeset, 10);
}
}
static void begin_destroy(struct sway_output *output) {
struct sway_server *server = output->server;
@ -385,9 +405,7 @@ static void begin_destroy(struct sway_output *output) {
output->wlr_output->data = NULL;
output->wlr_output = NULL;
transaction_commit_dirty();
update_output_manager_config(server);
request_modeset(server);
}
static void handle_destroy(struct wl_listener *listener, void *data) {
@ -521,11 +539,7 @@ void handle_new_output(struct wl_listener *listener, void *data) {
sway_session_lock_add_output(server->session_lock.lock, output);
}
apply_all_output_configs();
transaction_commit_dirty();
update_output_manager_config(server);
request_modeset(server);
}
void handle_output_layout_change(struct wl_listener *listener,
@ -677,5 +691,5 @@ void handle_output_power_manager_set_mode(struct wl_listener *listener,
break;
}
store_output_config(oc);
apply_all_output_configs();
request_modeset(output->server);
}