85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			85 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
void
 | 
						|
setlayoutex(const Arg *arg)
 | 
						|
{
 | 
						|
	setlayout(&((Arg) { .v = &layouts[arg->i] }));
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
viewex(const Arg *arg)
 | 
						|
{
 | 
						|
	view(&((Arg) { .ui = 1 << arg->ui }));
 | 
						|
}
 | 
						|
 | 
						|
void
 | 
						|
viewallex(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
 | 
						|
tagallex(const Arg *arg)
 | 
						|
{
 | 
						|
	tag(&((Arg){.ui = ~0}));
 | 
						|
}
 | 
						|
 | 
						|
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;
 | 
						|
}
 |