mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-03-22 05:34:18 -04:00
feat: support restore stack from non-tile state
This commit is contained in:
parent
8a924494c6
commit
c05eec7f53
3 changed files with 47 additions and 6 deletions
|
|
@ -1217,13 +1217,15 @@ int32_t togglefloating(const Arg *arg) {
|
||||||
if (!sel)
|
if (!sel)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
bool isfloating = sel->isfloating;
|
||||||
|
|
||||||
if ((sel->isfullscreen || sel->ismaximizescreen)) {
|
if ((sel->isfullscreen || sel->ismaximizescreen)) {
|
||||||
sel->isfloating = 1;
|
isfloating = 1;
|
||||||
} else {
|
} else {
|
||||||
sel->isfloating = !sel->isfloating;
|
isfloating = !sel->isfloating;
|
||||||
}
|
}
|
||||||
|
|
||||||
setfloating(sel, sel->isfloating);
|
setfloating(sel, isfloating);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,42 @@
|
||||||
|
void restore_size_per(Monitor *m, Client *c) {
|
||||||
|
Client *fc = NULL;
|
||||||
|
double total_master_inner_per = 0;
|
||||||
|
double total_stack_inner_per = 0;
|
||||||
|
|
||||||
|
if (!m || !c)
|
||||||
|
return;
|
||||||
|
|
||||||
|
const Layout *current_layout = m->pertag->ltidxs[m->pertag->curtag];
|
||||||
|
|
||||||
|
if (current_layout->id == SCROLLER ||
|
||||||
|
current_layout->id == VERTICAL_SCROLLER || current_layout->id == GRID ||
|
||||||
|
current_layout->id == VERTICAL_GRID || current_layout->id == DECK ||
|
||||||
|
current_layout->id == VERTICAL_DECK ||
|
||||||
|
current_layout->id == CENTER_TILE || current_layout->id == MONOCLE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (current_layout->id == CENTER_TILE || c->ismaster) {
|
||||||
|
set_size_per(m, c);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
wl_list_for_each(fc, &clients, link) {
|
||||||
|
if (VISIBLEON(fc, m) && ISTILED(fc) && fc != c) {
|
||||||
|
if (fc->ismaster) {
|
||||||
|
total_master_inner_per += fc->master_inner_per;
|
||||||
|
} else {
|
||||||
|
total_stack_inner_per += fc->stack_inner_per;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!c->ismaster && total_stack_inner_per) {
|
||||||
|
c->stack_inner_per = total_stack_inner_per * c->stack_inner_per /
|
||||||
|
(1 - c->stack_inner_per);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void set_size_per(Monitor *m, Client *c) {
|
void set_size_per(Monitor *m, Client *c) {
|
||||||
Client *fc = NULL;
|
Client *fc = NULL;
|
||||||
bool found = false;
|
bool found = false;
|
||||||
|
|
|
||||||
|
|
@ -4810,7 +4810,7 @@ setfloating(Client *c, int32_t floating) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!c->isfloating && old_floating_state) {
|
if (!c->isfloating && old_floating_state) {
|
||||||
set_size_per(c->mon, c);
|
restore_size_per(c->mon, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!c->force_maximize)
|
if (!c->force_maximize)
|
||||||
|
|
@ -4896,7 +4896,7 @@ void setmaximizescreen(Client *c, int32_t maximizescreen) {
|
||||||
wlr_scene_node_reparent(&c->scene->node,
|
wlr_scene_node_reparent(&c->scene->node,
|
||||||
layers[c->isfloating ? LyrTop : LyrTile]);
|
layers[c->isfloating ? LyrTop : LyrTile]);
|
||||||
if (!c->ismaximizescreen && old_maximizescreen_state) {
|
if (!c->ismaximizescreen && old_maximizescreen_state) {
|
||||||
set_size_per(c->mon, c);
|
restore_size_per(c->mon, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!c->force_maximize && !c->ismaximizescreen) {
|
if (!c->force_maximize && !c->ismaximizescreen) {
|
||||||
|
|
@ -4967,7 +4967,7 @@ void setfullscreen(Client *c, int32_t fullscreen) // 用自定义全屏代理自
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!c->isfullscreen && old_fullscreen_state) {
|
if (!c->isfullscreen && old_fullscreen_state) {
|
||||||
set_size_per(c->mon, c);
|
restore_size_per(c->mon, c);
|
||||||
}
|
}
|
||||||
|
|
||||||
arrange(c->mon, false, false);
|
arrange(c->mon, false, false);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue