dwmc.c (2403B)
1 void 2 setlayoutex(const Arg *arg) 3 { 4 setlayout(&((Arg) { .v = &layouts[arg->i] })); 5 } 6 7 void 8 viewex(const Arg *arg) 9 { 10 view(&((Arg) { .ui = 1 << arg->ui })); 11 } 12 13 void 14 viewallex(const Arg *arg) 15 { 16 #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH 17 view(&((Arg){.ui = ~SPTAGMASK})); 18 #else 19 view(&((Arg){.ui = ~0})); 20 #endif // SCRATCHPADS_PATCH 21 } 22 23 void 24 toggleviewex(const Arg *arg) 25 { 26 toggleview(&((Arg) { .ui = 1 << arg->ui })); 27 } 28 29 void 30 tagex(const Arg *arg) 31 { 32 tag(&((Arg) { .ui = 1 << arg->ui })); 33 } 34 35 void 36 toggletagex(const Arg *arg) 37 { 38 toggletag(&((Arg) { .ui = 1 << arg->ui })); 39 } 40 41 void 42 tagallex(const Arg *arg) 43 { 44 #if SCRATCHPADS_PATCH && !RENAMED_SCRATCHPADS_PATCH 45 tag(&((Arg){.ui = ~SPTAGMASK})); 46 #else 47 tag(&((Arg){.ui = ~0})); 48 #endif // SCRATCHPADS_PATCH 49 } 50 51 int 52 fake_signal(void) 53 { 54 char fsignal[256]; 55 char indicator[9] = "fsignal:"; 56 char str_sig[50]; 57 char param[16]; 58 int i, len_str_sig, n, paramn; 59 size_t len_fsignal, len_indicator = strlen(indicator); 60 Arg arg; 61 62 // Get root name property 63 if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) { 64 len_fsignal = strlen(fsignal); 65 66 // Check if this is indeed a fake signal 67 if (len_indicator > len_fsignal ? 0 : strncmp(indicator, fsignal, len_indicator) == 0) { 68 paramn = sscanf(fsignal+len_indicator, "%s%n%s%n", str_sig, &len_str_sig, param, &n); 69 70 if (paramn == 1) arg = (Arg) {0}; 71 else if (paramn > 2) return 1; 72 else if (strncmp(param, "i", n - len_str_sig) == 0) 73 #if IPC_PATCH 74 sscanf(fsignal + len_indicator + n, "%li", &(arg.i)); 75 #else 76 sscanf(fsignal + len_indicator + n, "%i", &(arg.i)); 77 #endif // IPC_PATCH 78 else if (strncmp(param, "ui", n - len_str_sig) == 0) 79 #if IPC_PATCH 80 sscanf(fsignal + len_indicator + n, "%lu", &(arg.ui)); 81 #else 82 sscanf(fsignal + len_indicator + n, "%u", &(arg.ui)); 83 #endif // IPC_PATCH 84 else if (strncmp(param, "f", n - len_str_sig) == 0) 85 sscanf(fsignal + len_indicator + n, "%f", &(arg.f)); 86 else if (strncmp(param, "v", n - len_str_sig) == 0) 87 arg.v = &(fsignal[len_indicator + n + 1]); 88 else return 1; 89 90 // Check if a signal was found, and if so handle it 91 for (i = 0; i < LENGTH(signals); i++) 92 if (strncmp(str_sig, signals[i].sig, len_str_sig) == 0 && signals[i].func) 93 signals[i].func(&(arg)); 94 95 // A fake signal was sent 96 return 1; 97 } 98 } 99 100 // No fake signal was sent, so proceed with update 101 return 0; 102 } 103