Skip to content

Commit f749500

Browse files
committed
feat: restore the current tag when after chvt
1 parent 42f722a commit f749500

2 files changed

Lines changed: 30 additions & 5 deletions

File tree

src/dispatch/bind_define.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,14 @@ int bind_to_view(const Arg *arg) {
3131
}
3232

3333
int chvt(const Arg *arg) {
34+
35+
if (selmon) {
36+
chvt_backup_tag = selmon->pertag->curtag;
37+
strncpy(chvt_backup_selmon, selmon->wlr_output->name,
38+
sizeof(chvt_backup_selmon) - 1);
39+
}
3440
wlr_session_change_vt(session, arg->ui);
35-
return 0;
41+
return 1;
3642
}
3743

3844
int create_virtual_output(const Arg *arg) {

src/mango.c

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -845,6 +845,9 @@ static double swipe_dy = 0;
845845

846846
bool render_border = true;
847847

848+
uint32_t chvt_backup_tag = 0;
849+
char chvt_backup_selmon[32] = {0};
850+
848851
struct dvec2 *baked_points_move;
849852
struct dvec2 *baked_points_open;
850853
struct dvec2 *baked_points_tag;
@@ -2705,7 +2708,6 @@ void createmon(struct wl_listener *listener, void *data) {
27052708
m->isoverview = 0;
27062709
m->sel = NULL;
27072710
m->is_in_hotarea = 0;
2708-
m->tagset[0] = m->tagset[1] = 1;
27092711
float scale = 1;
27102712
m->mfact = default_mfact;
27112713
m->nmaster = default_nmaster;
@@ -2777,7 +2779,16 @@ void createmon(struct wl_listener *listener, void *data) {
27772779

27782780
wl_list_insert(&mons, &m->link);
27792781
m->pertag = calloc(1, sizeof(Pertag));
2780-
m->pertag->curtag = m->pertag->prevtag = 1;
2782+
if (chvt_backup_tag &&
2783+
regex_match(chvt_backup_selmon, m->wlr_output->name)) {
2784+
m->tagset[0] = m->tagset[1] = (1 << (chvt_backup_tag - 1)) & TAGMASK;
2785+
m->pertag->curtag = m->pertag->prevtag = chvt_backup_tag;
2786+
chvt_backup_tag = 0;
2787+
memset(chvt_backup_selmon, 0, sizeof(chvt_backup_selmon));
2788+
} else {
2789+
m->tagset[0] = m->tagset[1] = 1;
2790+
m->pertag->curtag = m->pertag->prevtag = 1;
2791+
}
27812792

27822793
for (i = 0; i <= LENGTH(tags); i++) {
27832794
m->pertag->nmasters[i] = m->nmaster;
@@ -4232,10 +4243,18 @@ void rendermon(struct wl_listener *listener, void *data) {
42324243
LayerSurface *l = NULL, *tmpl = NULL;
42334244
int i;
42344245
struct wl_list *layer_list;
4235-
4246+
bool frame_allow_tearing = false;
42364247
struct timespec now;
42374248
bool need_more_frames = false;
4238-
bool frame_allow_tearing = check_tearing_frame_allow(m);
4249+
4250+
if (session && !session->active) {
4251+
return;
4252+
}
4253+
4254+
if (!m->wlr_output->enabled)
4255+
return;
4256+
4257+
frame_allow_tearing = check_tearing_frame_allow(m);
42394258

42404259
// 绘制层和淡出效果
42414260
for (i = 0; i < LENGTH(m->layers); i++) {

0 commit comments

Comments
 (0)