]> git.sur5r.net Git - i3/i3/commitdiff
Do not canonicalize special output names
authorVladimir Panteleev <git@thecybershadow.net>
Tue, 19 Sep 2017 14:46:27 +0000 (14:46 +0000)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 19 Sep 2017 16:58:35 +0000 (18:58 +0200)
canonicalize_output_name allowed the "primary" special output name to
be canonicalized, thus converting it to the name of whatever output
was the primary output at the time. This caused settings
(specifically, i3bar output and tray_output settings) to be stored as
specific output names, instead of the intended special names whose
referred output may change as the system's configuration (i.e. current
primary output) changes.

Add a check to canonicalize_output_name to return the name as-is if it
is the special name "primary".

src/ipc.c
testcases/t/538-i3bar-primary-output.t [new file with mode: 0644]

index dc953adcf341fb838fb9bdbbecb2b4de47cd986d..759665fe91b76341e74128807ce830c39e0ef63e 100644 (file)
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -580,6 +580,10 @@ static void dump_bar_bindings(yajl_gen gen, Barconfig *config) {
 }
 
 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);
     return output ? output_primary_name(output) : name;
 }
diff --git a/testcases/t/538-i3bar-primary-output.t b/testcases/t/538-i3bar-primary-output.t
new file mode 100644 (file)
index 0000000..67fd1b6
--- /dev/null
@@ -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;