aboutsummaryrefslogtreecommitdiff
path: root/src/dillo.cc
diff options
context:
space:
mode:
authorRodrigo Arias Mallo <rodarima@gmail.com>2024-10-25 18:47:07 +0200
committerRodrigo Arias Mallo <rodarima@gmail.com>2024-10-28 19:04:33 +0100
commit27f88f0e81fd66b59e52af7ec2a725d8bfd4351c (patch)
tree71ad549fd6a8ffb1b202ce95e3f60dcdd49469fd /src/dillo.cc
parent6d5b3ee329b61adfa144c4f7f9d60bbe10e04071 (diff)
Reload the current page on SIGUSR1 signal
Reloads the current page on all windows when the SIGUSR1 is received. This is useful to update the page when it is being edited. Fixes: https://github.com/dillo-browser/dillo/issues/255
Diffstat (limited to 'src/dillo.cc')
-rw-r--r--src/dillo.cc23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/dillo.cc b/src/dillo.cc
index e9fbfdd7..e49dc1a3 100644
--- a/src/dillo.cc
+++ b/src/dillo.cc
@@ -2,6 +2,7 @@
* Dillo web browser
*
* Copyright 1999-2007 Jorge Arellano Cid <jcid@dillo.org>
+ * Copyright 2024 Rodrigo Arias Mallo <rodarima@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -65,6 +66,8 @@
#include "dw/textblock.hh"
#include "dw/table.hh"
+static volatile sig_atomic_t sig_reload = 0;
+
/**
* Command line options structure
*/
@@ -145,6 +148,11 @@ static void raw_sigchld2(int signum)
}
}
+static void handler_usr1(int signum)
+{
+ sig_reload = 1;
+}
+
/**
* Establish SIGCHLD handler
*/
@@ -161,6 +169,11 @@ static void est_sigchld(void)
perror("sigaction");
exit(1);
}
+
+ if (signal(SIGUSR1, handler_usr1) == SIG_ERR) {
+ perror("signal failed");
+ exit(1);
+ }
}
//----------------------------------------------------------------------------
@@ -580,7 +593,15 @@ int main(int argc, char **argv)
}
}
- Fl::run();
+ /* Don't use, as it can be free()'d */
+ bw = NULL;
+
+ while (Fl::wait() > 0) {
+ if (sig_reload) {
+ sig_reload = 0;
+ a_UIcmd_reload_all_active();
+ }
+ }
/*
* Memory deallocating routines