summaryrefslogtreecommitdiffstats
path: root/sway/tree
diff options
context:
space:
mode:
Diffstat (limited to 'sway/tree')
-rw-r--r--sway/tree/workspace.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c
index d6819c61..30cf3ebe 100644
--- a/sway/tree/workspace.c
+++ b/sway/tree/workspace.c
@@ -499,19 +499,28 @@ static int find_output(const void *id1, const void *id2) {
499 return strcmp(id1, id2); 499 return strcmp(id1, id2);
500} 500}
501 501
502static int workspace_output_get_priority(struct sway_workspace *ws,
503 struct sway_output *output) {
504 char identifier[128];
505 output_get_identifier(identifier, sizeof(identifier), output);
506 int index_id = list_seq_find(ws->output_priority, find_output, identifier);
507 int index_name = list_seq_find(ws->output_priority, find_output,
508 output->wlr_output->name);
509 return index_name < 0 || index_id < index_name ? index_id : index_name;
510}
511
502void workspace_output_raise_priority(struct sway_workspace *ws, 512void workspace_output_raise_priority(struct sway_workspace *ws,
503 struct sway_output *old_output, struct sway_output *output) { 513 struct sway_output *old_output, struct sway_output *output) {
504 int old_index = list_seq_find(ws->output_priority, find_output, 514 int old_index = workspace_output_get_priority(ws, old_output);
505 old_output->wlr_output->name);
506 if (old_index < 0) { 515 if (old_index < 0) {
507 return; 516 return;
508 } 517 }
509 518
510 int new_index = list_seq_find(ws->output_priority, find_output, 519 int new_index = workspace_output_get_priority(ws, output);
511 output->wlr_output->name);
512 if (new_index < 0) { 520 if (new_index < 0) {
513 list_insert(ws->output_priority, old_index, 521 char identifier[128];
514 strdup(output->wlr_output->name)); 522 output_get_identifier(identifier, sizeof(identifier), output);
523 list_insert(ws->output_priority, old_index, strdup(identifier));
515 } else if (new_index > old_index) { 524 } else if (new_index > old_index) {
516 char *name = ws->output_priority->items[new_index]; 525 char *name = ws->output_priority->items[new_index];
517 list_del(ws->output_priority, new_index); 526 list_del(ws->output_priority, new_index);
@@ -521,10 +530,10 @@ void workspace_output_raise_priority(struct sway_workspace *ws,
521 530
522void workspace_output_add_priority(struct sway_workspace *workspace, 531void workspace_output_add_priority(struct sway_workspace *workspace,
523 struct sway_output *output) { 532 struct sway_output *output) {
524 int index = list_seq_find(workspace->output_priority, 533 if (workspace_output_get_priority(workspace, output) < 0) {
525 find_output, output->wlr_output->name); 534 char identifier[128];
526 if (index < 0) { 535 output_get_identifier(identifier, sizeof(identifier), output);
527 list_add(workspace->output_priority, strdup(output->wlr_output->name)); 536 list_add(workspace->output_priority, strdup(identifier));
528 } 537 }
529} 538}
530 539