]> git.lizzy.rs Git - bspwm.git/commitdiff
Use separate references in `cmd_query`
authorBastien Dejean <nihilhill@gmail.com>
Thu, 10 Dec 2020 17:48:40 +0000 (18:48 +0100)
committerBastien Dejean <nihilhill@gmail.com>
Thu, 10 Dec 2020 17:48:40 +0000 (18:48 +0100)
Fixes #1235.

src/messages.c
src/query.c
src/query.h

index 9d9f46786893e99aabecf528232d3f87571a692a..c10feff1fb3add4ba1e2fd7ab5ac7e2bf98fd1f1 100644 (file)
@@ -942,7 +942,9 @@ void cmd_monitor(char **args, int num, FILE *rsp)
 
 void cmd_query(char **args, int num, FILE *rsp)
 {
-       coordinates_t ref = {mon, mon->desk, mon->desk->focus};
+       coordinates_t monitor_ref = {mon, NULL, NULL};
+       coordinates_t desktop_ref = {mon, mon->desk, NULL};
+       coordinates_t node_ref = {mon, mon->desk, mon->desk->focus};
        coordinates_t trg = {NULL, NULL, NULL};
        monitor_select_t *monitor_sel = NULL;
        desktop_select_t *desktop_sel = NULL;
@@ -964,10 +966,10 @@ void cmd_query(char **args, int num, FILE *rsp)
                        if (num > 1 && *(args + 1)[0] != OPT_CHR) {
                                num--, args++;
                                int ret;
-                               coordinates_t tmp = ref;
-                               ref.desktop = NULL;
-                               ref.node = NULL;
-                               if ((ret = monitor_from_desc(*args, &tmp, &ref)) != SELECTOR_OK) {
+                               coordinates_t tmp = monitor_ref;
+                               monitor_ref.desktop = NULL;
+                               monitor_ref.node = NULL;
+                               if ((ret = monitor_from_desc(*args, &tmp, &monitor_ref)) != SELECTOR_OK) {
                                        handle_failure(ret, "query -M", *args, rsp);
                                        goto end;
                                }
@@ -977,9 +979,9 @@ void cmd_query(char **args, int num, FILE *rsp)
                        if (num > 1 && *(args + 1)[0] != OPT_CHR) {
                                num--, args++;
                                int ret;
-                               coordinates_t tmp = ref;
-                               ref.node = NULL;
-                               if ((ret = desktop_from_desc(*args, &tmp, &ref)) != SELECTOR_OK) {
+                               coordinates_t tmp = desktop_ref;
+                               desktop_ref.node = NULL;
+                               if ((ret = desktop_from_desc(*args, &tmp, &desktop_ref)) != SELECTOR_OK) {
                                        handle_failure(ret, "query -D", *args, rsp);
                                        goto end;
                                }
@@ -989,8 +991,8 @@ void cmd_query(char **args, int num, FILE *rsp)
                        if (num > 1 && *(args + 1)[0] != OPT_CHR) {
                                num--, args++;
                                int ret;
-                               coordinates_t tmp = ref;
-                               if ((ret = node_from_desc(*args, &tmp, &ref)) != SELECTOR_OK) {
+                               coordinates_t tmp = node_ref;
+                               if ((ret = node_from_desc(*args, &tmp, &node_ref)) != SELECTOR_OK) {
                                        handle_failure(ret, "query -N", *args, rsp);
                                        goto end;
                                }
@@ -1010,12 +1012,12 @@ void cmd_query(char **args, int num, FILE *rsp)
                                                goto end;
                                        }
                                        free(desc);
-                               } else if ((ret = monitor_from_desc(*args, &ref, &trg)) != SELECTOR_OK) {
+                               } else if ((ret = monitor_from_desc(*args, &monitor_ref, &trg)) != SELECTOR_OK) {
                                        handle_failure(ret, "query -m", *args, rsp);
                                        goto end;
                                }
                        } else {
-                               trg.monitor = ref.monitor;
+                               trg = monitor_ref;
                        }
                } else if (streq("-d", *args) || streq("--desktop", *args)) {
                        if (num > 1 && *(args + 1)[0] != OPT_CHR) {
@@ -1032,13 +1034,12 @@ void cmd_query(char **args, int num, FILE *rsp)
                                                goto end;
                                        }
                                        free(desc);
-                               } else if ((ret = desktop_from_desc(*args, &ref, &trg)) != SELECTOR_OK) {
+                               } else if ((ret = desktop_from_desc(*args, &desktop_ref, &trg)) != SELECTOR_OK) {
                                        handle_failure(ret, "query -d", *args, rsp);
                                        goto end;
                                }
                        } else {
-                               trg.monitor = ref.monitor;
-                               trg.desktop = ref.desktop;
+                               trg = desktop_ref;
                        }
                } else if (streq("-n", *args) || streq("--node", *args)) {
                        if (num > 1 && *(args + 1)[0] != OPT_CHR) {
@@ -1055,13 +1056,13 @@ void cmd_query(char **args, int num, FILE *rsp)
                                                goto end;
                                        }
                                        free(desc);
-                               } else if ((ret = node_from_desc(*args, &ref, &trg)) != SELECTOR_OK) {
+                               } else if ((ret = node_from_desc(*args, &node_ref, &trg)) != SELECTOR_OK) {
                                        handle_failure(ret, "query -n", *args, rsp);
                                        goto end;
                                }
                        } else {
-                               trg = ref;
-                               if (ref.node == NULL) {
+                               trg = node_ref;
+                               if (trg.node == NULL) {
                                        fail(rsp, "");
                                        goto end;
                                }
@@ -1102,15 +1103,15 @@ void cmd_query(char **args, int num, FILE *rsp)
        }
 
        if (dom == DOMAIN_NODE) {
-               if (query_node_ids(&ref, &trg, monitor_sel, desktop_sel, node_sel, rsp) < 1) {
+               if (query_node_ids(&monitor_ref, &desktop_ref, &node_ref, &trg, monitor_sel, desktop_sel, node_sel, rsp) < 1) {
                        fail(rsp, "");
                }
        } else if (dom == DOMAIN_DESKTOP) {
-               if (query_desktop_ids(&ref, &trg, monitor_sel, desktop_sel, print_ids ? fprint_desktop_id : fprint_desktop_name, rsp) < 1) {
+               if (query_desktop_ids(&monitor_ref, &desktop_ref, &trg, monitor_sel, desktop_sel, print_ids ? fprint_desktop_id : fprint_desktop_name, rsp) < 1) {
                        fail(rsp, "");
                }
        } else if (dom == DOMAIN_MONITOR) {
-               if (query_monitor_ids(&ref, &trg, monitor_sel, print_ids ? fprint_monitor_id : fprint_monitor_name, rsp) < 1) {
+               if (query_monitor_ids(&monitor_ref, &trg, monitor_sel, print_ids ? fprint_monitor_id : fprint_monitor_name, rsp) < 1) {
                        fail(rsp, "");
                }
        } else {
index 3c11068f54b660e0158d40c4d7f0860a8875c08d..d5797151e5128b1820d12df7a4b7d30b06e4a332 100644 (file)
@@ -242,19 +242,19 @@ void query_subscribers(FILE *rsp)
        fprintf(rsp, "]");
 }
 
-int query_node_ids(coordinates_t *ref, coordinates_t *trg, monitor_select_t *mon_sel, desktop_select_t *desk_sel, node_select_t *sel, FILE *rsp)
+int query_node_ids(coordinates_t *mon_ref, coordinates_t *desk_ref, coordinates_t* ref, coordinates_t *trg, monitor_select_t *mon_sel, desktop_select_t *desk_sel, node_select_t *sel, FILE *rsp)
 {
        int count = 0;
        for (monitor_t *m = mon_head; m != NULL; m = m->next) {
                coordinates_t loc = {m, NULL, NULL};
                if ((trg->monitor != NULL && m != trg->monitor) ||
-                   (mon_sel != NULL && !monitor_matches(&loc, ref, mon_sel))) {
+                   (mon_sel != NULL && !monitor_matches(&loc, mon_ref, mon_sel))) {
                        continue;
                }
                for (desktop_t *d = m->desk_head; d != NULL; d = d->next) {
                        coordinates_t loc = {m, d, NULL};
                        if ((trg->desktop != NULL && d != trg->desktop) ||
-                           (desk_sel != NULL && !desktop_matches(&loc, ref, desk_sel))) {
+                           (desk_sel != NULL && !desktop_matches(&loc, desk_ref, desk_sel))) {
                                continue;
                        }
                        count += query_node_ids_in(d->root, d, m, ref, trg, sel, rsp);
@@ -281,13 +281,13 @@ int query_node_ids_in(node_t *n, desktop_t *d, monitor_t *m, coordinates_t *ref,
        return count;
 }
 
-int query_desktop_ids(coordinates_t *ref, coordinates_t *trg, monitor_select_t *mon_sel, desktop_select_t *sel, desktop_printer_t printer, FILE *rsp)
+int query_desktop_ids(coordinates_t* mon_ref, coordinates_t *ref, coordinates_t *trg, monitor_select_t *mon_sel, desktop_select_t *sel, desktop_printer_t printer, FILE *rsp)
 {
        int count = 0;
        for (monitor_t *m = mon_head; m != NULL; m = m->next) {
                coordinates_t loc = {m, NULL, NULL};
                if ((trg->monitor != NULL && m != trg->monitor) ||
-                   (mon_sel != NULL && !monitor_matches(&loc, ref, mon_sel))) {
+                   (mon_sel != NULL && !monitor_matches(&loc, mon_ref, mon_sel))) {
                        continue;
                }
                for (desktop_t *d = m->desk_head; d != NULL; d = d->next) {
index e98f03dbd093b809e2eaea72b888c19f5ce95723..249932642e1c124489a721bac6065385ed0b2e70 100644 (file)
@@ -57,9 +57,9 @@ void query_history(FILE *rsp);
 void query_coordinates(coordinates_t *loc, FILE *rsp);
 void query_stack(FILE *rsp);
 void query_subscribers(FILE *rsp);
-int query_node_ids(coordinates_t *ref, coordinates_t *trg, monitor_select_t *mon_sel, desktop_select_t *desk_sel, node_select_t *sel, FILE *rsp);
+int query_node_ids(coordinates_t *mon_ref, coordinates_t *desk_ref, coordinates_t* ref, coordinates_t *trg, monitor_select_t *mon_sel, desktop_select_t *desk_sel, node_select_t *sel, FILE *rsp);
 int query_node_ids_in(node_t *n, desktop_t *d, monitor_t *m, coordinates_t *ref, coordinates_t *trg, node_select_t *sel, FILE *rsp);
-int query_desktop_ids(coordinates_t *ref, coordinates_t *trg, monitor_select_t *mon_sel, desktop_select_t *sel, desktop_printer_t printer, FILE *rsp);
+int query_desktop_ids(coordinates_t* mon_ref, coordinates_t *ref, coordinates_t *trg, monitor_select_t *mon_sel, desktop_select_t *sel, desktop_printer_t printer, FILE *rsp);
 int query_monitor_ids(coordinates_t *ref, coordinates_t *trg, monitor_select_t *sel, monitor_printer_t printer, FILE *rsp);
 void fprint_monitor_id(monitor_t *m, FILE *rsp);
 void fprint_monitor_name(monitor_t *m, FILE *rsp);