mirror of
https://codeberg.org/dnkl/yambar.git
synced 2025-06-22 02:05:40 +02:00
Implemented auto-hide functionality on Wayland
This commit is contained in:
parent
3e0083c9f2
commit
3dce815fe3
8 changed files with 54 additions and 9 deletions
17
main.c
17
main.c
|
@ -27,6 +27,7 @@
|
|||
#include "version.h"
|
||||
|
||||
static volatile sig_atomic_t aborted = 0;
|
||||
static volatile sig_atomic_t sigusr = 0;
|
||||
|
||||
static void
|
||||
signal_handler(int signo)
|
||||
|
@ -34,6 +35,12 @@ signal_handler(int signo)
|
|||
aborted = signo;
|
||||
}
|
||||
|
||||
static void
|
||||
sigusr_handler(int signo)
|
||||
{
|
||||
sigusr = signo;
|
||||
}
|
||||
|
||||
static char *
|
||||
get_config_path_user_config(void)
|
||||
{
|
||||
|
@ -295,12 +302,18 @@ main(int argc, char *const *argv)
|
|||
sigaction(SIGINT, &sa, NULL);
|
||||
sigaction(SIGTERM, &sa, NULL);
|
||||
|
||||
const struct sigaction sau = {.sa_handler = &sigusr_handler};
|
||||
sigaction(SIGUSR1, &sau, NULL);
|
||||
sigaction(SIGUSR2, &sau, NULL);
|
||||
|
||||
/* Block SIGINT (this is under the assumption that threads inherit
|
||||
* the signal mask */
|
||||
sigset_t signal_mask;
|
||||
sigemptyset(&signal_mask);
|
||||
sigaddset(&signal_mask, SIGINT);
|
||||
sigaddset(&signal_mask, SIGTERM);
|
||||
sigaddset(&signal_mask, SIGUSR1);
|
||||
sigaddset(&signal_mask, SIGUSR2);
|
||||
pthread_sigmask(SIG_BLOCK, &signal_mask, NULL);
|
||||
|
||||
int abort_fd = eventfd(0, EFD_CLOEXEC);
|
||||
|
@ -354,6 +367,10 @@ main(int argc, char *const *argv)
|
|||
struct pollfd fds[] = {{.fd = abort_fd, .events = POLLIN}};
|
||||
int r __attribute__((unused)) = poll(fds, sizeof(fds) / sizeof(fds[0]), -1);
|
||||
|
||||
if (sigusr) {
|
||||
bar->set_visible(bar, (sigusr == SIGUSR1));
|
||||
sigusr = 0;
|
||||
}
|
||||
if (fds[0].revents & (POLLIN | POLLHUP)) {
|
||||
/*
|
||||
* Either the bar aborted (triggering the abort_fd), or user
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue