summaryrefslogtreecommitdiff
path: root/dwl.c
diff options
context:
space:
mode:
author0scar <qgt268@alumni.ku.dk>2023-02-28 13:56:08 +0000
committer0scar <qgt268@alumni.ku.dk>2024-10-01 11:53:32 +0000
commit7fa3c98f91c4eb44ac9bf79136d119eb64874be4 (patch)
tree90b3a07c12723f4f470db6f83ee7636c85a53091 /dwl.c
parent40c2808d355606d7bff39daf23dbe23f2b73d585 (diff)
Patch: gap
Diffstat (limited to 'dwl.c')
-rw-r--r--dwl.c44
1 files changed, 35 insertions, 9 deletions
diff --git a/dwl.c b/dwl.c
index 0c2ff09..0e07ac4 100644
--- a/dwl.c
+++ b/dwl.c
@@ -209,6 +209,7 @@ struct Monitor {
unsigned int seltags;
unsigned int sellt;
uint32_t tagset[2];
+ int gappx;
float mfact;
int gamma_lut_changed;
int nmaster;
@@ -337,6 +338,7 @@ static void setcursor(struct wl_listener *listener, void *data);
static void setcursorshape(struct wl_listener *listener, void *data);
static void setfloating(Client *c, int floating);
static void setfullscreen(Client *c, int fullscreen);
+static void setgaps(const Arg *arg);
static void setlayout(const Arg *arg);
static void setmfact(const Arg *arg);
static void setmon(Client *c, Monitor *m, uint32_t newtags);
@@ -353,6 +355,7 @@ static void tile(Monitor *m);
static void togglefloating(const Arg *arg);
static void togglesticky(const Arg *arg);
static void togglefullscreen(const Arg *arg);
+static void togglegaps(const Arg *arg);
static void togglescratch(const Arg *arg);
static void toggletag(const Arg *arg);
static void toggleview(const Arg *arg);
@@ -1042,6 +1045,7 @@ createmon(struct wl_listener *listener, void *data)
m->m.y = r->y;
m->mfact = r->mfact;
m->nmaster = r->nmaster;
+ m->gappx = gappx;
m->lt[0] = r->lt;
m->lt[1] = &layouts[LENGTH(layouts) > 1 && r->lt != &layouts[1]];
strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, LENGTH(m->ltsymbol));
@@ -2513,6 +2517,17 @@ setfullscreen(Client *c, int fullscreen)
}
void
+setgaps(const Arg *arg) {
+ if ((arg->i == 0) || (selmon->gappx + arg->i < 0))
+ selmon->gappx = gappx;
+ else if (selmon->gappx + arg->i < 0)
+ selmon->gappx = 0;
+ else
+ selmon->gappx += arg->i;
+ arrange(selmon);
+}
+
+void
setsticky(Client *c, int sticky)
{
if(sticky && !c->issticky) {
@@ -2882,7 +2897,7 @@ void
tile(Monitor *m)
{
unsigned int mw, my, ty, draw_borders = 1;
- int i, n = 0;
+ int i, n = 0, gap = 0;
Client *c;
wl_list_for_each(c, &clients, link)
@@ -2891,25 +2906,28 @@ tile(Monitor *m)
if (n == 0)
return;
+ if (n > 1)
+ gap = m->gappx;
+
if (n == smartborders)
draw_borders = 0;
if (n > m->nmaster)
mw = m->nmaster ? (int)roundf(m->w.width * m->mfact) : 0;
else
- mw = m->w.width;
- i = my = ty = 0;
+ mw = m->w.width - gap;
+ i = 0; my = ty = gap;
wl_list_for_each(c, &clients, link) {
if (!VISIBLEON(c, m) || c->isfloating || c->isfullscreen)
continue;
if (i < m->nmaster) {
- resize(c, (struct wlr_box){.x = m->w.x, .y = m->w.y + my, .width = mw,
- .height = (m->w.height - my) / (MIN(n, m->nmaster) - i)}, 0, draw_borders);
- my += c->geom.height;
+ resize(c, (struct wlr_box){.x = m->w.x + gap, .y = m->w.y + my,
+ .width = mw - gap, .height = (m->w.height - my - gap) / (MIN(n, m->nmaster) - i)}, 0, draw_borders);
+ my += c->geom.height + gap;
} else {
- resize(c, (struct wlr_box){.x = m->w.x + mw, .y = m->w.y + ty,
- .width = m->w.width - mw, .height = (m->w.height - ty) / (n - i)}, 0, draw_borders);
- ty += c->geom.height;
+ resize(c, (struct wlr_box){.x = m->w.x + mw + gap, .y = m->w.y + ty,
+ .width = m->w.width - mw - 2 * gap, .height = (m->w.height - ty) / (n - i) - gap}, 0, draw_borders);
+ ty += c->geom.height + gap;
}
i++;
}
@@ -2932,6 +2950,14 @@ togglefullscreen(const Arg *arg)
setfullscreen(sel, !sel->isfullscreen);
}
+void togglegaps(const Arg *arg) {
+ if (selmon->gappx == 0)
+ selmon->gappx = gappx;
+ else
+ selmon->gappx = 0;
+ arrange(selmon);
+}
+
void
togglescratch(const Arg *arg)
{