Accept * as parameter to operate on all outputs

This commit is contained in:
Leon Henrik Plickat 2021-06-21 16:05:36 +02:00
parent f968900de8
commit fec8a5db3d
2 changed files with 64 additions and 43 deletions

View File

@ -41,6 +41,13 @@ Toggle the power mode of the output.
.RE .RE
.SH OUTPUT NAMES
Output names are compositor dependand.
.P
If instead of an output name * is given as parameter to an operation, wlopm will
do that operation for all discovered outputs.
.SH AUTHOR .SH AUTHOR
Leon Henrik Plickat Leon Henrik Plickat

100
wlopm.c
View File

@ -173,11 +173,67 @@ static struct Output *output_from_name (const char *str)
return NULL; return NULL;
} }
static void output_set_power_mode (struct Output *output, enum Power_mode mode)
{
enum zwlr_output_power_v1_mode new_mode;
switch (mode)
{
case ON:
new_mode = ZWLR_OUTPUT_POWER_V1_MODE_ON;
break;
case OFF:
new_mode = ZWLR_OUTPUT_POWER_V1_MODE_OFF;
break;
case TOGGLE:
if ( output->mode == ZWLR_OUTPUT_POWER_V1_MODE_ON )
new_mode = ZWLR_OUTPUT_POWER_V1_MODE_OFF;
else
new_mode = ZWLR_OUTPUT_POWER_V1_MODE_ON;
break;
}
zwlr_output_power_v1_set_mode(output->wlr_output_power, new_mode);
}
static char *power_mode_to_string (enum zwlr_output_power_v1_mode mode) static char *power_mode_to_string (enum zwlr_output_power_v1_mode mode)
{ {
return mode == ZWLR_OUTPUT_POWER_V1_MODE_ON ? "on" : "off"; return mode == ZWLR_OUTPUT_POWER_V1_MODE_ON ? "on" : "off";
} }
static void do_operation (struct Operation *operation)
{
if ( *operation->name == '*' )
{
struct Output *output;
wl_list_for_each(output, &outputs, link)
output_set_power_mode(output, operation->power_mode);
}
else
{
struct Output *output = output_from_name(operation->name);
if ( output == NULL )
{
if (json)
{
fprintf(stdout,
"%s\n {\n"
" \"output\": \"%s\",\n"
" \"error\": \"output does not exist\"\n"
" }",
json_prev ? "," : "",
operation->name);
json_prev = true;
}
else
fprintf(stderr, "ERROR: Output '%s' does not exist.\n",
operation->name);
return;
}
output_set_power_mode(output, operation->power_mode);
}
}
static void sync_handle_done (void *data, struct wl_callback *wl_callback, uint32_t other_data) static void sync_handle_done (void *data, struct wl_callback *wl_callback, uint32_t other_data)
{ {
wl_callback_destroy(wl_callback); wl_callback_destroy(wl_callback);
@ -264,49 +320,7 @@ static void sync_handle_done (void *data, struct wl_callback *wl_callback, uint3
struct Operation *operation; struct Operation *operation;
wl_list_for_each(operation, &operations, link) wl_list_for_each(operation, &operations, link)
{ do_operation(operation);
const struct Output *output = output_from_name(operation->name);
if ( output == NULL )
{
if (json)
{
fprintf(stdout,
"%s\n {\n"
" \"output\": \"%s\",\n"
" \"error\": \"output does not exist\"\n"
" }",
json_prev ? "," : "",
operation->name);
json_prev = true;
}
else
fprintf(stderr, "ERROR: Output '%s' does not exist.\n",
operation->name);
continue;
}
enum zwlr_output_power_v1_mode new_mode;
switch (operation->power_mode)
{
case ON:
new_mode = ZWLR_OUTPUT_POWER_V1_MODE_ON;
break;
case OFF:
new_mode = ZWLR_OUTPUT_POWER_V1_MODE_OFF;
break;
case TOGGLE:
if ( output->mode == ZWLR_OUTPUT_POWER_V1_MODE_ON )
new_mode = ZWLR_OUTPUT_POWER_V1_MODE_OFF;
else
new_mode = ZWLR_OUTPUT_POWER_V1_MODE_ON;
break;
}
zwlr_output_power_v1_set_mode(output->wlr_output_power, new_mode);
}
/* We need to sync yet another time because setting the /* We need to sync yet another time because setting the
* power mode might fail and we want to display those * power mode might fail and we want to display those