mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-03-03 01:40:28 -05:00
opt: improve some risk judgments
This commit is contained in:
parent
4ec2366498
commit
bcace97c30
3 changed files with 113 additions and 6 deletions
|
|
@ -1,5 +1,6 @@
|
|||
int32_t bind_to_view(const Arg *arg) {
|
||||
|
||||
if (!selmon)
|
||||
return 0;
|
||||
uint32_t target = arg->ui;
|
||||
|
||||
if (view_current_to_back && selmon->pertag->curtag &&
|
||||
|
|
@ -101,6 +102,8 @@ int32_t defaultgaps(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t exchange_client(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
Client *c = selmon->sel;
|
||||
if (!c || c->isfloating)
|
||||
return 0;
|
||||
|
|
@ -113,6 +116,9 @@ int32_t exchange_client(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t exchange_stack_client(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
Client *c = selmon->sel;
|
||||
Client *tc = NULL;
|
||||
if (!c || c->isfloating || c->isfullscreen || c->ismaximizescreen)
|
||||
|
|
@ -266,42 +272,56 @@ int32_t incnmaster(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t incgaps(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
setgaps(selmon->gappoh + arg->i, selmon->gappov + arg->i,
|
||||
selmon->gappih + arg->i, selmon->gappiv + arg->i);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t incigaps(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
setgaps(selmon->gappoh, selmon->gappov, selmon->gappih + arg->i,
|
||||
selmon->gappiv + arg->i);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t incogaps(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
setgaps(selmon->gappoh + arg->i, selmon->gappov + arg->i, selmon->gappih,
|
||||
selmon->gappiv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t incihgaps(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
setgaps(selmon->gappoh, selmon->gappov, selmon->gappih + arg->i,
|
||||
selmon->gappiv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t incivgaps(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
setgaps(selmon->gappoh, selmon->gappov, selmon->gappih,
|
||||
selmon->gappiv + arg->i);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t incohgaps(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
setgaps(selmon->gappoh + arg->i, selmon->gappov, selmon->gappih,
|
||||
selmon->gappiv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t incovgaps(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
setgaps(selmon->gappoh, selmon->gappov + arg->i, selmon->gappih,
|
||||
selmon->gappiv);
|
||||
return 0;
|
||||
|
|
@ -331,6 +351,8 @@ int32_t setmfact(const Arg *arg) {
|
|||
|
||||
int32_t killclient(const Arg *arg) {
|
||||
Client *c = NULL;
|
||||
if (!selmon)
|
||||
return 0;
|
||||
c = selmon->sel;
|
||||
if (c) {
|
||||
pending_kill_client(c);
|
||||
|
|
@ -400,6 +422,8 @@ int32_t moveresize(const Arg *arg) {
|
|||
|
||||
int32_t movewin(const Arg *arg) {
|
||||
Client *c = NULL;
|
||||
if (!selmon)
|
||||
return 0;
|
||||
c = selmon->sel;
|
||||
if (!c || c->isfullscreen)
|
||||
return 0;
|
||||
|
|
@ -443,6 +467,8 @@ int32_t quit(const Arg *arg) {
|
|||
|
||||
int32_t resizewin(const Arg *arg) {
|
||||
Client *c = NULL;
|
||||
if (!selmon)
|
||||
return 0;
|
||||
c = selmon->sel;
|
||||
int32_t offsetx = 0, offsety = 0;
|
||||
|
||||
|
|
@ -547,6 +573,8 @@ int32_t restore_minimized(const Arg *arg) {
|
|||
|
||||
int32_t setlayout(const Arg *arg) {
|
||||
int32_t jk;
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
for (jk = 0; jk < LENGTH(layouts); jk++) {
|
||||
if (strcmp(layouts[jk].name, arg->v) == 0) {
|
||||
|
|
@ -572,6 +600,8 @@ int32_t setkeymode(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t set_proportion(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
if (selmon->isoverview || !is_scroller_layout(selmon))
|
||||
return 0;
|
||||
|
|
@ -597,6 +627,8 @@ int32_t smartmovewin(const Arg *arg) {
|
|||
Client *c = NULL, *tc = NULL;
|
||||
int32_t nx, ny;
|
||||
int32_t buttom, top, left, right, tar;
|
||||
if (!selmon)
|
||||
return 0;
|
||||
c = selmon->sel;
|
||||
if (!c || c->isfullscreen)
|
||||
return 0;
|
||||
|
|
@ -698,6 +730,8 @@ int32_t smartresizewin(const Arg *arg) {
|
|||
Client *c = NULL, *tc = NULL;
|
||||
int32_t nw, nh;
|
||||
int32_t buttom, top, left, right, tar;
|
||||
if (!selmon)
|
||||
return 0;
|
||||
c = selmon->sel;
|
||||
if (!c || c->isfullscreen)
|
||||
return 0;
|
||||
|
|
@ -766,6 +800,8 @@ int32_t smartresizewin(const Arg *arg) {
|
|||
|
||||
int32_t centerwin(const Arg *arg) {
|
||||
Client *c = NULL;
|
||||
if (!selmon)
|
||||
return 0;
|
||||
c = selmon->sel;
|
||||
|
||||
if (!c || c->isfullscreen || c->ismaximizescreen)
|
||||
|
|
@ -946,6 +982,9 @@ int32_t switch_layout(const Arg *arg) {
|
|||
uint32_t target_tag = selmon->pertag->curtag ? selmon->pertag->curtag
|
||||
: selmon->pertag->prevtag;
|
||||
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
if (config.circle_layout_count != 0) {
|
||||
for (jk = 0; jk < config.circle_layout_count; jk++) {
|
||||
|
||||
|
|
@ -995,6 +1034,8 @@ int32_t switch_layout(const Arg *arg) {
|
|||
|
||||
int32_t switch_proportion_preset(const Arg *arg) {
|
||||
float target_proportion = 0;
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
if (config.scroller_proportion_preset_count == 0) {
|
||||
return 0;
|
||||
|
|
@ -1039,6 +1080,8 @@ int32_t switch_proportion_preset(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t tag(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
Client *target_client = selmon->sel;
|
||||
tag_client(arg, target_client);
|
||||
return 0;
|
||||
|
|
@ -1046,6 +1089,8 @@ int32_t tag(const Arg *arg) {
|
|||
|
||||
int32_t tagmon(const Arg *arg) {
|
||||
Monitor *m = NULL, *cm = NULL;
|
||||
if (!selmon)
|
||||
return 0;
|
||||
Client *c = focustop(selmon);
|
||||
|
||||
if (!c)
|
||||
|
|
@ -1137,6 +1182,9 @@ int32_t tagsilent(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t tagtoleft(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
if (selmon->sel != NULL &&
|
||||
__builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1 &&
|
||||
selmon->tagset[selmon->seltags] > 1) {
|
||||
|
|
@ -1146,6 +1194,9 @@ int32_t tagtoleft(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t tagtoright(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
if (selmon->sel != NULL &&
|
||||
__builtin_popcount(selmon->tagset[selmon->seltags] & TAGMASK) == 1 &&
|
||||
selmon->tagset[selmon->seltags] & (TAGMASK >> 1)) {
|
||||
|
|
@ -1174,6 +1225,8 @@ int32_t toggle_named_scratchpad(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t toggle_render_border(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
render_border = !render_border;
|
||||
arrange(selmon, false, false);
|
||||
return 0;
|
||||
|
|
@ -1209,6 +1262,8 @@ int32_t toggle_scratchpad(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t togglefakefullscreen(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
Client *sel = focustop(selmon);
|
||||
if (sel)
|
||||
setfakefullscreen(sel, !sel->isfakefullscreen);
|
||||
|
|
@ -1216,6 +1271,9 @@ int32_t togglefakefullscreen(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t togglefloating(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
Client *sel = focustop(selmon);
|
||||
|
||||
if (selmon && selmon->isoverview)
|
||||
|
|
@ -1237,6 +1295,9 @@ int32_t togglefloating(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t togglefullscreen(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
Client *sel = focustop(selmon);
|
||||
if (!sel)
|
||||
return 0;
|
||||
|
|
@ -1253,6 +1314,9 @@ int32_t togglefullscreen(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t toggleglobal(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
if (!selmon->sel)
|
||||
return 0;
|
||||
if (selmon->sel->is_in_scratchpad) {
|
||||
|
|
@ -1271,12 +1335,18 @@ int32_t toggleglobal(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t togglegaps(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
enablegaps ^= 1;
|
||||
arrange(selmon, false, false);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t togglemaximizescreen(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
Client *sel = focustop(selmon);
|
||||
if (!sel)
|
||||
return 0;
|
||||
|
|
@ -1295,6 +1365,9 @@ int32_t togglemaximizescreen(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t toggleoverlay(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
if (!selmon->sel || !selmon->sel->mon || selmon->sel->isfullscreen) {
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1316,6 +1389,9 @@ int32_t toggleoverlay(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t toggletag(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
uint32_t newtags;
|
||||
Client *sel = focustop(selmon);
|
||||
if (!sel)
|
||||
|
|
@ -1339,13 +1415,15 @@ int32_t toggletag(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t toggleview(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
uint32_t newtagset;
|
||||
uint32_t target;
|
||||
|
||||
target = arg->ui == 0 ? ~0 & TAGMASK : arg->ui;
|
||||
|
||||
newtagset =
|
||||
selmon ? selmon->tagset[selmon->seltags] ^ (target & TAGMASK) : 0;
|
||||
newtagset = selmon->tagset[selmon->seltags] ^ (target & TAGMASK);
|
||||
|
||||
if (newtagset) {
|
||||
selmon->tagset[selmon->seltags] = newtagset;
|
||||
|
|
@ -1357,6 +1435,9 @@ int32_t toggleview(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t viewtoleft(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
uint32_t target = selmon->tagset[selmon->seltags];
|
||||
|
||||
if (selmon->isoverview || selmon->pertag->curtag == 0) {
|
||||
|
|
@ -1377,6 +1458,9 @@ int32_t viewtoleft(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t viewtoright(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
if (selmon->isoverview || selmon->pertag->curtag == 0) {
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1394,6 +1478,9 @@ int32_t viewtoright(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t viewtoleft_have_client(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
uint32_t n;
|
||||
uint32_t current = get_tags_first_tag_num(selmon->tagset[selmon->seltags]);
|
||||
bool found = false;
|
||||
|
|
@ -1418,6 +1505,9 @@ int32_t viewtoleft_have_client(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t viewtoright_have_client(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
uint32_t n;
|
||||
uint32_t current = get_tags_first_tag_num(selmon->tagset[selmon->seltags]);
|
||||
bool found = false;
|
||||
|
|
@ -1442,6 +1532,9 @@ int32_t viewtoright_have_client(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t viewcrossmon(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
focusmon(&(Arg){.v = arg->v, .i = UNDIR});
|
||||
view_in_mon(arg, true, selmon, true);
|
||||
return 0;
|
||||
|
|
@ -1520,6 +1613,8 @@ int32_t setoption(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t minimized(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
if (selmon && selmon->isoverview)
|
||||
return 0;
|
||||
|
|
@ -1542,6 +1637,8 @@ void fix_mon_tagset_from_overview(Monitor *m) {
|
|||
|
||||
int32_t toggleoverview(const Arg *arg) {
|
||||
Client *c = NULL;
|
||||
if (!selmon)
|
||||
return 0;
|
||||
|
||||
if (selmon->isoverview && ov_tab_mode && arg->i != 1 && selmon->sel) {
|
||||
focusstack(&(Arg){.i = 1});
|
||||
|
|
@ -1647,6 +1744,8 @@ int32_t toggle_monitor(const Arg *arg) {
|
|||
}
|
||||
|
||||
int32_t scroller_stack(const Arg *arg) {
|
||||
if (!selmon)
|
||||
return 0;
|
||||
Client *c = selmon->sel;
|
||||
Client *stack_head = NULL;
|
||||
Client *source_stack_head = NULL;
|
||||
|
|
|
|||
|
|
@ -83,6 +83,9 @@ setclient_coordinate_center(Client *c, Monitor *tm, struct wlr_box geom,
|
|||
int32_t len = 0;
|
||||
Monitor *m = tm ? tm : selmon;
|
||||
|
||||
if (!m)
|
||||
return geom;
|
||||
|
||||
uint32_t cbw = check_hit_no_border(c) ? c->bw : 0;
|
||||
|
||||
if (!c->no_force_center && m) {
|
||||
|
|
|
|||
11
src/mango.c
11
src/mango.c
|
|
@ -1401,6 +1401,9 @@ void applyrules(Client *c) {
|
|||
Client *fc = NULL;
|
||||
Client *parent = NULL;
|
||||
|
||||
if (!c)
|
||||
return;
|
||||
|
||||
parent = client_get_parent(c);
|
||||
|
||||
Monitor *mon = parent && parent->mon ? parent->mon : selmon;
|
||||
|
|
@ -1489,7 +1492,8 @@ void applyrules(Client *c) {
|
|||
/*-----------------------apply rule action-------------------------*/
|
||||
|
||||
// rule action only apply after map not apply in the init commit
|
||||
if (!client_surface(c)->mapped)
|
||||
struct wlr_surface *surface = client_surface(c);
|
||||
if (!surface || !surface->mapped)
|
||||
return;
|
||||
|
||||
// apply swallow rule
|
||||
|
|
@ -1515,6 +1519,7 @@ void applyrules(Client *c) {
|
|||
setmon(c, mon, newtags,
|
||||
!c->isopensilent &&
|
||||
!(client_is_x11_popup(c) && client_should_ignore_focus(c)) &&
|
||||
mon &&
|
||||
(!c->istagsilent || !newtags ||
|
||||
newtags & mon->tagset[mon->seltags]));
|
||||
|
||||
|
|
@ -1536,7 +1541,7 @@ void applyrules(Client *c) {
|
|||
window in the current tag will exit fullscreen and participate in tiling
|
||||
*/
|
||||
wl_list_for_each(fc, &clients,
|
||||
link) if (fc && fc != c && c->tags & fc->tags &&
|
||||
link) if (fc && fc != c && c->tags & fc->tags && c->mon &&
|
||||
VISIBLEON(fc, c->mon) && ISFULLSCREEN(fc) &&
|
||||
!c->isfloating) {
|
||||
clear_fullscreen_flag(fc);
|
||||
|
|
@ -1555,7 +1560,7 @@ void applyrules(Client *c) {
|
|||
}
|
||||
|
||||
// apply overlay rule
|
||||
if (c->isoverlay) {
|
||||
if (c->isoverlay && c->scene) {
|
||||
wlr_scene_node_reparent(&c->scene->node, layers[LyrOverlay]);
|
||||
wlr_scene_node_raise_to_top(&c->scene->node);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue