dwm

Kris's build of dwm
git clone git clone https://git.krisyotam.com/krisyotam/dwm.git
Log | Files | Refs | README | LICENSE

fsignal.c (1096B)


      1 int
      2 fake_signal(void)
      3 {
      4 	char fsignal[256];
      5 	char indicator[9] = "fsignal:";
      6 	char str_signum[16];
      7 	int i, v, signum;
      8 	size_t len_fsignal, len_indicator = strlen(indicator);
      9 
     10 	// Get root name property
     11 	if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) {
     12 		len_fsignal = strlen(fsignal);
     13 
     14 		// Check if this is indeed a fake signal
     15 		if (len_indicator > len_fsignal ? 0 : strncmp(indicator, fsignal, len_indicator) == 0) {
     16 			memcpy(str_signum, &fsignal[len_indicator], len_fsignal - len_indicator);
     17 			str_signum[len_fsignal - len_indicator] = '\0';
     18 
     19 			// Convert string value into managable integer
     20 			for (i = signum = 0; i < strlen(str_signum); i++) {
     21 				v = str_signum[i] - '0';
     22 				if (v >= 0 && v <= 9) {
     23 					signum = signum * 10 + v;
     24 				}
     25 			}
     26 
     27 			// Check if a signal was found, and if so handle it
     28 			if (signum)
     29 				for (i = 0; i < LENGTH(signals); i++)
     30 					if (signum == signals[i].signum && signals[i].func)
     31 						signals[i].func(&(signals[i].arg));
     32 
     33 			// A fake signal was sent
     34 			return 1;
     35 		}
     36 	}
     37 
     38 	// No fake signal was sent, so proceed with update
     39 	return 0;
     40 }
     41