From caae4db0bc6516b08a2f138c5845c34053e50947 Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev Date: Tue, 19 Sep 2017 14:42:13 +0000 Subject: [PATCH] fake_outputs: Allow designating a fake output as primary Allow appending 'P' to the fake output specification to set the created output's "primary" flag, to allow writing test cases that depend on the presence of a primary output. --- src/fake_outputs.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/fake_outputs.c b/src/fake_outputs.c index 64c3e20c..39cbd7bb 100644 --- a/src/fake_outputs.c +++ b/src/fake_outputs.c @@ -28,8 +28,9 @@ 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) { @@ -37,8 +38,17 @@ void fake_outputs_init(const char *output_spec) { unsigned int x, y, width, height; int chars_consumed; while (sscanf(walk, "%ux%u+%u+%u%n", &width, &height, &x, &y, &chars_consumed) == 4) { - DLOG("Parsed output as width = %u, height = %u at (%u, %u)\n", - width, height, x, y); + 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,10 +77,7 @@ void fake_outputs_init(const char *output_spec) { init_ws_for_output(new_output, output_get_content(new_output->con)); num_screens++; } - - walk += chars_consumed; - if (*walk == ',') - walk++; + new_output->primary = primary; } if (num_screens == 0) { -- 2.39.5