def suspend_signal_handler(self, signo, frame):
if signo != signal.SIGUSR2:<EOL><INDENT>return<EOL><DEDENT>self.stopped = not self.stopped<EOL>if self.stopped:<EOL><INDENT>[m.suspend() for m in IntervalModule.managers.values()]<EOL><DEDENT>else:<EOL><INDENT>[m.resume() for m in IntervalModule.managers.values()]<EOL><DEDENT>
By default, i3bar sends SIGSTOP to all children when it is not visible (for example, the screen
sleeps or you enter full screen mode). This stops the i3pystatus process and all threads within it.
For some modules, this is not desirable. Thankfully, the i3bar protocol supports setting the "stop_signal"
and "cont_signal" key/value pairs in the header to allow sending a custom signal when these events occur.

Here we use SIGUSR2 for both "stop_signal" and "cont_signal" and maintain a toggle to determine whether
we have just been stopped or continued. When we have been stopped, notify the IntervalModule managers
that they should suspend any module that does not set the keep_alive flag to a truthy value, and when we
have been continued, notify the IntervalModule managers that they can resume execution of all modules.