mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-06-19 14:33:16 -04:00
Merge branch 'mangowm:wl-only' into wl-only
This commit is contained in:
commit
cb51aba2e3
12 changed files with 223 additions and 104 deletions
74
src/mango.c
74
src/mango.c
|
|
@ -746,8 +746,9 @@ static void run(char *startup_cmd);
|
|||
static void setcursor(struct wl_listener *listener, void *data);
|
||||
static void setfloating(Client *c, int32_t floating);
|
||||
static void setfakefullscreen(Client *c, int32_t fakefullscreen);
|
||||
static void setfullscreen(Client *c, int32_t fullscreen);
|
||||
static void setmaximizescreen(Client *c, int32_t maximizescreen);
|
||||
static void setfullscreen(Client *c, int32_t fullscreen, bool rearrange);
|
||||
static void setmaximizescreen(Client *c, int32_t maximizescreen,
|
||||
bool rearrange);
|
||||
static void reset_maximizescreen_size(Client *c);
|
||||
static void setgaps(int32_t oh, int32_t ov, int32_t ih, int32_t iv);
|
||||
|
||||
|
|
@ -1045,6 +1046,9 @@ struct Pertag {
|
|||
int32_t no_hide[LENGTH(tags) + 1];
|
||||
int32_t no_render_border[LENGTH(tags) + 1];
|
||||
int32_t open_as_floating[LENGTH(tags) + 1];
|
||||
float scroller_default_proportion[LENGTH(tags) + 1];
|
||||
float scroller_default_proportion_single[LENGTH(tags) + 1];
|
||||
int32_t scroller_ignore_proportion_single[LENGTH(tags) + 1];
|
||||
struct DwindleNode *dwindle_root[LENGTH(tags) + 1];
|
||||
const Layout *ltidxs[LENGTH(tags) + 1];
|
||||
struct TagScrollerState *scroller_state[LENGTH(tags) + 1];
|
||||
|
|
@ -1171,11 +1175,11 @@ void clear_fullscreen_flag(Client *c) {
|
|||
}
|
||||
|
||||
if (c->isfullscreen) {
|
||||
setfullscreen(c, false);
|
||||
setfullscreen(c, false, true);
|
||||
}
|
||||
|
||||
if (c->ismaximizescreen) {
|
||||
setmaximizescreen(c, 0);
|
||||
setmaximizescreen(c, 0, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1767,7 +1771,7 @@ void applyrules(Client *c) {
|
|||
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) {
|
||||
setfakefullscreen(c, 1);
|
||||
|
|
@ -2221,9 +2225,10 @@ void hold_end(struct wl_listener *listener, void *data) {
|
|||
Client *find_closest_tiled_client(Client *c) {
|
||||
Client *tc, *closest = NULL;
|
||||
long min_dist = LONG_MAX;
|
||||
Monitor *cursor_mon = xytomon(cursor->x, cursor->y);
|
||||
|
||||
wl_list_for_each(tc, &clients, link) {
|
||||
if (tc == c || !ISTILED(tc) || !VISIBLEON(tc, c->mon))
|
||||
if (tc == c || !ISTILED(tc) || !VISIBLEON(tc, cursor_mon))
|
||||
continue;
|
||||
|
||||
if (cursor->x >= tc->geom.x &&
|
||||
|
|
@ -2255,7 +2260,9 @@ void place_drag_tile_client(Client *c) {
|
|||
|
||||
if (closest->drop_direction == UNDIR) {
|
||||
setfloating(c, 0);
|
||||
exchange_two_client(c, closest);
|
||||
wl_list_remove(&c->link);
|
||||
wl_list_insert(closest->link.prev, &c->link);
|
||||
arrange(closest->mon, false, false);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2354,6 +2361,17 @@ bool handle_buttonpress(struct wlr_pointer_button_event *event) {
|
|||
}
|
||||
}
|
||||
|
||||
// overview模式下鼠标左键跳转,右键关闭窗口
|
||||
if (selmon && selmon->isoverview && event->button == BTN_LEFT && c) {
|
||||
toggleoverview(&(Arg){.i = 1});
|
||||
return true;
|
||||
}
|
||||
|
||||
if (selmon && selmon->isoverview && event->button == BTN_RIGHT && c) {
|
||||
pending_kill_client(c);
|
||||
return true;
|
||||
}
|
||||
|
||||
// 当鼠标焦点在layer上的时候,不检测虚拟键盘的mod状态,
|
||||
// 避免layer虚拟键盘锁死mod按键状态
|
||||
hard_keyboard = &kb_group->wlr_group->keyboard;
|
||||
|
|
@ -2370,16 +2388,6 @@ bool handle_buttonpress(struct wlr_pointer_button_event *event) {
|
|||
break;
|
||||
m = &config.mouse_bindings[ji];
|
||||
|
||||
if (selmon->isoverview && event->button == BTN_LEFT && c) {
|
||||
toggleoverview(&(Arg){.i = 1});
|
||||
return true;
|
||||
}
|
||||
|
||||
if (selmon->isoverview && event->button == BTN_RIGHT && c) {
|
||||
pending_kill_client(c);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (CLEANMASK(mods) == CLEANMASK(m->mod) &&
|
||||
event->button == m->button && m->func &&
|
||||
(CLEANMASK(m->mod) != 0 ||
|
||||
|
|
@ -3892,7 +3900,7 @@ fullscreennotify(struct wl_listener *listener, void *data) {
|
|||
if (!c || c->iskilling)
|
||||
return;
|
||||
|
||||
setfullscreen(c, client_wants_fullscreen(c));
|
||||
setfullscreen(c, client_wants_fullscreen(c), true);
|
||||
}
|
||||
|
||||
void requestmonstate(struct wl_listener *listener, void *data) {
|
||||
|
|
@ -4517,9 +4525,9 @@ void maximizenotify(struct wl_listener *listener, void *data) {
|
|||
}
|
||||
|
||||
if (client_request_maximize(c, data)) {
|
||||
setmaximizescreen(c, 1);
|
||||
setmaximizescreen(c, 1, true);
|
||||
} else {
|
||||
setmaximizescreen(c, 0);
|
||||
setmaximizescreen(c, 0, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -5451,7 +5459,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;
|
||||
if (!c || !c->mon || !client_surface(c)->mapped || c->iskilling)
|
||||
return;
|
||||
|
|
@ -5492,7 +5500,8 @@ void setmaximizescreen(Client *c, int32_t maximizescreen) {
|
|||
client_set_maximized(c, true);
|
||||
}
|
||||
|
||||
arrange(c->mon, false, false);
|
||||
if (rearrange)
|
||||
arrange(c->mon, false, false);
|
||||
}
|
||||
|
||||
void setfakefullscreen(Client *c, int32_t fakefullscreen) {
|
||||
|
|
@ -5501,12 +5510,13 @@ void setfakefullscreen(Client *c, int32_t fakefullscreen) {
|
|||
return;
|
||||
|
||||
if (c->isfullscreen)
|
||||
setfullscreen(c, 0);
|
||||
setfullscreen(c, 0, true);
|
||||
|
||||
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)
|
||||
|
|
@ -5552,7 +5562,8 @@ void setfullscreen(Client *c, int32_t fullscreen) // 用自定义全屏代理自
|
|||
layers[fullscreen || c->isfloating ? LyrTop : LyrTile]);
|
||||
}
|
||||
|
||||
arrange(c->mon, false, false);
|
||||
if (rearrange)
|
||||
arrange(c->mon, false, false);
|
||||
}
|
||||
|
||||
void setgaps(int32_t oh, int32_t ov, int32_t ih, int32_t iv) {
|
||||
|
|
@ -5681,7 +5692,8 @@ void setmon(Client *c, Monitor *m, uint32_t newtags, bool focus) {
|
|||
client_reset_mon_tags(c, m, newtags);
|
||||
check_match_tag_floating_rule(c, m);
|
||||
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)) {
|
||||
|
|
@ -6282,13 +6294,13 @@ void overview_restore(Client *c, const Arg *arg) {
|
|||
resize(c, c->overview_backup_geom, 0);
|
||||
} else if (c->isfullscreen || c->ismaximizescreen) {
|
||||
if (want_restore_fullscreen(c) && c->ismaximizescreen) {
|
||||
setmaximizescreen(c, 1);
|
||||
setmaximizescreen(c, 1, false);
|
||||
} else if (want_restore_fullscreen(c) && c->isfullscreen) {
|
||||
setfullscreen(c, 1);
|
||||
setfullscreen(c, 1, false);
|
||||
} else {
|
||||
client_pending_fullscreen_state(c, 0);
|
||||
client_pending_maximized_state(c, 0);
|
||||
setfullscreen(c, false);
|
||||
setfullscreen(c, false, false);
|
||||
}
|
||||
} else {
|
||||
if (c->is_restoring_from_ov) {
|
||||
|
|
@ -6487,8 +6499,8 @@ void unmapnotify(struct wl_listener *listener, void *data) {
|
|||
}
|
||||
|
||||
if (c->swallowedby) {
|
||||
setmaximizescreen(c->swallowedby, c->ismaximizescreen);
|
||||
setfullscreen(c->swallowedby, c->isfullscreen);
|
||||
setmaximizescreen(c->swallowedby, c->ismaximizescreen, true);
|
||||
setfullscreen(c->swallowedby, c->isfullscreen, true);
|
||||
c->swallowedby->swallowing = NULL;
|
||||
c->swallowedby = NULL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue