i3bar: add support for nonprimary output

Added a new output option `nonprimary` that causes the bar to be
displayed on all outputs except the primary one.

Fixes #4083
This commit is contained in:
Maxim Schuwalow 2020-10-22 19:37:09 +02:00 committed by Orestis Floros
parent 3cd1c45eba
commit 90e7a156a2
No known key found for this signature in database
GPG Key ID: A09DBD7D3222C1C3
3 changed files with 13 additions and 4 deletions

View File

@ -29,6 +29,7 @@ working. Please reach out to us in that case!
• i3-input: add different exit codes for when i3-input fails • i3-input: add different exit codes for when i3-input fails
• allow ppt values in move direction and move position commands • allow ppt values in move direction and move position commands
• i3bar: add coordinates relative to the current output in i3bar click events • i3bar: add coordinates relative to the current output in i3bar click events
• i3bar: add “nonprimary” output option
┌────────────────────────────┐ ┌────────────────────────────┐
│ Bugfixes │ │ Bugfixes │

View File

@ -1484,9 +1484,16 @@ options for different outputs by using multiple 'bar' blocks.
To make a particular i3bar instance handle multiple outputs, specify the output To make a particular i3bar instance handle multiple outputs, specify the output
directive multiple times. directive multiple times.
These output names have a special meaning:
primary::
Selects the output that is configured as primary in the X server.
nonprimary::
Selects every output that is not configured as primary in the X server.
*Syntax*: *Syntax*:
--------------- ---------------
output primary|<output> output primary|nonprimary|<output>
--------------- ---------------
*Example*: *Example*:

View File

@ -192,11 +192,12 @@ static int outputs_end_map_cb(void *params_) {
/* See if we actually handle that output */ /* See if we actually handle that output */
if (config.num_outputs > 0) { if (config.num_outputs > 0) {
const bool is_primary = params->outputs_walk->primary;
bool handle_output = false; bool handle_output = false;
for (int c = 0; c < config.num_outputs; c++) { for (int c = 0; c < config.num_outputs; c++) {
if (strcasecmp(params->outputs_walk->name, config.outputs[c]) == 0 || if ((strcasecmp(params->outputs_walk->name, config.outputs[c]) == 0) ||
(strcasecmp(config.outputs[c], "primary") == 0 && (strcasecmp(config.outputs[c], "primary") == 0 && is_primary) ||
params->outputs_walk->primary)) { (strcasecmp(config.outputs[c], "nonprimary") == 0 && !is_primary)) {
handle_output = true; handle_output = true;
break; break;
} }