mirror of
https://github.com/DreamMaoMao/maomaowm.git
synced 2026-05-05 06:47:12 -04:00
Merge branch 'main' into feature/dual-row-scroller
This commit is contained in:
commit
178fa5220e
22 changed files with 472 additions and 421 deletions
|
|
@ -41,10 +41,21 @@ Client *get_client_by_id_or_title(const char *arg_id, const char *arg_title) {
|
|||
continue;
|
||||
}
|
||||
|
||||
if (!(appid = client_get_appid(c)))
|
||||
if (c->swallowedby) {
|
||||
appid = client_get_appid(c->swallowedby);
|
||||
title = client_get_title(c->swallowedby);
|
||||
} else {
|
||||
appid = client_get_appid(c);
|
||||
title = client_get_title(c);
|
||||
}
|
||||
|
||||
if (!appid) {
|
||||
appid = broken;
|
||||
if (!(title = client_get_title(c)))
|
||||
}
|
||||
|
||||
if (!title) {
|
||||
title = broken;
|
||||
}
|
||||
|
||||
if (arg_id && strncmp(arg_id, "none", 4) == 0)
|
||||
arg_id = NULL;
|
||||
|
|
@ -70,7 +81,7 @@ setclient_coordinate_center(Client *c, struct wlr_box geom, int offsetx,
|
|||
int len = 0;
|
||||
Monitor *m = c->mon ? c->mon : selmon;
|
||||
|
||||
unsigned int cbw = check_hit_no_border(c) ? c->bw : 0;
|
||||
uint32_t cbw = check_hit_no_border(c) ? c->bw : 0;
|
||||
|
||||
if (!c->no_force_center) {
|
||||
tempbox.x = m->w.x + (m->w.width - geom.width) / 2;
|
||||
|
|
@ -128,8 +139,9 @@ Client *center_tiled_select(Monitor *m) {
|
|||
int dirx, diry;
|
||||
long int distance;
|
||||
wl_list_for_each(c, &clients, link) {
|
||||
if (c && VISIBLEON(c, m) && ISTILED(c) && client_surface(c)->mapped &&
|
||||
!c->isfloating && !client_is_unmanaged(c)) {
|
||||
if (c && VISIBLEON(c, m) && ISSCROLLTILED(c) &&
|
||||
client_surface(c)->mapped && !c->isfloating &&
|
||||
!client_is_unmanaged(c)) {
|
||||
dirx = c->geom.x + c->geom.width / 2 - (m->w.x + m->w.width / 2);
|
||||
diry = c->geom.y + c->geom.height / 2 - (m->w.y + m->w.height / 2);
|
||||
distance = dirx * dirx + diry * diry;
|
||||
|
|
@ -182,7 +194,9 @@ Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
|
|||
int sel_x = tc->geom.x;
|
||||
int sel_y = tc->geom.y;
|
||||
long long int distance = LLONG_MAX;
|
||||
long long int same_monitor_distance = LLONG_MAX;
|
||||
Client *tempFocusClients = NULL;
|
||||
Client *tempSameMonitorFocusClients = NULL;
|
||||
|
||||
switch (arg->i) {
|
||||
case UP:
|
||||
|
|
@ -213,6 +227,11 @@ Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
|
|||
distance = tmp_distance;
|
||||
tempFocusClients = tempClients[_i];
|
||||
}
|
||||
if (tempClients[_i]->mon == tc->mon &&
|
||||
tmp_distance < same_monitor_distance) {
|
||||
same_monitor_distance = tmp_distance;
|
||||
tempSameMonitorFocusClients = tempClients[_i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -245,6 +264,11 @@ Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
|
|||
distance = tmp_distance;
|
||||
tempFocusClients = tempClients[_i];
|
||||
}
|
||||
if (tempClients[_i]->mon == tc->mon &&
|
||||
tmp_distance < same_monitor_distance) {
|
||||
same_monitor_distance = tmp_distance;
|
||||
tempSameMonitorFocusClients = tempClients[_i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -277,6 +301,11 @@ Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
|
|||
distance = tmp_distance;
|
||||
tempFocusClients = tempClients[_i];
|
||||
}
|
||||
if (tempClients[_i]->mon == tc->mon &&
|
||||
tmp_distance < same_monitor_distance) {
|
||||
same_monitor_distance = tmp_distance;
|
||||
tempSameMonitorFocusClients = tempClients[_i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -309,6 +338,11 @@ Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
|
|||
distance = tmp_distance;
|
||||
tempFocusClients = tempClients[_i];
|
||||
}
|
||||
if (tempClients[_i]->mon == tc->mon &&
|
||||
tmp_distance < same_monitor_distance) {
|
||||
same_monitor_distance = tmp_distance;
|
||||
tempSameMonitorFocusClients = tempClients[_i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -316,7 +350,11 @@ Client *find_client_by_direction(Client *tc, const Arg *arg, bool findfloating,
|
|||
}
|
||||
|
||||
free(tempClients); // 释放内存
|
||||
return tempFocusClients;
|
||||
if(tempSameMonitorFocusClients) {
|
||||
return tempSameMonitorFocusClients;
|
||||
} else {
|
||||
return tempFocusClients;
|
||||
}
|
||||
}
|
||||
|
||||
Client *direction_select(const Arg *arg) {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
pid_t getparentprocess(pid_t p) {
|
||||
unsigned int v = 0;
|
||||
uint32_t v = 0;
|
||||
|
||||
FILE *f;
|
||||
char buf[256];
|
||||
|
|
@ -26,24 +26,6 @@ int isdescprocess(pid_t p, pid_t c) {
|
|||
return (int)c;
|
||||
}
|
||||
|
||||
char *get_autostart_path(char *autostart_path, unsigned int buf_size) {
|
||||
const char *mangoconfig = getenv("MANGOCONFIG");
|
||||
|
||||
if (mangoconfig && mangoconfig[0] != '\0') {
|
||||
snprintf(autostart_path, buf_size, "%s/autostart.sh", mangoconfig);
|
||||
} else {
|
||||
const char *homedir = getenv("HOME");
|
||||
if (!homedir) {
|
||||
fprintf(stderr, "Error: HOME environment variable not set.\n");
|
||||
return NULL;
|
||||
}
|
||||
snprintf(autostart_path, buf_size, "%s/.config/mango/autostart.sh",
|
||||
homedir);
|
||||
}
|
||||
|
||||
return autostart_path;
|
||||
}
|
||||
|
||||
void get_layout_abbr(char *abbr, const char *full_name) {
|
||||
// 清空输出缓冲区
|
||||
abbr[0] = '\0';
|
||||
|
|
@ -60,10 +42,10 @@ void get_layout_abbr(char *abbr, const char *full_name) {
|
|||
const char *open = strrchr(full_name, '(');
|
||||
const char *close = strrchr(full_name, ')');
|
||||
if (open && close && close > open) {
|
||||
unsigned int len = close - open - 1;
|
||||
uint32_t len = close - open - 1;
|
||||
if (len > 0 && len <= 4) {
|
||||
// 提取并转换为小写
|
||||
for (unsigned int j = 0; j < len; j++) {
|
||||
for (uint32_t j = 0; j < len; j++) {
|
||||
abbr[j] = tolower(open[j + 1]);
|
||||
}
|
||||
abbr[len] = '\0';
|
||||
|
|
@ -72,8 +54,8 @@ void get_layout_abbr(char *abbr, const char *full_name) {
|
|||
}
|
||||
|
||||
// 3. 提取前2-3个字母并转换为小写
|
||||
unsigned int j = 0;
|
||||
for (unsigned int i = 0; full_name[i] != '\0' && j < 3; i++) {
|
||||
uint32_t j = 0;
|
||||
for (uint32_t i = 0; full_name[i] != '\0' && j < 3; i++) {
|
||||
if (isalpha(full_name[i])) {
|
||||
abbr[j++] = tolower(full_name[i]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,9 +39,9 @@ bool is_row_layout(Monitor *m) {
|
|||
return false;
|
||||
}
|
||||
|
||||
unsigned int get_tag_status(unsigned int tag, Monitor *m) {
|
||||
uint32_t get_tag_status(uint32_t tag, Monitor *m) {
|
||||
Client *c = NULL;
|
||||
unsigned int status = 0;
|
||||
uint32_t status = 0;
|
||||
wl_list_for_each(c, &clients, link) {
|
||||
if (c->mon == m && c->tags & 1 << (tag - 1) & TAGMASK) {
|
||||
if (c->isurgent) {
|
||||
|
|
@ -54,8 +54,8 @@ unsigned int get_tag_status(unsigned int tag, Monitor *m) {
|
|||
return status;
|
||||
}
|
||||
|
||||
unsigned int get_tags_first_tag_num(unsigned int source_tags) {
|
||||
unsigned int i, tag;
|
||||
uint32_t get_tags_first_tag_num(uint32_t source_tags) {
|
||||
uint32_t i, tag;
|
||||
tag = 0;
|
||||
|
||||
if (!source_tags) {
|
||||
|
|
@ -76,8 +76,8 @@ unsigned int get_tags_first_tag_num(unsigned int source_tags) {
|
|||
}
|
||||
|
||||
// 获取tags中最前面的tag的tagmask
|
||||
unsigned int get_tags_first_tag(unsigned int source_tags) {
|
||||
unsigned int i, tag;
|
||||
uint32_t get_tags_first_tag(uint32_t source_tags) {
|
||||
uint32_t i, tag;
|
||||
tag = 0;
|
||||
|
||||
if (!source_tags) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue