Merge pull request #2970 from CyberShadow/i3bar-primary-output
Do not canonicalize special output names
This commit is contained in:
commit
919e66399b
|
@ -28,17 +28,27 @@ static Output *get_screen_at(unsigned int x, unsigned int y) {
|
||||||
/*
|
/*
|
||||||
* Creates outputs according to the given specification.
|
* Creates outputs according to the given specification.
|
||||||
* The specification must be in the format wxh+x+y, for example 1024x768+0+0,
|
* 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:
|
* 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) {
|
void fake_outputs_init(const char *output_spec) {
|
||||||
char useless_buffer[1024];
|
|
||||||
const char *walk = output_spec;
|
const char *walk = output_spec;
|
||||||
unsigned int x, y, width, height;
|
unsigned int x, y, width, height;
|
||||||
while (sscanf(walk, "%ux%u+%u+%u", &width, &height, &x, &y) == 4) {
|
int chars_consumed;
|
||||||
DLOG("Parsed output as width = %u, height = %u at (%u, %u)\n",
|
while (sscanf(walk, "%ux%u+%u+%u%n", &width, &height, &x, &y, &chars_consumed) == 4) {
|
||||||
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);
|
Output *new_output = get_screen_at(x, y);
|
||||||
if (new_output != NULL) {
|
if (new_output != NULL) {
|
||||||
DLOG("Re-used old output %p\n", new_output);
|
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));
|
init_ws_for_output(new_output, output_get_content(new_output->con));
|
||||||
num_screens++;
|
num_screens++;
|
||||||
}
|
}
|
||||||
|
new_output->primary = primary;
|
||||||
/* Figure out how long the input was to skip it */
|
|
||||||
walk += sprintf(useless_buffer, "%ux%u+%u+%u", width, height, x, y) + 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num_screens == 0) {
|
if (num_screens == 0) {
|
||||||
|
|
|
@ -580,6 +580,10 @@ static void dump_bar_bindings(yajl_gen gen, Barconfig *config) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *canonicalize_output_name(char *name) {
|
static char *canonicalize_output_name(char *name) {
|
||||||
|
/* Do not canonicalize special output names. */
|
||||||
|
if (strcasecmp(name, "primary") == 0) {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
Output *output = get_output_by_name(name, false);
|
Output *output = get_output_by_name(name, false);
|
||||||
return output ? output_primary_name(output) : name;
|
return output ? output_primary_name(output) : name;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
#!perl
|
||||||
|
# vim:ts=4:sw=4:expandtab
|
||||||
|
#
|
||||||
|
# Please read the following documents before working on tests:
|
||||||
|
# • http://build.i3wm.org/docs/testsuite.html
|
||||||
|
# (or docs/testsuite)
|
||||||
|
#
|
||||||
|
# • http://build.i3wm.org/docs/lib-i3test.html
|
||||||
|
# (alternatively: perldoc ./testcases/lib/i3test.pm)
|
||||||
|
#
|
||||||
|
# • http://build.i3wm.org/docs/ipc.html
|
||||||
|
# (or docs/ipc)
|
||||||
|
#
|
||||||
|
# • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf
|
||||||
|
# (unless you are already familiar with Perl)
|
||||||
|
#
|
||||||
|
# Tests that i3bars configured to use the primary output do not have
|
||||||
|
# their output names canonicalized to something other than "primary".
|
||||||
|
# Ticket: #2948
|
||||||
|
# Bug still in: 4.14-93-ga3a7d04a
|
||||||
|
use i3test i3_config => <<EOT;
|
||||||
|
# i3 config file (v4)
|
||||||
|
font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1
|
||||||
|
|
||||||
|
fake-outputs 1024x768+0+0P
|
||||||
|
|
||||||
|
bar {
|
||||||
|
output primary
|
||||||
|
}
|
||||||
|
EOT
|
||||||
|
|
||||||
|
my $bars = i3->get_bar_config()->recv;
|
||||||
|
is(@$bars, 1, 'one bar configured');
|
||||||
|
|
||||||
|
my $bar_id = shift @$bars;
|
||||||
|
|
||||||
|
my $bar_config = i3->get_bar_config($bar_id)->recv;
|
||||||
|
is_deeply($bar_config->{outputs}, [ "primary" ], 'bar_config output is primary');
|
||||||
|
|
||||||
|
done_testing;
|
Loading…
Reference in New Issue