Add --time argument to automatically disappear
This commit is contained in:
parent
ac32252983
commit
8c89495736
3 changed files with 44 additions and 4 deletions
1
state.h
1
state.h
|
@ -56,6 +56,7 @@ struct user_request {
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
int padding;
|
int padding;
|
||||||
|
int time;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct wayland_state {
|
struct wayland_state {
|
||||||
|
|
37
wayland.c
37
wayland.c
|
@ -54,6 +54,7 @@
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <cairo/cairo.h>
|
#include <cairo/cairo.h>
|
||||||
#include <pango/pangocairo.h>
|
#include <pango/pangocairo.h>
|
||||||
|
#include <poll.h>
|
||||||
|
|
||||||
#include "wlr-layer-shell-protocol.h"
|
#include "wlr-layer-shell-protocol.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
@ -206,6 +207,14 @@ static const struct wl_registry_listener wl_registry_listener = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define NSEC_PER_MSEC (1000 * 1000)
|
||||||
|
|
||||||
|
long int now_milliseconds() {
|
||||||
|
struct timespec now = {0, 0};
|
||||||
|
clock_gettime(CLOCK_MONOTONIC, &now);
|
||||||
|
return (now.tv_sec * 1000) + (now.tv_nsec / NSEC_PER_MSEC);
|
||||||
|
}
|
||||||
|
|
||||||
void wlo_wl_main(struct client_state *state) {
|
void wlo_wl_main(struct client_state *state) {
|
||||||
state->wl_state.wl_display = wl_display_connect(NULL);
|
state->wl_state.wl_display = wl_display_connect(NULL);
|
||||||
if (!state->wl_state.wl_display) {
|
if (!state->wl_state.wl_display) {
|
||||||
|
@ -235,7 +244,31 @@ void wlo_wl_main(struct client_state *state) {
|
||||||
|
|
||||||
wl_surface_commit(state->wl_state.wl_surface);
|
wl_surface_commit(state->wl_state.wl_surface);
|
||||||
|
|
||||||
while (wl_display_dispatch(state->wl_state.wl_display) && state->wl_state.wl_surface != NULL) {
|
if (state->user_request.time >= 0) {
|
||||||
/* This space deliberately left blank */
|
struct pollfd pollfd = {
|
||||||
|
.fd = wl_display_get_fd(state->wl_state.wl_display),
|
||||||
|
.events = POLLIN,
|
||||||
|
.revents = 0
|
||||||
|
};
|
||||||
|
|
||||||
|
long int now = now_milliseconds();
|
||||||
|
long int end = now + state->user_request.time;
|
||||||
|
while (now < end && state->wl_state.wl_surface != NULL) {
|
||||||
|
wl_display_flush(state->wl_state.wl_display);
|
||||||
|
int changed_fds = poll(&pollfd, 1, (int)(end - now));
|
||||||
|
if (changed_fds == -1 || (pollfd.revents & (POLLERR | POLLHUP))) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (pollfd.revents & POLLIN) {
|
||||||
|
if (wl_display_dispatch(state->wl_state.wl_display) == -1) {
|
||||||
|
state->wl_state.wl_surface = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
now = now_milliseconds();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
while (wl_display_dispatch(state->wl_state.wl_display) != -1 && state->wl_state.wl_surface != NULL) {
|
||||||
|
/* This space deliberately left blank */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
10
wl-overlay.c
10
wl-overlay.c
|
@ -34,6 +34,7 @@
|
||||||
#define DEFAULT_FONT "Fira Sans 17"
|
#define DEFAULT_FONT "Fira Sans 17"
|
||||||
#define DEFAULT_BACKDROP_COLOR \
|
#define DEFAULT_BACKDROP_COLOR \
|
||||||
((struct color_argb){0.85, 0x11 / 255.0, 0x11 / 255.0, 0x11 / 255.0})
|
((struct color_argb){0.85, 0x11 / 255.0, 0x11 / 255.0, 0x11 / 255.0})
|
||||||
|
#define DEFAULT_TIME -1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -79,6 +80,7 @@ print_usage()
|
||||||
" --width=<int> \n"
|
" --width=<int> \n"
|
||||||
" --height=<int> Set width and height (default %d×%d)\n"
|
" --height=<int> Set width and height (default %d×%d)\n"
|
||||||
" --padding=<int> Set padding around image and text (default %d)\n"
|
" --padding=<int> Set padding around image and text (default %d)\n"
|
||||||
|
" --time=<int> Make overlay disappear after this amount of milliseconds, or -1 to never disappear (default %d)\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Copyright information:\n"
|
"Copyright information:\n"
|
||||||
" This software is © 2022 Midgard, released under GPLv3+\n"
|
" This software is © 2022 Midgard, released under GPLv3+\n"
|
||||||
|
@ -86,7 +88,8 @@ print_usage()
|
||||||
" Call wl-overlay --copyright for more information\n",
|
" Call wl-overlay --copyright for more information\n",
|
||||||
DEFAULT_BORDER_RADIUS,
|
DEFAULT_BORDER_RADIUS,
|
||||||
DEFAULT_WIDTH, DEFAULT_HEIGHT,
|
DEFAULT_WIDTH, DEFAULT_HEIGHT,
|
||||||
DEFAULT_PADDING);
|
DEFAULT_PADDING,
|
||||||
|
DEFAULT_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -144,6 +147,7 @@ main(int argc, char *argv[])
|
||||||
state.user_request.width = DEFAULT_WIDTH;
|
state.user_request.width = DEFAULT_WIDTH;
|
||||||
state.user_request.height = DEFAULT_HEIGHT;
|
state.user_request.height = DEFAULT_HEIGHT;
|
||||||
state.user_request.padding = DEFAULT_PADDING;
|
state.user_request.padding = DEFAULT_PADDING;
|
||||||
|
state.user_request.time = DEFAULT_TIME;
|
||||||
|
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
|
@ -160,7 +164,8 @@ main(int argc, char *argv[])
|
||||||
{"width", required_argument, 0, 0 },
|
{"width", required_argument, 0, 0 },
|
||||||
{"height", required_argument, 0, 0 },
|
{"height", required_argument, 0, 0 },
|
||||||
{"padding", required_argument, 0, 0 },
|
{"padding", required_argument, 0, 0 },
|
||||||
{0, 0, 0, 0 }
|
{"time", required_argument, 0, 0 },
|
||||||
|
{0, required_argument, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
c = getopt_long(argc, argv, "h", long_options, &option_index);
|
c = getopt_long(argc, argv, "h", long_options, &option_index);
|
||||||
|
@ -178,6 +183,7 @@ main(int argc, char *argv[])
|
||||||
case 7: state.user_request.width = atoi(optarg); break;
|
case 7: state.user_request.width = atoi(optarg); break;
|
||||||
case 8: state.user_request.height = atoi(optarg); break;
|
case 8: state.user_request.height = atoi(optarg); break;
|
||||||
case 9: state.user_request.padding = atoi(optarg); break;
|
case 9: state.user_request.padding = atoi(optarg); break;
|
||||||
|
case 10: state.user_request.time = atoi(optarg); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue