make dialog clients be iconified/re-screened with their respective leader client

This commit is contained in:
Lucas de Sena
2026-02-04 16:12:48 +00:00
parent 0a400a366a
commit 6685043266
10 changed files with 107 additions and 50 deletions

48
icon.c
View File

@@ -157,6 +157,11 @@ void reparenticon(Icon *i, Scrn *s, int x, int y)
s->icons=i;
if(i->client) {
reparent_client(s, i->client);
for (Client *dialog = clients; dialog != NULL; dialog = dialog->next) {
if (dialog->leader == i->client) {
reparent_client(s, dialog);
}
}
}
if(os)
selecticon(i);
@@ -630,3 +635,46 @@ void free_icon_pms(struct IconPixmaps *pms)
free_color_store(dpy, &pms->cs);
free_color_store(dpy, &pms->cs2);
}
void iconify(Client *c)
{
if(!(c->icon))
createicon(c);
XUnmapWindow(dpy, c->parent);
adjusticon(c->icon);
XMapWindow(dpy, c->icon->window);
if(c->icon->labelwidth)
XMapWindow(dpy, c->icon->labelwin);
c->icon->mapped=1;
setclientstate(c, IconicState);
for (Client *dialog = clients; dialog != NULL; dialog = dialog->next) {
if (dialog->leader == c) {
XUnmapWindow(dpy, dialog->parent);
setclientstate(dialog, IconicState);
}
}
}
void deiconify(Icon *i)
{
Client *c = i->client;
if(i->labelwin)
XUnmapWindow(dpy, i->labelwin);
if(i->window)
XUnmapWindow(dpy, i->window);
i->mapped=0;
deselecticon(i);
if (c != NULL) {
XMapWindow(dpy, c->window);
if(c->parent!=c->scr->root && !c->fullscreen)
XMapRaised(dpy, c->parent);
setclientstate(c, NormalState);
for (Client *dialog = clients; dialog != NULL; dialog = dialog->next) {
if (dialog->leader == c) {
XMapRaised(dpy, dialog->parent);
setclientstate(dialog, NormalState);
}
}
}
}