/* ************************************************************************** */ /* @@@ @@@@@@@@ */ /* @@@ @@@@@@@@@@ */ /* @@! @@! @@@@ */ /* !@! !@! @!@!@ */ /* simple_scratchpad.c @!! @!@ @! !@! */ /* !!! !@!!! !!! */ /* By: julmajustus !!: !!:! !!! */ /* ::! :!: !:! */ /* Created: 2024/12/19 19:35:02 by jmakkone :: ::::::: :: */ /* Updated: 2026/05/20 23:58:16 by julmajustus : : : : : : */ /* */ /* ************************************************************************** */ void draw_scratchpad(void) { Client *c; Monitor *m = selmon; if (scratchpad_visible[scratchpad_sel]) { wl_list_for_each(c, &scratchpad_clients[scratchpad_sel], link_temp) { c->mon = m; c->tags = m->tagset[m->seltags]; arrange(m); focusclient(c, 1); } } else { wl_list_for_each(c, &scratchpad_clients[scratchpad_sel], link_temp) { c->tags = 0; focusclient(focustop(m), 1); arrange(m); } } } void addscratchpad(const Arg *arg) { Client *cc, *c = focustop(selmon); Monitor *m = selmon; if (!c) return; /* Check if the added client is already a scratchpad client */ for (int i = 0; i < SCRATCHPAD_COUNT; i++) { wl_list_for_each(cc, &scratchpad_clients[i], link_temp) { if (cc == c) return; } } if (!c->isfloating) { setfloating(c, 1); } scratchpad_visible[scratchpad_sel] = 0; draw_scratchpad(); wl_list_insert(&scratchpad_clients[scratchpad_sel], &c->link_temp); c->tags = 0; arrange(m); focusclient(focustop(m), 1); arrange(m); } void togglescratchpad(const Arg *arg) { scratchpad_visible[scratchpad_sel] = !scratchpad_visible[scratchpad_sel]; draw_scratchpad(); } void removescratchpad(const Arg *arg) { Client *sc, *c = focustop(selmon); Monitor *m = selmon; if (!c) return; for (int i = 0; i < SCRATCHPAD_COUNT; i++) { /* Check if c is in scratchpad_clients */ wl_list_for_each(sc, &scratchpad_clients[i], link_temp) { if (sc == c) { wl_list_remove(&sc->link_temp); setfloating(sc, 0); arrange(m); focusclient(sc, 1); return; } } } }