}
if (dom == DOMAIN_NODE) {
- if (query_node_ids(&ref, &trg, node_sel, rsp) < 1) {
+ if (query_node_ids(&ref, &trg, monitor_sel, desktop_sel, node_sel, rsp) < 1) {
fail(rsp, "");
}
} else if (dom == DOMAIN_DESKTOP) {
- if (query_desktop_ids(&ref, &trg, desktop_sel, print_ids ? fprint_desktop_id : fprint_desktop_name, rsp) < 1) {
+ if (query_desktop_ids(&ref, &trg, monitor_sel, desktop_sel, print_ids ? fprint_desktop_id : fprint_desktop_name, rsp) < 1) {
fail(rsp, "");
}
} else if (dom == DOMAIN_MONITOR) {
fprintf(rsp, "]");
}
-int query_node_ids(coordinates_t *ref, coordinates_t *trg, node_select_t *sel, 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 count = 0;
for (monitor_t *m = mon_head; m != NULL; m = m->next) {
- if (trg->monitor != NULL && m != trg->monitor) {
+ coordinates_t loc = {m, NULL, NULL};
+ if ((trg->monitor != NULL && m != trg->monitor) ||
+ (mon_sel != NULL && !monitor_matches(&loc, ref, mon_sel))) {
continue;
}
for (desktop_t *d = m->desk_head; d != NULL; d = d->next) {
- if (trg->desktop != NULL && d != trg->desktop) {
+ coordinates_t loc = {m, d, NULL};
+ if ((trg->desktop != NULL && d != trg->desktop) ||
+ (desk_sel != NULL && !desktop_matches(&loc, 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, desktop_select_t *sel, desktop_printer_t printer, 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 count = 0;
for (monitor_t *m = mon_head; m != NULL; m = m->next) {
- if (trg->monitor != NULL && m != trg->monitor) {
+ coordinates_t loc = {m, NULL, NULL};
+ if ((trg->monitor != NULL && m != trg->monitor) ||
+ (mon_sel != NULL && !monitor_matches(&loc, ref, mon_sel))) {
continue;
}
for (desktop_t *d = m->desk_head; d != NULL; d = d->next) {
for (monitor_t *m = mon_head; m != NULL; m = m->next) {
coordinates_t loc = {m, NULL, NULL};
if ((trg->monitor != NULL && m != trg->monitor) ||
- (sel != NULL && !monitor_matches(&loc, ref, sel))) {
+ (sel != NULL && !monitor_matches(&loc, ref, sel))) {
continue;
}
printer(m, 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, node_select_t *sel, 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_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, desktop_select_t *sel, desktop_printer_t printer, 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_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);