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) { #if SCRATCHPADS_PATCH view(&((Arg){.ui = ~SPTAGMASK})); #else view(&((Arg){.ui = ~0})); #endif // SCRATCHPADS_PATCH } 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) { #if SCRATCHPADS_PATCH tag(&((Arg){.ui = ~SPTAGMASK})); #else tag(&((Arg){.ui = ~0})); #endif // SCRATCHPADS_PATCH } 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) #if IPC_PATCH sscanf(fsignal + len_indicator + n, "%li", &(arg.i)); #else sscanf(fsignal + len_indicator + n, "%i", &(arg.i)); #endif // IPC_PATCH else if (strncmp(param, "ui", n - len_str_sig) == 0) #if IPC_PATCH sscanf(fsignal + len_indicator + n, "%lu", &(arg.ui)); #else sscanf(fsignal + len_indicator + n, "%u", &(arg.ui)); #endif // IPC_PATCH 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; }