apply patch dwmc
This commit is contained in:
		
							parent
							
								
									1a64b28115
								
							
						
					
					
						commit
						07fb536d57
					
				| 
						 | 
				
			
			@ -2,3 +2,4 @@ drw.o
 | 
			
		|||
dwm.o
 | 
			
		||||
dwm
 | 
			
		||||
util.o
 | 
			
		||||
dwmc
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								Makefile
								
								
								
								
							
							
						
						
									
										2
									
								
								Makefile
								
								
								
								
							| 
						 | 
				
			
			@ -38,7 +38,7 @@ dist: clean
 | 
			
		|||
 | 
			
		||||
install: all
 | 
			
		||||
	mkdir -p ${DESTDIR}${PREFIX}/bin
 | 
			
		||||
	cp -f dwm ${DESTDIR}${PREFIX}/bin
 | 
			
		||||
	cp -f dwm dwmc ${DESTDIR}${PREFIX}/bin
 | 
			
		||||
	chmod 755 ${DESTDIR}${PREFIX}/bin/dwm
 | 
			
		||||
	mkdir -p ${DESTDIR}${MANPREFIX}/man1
 | 
			
		||||
	sed "s/VERSION/${VERSION}/g" < dwm.1 > ${DESTDIR}${MANPREFIX}/man1/dwm.1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										70
									
								
								config.def.h
								
								
								
								
							
							
						
						
									
										70
									
								
								config.def.h
								
								
								
								
							| 
						 | 
				
			
			@ -117,3 +117,73 @@ static Button buttons[] = {
 | 
			
		|||
	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
setlayoutex(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
	setlayout(&((Arg) { .v = &layouts[arg->i] }));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
viewex(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
	view(&((Arg) { .ui = 1 << arg->ui }));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
viewall(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
	view(&((Arg){.ui = ~0}));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
toggleviewex(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
	toggleview(&((Arg) { .ui = 1 << arg->ui }));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tagex(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
	tag(&((Arg) { .ui = 1 << arg->ui }));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
toggletagex(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
	toggletag(&((Arg) { .ui = 1 << arg->ui }));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
tagall(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
	tag(&((Arg){.ui = ~0}));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* signal definitions */
 | 
			
		||||
/* signum must be greater than 0 */
 | 
			
		||||
/* trigger signals using `xsetroot -name "fsignal:<signame> [<type> <value>]"` */
 | 
			
		||||
static Signal signals[] = {
 | 
			
		||||
	/* signum           function */
 | 
			
		||||
	{ "focusstack",     focusstack },
 | 
			
		||||
	{ "setmfact",       setmfact },
 | 
			
		||||
	{ "togglebar",      togglebar },
 | 
			
		||||
	{ "incnmaster",     incnmaster },
 | 
			
		||||
	{ "togglefloating", togglefloating },
 | 
			
		||||
	{ "focusmon",       focusmon },
 | 
			
		||||
	{ "tagmon",         tagmon },
 | 
			
		||||
	{ "zoom",           zoom },
 | 
			
		||||
	{ "view",           view },
 | 
			
		||||
	{ "viewall",        viewall },
 | 
			
		||||
	{ "viewex",         viewex },
 | 
			
		||||
	{ "toggleview",     view },
 | 
			
		||||
	{ "toggleviewex",   toggleviewex },
 | 
			
		||||
	{ "tag",            tag },
 | 
			
		||||
	{ "tagall",         tagall },
 | 
			
		||||
	{ "tagex",          tagex },
 | 
			
		||||
	{ "toggletag",      tag },
 | 
			
		||||
	{ "toggletagex",    toggletagex },
 | 
			
		||||
	{ "killclient",     killclient },
 | 
			
		||||
	{ "quit",           quit },
 | 
			
		||||
	{ "setlayout",      setlayout },
 | 
			
		||||
	{ "setlayoutex",    setlayoutex },
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										8
									
								
								config.h
								
								
								
								
							
							
						
						
									
										8
									
								
								config.h
								
								
								
								
							| 
						 | 
				
			
			@ -122,3 +122,11 @@ static Button buttons[] = {
 | 
			
		|||
	{ ClkTagBar,            MODKEY,         Button3,        toggletag,      {0} },
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/* signal definitions */
 | 
			
		||||
/* signum must be greater than 0 */
 | 
			
		||||
/* trigger signals using `xsetroot -name "fsignal:<signame> [<type> <value>]"` */
 | 
			
		||||
static Signal signals[] = {
 | 
			
		||||
	/* signum           function */
 | 
			
		||||
	{ "focusstack",     focusstack },
 | 
			
		||||
	{ "focusmon",       focusmon },
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										50
									
								
								dwm.c
								
								
								
								
							
							
						
						
									
										50
									
								
								dwm.c
								
								
								
								
							| 
						 | 
				
			
			@ -106,6 +106,11 @@ typedef struct {
 | 
			
		|||
	const Arg arg;
 | 
			
		||||
} Key;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	const char * sig;
 | 
			
		||||
	void (*func)(const Arg *);
 | 
			
		||||
} Signal;
 | 
			
		||||
 | 
			
		||||
typedef struct {
 | 
			
		||||
	const char *symbol;
 | 
			
		||||
	void (*arrange)(Monitor *);
 | 
			
		||||
| 
						 | 
				
			
			@ -148,6 +153,7 @@ static void arrange(Monitor *m);
 | 
			
		|||
static void arrangemon(Monitor *m);
 | 
			
		||||
static void attach(Client *c);
 | 
			
		||||
static void attachstack(Client *c);
 | 
			
		||||
static int fake_signal(void);
 | 
			
		||||
static void buttonpress(XEvent *e);
 | 
			
		||||
static void checkotherwm(void);
 | 
			
		||||
static void cleanup(void);
 | 
			
		||||
| 
						 | 
				
			
			@ -1007,6 +1013,49 @@ keypress(XEvent *e)
 | 
			
		|||
			keys[i].func(&(keys[i].arg));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
fake_signal(void)
 | 
			
		||||
{
 | 
			
		||||
	char fsignal[256];
 | 
			
		||||
	char indicator[9] = "fsignal:";
 | 
			
		||||
	char str_sig[50];
 | 
			
		||||
	char param[16];
 | 
			
		||||
	int i, len_str_sig, n, paramn;
 | 
			
		||||
	size_t len_fsignal, len_indicator = strlen(indicator);
 | 
			
		||||
	Arg arg;
 | 
			
		||||
 | 
			
		||||
	// Get root name property
 | 
			
		||||
	if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) {
 | 
			
		||||
		len_fsignal = strlen(fsignal);
 | 
			
		||||
 | 
			
		||||
		// Check if this is indeed a fake signal
 | 
			
		||||
		if (len_indicator > len_fsignal ? 0 : strncmp(indicator, fsignal, len_indicator) == 0) {
 | 
			
		||||
			paramn = sscanf(fsignal+len_indicator, "%s%n%s%n", str_sig, &len_str_sig, param, &n);
 | 
			
		||||
 | 
			
		||||
			if (paramn == 1) arg = (Arg) {0};
 | 
			
		||||
			else if (paramn > 2) return 1;
 | 
			
		||||
			else if (strncmp(param, "i", n - len_str_sig) == 0)
 | 
			
		||||
				sscanf(fsignal + len_indicator + n, "%i", &(arg.i));
 | 
			
		||||
			else if (strncmp(param, "ui", n - len_str_sig) == 0)
 | 
			
		||||
				sscanf(fsignal + len_indicator + n, "%u", &(arg.ui));
 | 
			
		||||
			else if (strncmp(param, "f", n - len_str_sig) == 0)
 | 
			
		||||
				sscanf(fsignal + len_indicator + n, "%f", &(arg.f));
 | 
			
		||||
			else return 1;
 | 
			
		||||
 | 
			
		||||
			// Check if a signal was found, and if so handle it
 | 
			
		||||
			for (i = 0; i < LENGTH(signals); i++)
 | 
			
		||||
				if (strncmp(str_sig, signals[i].sig, len_str_sig) == 0 && signals[i].func)
 | 
			
		||||
					signals[i].func(&(arg));
 | 
			
		||||
 | 
			
		||||
			// A fake signal was sent
 | 
			
		||||
			return 1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// No fake signal was sent, so proceed with update
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
killclient(const Arg *arg)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -1225,6 +1274,7 @@ propertynotify(XEvent *e)
 | 
			
		|||
	XPropertyEvent *ev = &e->xproperty;
 | 
			
		||||
 | 
			
		||||
	if ((ev->window == root) && (ev->atom == XA_WM_NAME))
 | 
			
		||||
		if (!fake_signal())
 | 
			
		||||
			updatestatus();
 | 
			
		||||
	else if (ev->state == PropertyDelete)
 | 
			
		||||
		return; /* ignore */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue