klein-glotzi/pygui/main.py

55 lines
1.6 KiB
Python

import signal
# gi is GObject instrospection
import gi
# we need GStreamer 1.0 and Gtk 3.0
gi.require_version('Gst', '1.0')
gi.require_version('Gtk', '3.0')
# import everything we need for a Gtk Window
from gi.repository import Gtk, GObject, GLib
from gui.control_window import ControlWindow
# Signal handler to allow HUP, INT and TERM signal handling
def InitSignal(gui):
def signal_action(signal):
if signal is 1:
print("Caught signal SIGHUP(1)")
return
elif signal is 2:
print("Caught signal SIGINT(2)")
elif signal is 15:
print("Caught signal SIGTERM(15)")
gui.quit(None, None)
def idle_handler(*args):
GLib.idle_add(signal_action, priority=GLib.PRIORITY_HIGH)
def handler(*args):
signal_action(args[0])
def install_glib_handler(sig):
unix_signal_add = None
if hasattr(GLib, "unix_signal_add"):
unix_signal_add = GLib.unix_signal_add
elif hasattr(GLib, "unix_signal_add_full"):
unix_signal_add = GLib.unix_signal_add_full
if unix_signal_add:
unix_signal_add(GLib.PRIORITY_HIGH, sig, handler, sig)
else:
print("Can't install GLib signal handler, too old gi.")
SIGS = [getattr(signal, s, None) for s in "SIGINT SIGTERM SIGHUP".split()]
for sig in filter(None, SIGS):
signal.signal(sig, idle_handler)
GLib.idle_add(install_glib_handler, sig, priority=GLib.PRIORITY_HIGH)
if __name__ == "__main__":
GObject.threads_init()
InitSignal(ControlWindow())
Gtk.main()