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;
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;
}
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;
}
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;
}
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) {
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) {
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;
}
}
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 {
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);
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) {
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);