fix: fix switch_layout not apply instantly

This commit is contained in:
DreamMaoMao 2026-05-25 23:07:56 +08:00
parent 18e5ba3bed
commit 72a9f71c51

View file

@ -1029,11 +1029,10 @@ int32_t switch_keyboard_layout(const Arg *arg) {
} }
int32_t switch_layout(const Arg *arg) { int32_t switch_layout(const Arg *arg) {
int32_t jk, ji; int32_t jk, ji;
char *target_layout_name = NULL; char *target_layout_name = NULL;
uint32_t len; uint32_t len;
uint32_t target_tag = selmon->pertag->curtag ? selmon->pertag->curtag
: selmon->pertag->prevtag;
if (!selmon) if (!selmon)
return 0; return 0;
@ -1041,11 +1040,13 @@ int32_t switch_layout(const Arg *arg) {
if (config.circle_layout_count != 0) { if (config.circle_layout_count != 0) {
for (jk = 0; jk < config.circle_layout_count; jk++) { for (jk = 0; jk < config.circle_layout_count; jk++) {
len = MAX(strlen(config.circle_layout[jk]), len = MAX(
strlen(selmon->pertag->ltidxs[target_tag]->name)); strlen(config.circle_layout[jk]),
strlen(selmon->pertag->ltidxs[selmon->pertag->curtag]->name));
if (strncmp(config.circle_layout[jk], if (strncmp(config.circle_layout[jk],
selmon->pertag->ltidxs[target_tag]->name, len) == 0) { selmon->pertag->ltidxs[selmon->pertag->curtag]->name,
len) == 0) {
target_layout_name = jk == config.circle_layout_count - 1 target_layout_name = jk == config.circle_layout_count - 1
? config.circle_layout[0] ? config.circle_layout[0]
: config.circle_layout[jk + 1]; : config.circle_layout[jk + 1];
@ -1060,16 +1061,21 @@ int32_t switch_layout(const Arg *arg) {
for (ji = 0; ji < LENGTH(layouts); ji++) { for (ji = 0; ji < LENGTH(layouts); ji++) {
len = MAX(strlen(layouts[ji].name), strlen(target_layout_name)); len = MAX(strlen(layouts[ji].name), strlen(target_layout_name));
if (strncmp(layouts[ji].name, target_layout_name, len) == 0) { if (strncmp(layouts[ji].name, target_layout_name, len) == 0) {
selmon->pertag->ltidxs[target_tag] = &layouts[ji]; selmon->pertag->ltidxs[selmon->pertag->curtag] = &layouts[ji];
break;
} }
} }
clear_fullscreen_and_maximized_state(selmon);
arrange(selmon, false, false);
printstatus();
return 0; return 0;
} }
for (jk = 0; jk < LENGTH(layouts); jk++) { for (jk = 0; jk < LENGTH(layouts); jk++) {
if (strcmp(layouts[jk].name, if (strcmp(layouts[jk].name,
selmon->pertag->ltidxs[target_tag]->name) == 0) { selmon->pertag->ltidxs[selmon->pertag->curtag]->name) == 0) {
selmon->pertag->ltidxs[target_tag] = selmon->pertag->ltidxs[selmon->pertag->curtag] =
jk == LENGTH(layouts) - 1 ? &layouts[0] : &layouts[jk + 1]; jk == LENGTH(layouts) - 1 ? &layouts[0] : &layouts[jk + 1];
clear_fullscreen_and_maximized_state(selmon); clear_fullscreen_and_maximized_state(selmon);
arrange(selmon, false, false); arrange(selmon, false, false);