suggestion picker: a persistent layer to complement virtual keyboards like wvkbd
-rw-r--r--main.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/main.c b/main.c
index 9a0d395..e18b092 100644
--- a/main.c
+++ b/main.c
@@ -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];