Add toggle for output adaptive_sync

This commit is contained in:
Emil Engberg 2024-09-20 15:36:58 +02:00 committed by Simon Ser
parent 9765c29be1
commit e940acd374
2 changed files with 21 additions and 5 deletions

View file

@ -1,5 +1,7 @@
#include <strings.h>
#include "sway/commands.h" #include "sway/commands.h"
#include "sway/config.h" #include "sway/config.h"
#include "sway/output.h"
#include "util.h" #include "util.h"
struct cmd_results *output_cmd_adaptive_sync(int argc, char **argv) { struct cmd_results *output_cmd_adaptive_sync(int argc, char **argv) {
@ -10,12 +12,26 @@ struct cmd_results *output_cmd_adaptive_sync(int argc, char **argv) {
return cmd_results_new(CMD_INVALID, "Missing adaptive_sync argument"); return cmd_results_new(CMD_INVALID, "Missing adaptive_sync argument");
} }
if (parse_boolean(argv[0], true)) { bool current_value = true;
config->handler_context.output_config->adaptive_sync = 1; if (strcasecmp(argv[0], "toggle") == 0) {
} else { const char *oc_name = config->handler_context.output_config->name;
config->handler_context.output_config->adaptive_sync = 0; if (strcmp(oc_name, "*") == 0) {
return cmd_results_new(CMD_INVALID,
"Cannot apply toggle to all outputs");
}
struct sway_output *sway_output = all_output_by_name_or_id(oc_name);
if (!sway_output || !sway_output->wlr_output) {
return cmd_results_new(CMD_FAILURE,
"Cannot apply toggle to unknown output %s", oc_name);
}
current_value =
sway_output->wlr_output->adaptive_sync_status == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED;
} }
config->handler_context.output_config->adaptive_sync = parse_boolean(argv[0], current_value);
config->handler_context.leftovers.argc = argc - 1; config->handler_context.leftovers.argc = argc - 1;
config->handler_context.leftovers.argv = argv + 1; config->handler_context.leftovers.argv = argv + 1;
return NULL; return NULL;

View file

@ -154,7 +154,7 @@ must be separated by one space. For example:
This setting only has an effect on Wayland and DRM backends, as support for This setting only has an effect on Wayland and DRM backends, as support for
presentation timestamps and predicted output refresh rate is required. presentation timestamps and predicted output refresh rate is required.
*output* <name> adaptive_sync on|off *output* <name> adaptive_sync on|off|toggle
Enables or disables adaptive synchronization (often referred to as Variable Enables or disables adaptive synchronization (often referred to as Variable
Refresh Rate, or by the vendor-specific names FreeSync/G-Sync). Refresh Rate, or by the vendor-specific names FreeSync/G-Sync).