You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.2 KiB
101 lines
2.2 KiB
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; |
|
} |
|
|
|
|