mirror of
https://github.com/mintycube/dwm.git
synced 2024-10-22 14:05:45 +02:00
113 lines
2.7 KiB
C
113 lines
2.7 KiB
C
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)
|
|
{
|
|
view(&((Arg){.ui = ~0}));
|
|
}
|
|
|
|
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)
|
|
{
|
|
tag(&((Arg){.ui = ~0}));
|
|
}
|
|
|
|
/* signal definitions */
|
|
/* signum must be greater than 0 */
|
|
/* trigger signals using `xsetroot -name "fsignal:<signame> [<type> <value>]"` */
|
|
static Signal signals[] = {
|
|
/* signum function */
|
|
{ "focusstack", focusstack },
|
|
{ "setmfact", setmfact },
|
|
{ "togglebar", togglebar },
|
|
{ "incnmaster", incnmaster },
|
|
{ "togglefloating", togglefloating },
|
|
{ "focusmon", focusmon },
|
|
{ "tagmon", tagmon },
|
|
{ "zoom", zoom },
|
|
{ "view", view },
|
|
{ "viewall", viewallex },
|
|
{ "viewex", viewex },
|
|
{ "toggleview", view },
|
|
{ "toggleviewex", toggleviewex },
|
|
{ "tag", tag },
|
|
{ "tagall", tagallex },
|
|
{ "tagex", tagex },
|
|
{ "toggletag", tag },
|
|
{ "toggletagex", toggletagex },
|
|
{ "killclient", killclient },
|
|
{ "quit", quit },
|
|
{ "setlayout", setlayout },
|
|
{ "setlayoutex", setlayoutex },
|
|
};
|
|
|
|
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)
|
|
sscanf(fsignal + len_indicator + n, "%i", &(arg.i));
|
|
else if (strncmp(param, "ui", n - len_str_sig) == 0)
|
|
sscanf(fsignal + len_indicator + n, "%u", &(arg.ui));
|
|
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;
|
|
} |