X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Ffake_outputs.c;h=39cbd7bbc6e98fead58a72f94074b45f2826a933;hb=0ed29f567866ad00a2cb14ce2e6eb5a29b277011;hp=6639b3611005b3a393a1c493558724ff0122490c;hpb=d01a59b92246167975ca9bef41e223186a1c399c;p=i3%2Fi3 diff --git a/src/fake_outputs.c b/src/fake_outputs.c index 6639b361..39cbd7bb 100644 --- a/src/fake_outputs.c +++ b/src/fake_outputs.c @@ -28,17 +28,27 @@ static Output *get_screen_at(unsigned int x, unsigned int y) { /* * Creates outputs according to the given specification. * The specification must be in the format wxh+x+y, for example 1024x768+0+0, + * optionally followed by 'P' to indicate a primary output, * with multiple outputs separated by commas: - * 1900x1200+0+0,1280x1024+1900+0 + * 1900x1200+0+0P,1280x1024+1900+0 * */ void fake_outputs_init(const char *output_spec) { - char useless_buffer[1024]; const char *walk = output_spec; unsigned int x, y, width, height; - while (sscanf(walk, "%ux%u+%u+%u", &width, &height, &x, &y) == 4) { - DLOG("Parsed output as width = %u, height = %u at (%u, %u)\n", - width, height, x, y); + int chars_consumed; + while (sscanf(walk, "%ux%u+%u+%u%n", &width, &height, &x, &y, &chars_consumed) == 4) { + walk += chars_consumed; + bool primary = false; + if (*walk == 'P') { + primary = true; + walk++; + } + if (*walk == ',') + walk++; /* Skip delimiter */ + DLOG("Parsed output as width = %u, height = %u at (%u, %u)%s\n", + width, height, x, y, primary ? " (primary)" : ""); + Output *new_output = get_screen_at(x, y); if (new_output != NULL) { DLOG("Re-used old output %p\n", new_output); @@ -67,9 +77,7 @@ void fake_outputs_init(const char *output_spec) { init_ws_for_output(new_output, output_get_content(new_output->con)); num_screens++; } - - /* Figure out how long the input was to skip it */ - walk += sprintf(useless_buffer, "%ux%u+%u+%u", width, height, x, y) + 1; + new_output->primary = primary; } if (num_screens == 0) {