feat: make ~0 tag own independent layout

This commit is contained in:
DreamMaoMao 2025-09-15 22:06:10 +08:00
parent 4a8568639f
commit 31ac4bd6ed
5 changed files with 15 additions and 42 deletions

View file

@ -30,13 +30,6 @@ enum corner_location set_client_corner_location(Client *c) {
bool is_horizontal_stack_layout(Monitor *m) { bool is_horizontal_stack_layout(Monitor *m) {
if (!m->pertag->curtag &&
(strcmp(m->pertag->ltidxs[m->pertag->prevtag]->name, "tile") == 0 ||
strcmp(m->pertag->ltidxs[m->pertag->prevtag]->name, "spiral") == 0 ||
strcmp(m->pertag->ltidxs[m->pertag->prevtag]->name, "dwindle") == 0 ||
strcmp(m->pertag->ltidxs[m->pertag->prevtag]->name, "deck") == 0))
return true;
if (m->pertag->curtag && if (m->pertag->curtag &&
(strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, "tile") == 0 || (strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, "tile") == 0 ||
strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, "spiral") == 0 || strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, "spiral") == 0 ||

View file

@ -418,12 +418,10 @@ void restore_minimized(const Arg *arg) {
void // 17 void // 17
setlayout(const Arg *arg) { setlayout(const Arg *arg) {
int jk; int jk;
unsigned int target_tag = selmon->pertag->curtag ? selmon->pertag->curtag
: selmon->pertag->prevtag;
for (jk = 0; jk < LENGTH(layouts); jk++) { for (jk = 0; jk < LENGTH(layouts); jk++) {
if (strcmp(layouts[jk].name, arg->v) == 0) { if (strcmp(layouts[jk].name, arg->v) == 0) {
selmon->pertag->ltidxs[target_tag] = &layouts[jk]; selmon->pertag->ltidxs[selmon->pertag->curtag] = &layouts[jk];
arrange(selmon, false); arrange(selmon, false);
printstatus(); printstatus();
@ -823,17 +821,17 @@ void switch_layout(const Arg *arg) {
int jk, ji; int jk, ji;
char *target_layout_name = NULL; char *target_layout_name = NULL;
unsigned int len; unsigned int len;
unsigned int target_tag = selmon->pertag->curtag ? selmon->pertag->curtag
: selmon->pertag->prevtag;
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];
@ -848,7 +846,7 @@ void 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; break;
} }
@ -861,8 +859,8 @@ void switch_layout(const Arg *arg) {
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];
arrange(selmon, false); arrange(selmon, false);
printstatus(); printstatus();

View file

@ -140,12 +140,10 @@ void dwl_ipc_output_printstatus_to(DwlIpcOutput *ipc_output) {
title = focused ? client_get_title(focused) : ""; title = focused ? client_get_title(focused) : "";
appid = focused ? client_get_appid(focused) : ""; appid = focused ? client_get_appid(focused) : "";
if (monitor->pertag->curtag) { if (monitor->isoverview) {
symbol = monitor->pertag->ltidxs[monitor->pertag->curtag]->symbol;
} else if (monitor->isoverview) {
symbol = overviewlayout.symbol; symbol = overviewlayout.symbol;
} else { } else {
symbol = monitor->pertag->ltidxs[monitor->pertag->prevtag]->symbol; symbol = monitor->pertag->ltidxs[monitor->pertag->curtag]->symbol;
} }
keyboard = &kb_group->wlr_group->keyboard; keyboard = &kb_group->wlr_group->keyboard;
@ -238,7 +236,6 @@ void dwl_ipc_output_set_layout(struct wl_client *client,
unsigned int index) { unsigned int index) {
DwlIpcOutput *ipc_output; DwlIpcOutput *ipc_output;
Monitor *monitor; Monitor *monitor;
unsigned int target_tag;
ipc_output = wl_resource_get_user_data(resource); ipc_output = wl_resource_get_user_data(resource);
if (!ipc_output) if (!ipc_output)
@ -248,10 +245,7 @@ void dwl_ipc_output_set_layout(struct wl_client *client,
if (index >= LENGTH(layouts)) if (index >= LENGTH(layouts))
index = 0; index = 0;
target_tag = monitor->pertag->curtag ? monitor->pertag->curtag monitor->pertag->ltidxs[monitor->pertag->curtag] = &layouts[index];
: monitor->pertag->prevtag;
monitor->pertag->ltidxs[target_tag] = &layouts[index];
arrange(monitor, false); arrange(monitor, false);
printstatus(); printstatus();
} }

View file

@ -17,21 +17,13 @@ Monitor *dirtomon(enum wlr_direction dir) {
bool is_scroller_layout(Monitor *m) { bool is_scroller_layout(Monitor *m) {
if (!m->pertag->curtag && if (strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, "scroller") == 0)
strcmp(m->pertag->ltidxs[m->pertag->prevtag]->name, "scroller") == 0)
return true; return true;
if (!m->pertag->curtag &&
strcmp(m->pertag->ltidxs[m->pertag->prevtag]->name,
"vertical_scroller") == 0)
return true;
if (m->pertag->curtag &&
strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, "scroller") == 0)
return true;
if (strcmp(m->pertag->ltidxs[m->pertag->curtag]->name, if (strcmp(m->pertag->ltidxs[m->pertag->curtag]->name,
"vertical_scroller") == 0) "vertical_scroller") == 0)
return true; return true;
return false; return false;
} }

View file

@ -1391,12 +1391,8 @@ arrange(Monitor *m, bool want_animation) {
if (m->isoverview) { if (m->isoverview) {
overviewlayout.arrange(m); overviewlayout.arrange(m);
} else if (m && m->pertag->curtag && } else {
m->pertag->ltidxs[m->pertag->curtag]->arrange) {
m->pertag->ltidxs[m->pertag->curtag]->arrange(m); m->pertag->ltidxs[m->pertag->curtag]->arrange(m);
} else if (m && m->pertag->prevtag &&
m->pertag->ltidxs[m->pertag->prevtag]->arrange) {
m->pertag->ltidxs[m->pertag->prevtag]->arrange(m);
} }
motionnotify(0, NULL, 0, 0, 0, 0); motionnotify(0, NULL, 0, 0, 0, 0);