mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-06-17 14:33:18 -04:00
opt: avoid arrange when restore from overview
This commit is contained in:
parent
8a3d065cc1
commit
8ca013e6c3
4 changed files with 36 additions and 31 deletions
|
|
@ -1355,9 +1355,9 @@ int32_t togglefullscreen(const Arg *arg) {
|
||||||
sel->isnamedscratchpad = 0;
|
sel->isnamedscratchpad = 0;
|
||||||
|
|
||||||
if (sel->isfullscreen)
|
if (sel->isfullscreen)
|
||||||
setfullscreen(sel, 0);
|
setfullscreen(sel, 0, true);
|
||||||
else
|
else
|
||||||
setfullscreen(sel, 1);
|
setfullscreen(sel, 1, true);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1401,9 +1401,9 @@ int32_t togglemaximizescreen(const Arg *arg) {
|
||||||
sel->isnamedscratchpad = 0;
|
sel->isnamedscratchpad = 0;
|
||||||
|
|
||||||
if (sel->ismaximizescreen)
|
if (sel->ismaximizescreen)
|
||||||
setmaximizescreen(sel, 0);
|
setmaximizescreen(sel, 0, true);
|
||||||
else
|
else
|
||||||
setmaximizescreen(sel, 1);
|
setmaximizescreen(sel, 1, true);
|
||||||
|
|
||||||
setborder_color(sel);
|
setborder_color(sel);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -16,12 +16,12 @@ void handle_foreign_maximize_request(struct wl_listener *listener, void *data) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (c->ismaximizescreen && !event->maximized) {
|
if (c->ismaximizescreen && !event->maximized) {
|
||||||
setmaximizescreen(c, 0);
|
setmaximizescreen(c, 0, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!c->ismaximizescreen && event->maximized) {
|
if (!c->ismaximizescreen && event->maximized) {
|
||||||
setmaximizescreen(c, 1);
|
setmaximizescreen(c, 1, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -59,12 +59,12 @@ void handle_foreign_fullscreen_request(struct wl_listener *listener,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (c->isfullscreen && !event->fullscreen) {
|
if (c->isfullscreen && !event->fullscreen) {
|
||||||
setfullscreen(c, 0);
|
setfullscreen(c, 0, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!c->isfullscreen && event->fullscreen) {
|
if (!c->isfullscreen && event->fullscreen) {
|
||||||
setfullscreen(c, 1);
|
setfullscreen(c, 1, true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -743,9 +743,9 @@ void scroller_insert_stack(Client *c, Client *target_client,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (c->isfullscreen)
|
if (c->isfullscreen)
|
||||||
setfullscreen(c, 0);
|
setfullscreen(c, 0, true);
|
||||||
if (c->ismaximizescreen)
|
if (c->ismaximizescreen)
|
||||||
setmaximizescreen(c, 0);
|
setmaximizescreen(c, 0, true);
|
||||||
|
|
||||||
Monitor *m = c->mon;
|
Monitor *m = c->mon;
|
||||||
uint32_t tag = m->pertag->curtag;
|
uint32_t tag = m->pertag->curtag;
|
||||||
|
|
@ -785,9 +785,9 @@ void scroller_insert_stack(Client *c, Client *target_client,
|
||||||
head = head->prev_in_stack;
|
head = head->prev_in_stack;
|
||||||
Client *stack_head = head->client;
|
Client *stack_head = head->client;
|
||||||
if (stack_head->ismaximizescreen)
|
if (stack_head->ismaximizescreen)
|
||||||
setmaximizescreen(stack_head, 0);
|
setmaximizescreen(stack_head, 0, true);
|
||||||
if (stack_head->isfullscreen)
|
if (stack_head->isfullscreen)
|
||||||
setfullscreen(stack_head, 0);
|
setfullscreen(stack_head, 0, true);
|
||||||
|
|
||||||
/* 同步到 Client 字段 */
|
/* 同步到 Client 字段 */
|
||||||
sync_scroller_state_to_clients(m, tag);
|
sync_scroller_state_to_clients(m, tag);
|
||||||
|
|
|
||||||
39
src/mango.c
39
src/mango.c
|
|
@ -735,8 +735,9 @@ static void run(char *startup_cmd);
|
||||||
static void setcursor(struct wl_listener *listener, void *data);
|
static void setcursor(struct wl_listener *listener, void *data);
|
||||||
static void setfloating(Client *c, int32_t floating);
|
static void setfloating(Client *c, int32_t floating);
|
||||||
static void setfakefullscreen(Client *c, int32_t fakefullscreen);
|
static void setfakefullscreen(Client *c, int32_t fakefullscreen);
|
||||||
static void setfullscreen(Client *c, int32_t fullscreen);
|
static void setfullscreen(Client *c, int32_t fullscreen, bool rearrange);
|
||||||
static void setmaximizescreen(Client *c, int32_t maximizescreen);
|
static void setmaximizescreen(Client *c, int32_t maximizescreen,
|
||||||
|
bool rearrange);
|
||||||
static void reset_maximizescreen_size(Client *c);
|
static void reset_maximizescreen_size(Client *c);
|
||||||
static void setgaps(int32_t oh, int32_t ov, int32_t ih, int32_t iv);
|
static void setgaps(int32_t oh, int32_t ov, int32_t ih, int32_t iv);
|
||||||
|
|
||||||
|
|
@ -1150,11 +1151,11 @@ void clear_fullscreen_flag(Client *c) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c->isfullscreen) {
|
if (c->isfullscreen) {
|
||||||
setfullscreen(c, false);
|
setfullscreen(c, false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c->ismaximizescreen) {
|
if (c->ismaximizescreen) {
|
||||||
setmaximizescreen(c, 0);
|
setmaximizescreen(c, 0, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1748,7 +1749,7 @@ void applyrules(Client *c) {
|
||||||
view_in_mon(&(Arg){.ui = c->tags}, true, c->mon, true);
|
view_in_mon(&(Arg){.ui = c->tags}, true, c->mon, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
setfullscreen(c, fullscreen_state_backup);
|
setfullscreen(c, fullscreen_state_backup, true);
|
||||||
|
|
||||||
if (c->isfakefullscreen) {
|
if (c->isfakefullscreen) {
|
||||||
setfakefullscreen(c, 1);
|
setfakefullscreen(c, 1);
|
||||||
|
|
@ -3943,7 +3944,7 @@ fullscreennotify(struct wl_listener *listener, void *data) {
|
||||||
if (!c || c->iskilling)
|
if (!c || c->iskilling)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
setfullscreen(c, client_wants_fullscreen(c));
|
setfullscreen(c, client_wants_fullscreen(c), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void requestmonstate(struct wl_listener *listener, void *data) {
|
void requestmonstate(struct wl_listener *listener, void *data) {
|
||||||
|
|
@ -4586,9 +4587,9 @@ void maximizenotify(struct wl_listener *listener, void *data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (client_request_maximize(c, data)) {
|
if (client_request_maximize(c, data)) {
|
||||||
setmaximizescreen(c, 1);
|
setmaximizescreen(c, 1, true);
|
||||||
} else {
|
} else {
|
||||||
setmaximizescreen(c, 0);
|
setmaximizescreen(c, 0, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5453,7 +5454,7 @@ void exit_scroller_stack(Client *c) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void setmaximizescreen(Client *c, int32_t maximizescreen) {
|
void setmaximizescreen(Client *c, int32_t maximizescreen, bool rearrange) {
|
||||||
struct wlr_box maximizescreen_box;
|
struct wlr_box maximizescreen_box;
|
||||||
if (!c || !c->mon || !client_surface(c)->mapped || c->iskilling)
|
if (!c || !c->mon || !client_surface(c)->mapped || c->iskilling)
|
||||||
return;
|
return;
|
||||||
|
|
@ -5494,6 +5495,7 @@ void setmaximizescreen(Client *c, int32_t maximizescreen) {
|
||||||
client_set_maximized(c, true);
|
client_set_maximized(c, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rearrange)
|
||||||
arrange(c->mon, false, false);
|
arrange(c->mon, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5503,12 +5505,13 @@ void setfakefullscreen(Client *c, int32_t fakefullscreen) {
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (c->isfullscreen)
|
if (c->isfullscreen)
|
||||||
setfullscreen(c, 0);
|
setfullscreen(c, 0, true);
|
||||||
|
|
||||||
client_set_fullscreen(c, fakefullscreen);
|
client_set_fullscreen(c, fakefullscreen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setfullscreen(Client *c, int32_t fullscreen) // 用自定义全屏代理自带全屏
|
void setfullscreen(Client *c, int32_t fullscreen,
|
||||||
|
bool rearrange) // 用自定义全屏代理自带全屏
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!c || !c->mon || !client_surface(c)->mapped || c->iskilling)
|
if (!c || !c->mon || !client_surface(c)->mapped || c->iskilling)
|
||||||
|
|
@ -5554,6 +5557,7 @@ void setfullscreen(Client *c, int32_t fullscreen) // 用自定义全屏代理自
|
||||||
layers[fullscreen || c->isfloating ? LyrTop : LyrTile]);
|
layers[fullscreen || c->isfloating ? LyrTop : LyrTile]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rearrange)
|
||||||
arrange(c->mon, false, false);
|
arrange(c->mon, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5683,7 +5687,8 @@ void setmon(Client *c, Monitor *m, uint32_t newtags, bool focus) {
|
||||||
client_reset_mon_tags(c, m, newtags);
|
client_reset_mon_tags(c, m, newtags);
|
||||||
check_match_tag_floating_rule(c, m);
|
check_match_tag_floating_rule(c, m);
|
||||||
setfloating(c, c->isfloating);
|
setfloating(c, c->isfloating);
|
||||||
setfullscreen(c, c->isfullscreen); /* This will call arrange(c->mon) */
|
setfullscreen(c, c->isfullscreen,
|
||||||
|
true); /* This will call arrange(c->mon) */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (focus && !client_is_x11_popup(c)) {
|
if (focus && !client_is_x11_popup(c)) {
|
||||||
|
|
@ -6275,13 +6280,13 @@ void overview_restore(Client *c, const Arg *arg) {
|
||||||
resize(c, c->overview_backup_geom, 0);
|
resize(c, c->overview_backup_geom, 0);
|
||||||
} else if (c->isfullscreen || c->ismaximizescreen) {
|
} else if (c->isfullscreen || c->ismaximizescreen) {
|
||||||
if (want_restore_fullscreen(c) && c->ismaximizescreen) {
|
if (want_restore_fullscreen(c) && c->ismaximizescreen) {
|
||||||
setmaximizescreen(c, 1);
|
setmaximizescreen(c, 1, false);
|
||||||
} else if (want_restore_fullscreen(c) && c->isfullscreen) {
|
} else if (want_restore_fullscreen(c) && c->isfullscreen) {
|
||||||
setfullscreen(c, 1);
|
setfullscreen(c, 1, false);
|
||||||
} else {
|
} else {
|
||||||
client_pending_fullscreen_state(c, 0);
|
client_pending_fullscreen_state(c, 0);
|
||||||
client_pending_maximized_state(c, 0);
|
client_pending_maximized_state(c, 0);
|
||||||
setfullscreen(c, false);
|
setfullscreen(c, false, false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (c->is_restoring_from_ov) {
|
if (c->is_restoring_from_ov) {
|
||||||
|
|
@ -6477,8 +6482,8 @@ void unmapnotify(struct wl_listener *listener, void *data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (c->swallowedby) {
|
if (c->swallowedby) {
|
||||||
setmaximizescreen(c->swallowedby, c->ismaximizescreen);
|
setmaximizescreen(c->swallowedby, c->ismaximizescreen, true);
|
||||||
setfullscreen(c->swallowedby, c->isfullscreen);
|
setfullscreen(c->swallowedby, c->isfullscreen, true);
|
||||||
c->swallowedby->swallowing = NULL;
|
c->swallowedby->swallowing = NULL;
|
||||||
c->swallowedby = NULL;
|
c->swallowedby = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue