Integrate dmenu as a preloaded zero-lag DWM plugin (dmenu.so)
This commit is contained in:
+18
-2
@@ -1649,7 +1649,7 @@ host_spawn_plugin(const char *plugin_name, const char *arg)
|
||||
if (arg && strcmp(arg, "--preload") == 0) {
|
||||
if (is_plugin_daemon_alive(plugin_name))
|
||||
return;
|
||||
int stagger_ms = 600 + (preload_stagger_idx++ * 220);
|
||||
int stagger_ms = (strcmp(plugin_name, "dmenu") == 0) ? 150 : (600 + (preload_stagger_idx++ * 220));
|
||||
if (fork() == 0) {
|
||||
if (dpy)
|
||||
close(ConnectionNumber(dpy));
|
||||
@@ -1670,6 +1670,8 @@ host_spawn_plugin(const char *plugin_name, const char *arg)
|
||||
int len;
|
||||
if (strcmp(plugin_name, "xdrawer") == 0)
|
||||
len = snprintf(msg, sizeof(msg), "TOGGLE\n");
|
||||
else if (strcmp(plugin_name, "dmenu") == 0 && arg && strcmp(arg, "close") == 0)
|
||||
len = snprintf(msg, sizeof(msg), "CLOSE\n");
|
||||
else if (arg && arg[0])
|
||||
len = snprintf(msg, sizeof(msg), "OPEN %s\n", arg);
|
||||
else
|
||||
@@ -1843,6 +1845,8 @@ trigger_softkey_chord(long long now)
|
||||
kill(-last_menu_pgid, SIGKILL);
|
||||
last_menu_pgid = 0;
|
||||
}
|
||||
if (is_plugin_loaded("dmenu"))
|
||||
host_spawn_plugin("dmenu", "close");
|
||||
softkey_pending = 0;
|
||||
softkey_first_ms = 0;
|
||||
softkey_deadline_ms = 0;
|
||||
@@ -1868,6 +1872,10 @@ flush_pending_softkey(void)
|
||||
XUngrabKeyboard(dpy, CurrentTime);
|
||||
XFlush(dpy);
|
||||
if (pending == SOFTKEY_LEFT) {
|
||||
if (is_plugin_loaded("dmenu")) {
|
||||
host_spawn_plugin("dmenu", "sys");
|
||||
return;
|
||||
}
|
||||
const Arg syscmd = { .v = (const char*[]){ "sxmo_appmenu.sh", "sys", NULL } };
|
||||
last_menu_pgid = spawn_pgid(&syscmd);
|
||||
} else if (pending == SOFTKEY_RIGHT) {
|
||||
@@ -1875,6 +1883,10 @@ flush_pending_softkey(void)
|
||||
dispatch_plugin_idle_key(XF86XK_Back, 166, 0)) {
|
||||
return;
|
||||
}
|
||||
if (is_plugin_loaded("dmenu")) {
|
||||
host_spawn_plugin("dmenu", "ctx");
|
||||
return;
|
||||
}
|
||||
const Arg ctxcmd = { .v = (const char*[]){ "sxmo_appmenu.sh", NULL } };
|
||||
last_menu_pgid = spawn_pgid(&ctxcmd);
|
||||
}
|
||||
@@ -1953,9 +1965,13 @@ keypress(XEvent *e)
|
||||
|
||||
if (!selmon->sel && CLEANMASK(ev->state) == 0) {
|
||||
if (keysym == XK_Return) {
|
||||
const Arg entercmd = { .v = (const char*[]){ "sxmo_appmenu.sh", NULL } };
|
||||
XUngrabKeyboard(dpy, CurrentTime);
|
||||
XFlush(dpy);
|
||||
if (is_plugin_loaded("dmenu")) {
|
||||
host_spawn_plugin("dmenu", "sys");
|
||||
return;
|
||||
}
|
||||
const Arg entercmd = { .v = (const char*[]){ "sxmo_appmenu.sh", NULL } };
|
||||
spawn(&entercmd);
|
||||
return;
|
||||
} else if (keysym == XK_Left) {
|
||||
|
||||
Reference in New Issue
Block a user