diff --git a/src/maomao.c b/src/maomao.c index 70ff5a7..f68e822 100644 --- a/src/maomao.c +++ b/src/maomao.c @@ -5535,20 +5535,26 @@ void setsel(struct wl_listener *listener, void *data) { wlr_seat_set_selection(seat, event->source, event->serial); } -// 获取tags中最坐标的tag的tagmask +// 获取tags中最前面的tag的tagmask unsigned int get_tags_first_tag(unsigned int source_tags) { - unsigned int i, target, tag; + unsigned int i, tag; tag = 0; if (!source_tags) { return selmon->pertag->curtag; } - for (i = 0; !(tag & 1) && source_tags != 0; i++) { + for (i = 0; !(tag & 1) && source_tags != 0 && i < LENGTH(tags); i++) { tag = source_tags >> i; } - target = 1 << (i - 1); - return target; + + if (i == 1) { + return 1; + } else if (i > 9) { + return 1 << 8; + } else { + return 1 << (i - 1); + } } void show_hide_client(Client *c) { @@ -7085,7 +7091,7 @@ void viewtoright_have_client(const Arg *arg) { return; } - for (target <<= 1; target & TAGMASK; target <<= 1, n++) { + for (target <<= 1; target & TAGMASK && n <= LENGTH(tags); target <<= 1, n++) { wl_list_for_each(c, &clients, link) { if (c->mon == selmon && target & c->tags) { found = 1; @@ -7164,7 +7170,7 @@ void viewtoleft_have_client(const Arg *arg) { return; } - for (target >>= 1; target > 0; target >>= 1, n++) { + for (target >>= 1; target > 0 && n <= LENGTH(tags); target >>= 1, n++) { wl_list_for_each(c, &clients, link) { if (c->mon == selmon && target & c->tags) { found = 1;