|
|
- int
- fake_signal(void)
- {
- char fsignal[256];
- char indicator[9] = "fsignal:";
- char str_signum[16];
- int i, v, signum;
- size_t len_fsignal, len_indicator = strlen(indicator);
-
- // 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) {
- memcpy(str_signum, &fsignal[len_indicator], len_fsignal - len_indicator);
- str_signum[len_fsignal - len_indicator] = '\0';
-
- // Convert string value into managable integer
- for (i = signum = 0; i < strlen(str_signum); i++) {
- v = str_signum[i] - '0';
- if (v >= 0 && v <= 9) {
- signum = signum * 10 + v;
- }
- }
-
- // Check if a signal was found, and if so handle it
- if (signum)
- for (i = 0; i < LENGTH(signals); i++)
- if (signum == signals[i].signum && signals[i].func)
- signals[i].func(&(signals[i].arg));
-
- // A fake signal was sent
- return 1;
- }
- }
-
- // No fake signal was sent, so proceed with update
- return 0;
- }
|