suggestion picker: a persistent layer to complement virtual keyboards like wvkbd
Diffstat (limited to 'main.c')
| -rw-r--r-- | main.c | 18 |
1 files changed, 14 insertions, 4 deletions
@@ -43,6 +43,7 @@ static int cur_x = -1, cur_y = -1; static bool cur_press = false; static struct kbd keyboard; static uint32_t height, normal_height, landscape_height; +static bool hidden = false; /* event handler prototypes */ static void wl_pointer_enter(void *data, struct wl_pointer *wl_pointer, @@ -346,6 +347,7 @@ hide(int sigint) { zwlr_layer_surface_v1_destroy(layer_surface); wl_surface_destroy(draw_surf.surf); layer_surface = NULL; + hidden = true; } void @@ -372,8 +374,17 @@ show(int sigint) { wl_display_roundtrip(display); drwsurf_flip(&draw_surf); + hidden = false; } +void toggle_visibility(int sigint) { + signal(SIGRTMIN, toggle_visibility); + if (hidden) { + show(sigint); + } else { + hide(sigint); + } +} void handle_input(FILE *fd, struct key *sugg, struct kbd *kb) { char *line; @@ -423,8 +434,6 @@ main(int argc, char **argv) { /* keyboard settings */ keyboard.scheme = scheme; - bool starthidden = false; - int i; for (i = 1; argv[i]; i++) { if ((!strcmp(argv[i], "-v")) || (!strcmp(argv[i], "--version"))) { @@ -456,7 +465,7 @@ main(int argc, char **argv) { fc_font_pattern = estrdup(argv[++i]); } else if ((!strcmp(argv[i], "-hidden")) || (!strcmp(argv[i], "--hidden"))) { - starthidden = true; + hidden = true; } else { fprintf(stderr, "Invalid argument: %s\n", argv[i]); usage(argv[0]); @@ -495,7 +504,7 @@ main(int argc, char **argv) { draw_ctx.font_description = pango_font_description_from_string(fc_font_pattern); - if (!starthidden) { + if (!hidden) { show(0); } else { signal(SIGUSR2, show); @@ -503,6 +512,7 @@ main(int argc, char **argv) { signal(SIGUSR1, hide); signal(SIGPIPE, pipewarn); + signal(SIGRTMIN, toggle_visibility); // We need a more complicated event loop than wayland's default. struct pollfd fds[2]; |