@@ 41,6 41,13 @@ Toggle the power mode of the output.
.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
Leon Henrik Plickat
@@ 173,11 173,67 @@ static struct Output *output_from_name (const char *str)
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)
{
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)
{
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;
wl_list_for_each(operation, &operations, link)
- {
- 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);
- }
-
+ do_operation(operation);
/* We need to sync yet another time because setting the
* power mode might fail and we want to display those