Issue #45: Add option to not grab keyboard

This commit is contained in:
Jacob 2023-09-24 22:19:21 +02:00
parent cce7ae2e41
commit 3d9711c971
8 changed files with 41 additions and 3 deletions

View file

@ -376,6 +376,12 @@ in the config files.
`-nwm, --unmanaged`
: Don't spawn spmenu as a window manager controlled client/window (X11 only)
`-gk, --grab-keyboard`
: Grab keyboard on runtime
`-ngk, --no-grab-keyboard`
: Grab keyboard on runtime
`-cf, --config-file file`
: Set config file to load to file

View file

@ -21,6 +21,7 @@ spmenu = {
padding-horizontal = 0; // Outer horizontal padding (px)
width = 0; // Width when X and/or Y offset is set, 0 is the default (px)
managed = 0; // Allow your window manager to manage spmenu as a window (0/1)
grabkeyboard = 1; // Grab keyboard on runtime (0/1)
alpha = 1; // Enable alpha/transparency (0/1)
x = 0; // X position offset (px)
y = 0; // Y position offset (px)

View file

@ -405,6 +405,12 @@ Spawn spmenu as a window manager controlled client/window (X11 only)
Don\[cq]t spawn spmenu as a window manager controlled client/window (X11
only)
.TP
\f[V]-gk, --grab-keyboard\f[R]
Grab keyboard on runtime
.TP
\f[V]-ngk, --no-grab-keyboard\f[R]
Grab keyboard on runtime
.TP
\f[V]-cf, --config-file file\f[R]
Set config file to load to file
.TP

View file

@ -181,6 +181,10 @@ void readargs(int argc, char *argv[]) {
managed = 1;
} else if (!strcmp(argv[i], "-nwm") || (!strcmp(argv[i], "--unmanaged"))) { // don't display as managed wm window
managed = 0;
} else if (!strcmp(argv[i], "-gk") || (!strcmp(argv[i], "--grab-keyboard"))) { // grab keyboard
grabkeyboard = 1;
} else if (!strcmp(argv[i], "-ngk") || (!strcmp(argv[i], "--no-grab-keyboard"))) { // don't grab keyboard
grabkeyboard = 0;
} else if (!strcmp(argv[i], "-na") || (!strcmp(argv[i], "--no-alpha"))) { // disable alpha
alpha = 0;
} else if (!strcmp(argv[i], "-a") || (!strcmp(argv[i], "--alpha"))) { // alpha
@ -744,6 +748,19 @@ void usage(int status) {
fputs(
"spmenu -wm, --managed, --x11-client Spawn spmenu as a window manager controlled client/window (X11 only)\n"
"spmenu -nwm, --unmanaged Don't spawn spmenu as a window manager controlled client/window (X11 only)\n"
"spmenu -gk, --grab-keyboard Grab keyboard on runtime\n"
"spmenu -ngk, --no-grab-keyboard Don't grab keyboard on runtime\n"
"spmenu -cf, --config-file <file> Set config file to load to <file>\n"
"spmenu -lcfg, --load-config Load spmenu configuration (~/.config/spmenu/spmenu.conf)\n"
"spmenu -ncfg, --no-load-config Don't load spmenu configuration (~/.config/spmenu/spmenu.conf)\n"
"spmenu -bf, --bind-file <file> Exclusively load binds from <file>\n"
"spmenu -lbi, --load-binds Load spmenu binds (~/.config/spmenu/binds.conf)\n"
"spmenu -nlbi, --no-load-binds Don't load spmenu binds (~/.config/spmenu/binds.conf)\n"
"spmenu -tm, --theme <theme> Load theme <theme>\n"
"spmenu -ltm, --load-theme Load theme\n"
"spmenu -nltm, --no-load-theme Don't load theme\n"
"spmenu -x11, --x11 Run spmenu in X11 mode\n"
"spmenu -wl, --wayland Run spmenu in Wayland mode\n"
"spmenu -cf, --config-file <file> Set config file to load to <file>\n"
"spmenu -lcfg, --load-config Load spmenu configuration (~/.config/spmenu/spmenu.conf)\n"
"spmenu -ncfg, --no-load-config Don't load spmenu configuration (~/.config/spmenu/spmenu.conf)\n"

View file

@ -286,6 +286,7 @@ void conf_init(void) {
config_setting_lookup_int(conf, "width", &menuwidth); // spmenu.window.width
config_setting_lookup_int(conf, "border", &borderwidth); // spmenu.window.border
config_setting_lookup_int(conf, "managed", &managed); // spmenu.window.managed
config_setting_lookup_int(conf, "grabkeyboard", &grabkeyboard); // spmenu.window.grabkeyboard
config_setting_lookup_int(conf, "monitor", &mon); // spmenu.window.monitor
config_setting_lookup_int(conf, "alpha", &alpha); // spmenu.window.alpha

View file

@ -12,6 +12,7 @@ static int loadtheme = 1; /* Load theme (~/.config/spmenu/them
static int loadbinds = 1; /* Load keybind file (~/.config/spmenu/binds.conf) on runtime */
static int mon = -1; /* Monitor to run spmenu on */
static int managed = 0; /* Let your window manager manage spmenu? */
static int grabkeyboard = 1; /* Grab keyboard/general input */
/* Wayland options */
static int scrolldistance = 512; /* Distance to scroll for a scroll action to count */

View file

@ -51,7 +51,7 @@ void handle_wl(void) {
anchor_layer(&state, menuposition);
set_exclusive_zone(&state, -1);
set_keyboard(&state, 1);
set_keyboard(&state, grabkeyboard ? 1 : 0);
add_layer_listener(&state);
set_visible_layer(&state);

View file

@ -548,12 +548,18 @@ void handle(void) {
#endif
if (fast && !isatty(0)) {
if (grabkeyboard) {
grabkeyboard_x11();
}
readstdin();
} else {
readstdin();
if (grabkeyboard) {
grabkeyboard_x11();
}
}
set_mode();