From d2b48791c8466d130dd2a4cdd6c3e032a52c666d Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Wed, 17 Dec 2025 02:42:44 +0900 Subject: [PATCH] handle signal --- milkwm/main.c | 8 ++++++++ milkwm/milkwm.h | 3 +++ milkwm/wm.c | 10 +++++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/milkwm/main.c b/milkwm/main.c index c61f9ca..7b02762 100644 --- a/milkwm/main.c +++ b/milkwm/main.c @@ -1,5 +1,11 @@ #include "milkwm.h" +void rehash(int sig) { + pthread_mutex_lock(&xmutex); + wm_rehash = 1; + pthread_mutex_unlock(&xmutex); +} + int main() { int st; @@ -8,5 +14,7 @@ int main() { if((st = init_x()) != 0) return st; + signal(SIGHUP, rehash); + loop_wm(); } diff --git a/milkwm/milkwm.h b/milkwm/milkwm.h index 655d786..86be72d 100644 --- a/milkwm/milkwm.h +++ b/milkwm/milkwm.h @@ -18,6 +18,7 @@ #include #include #include +#include #define TitleBarHeight 16 #define Gap 1 @@ -30,9 +31,11 @@ extern Display* xdisplay; int init_x(void); void loop_x(void); void set_focus_x(MwWidget widget); +void set_background_x(void); /* wm.c */ extern MwWidget root; +extern int wm_rehash; void loop_wm(void); MwWidget wm_frame(int w, int h); diff --git a/milkwm/wm.c b/milkwm/wm.c index 5b55270..b3c2a5a 100644 --- a/milkwm/wm.c +++ b/milkwm/wm.c @@ -3,7 +3,8 @@ #include -MwWidget root = NULL; +MwWidget root = NULL; +int wm_rehash = 0; typedef struct wmframe { MwWidget inside; @@ -42,6 +43,13 @@ void loop_wm(void) { int s = 0; pthread_mutex_lock(&xmutex); + if(wm_rehash) { + wm_config_init(); + wm_config_read(); + set_background_x(); + wm_rehash = 0; + } + while(MwPending(root)) { if((s = MwStep(root)) != 0) break; }