NM6CAPI2WSAGSR6KGKGZL4NBGKK7DA5IP3UZ2KJTIPVQIJFPJZXQC
EDLLLXC2W4MYKM3B3LSFVTAR7SXDF63FMCCGIEIXBBM6HXR2MBUAC
T6RRXRQT6K4T63MKNIDLTNASZCAE3SWWMJU5BXKSHWFY2YY3VBSAC
PJHDUTG622NXK3JNTSDWH22FMIPNF4CEHINWBJBCUA7REWA5WMMAC
6FUMTPHUSH56QJ3TIMBBOVQOT5N7KOX2TUYREZTDGZE4H33ADJGQC
7L3TU7JVWPBPHN7WF4TJ263BZ6BC3AYRRW6PULFUP5JZUGWWNUSAC
J6OSBEBQXZR5JZ5TOCCUPELBPUVEQULGCXURXLPY7WFYTDEQOU2AC
7B74AT3BXYB7PVW4F6SGQNPMHOU5TEV5TZ54CG6VSQI46XSEKWXQC
66TSV5DVW2ILJNGV3EGWPLHHYW2KXGZPCVW4UZ3J4GZOSSR7374AC
22QYEUSXWCAT2P3PWTLTDZOIW75HDPICYESRPK4BRLY2XKFG5GWQC
DBS6UQ2KJAFLCREUIGGCN5UYTGNPNODS275TFWDAL2KUGFQMNWKQC
LQPHYO7IIMLXHUD5IK657BO4BE3SGT5HYDRJDU5OFDF5YUXKIRTAC
PLJJLNS7E2UXW2YARGBSV6IHZEBGL5EW354IMMHPDATY5DQD77DAC
6OZ3VUODEBOTXODIJQU5TKXCDEJOWTYHCMCDB4MJ2X3T6EG374SAC
TOFCZFUYVBVEBHMKVG6G5MKCAEF2QCQ4GKMKGQUSJRLGLDZEJF4QC
SV4UYATUNO4G473QWSHDFONASDFDGWTEFJD47IRN6RQJOVR5PUTQC
BHAVCU3626VQYRHL7PPGBXGM3N5GBHTN5L5P74M6BKDAARKQDOAQC
3RU5REBOOAYYK7CJKRFPTSQ7QKD7CPIM6C3I6G6NCE47IRMTRIPAC
QQGHHW5XN2GWROQUW6BRS3W5J5W6ANKEVCP3EC7RTXAA3KCA4GYAC
2OQAWQSW5DDGUFJ4YWT5VXHZMRWQPDKZFO3JUPO4SV6JQHWT6HRAC
JJXQTKU5WR74D7XW3JTN4Y3JSYDQTZ54GTD4F5XHT5RR2UWR72AAC
O3TIITAWQBJXO45JGUYX2N4JITKH4SEHV62AN5OG6GXQHDXVCR7QC
PMRSYJRYQAXZ3OEDD7ANMXTECMT2DNJEC3XQABRNA63SAOUZWA3AC
4WVZ2LAGAIQ2EROHNA4T5PWQEEIPJRTA3CBHGAO55NACCUGLKEZQC
S7RXJJZG4IEIVLPHEWFT5M2T3SRRO5US5SYBPXSYSWJJLXAKNNPAC
Q6TUD4XK4U35XVS2VZEGO4OCNXYM5IL4QUW7YDMYRMQQDRJBGSNAC
N54JKDQTHG2GSXAXR6PGMVVEKAHLKENNDSQ2IUGKQUDHGA72J4XQC
EQRGODLKSVSPFSUZU7BV5ER72U4QS4ATSBKV544XXQVKKTOSC7EAC
2GP4MXKEDQMZ7E6TCRSMV2AGN7HLEAHR3QEAC2QFCQQNPMNJSIHQC
} Client;
pid_t pid;
Client *swallowing, *swallowedby;
};
}
}
if (!c->noswallow && !client_is_float_type(c)
&& !c->surface.xdg->initial_commit) {
Client *p = termforwin(c);
if (p) {
c->swallowedby = p;
p->swallowing = c;
wl_list_remove(&c->link);
wl_list_remove(&c->flink);
swallow(c, p);
wl_list_remove(&p->link);
wl_list_remove(&p->flink);
mon = p->mon;
newtags = p->tags;
}
pid_t
getparentprocess(pid_t p)
{
unsigned int v = 0;
FILE *f;
char buf[256];
snprintf(buf, sizeof(buf) - 1, "/proc/%u/stat", (unsigned)p);
if (!(f = fopen(buf, "r")))
return 0;
fscanf(f, "%*u %*s %*c %u", &v);
fclose(f);
return (pid_t)v;
}
int
isdescprocess(pid_t p, pid_t c)
{
while (p != c && c != 0)
c = getparentprocess(c);
return (int)c;
}
Client *
termforwin(Client *w)
{
Client *c;
if (!w->pid || w->isterm || w->noswallow)
return NULL;
wl_list_for_each(c, &fstack, flink)
if (c->isterm && !c->swallowing && c->pid && isdescprocess(c->pid, w->pid))
return c;
return NULL;
}
void
swallow(Client *c, Client *w)
{
c->bw = w->bw;
c->isfloating = w->isfloating;
c->isurgent = w->isurgent;
c->isfullscreen = w->isfullscreen;
c->tags = w->tags;
c->geom = w->geom;
wl_list_insert(&w->link, &c->link);
wl_list_insert(&w->flink, &c->flink);
wlr_scene_node_set_enabled(&w->scene->node, 0);
wlr_scene_node_set_enabled(&c->scene->node, 1);
{ "Gimp_EXAMPLE", NULL, 0, 1, -1 }, /* Start on currently visible tags floating, not tiled */
{ "firefox_EXAMPLE", NULL, 1 << 8, 0, -1 }, /* Start on ONLY tag "9" */
{ "Gimp_EXAMPLE", NULL, 0, 1, 0, 0, -1 }, /* Start on currently visible tags floating, not tiled */
{ "firefox_EXAMPLE", NULL, 1 << 8, 0, 0, 0, -1 }, /* Start on ONLY tag "9" */
{ "foot", NULL, 0, 0, 1, 1, -1 }, /* make foot swallow clients that are not foot */