feat: restore the current tag when after chvt

This commit is contained in:
DreamMaoMao
2025-12-29 11:13:50 +08:00
parent 42f722ada2
commit f749500449
2 changed files with 30 additions and 5 deletions

View File

@@ -31,8 +31,14 @@ int bind_to_view(const Arg *arg) {
} }
int chvt(const Arg *arg) { int chvt(const Arg *arg) {
if (selmon) {
chvt_backup_tag = selmon->pertag->curtag;
strncpy(chvt_backup_selmon, selmon->wlr_output->name,
sizeof(chvt_backup_selmon) - 1);
}
wlr_session_change_vt(session, arg->ui); wlr_session_change_vt(session, arg->ui);
return 0; return 1;
} }
int create_virtual_output(const Arg *arg) { int create_virtual_output(const Arg *arg) {

View File

@@ -845,6 +845,9 @@ static double swipe_dy = 0;
bool render_border = true; bool render_border = true;
uint32_t chvt_backup_tag = 0;
char chvt_backup_selmon[32] = {0};
struct dvec2 *baked_points_move; struct dvec2 *baked_points_move;
struct dvec2 *baked_points_open; struct dvec2 *baked_points_open;
struct dvec2 *baked_points_tag; struct dvec2 *baked_points_tag;
@@ -2705,7 +2708,6 @@ void createmon(struct wl_listener *listener, void *data) {
m->isoverview = 0; m->isoverview = 0;
m->sel = NULL; m->sel = NULL;
m->is_in_hotarea = 0; m->is_in_hotarea = 0;
m->tagset[0] = m->tagset[1] = 1;
float scale = 1; float scale = 1;
m->mfact = default_mfact; m->mfact = default_mfact;
m->nmaster = default_nmaster; m->nmaster = default_nmaster;
@@ -2777,7 +2779,16 @@ void createmon(struct wl_listener *listener, void *data) {
wl_list_insert(&mons, &m->link); wl_list_insert(&mons, &m->link);
m->pertag = calloc(1, sizeof(Pertag)); m->pertag = calloc(1, sizeof(Pertag));
if (chvt_backup_tag &&
regex_match(chvt_backup_selmon, m->wlr_output->name)) {
m->tagset[0] = m->tagset[1] = (1 << (chvt_backup_tag - 1)) & TAGMASK;
m->pertag->curtag = m->pertag->prevtag = chvt_backup_tag;
chvt_backup_tag = 0;
memset(chvt_backup_selmon, 0, sizeof(chvt_backup_selmon));
} else {
m->tagset[0] = m->tagset[1] = 1;
m->pertag->curtag = m->pertag->prevtag = 1; m->pertag->curtag = m->pertag->prevtag = 1;
}
for (i = 0; i <= LENGTH(tags); i++) { for (i = 0; i <= LENGTH(tags); i++) {
m->pertag->nmasters[i] = m->nmaster; m->pertag->nmasters[i] = m->nmaster;
@@ -4232,10 +4243,18 @@ void rendermon(struct wl_listener *listener, void *data) {
LayerSurface *l = NULL, *tmpl = NULL; LayerSurface *l = NULL, *tmpl = NULL;
int i; int i;
struct wl_list *layer_list; struct wl_list *layer_list;
bool frame_allow_tearing = false;
struct timespec now; struct timespec now;
bool need_more_frames = false; bool need_more_frames = false;
bool frame_allow_tearing = check_tearing_frame_allow(m);
if (session && !session->active) {
return;
}
if (!m->wlr_output->enabled)
return;
frame_allow_tearing = check_tearing_frame_allow(m);
// 绘制层和淡出效果 // 绘制层和淡出效果
for (i = 0; i < LENGTH(m->layers); i++) { for (i = 0; i < LENGTH(m->layers); i++) {