mirror of
				https://codeberg.org/dwl/dwl.git
				synced 2025-10-31 03:54:15 +00:00 
			
		
		
		
	Implement vanitygaps
This commit is contained in:
		
							parent
							
								
									879021bd94
								
							
						
					
					
						commit
						02441863df
					
				
							
								
								
									
										21
									
								
								config.def.h
									
									
									
									
									
								
							
							
						
						
									
										21
									
								
								config.def.h
									
									
									
									
									
								
							| @ -7,7 +7,12 @@ | |||||||
| static const int sloppyfocus               = 1;  /* focus follows mouse */ | static const int sloppyfocus               = 1;  /* focus follows mouse */ | ||||||
| static const int bypass_surface_visibility = 0;  /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible  */ | static const int bypass_surface_visibility = 0;  /* 1 means idle inhibitors will disable idle tracking even if it's surface isn't visible  */ | ||||||
| static const int smartborders              = 1; | static const int smartborders              = 1; | ||||||
|  | static const int smartgaps                 = 0;  /* 1 means no outer gap when there is only one window */ | ||||||
| static const unsigned int borderpx         = 1;  /* border pixel of windows */ | static const unsigned int borderpx         = 1;  /* border pixel of windows */ | ||||||
|  | static const unsigned int gappih           = 10; /* horiz inner gap between windows */ | ||||||
|  | static const unsigned int gappiv           = 10; /* vert inner gap between windows */ | ||||||
|  | static const unsigned int gappoh           = 10; /* horiz outer gap between windows and screen edge */ | ||||||
|  | static const unsigned int gappov           = 10; /* vert outer gap between windows and screen edge */ | ||||||
| static const float bordercolor[]           = COLOR(0x444444ff); | static const float bordercolor[]           = COLOR(0x444444ff); | ||||||
| static const float focuscolor[]            = COLOR(0x005577ff); | static const float focuscolor[]            = COLOR(0x005577ff); | ||||||
| static const float urgentcolor[]           = COLOR(0xff0000ff); | static const float urgentcolor[]           = COLOR(0xff0000ff); | ||||||
| @ -144,6 +149,22 @@ static const Key keys[] = { | |||||||
| 	{ MODKEY,                    XKB_KEY_l,          setmfact,       {.f = +0.05} }, | 	{ MODKEY,                    XKB_KEY_l,          setmfact,       {.f = +0.05} }, | ||||||
| 	{ MODKEY,                    XKB_KEY_o,          setopacity,     {.f = +0.1} }, | 	{ MODKEY,                    XKB_KEY_o,          setopacity,     {.f = +0.1} }, | ||||||
| 	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_O,          setopacity,     {.f = -0.1} }, | 	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_O,          setopacity,     {.f = -0.1} }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_LOGO,  XKB_KEY_h,          incgaps,       {.i = +1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_LOGO,  XKB_KEY_l,          incgaps,       {.i = -1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_LOGO|WLR_MODIFIER_SHIFT,   XKB_KEY_H,      incogaps,      {.i = +1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_LOGO|WLR_MODIFIER_SHIFT,   XKB_KEY_L,      incogaps,      {.i = -1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_LOGO|WLR_MODIFIER_CTRL,    XKB_KEY_h,      incigaps,      {.i = +1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_LOGO|WLR_MODIFIER_CTRL,    XKB_KEY_l,      incigaps,      {.i = -1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_LOGO,  XKB_KEY_0,          togglegaps,     {0} }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_LOGO|WLR_MODIFIER_SHIFT,   XKB_KEY_parenright,defaultgaps,    {0} }, | ||||||
|  | 	{ MODKEY,                    XKB_KEY_y,          incihgaps,     {.i = +1 } }, | ||||||
|  | 	{ MODKEY,                    XKB_KEY_o,          incihgaps,     {.i = -1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_CTRL,  XKB_KEY_y,          incivgaps,     {.i = +1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_CTRL,  XKB_KEY_o,          incivgaps,     {.i = -1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_LOGO,  XKB_KEY_y,          incohgaps,     {.i = +1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_LOGO,  XKB_KEY_o,          incohgaps,     {.i = -1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Y,          incovgaps,     {.i = +1 } }, | ||||||
|  | 	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_O,          incovgaps,     {.i = -1 } }, | ||||||
| 	{ MODKEY,                    XKB_KEY_Return,     zoom,           {0} }, | 	{ MODKEY,                    XKB_KEY_Return,     zoom,           {0} }, | ||||||
| 	{ MODKEY,                    XKB_KEY_Tab,        view,           {0} }, | 	{ MODKEY,                    XKB_KEY_Tab,        view,           {0} }, | ||||||
| 	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_C,          killclient,     {0} }, | 	{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_C,          killclient,     {0} }, | ||||||
|  | |||||||
							
								
								
									
										147
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										147
									
								
								dwl.c
									
									
									
									
									
								
							| @ -197,6 +197,10 @@ struct Monitor { | |||||||
| 	struct wlr_box w; /* window area, layout-relative */ | 	struct wlr_box w; /* window area, layout-relative */ | ||||||
| 	struct wl_list layers[4]; /* LayerSurface::link */ | 	struct wl_list layers[4]; /* LayerSurface::link */ | ||||||
| 	const Layout *lt[2]; | 	const Layout *lt[2]; | ||||||
|  | 	int gappih;           /* horizontal gap between windows */ | ||||||
|  | 	int gappiv;           /* vertical gap between windows */ | ||||||
|  | 	int gappoh;           /* horizontal outer gaps */ | ||||||
|  | 	int gappov;           /* vertical outer gaps */ | ||||||
| 	unsigned int seltags; | 	unsigned int seltags; | ||||||
| 	unsigned int sellt; | 	unsigned int sellt; | ||||||
| 	uint32_t tagset[2]; | 	uint32_t tagset[2]; | ||||||
| @ -281,6 +285,7 @@ static void cursorconstrain(struct wlr_pointer_constraint_v1 *constraint); | |||||||
| static void cursorframe(struct wl_listener *listener, void *data); | static void cursorframe(struct wl_listener *listener, void *data); | ||||||
| static void cursorwarptoconstrainthint(void); | static void cursorwarptoconstrainthint(void); | ||||||
| static void cyclelayout(const Arg *arg); | static void cyclelayout(const Arg *arg); | ||||||
|  | static void defaultgaps(const Arg *arg); | ||||||
| static void destroydragicon(struct wl_listener *listener, void *data); | static void destroydragicon(struct wl_listener *listener, void *data); | ||||||
| static void destroyidleinhibitor(struct wl_listener *listener, void *data); | static void destroyidleinhibitor(struct wl_listener *listener, void *data); | ||||||
| static void destroylayersurfacenotify(struct wl_listener *listener, void *data); | static void destroylayersurfacenotify(struct wl_listener *listener, void *data); | ||||||
| @ -298,6 +303,13 @@ static Client *focustop(Monitor *m); | |||||||
| static void fullscreennotify(struct wl_listener *listener, void *data); | static void fullscreennotify(struct wl_listener *listener, void *data); | ||||||
| static void handlesig(int signo); | static void handlesig(int signo); | ||||||
| static void incnmaster(const Arg *arg); | static void incnmaster(const Arg *arg); | ||||||
|  | static void incgaps(const Arg *arg); | ||||||
|  | static void incigaps(const Arg *arg); | ||||||
|  | static void incihgaps(const Arg *arg); | ||||||
|  | static void incivgaps(const Arg *arg); | ||||||
|  | static void incogaps(const Arg *arg); | ||||||
|  | static void incohgaps(const Arg *arg); | ||||||
|  | static void incovgaps(const Arg *arg); | ||||||
| static void inputdevice(struct wl_listener *listener, void *data); | static void inputdevice(struct wl_listener *listener, void *data); | ||||||
| static int keybinding(uint32_t mods, xkb_keysym_t sym); | static int keybinding(uint32_t mods, xkb_keysym_t sym); | ||||||
| static void keypress(struct wl_listener *listener, void *data); | static void keypress(struct wl_listener *listener, void *data); | ||||||
| @ -334,6 +346,7 @@ static void setcursorshape(struct wl_listener *listener, void *data); | |||||||
| static void setfloating(Client *c, int floating); | static void setfloating(Client *c, int floating); | ||||||
| static void setfullscreen(Client *c, int fullscreen); | static void setfullscreen(Client *c, int fullscreen); | ||||||
| static void setgamma(struct wl_listener *listener, void *data); | static void setgamma(struct wl_listener *listener, void *data); | ||||||
|  | static void setgaps(int oh, int ov, int ih, int iv); | ||||||
| static void setlayout(const Arg *arg); | static void setlayout(const Arg *arg); | ||||||
| static void setmfact(const Arg *arg); | static void setmfact(const Arg *arg); | ||||||
| static void setmon(Client *c, Monitor *m, uint32_t newtags); | static void setmon(Client *c, Monitor *m, uint32_t newtags); | ||||||
| @ -348,6 +361,7 @@ static void tagmon(const Arg *arg); | |||||||
| static void tile(Monitor *m); | static void tile(Monitor *m); | ||||||
| static void togglefloating(const Arg *arg); | static void togglefloating(const Arg *arg); | ||||||
| static void togglefullscreen(const Arg *arg); | static void togglefullscreen(const Arg *arg); | ||||||
|  | static void togglegaps(const Arg *arg); | ||||||
| static void toggletag(const Arg *arg); | static void toggletag(const Arg *arg); | ||||||
| static void toggleview(const Arg *arg); | static void toggleview(const Arg *arg); | ||||||
| static void unlocksession(struct wl_listener *listener, void *data); | static void unlocksession(struct wl_listener *listener, void *data); | ||||||
| @ -421,6 +435,8 @@ static struct wlr_box sgeom; | |||||||
| static struct wl_list mons; | static struct wl_list mons; | ||||||
| static Monitor *selmon; | static Monitor *selmon; | ||||||
| 
 | 
 | ||||||
|  | static int enablegaps = 1;   /* enables gaps, used by togglegaps */ | ||||||
|  | 
 | ||||||
| #ifdef XWAYLAND | #ifdef XWAYLAND | ||||||
| static void activatex11(struct wl_listener *listener, void *data); | static void activatex11(struct wl_listener *listener, void *data); | ||||||
| static void associatex11(struct wl_listener *listener, void *data); | static void associatex11(struct wl_listener *listener, void *data); | ||||||
| @ -1066,6 +1082,11 @@ createmon(struct wl_listener *listener, void *data) | |||||||
| 	/* Initialize monitor state using configured rules */ | 	/* Initialize monitor state using configured rules */ | ||||||
| 	for (i = 0; i < LENGTH(m->layers); i++) | 	for (i = 0; i < LENGTH(m->layers); i++) | ||||||
| 		wl_list_init(&m->layers[i]); | 		wl_list_init(&m->layers[i]); | ||||||
|  | 
 | ||||||
|  | 	m->gappih = gappih; | ||||||
|  | 	m->gappiv = gappiv; | ||||||
|  | 	m->gappoh = gappoh; | ||||||
|  | 	m->gappov = gappov; | ||||||
| 	m->tagset[0] = m->tagset[1] = 1; | 	m->tagset[0] = m->tagset[1] = 1; | ||||||
| 	for (r = monrules; r < END(monrules); r++) { | 	for (r = monrules; r < END(monrules); r++) { | ||||||
| 		if (!r->name || strstr(wlr_output->name, r->name)) { | 		if (!r->name || strstr(wlr_output->name, r->name)) { | ||||||
| @ -1343,6 +1364,12 @@ cyclelayout(const Arg *arg) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void | ||||||
|  | defaultgaps(const Arg *arg) | ||||||
|  | { | ||||||
|  | 	setgaps(gappoh, gappov, gappih, gappiv); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void | void | ||||||
| destroydragicon(struct wl_listener *listener, void *data) | destroydragicon(struct wl_listener *listener, void *data) | ||||||
| { | { | ||||||
| @ -1666,6 +1693,83 @@ incnmaster(const Arg *arg) | |||||||
| 	arrange(selmon); | 	arrange(selmon); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void | ||||||
|  | incgaps(const Arg *arg) | ||||||
|  | { | ||||||
|  | 	setgaps( | ||||||
|  | 		selmon->gappoh + arg->i, | ||||||
|  | 		selmon->gappov + arg->i, | ||||||
|  | 		selmon->gappih + arg->i, | ||||||
|  | 		selmon->gappiv + arg->i | ||||||
|  | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | incigaps(const Arg *arg) | ||||||
|  | { | ||||||
|  | 	setgaps( | ||||||
|  | 		selmon->gappoh, | ||||||
|  | 		selmon->gappov, | ||||||
|  | 		selmon->gappih + arg->i, | ||||||
|  | 		selmon->gappiv + arg->i | ||||||
|  | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | incihgaps(const Arg *arg) | ||||||
|  | { | ||||||
|  | 	setgaps( | ||||||
|  | 		selmon->gappoh, | ||||||
|  | 		selmon->gappov, | ||||||
|  | 		selmon->gappih + arg->i, | ||||||
|  | 		selmon->gappiv | ||||||
|  | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | incivgaps(const Arg *arg) | ||||||
|  | { | ||||||
|  | 	setgaps( | ||||||
|  | 		selmon->gappoh, | ||||||
|  | 		selmon->gappov, | ||||||
|  | 		selmon->gappih, | ||||||
|  | 		selmon->gappiv + arg->i | ||||||
|  | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | incogaps(const Arg *arg) | ||||||
|  | { | ||||||
|  | 	setgaps( | ||||||
|  | 		selmon->gappoh + arg->i, | ||||||
|  | 		selmon->gappov + arg->i, | ||||||
|  | 		selmon->gappih, | ||||||
|  | 		selmon->gappiv | ||||||
|  | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | incohgaps(const Arg *arg) | ||||||
|  | { | ||||||
|  | 	setgaps( | ||||||
|  | 		selmon->gappoh + arg->i, | ||||||
|  | 		selmon->gappov, | ||||||
|  | 		selmon->gappih, | ||||||
|  | 		selmon->gappiv | ||||||
|  | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | incovgaps(const Arg *arg) | ||||||
|  | { | ||||||
|  | 	setgaps( | ||||||
|  | 		selmon->gappoh, | ||||||
|  | 		selmon->gappov + arg->i, | ||||||
|  | 		selmon->gappih, | ||||||
|  | 		selmon->gappiv | ||||||
|  | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void | void | ||||||
| inputdevice(struct wl_listener *listener, void *data) | inputdevice(struct wl_listener *listener, void *data) | ||||||
| { | { | ||||||
| @ -2476,6 +2580,16 @@ setgamma(struct wl_listener *listener, void *data) | |||||||
| 	wlr_output_schedule_frame(m->wlr_output); | 	wlr_output_schedule_frame(m->wlr_output); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void | ||||||
|  | setgaps(int oh, int ov, int ih, int iv) | ||||||
|  | { | ||||||
|  | 	selmon->gappoh = MAX(oh, 0); | ||||||
|  | 	selmon->gappov = MAX(ov, 0); | ||||||
|  | 	selmon->gappih = MAX(ih, 0); | ||||||
|  | 	selmon->gappiv = MAX(iv, 0); | ||||||
|  | 	arrange(selmon); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void | void | ||||||
| setlayout(const Arg *arg) | setlayout(const Arg *arg) | ||||||
| { | { | ||||||
| @ -2823,7 +2937,7 @@ tagmon(const Arg *arg) | |||||||
| void | void | ||||||
| tile(Monitor *m) | tile(Monitor *m) | ||||||
| { | { | ||||||
| 	unsigned int i, n = 0, mw, my, ty, draw_borders = 1; | 	unsigned int i = 0, n = 0, h, r, oe = enablegaps, ie = enablegaps, mw, my, ty, draw_borders = 1; | ||||||
| 	Client *c; | 	Client *c; | ||||||
| 
 | 
 | ||||||
| 	wl_list_for_each(c, &clients, link) | 	wl_list_for_each(c, &clients, link) | ||||||
| @ -2834,23 +2948,29 @@ tile(Monitor *m) | |||||||
| 
 | 
 | ||||||
| 	if (n == smartborders) | 	if (n == smartborders) | ||||||
| 		draw_borders = 0; | 		draw_borders = 0; | ||||||
|  | 	if (smartgaps == n) | ||||||
|  | 		oe = 0; // outer gaps disabled
 | ||||||
| 
 | 
 | ||||||
| 	if (n > m->nmaster) | 	if (n > m->nmaster) | ||||||
| 		mw = m->nmaster ? m->w.width * m->mfact : 0; | 		mw = m->nmaster ? (m->w.width + m->gappiv*ie) * m->mfact : 0; | ||||||
| 	else | 	else | ||||||
| 		mw = m->w.width; | 		mw = m->w.width - 2*m->gappov*oe + m->gappiv*ie; | ||||||
| 	i = my = ty = 0; | 	my = ty = m->gappoh*oe; | ||||||
| 	wl_list_for_each(c, &clients, link) { | 	wl_list_for_each(c, &clients, link) { | ||||||
| 		if (!VISIBLEON(c, m) || c->isfloating || c->isfullscreen) | 		if (!VISIBLEON(c, m) || c->isfloating || c->isfullscreen) | ||||||
| 			continue; | 			continue; | ||||||
| 		if (i < m->nmaster) { | 		if (i < m->nmaster) { | ||||||
| 			resize(c, (struct wlr_box){.x = m->w.x, .y = m->w.y + my, .width = mw, | 			r = MIN(n, m->nmaster) - i; | ||||||
| 				.height = (m->w.height - my) / (MIN(n, m->nmaster) - i)}, 0, draw_borders); | 			h = (m->w.height - my - m->gappoh*oe - m->gappih*ie * (r - 1)) / r; | ||||||
| 			my += c->geom.height; | 			resize(c, (struct wlr_box){.x = m->w.x + m->gappov*oe, .y = m->w.y + my, | ||||||
|  | 				.width = mw - m->gappiv*ie, .height = h}, 0, draw_borders); | ||||||
|  | 			my += c->geom.height + m->gappih*ie; | ||||||
| 		} else { | 		} else { | ||||||
| 			resize(c, (struct wlr_box){.x = m->w.x + mw, .y = m->w.y + ty, | 			r = n - i; | ||||||
| 				.width = m->w.width - mw, .height = (m->w.height - ty) / (n - i)}, 0, draw_borders); | 			h = (m->w.height - ty - m->gappoh*oe - m->gappih*ie * (r - 1)) / r; | ||||||
| 			ty += c->geom.height; | 			resize(c, (struct wlr_box){.x = m->w.x + mw + m->gappov*oe, .y = m->w.y + ty, | ||||||
|  | 				.width = m->w.width - mw - 2*m->gappov*oe, .height = h}, 0, draw_borders); | ||||||
|  | 			ty += c->geom.height + m->gappih*ie; | ||||||
| 		} | 		} | ||||||
| 		i++; | 		i++; | ||||||
| 	} | 	} | ||||||
| @ -2873,6 +2993,13 @@ togglefullscreen(const Arg *arg) | |||||||
| 		setfullscreen(sel, !sel->isfullscreen); | 		setfullscreen(sel, !sel->isfullscreen); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void | ||||||
|  | togglegaps(const Arg *arg) | ||||||
|  | { | ||||||
|  | 	enablegaps = !enablegaps; | ||||||
|  | 	arrange(selmon); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void | void | ||||||
| toggletag(const Arg *arg) | toggletag(const Arg *arg) | ||||||
| { | { | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Leonardo Hernández Hernández
						Leonardo Hernández Hernández