suggestion picker: a persistent layer to complement virtual keyboards like wvkbd
hide/show/toggle: fix a few crashes (still broken)
Zach DeCook 2024-01-14
parent 8e6949d · commit 1801591
-rw-r--r--main.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/main.c b/main.c
index e18b092..124dddb 100644
--- a/main.c
+++ b/main.c
@@ -339,6 +339,7 @@ usage(char *argv0) {
void
hide(int sigint) {
+ if(keyboard.debug) fprintf(stderr, "hiding keyboard\n");
signal(SIGUSR1, hide);
if (!layer_surface) {
return;
@@ -348,10 +349,13 @@ hide(int sigint) {
wl_surface_destroy(draw_surf.surf);
layer_surface = NULL;
hidden = true;
+ // dispatch to make it disappear
+ wl_display_dispatch(display);
}
void
show(int sigint) {
+ if(keyboard.debug) fprintf(stderr, "showing keyboard\n");
signal(SIGUSR2, show);
if (layer_surface) {
return;
@@ -375,9 +379,12 @@ show(int sigint) {
wl_display_roundtrip(display);
drwsurf_flip(&draw_surf);
hidden = false;
+ // Dispatch so that bar appears (and can take events).
+ wl_display_dispatch(display);
}
void toggle_visibility(int sigint) {
+ if(keyboard.debug) fprintf(stderr, "toggling visibility\n");
signal(SIGRTMIN, toggle_visibility);
if (hidden) {
show(sigint);
@@ -442,11 +449,6 @@ main(int argc, char **argv) {
} else if ((!strcmp(argv[i], "-h")) || (!strcmp(argv[i], "--help"))) {
usage(argv[0]);
exit(0);
- } else if (!strcmp(argv[i], "-l")) {
- if (i >= argc - 1) {
- usage(argv[0]);
- exit(1);
- }
} else if (!strcmp(argv[i], "-H")) {
if (i >= argc - 1) {
usage(argv[0]);
@@ -520,8 +522,6 @@ main(int argc, char **argv) {
fds[0].events = POLLIN;
fds[1].fd = wl_display_get_fd(display);
fds[1].events = POLLIN;
- // Initial dispatch so that bar appears (and can take events).
- wl_display_dispatch(display);
while (run_display) {
while(layer_surface && poll(fds, 2, -1) != -1) {
if (fds[0].revents & POLLIN) {
@@ -532,7 +532,9 @@ main(int argc, char **argv) {
}
wl_display_flush(display);
}
- wl_display_roundtrip(display);
+ if (layer_surface){
+ wl_display_roundtrip(display);
+ }
while (run_display && !layer_surface) {
// Hidden
sleep(1);