summary refs log tree commit diff
path: root/main.c
diff options
context:
space:
mode:
authorZach DeCook <zachdecook@librem.one>2024-01-14 14:27:51 -0500
committerZach DeCook <zachdecook@librem.one>2024-01-14 14:27:51 -0500
commit180159140fd84b11fdfeecd3f95b21a696f2b9a2 (patch)
tree21ad5bb4e8ffe30c7eafc7c352b756afd6964bfc /main.c
parent8e6949d8a667852f38c14038cd87feb1ffb440a2 (diff)
downloadsuggpicker-180159140fd84b11fdfeecd3f95b21a696f2b9a2.tar.gz
hide/show/toggle: fix a few crashes (still broken)
Diffstat (limited to 'main.c')
-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);