diff --git a/ladi-control-center b/ladi-control-center index aece6bf..385293c 100755 --- a/ladi-control-center +++ b/ladi-control-center @@ -22,7 +22,6 @@ import os import sys -import signal import gettext import argparse @@ -35,6 +34,7 @@ from laditools import LadishProxy from laditools import LadishStatusType from laditools import LadishProxyError from laditools import JackConfigProxy +from laditools import LadiApp from gi.repository import Gtk from gi.repository import Gdk @@ -42,9 +42,6 @@ from gi.repository import GObject from laditools.gtk import find_data_file -sig_handler = signal.getsignal(signal.SIGTERM) -signal.signal(signal.SIGINT, sig_handler) - tooltips_active = True (COLUMN_NAME, @@ -637,53 +634,81 @@ class jack_internal_params_configure_command(jack_params_configure_command): def get_description(self): return _('JACK "%s"') % self.name -def show_panels(*args, **kwargs): - if not 'modules' in kwargs: - return None - mods = kwargs['modules'] - window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL) - vbox = Gtk.VBox() - hbox = Gtk.HBox() - notebook = Gtk.Notebook() +class LadiControlCenter(LadiApp): - vbox.pack_start(hbox, True, True, 12) - hbox.pack_start(notebook, True, True, 2) - window.set_title("LADI Settings") - window.set_icon_name('preferences-system') - window.set_resizable(True) - notebook.set_tab_pos(Gtk.PositionType.LEFT) + _appname = 'ladi-control-center' + _appname_long = _("LADI Control Center") + _appid = 'org.linuxaudio.ladi.controlcenter' - if 'select' in kwargs: - selected = kwargs['select'] - else: - selected = None + def quit(self, *args, **kwargs): + self.window.destroy() + Gtk.main_quit() - page_count = 0 + @property + def modules(self): return self._modules - for mod in mods: - treeview = mods[mod].run({}) - container = Gtk.ScrolledWindow() - container.set_min_content_width(400) - container.set_min_content_height(400) - container.set_policy(hscrollbar_policy=Gtk.PolicyType.AUTOMATIC, - vscrollbar_policy=Gtk.PolicyType.AUTOMATIC) - container.add(treeview) - container.show_all() - #vbox.show_all() - try: - tab_label = mods[mod].get_window_title() - except: - tab_label = mods[mod].get_description() - notebook.append_page(container, Gtk.Label(tab_label)) - if selected and selected == mod: - notebook.set_current_page(page_count) - page_count += 1 + def __init__(self): - window.add(vbox) - - window.show_all() - window.connect('destroy', Gtk.main_quit) - Gtk.main() + LadiApp.__init__(self) + + # Init modules list + modules = {'engine' : jack_engine_params_configure_command(), + 'params' : jack_driver_params_configure_command()} + for internal in jack.read_container(['internals']): + modules[str(internal)] = jack_internal_params_configure_command(internal) + self._modules = modules + + def _activate(self, **kwargs): + + if 'select' in kwargs: + selected = kwargs['select'] + else: + selected = None + + # Init UI + self.window = window = Gtk.Window.new(Gtk.WindowType.TOPLEVEL) + vbox = Gtk.VBox() + hbox = Gtk.HBox() + notebook = Gtk.Notebook() + + vbox.pack_start(hbox, True, True, 12) + hbox.pack_start(notebook, True, True, 2) + window.set_title("LADI Settings") + window.set_icon_name('preferences-system') + window.set_resizable(True) + notebook.set_tab_pos(Gtk.PositionType.LEFT) + + page_count = 0 + + modules = self.modules + for mod in modules: + treeview = modules[mod].run({}) + container = Gtk.ScrolledWindow() + container.set_min_content_width(400) + container.set_min_content_height(400) + container.set_policy(hscrollbar_policy=Gtk.PolicyType.AUTOMATIC, + vscrollbar_policy=Gtk.PolicyType.AUTOMATIC) + container.add(treeview) + container.show_all() + #vbox.show_all() + try: + tab_label = modules[mod].get_window_title() + except: + tab_label = modules[mod].get_description() + notebook.append_page(container, Gtk.Label(tab_label)) + if selected and selected == mod: + notebook.set_current_page(page_count) + page_count += 1 + + window.add(vbox) + window.connect('destroy', self.quit) + + self.connect_signals_quit() + + def run(self, **kwargs): + self._activate(**kwargs) + self.window.show_all() + Gtk.main() if __name__ == "__main__": global jack @@ -695,22 +720,29 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description=_('Convenient graphical interface for configuring JACK'), epilog=_('This program is part of the LADITools suite.')) - parser.add_argument('-m', '--module', nargs=1, metavar='MODULE', help=_('select the module to configure')) - parser.add_argument('-l', '--list-modules', action='store_true', help=_('list available modules')) - parser.add_argument('--version', action='version', version="%(prog)s " + get_version_string()) + parser.add_argument('-m', + '--module', + nargs=1, + metavar='MODULE', + help=_('select the module to configure')) + parser.add_argument('-l', + '--list-modules', + action='store_true', + help=_('list available modules')) + parser.add_argument('--version', + action='version', + version="%(prog)s " + get_version_string()) options = parser.parse_args() - modules = {'engine' : jack_engine_params_configure_command(), - 'params' : jack_driver_params_configure_command()} - for internal in jack.read_container(['internals']): - modules[str(internal)] = jack_internal_params_configure_command(internal) + app = LadiControlCenter() if options.list_modules and options.module: sys.stderr.write(_("Conflicting options, type %s --help for a list of options.") % sys.argv[0] + '\n') sys.stderr.flush() sys.exit(2) + modules = app.modules if options.list_modules: sys.stderr.write(_("Available modules: ")) sys.stderr.write(' '.join(modules) + '\n') @@ -722,8 +754,8 @@ if __name__ == "__main__": sys.stderr.flush() sys.exit(2) else: - show_panels(modules=modules, select=module) + app.run(select=module) else: - show_panels(modules=modules) + app.run() sys.exit(0) diff --git a/ladi-player b/ladi-player index 5ebe933..5f3dcc4 100755 --- a/ladi-player +++ b/ladi-player @@ -19,7 +19,6 @@ import os import sys import time -import signal import gettext import argparse @@ -308,8 +307,7 @@ class LadiPlayer(LadiManagerGtk, LadiApp): LadiManagerGtk.__init__(self, autostart) # Handle signals - signal.signal(signal.SIGTERM, self.quit) - signal.signal(signal.SIGINT, self.quit) + self.connect_signals_quit() # Build the UI builder = Gtk.Builder() diff --git a/ladi-system-log b/ladi-system-log index 886835a..c90aa7f 100755 --- a/ladi-system-log +++ b/ladi-system-log @@ -24,7 +24,6 @@ import sys import signal from subprocess import Popen, PIPE import pty -from signal import SIGTERM import termios import tty import gettext @@ -106,9 +105,7 @@ class LadiSystemLog(LadiApp): self.global_config = LadiConfiguration (self.appname, self._default_config) self.param_dict = self.global_config.get_config_section (self.appname) - # Handle signals - signal.signal(signal.SIGTERM, self.quit) - signal.signal(signal.SIGINT, self.quit) + self.connect_signals_quit() for log in self.log_files[:]: log['logfile_path'] = self.param_dict[log['config_name']] diff --git a/ladi-system-tray b/ladi-system-tray index 597d282..62f5e6c 100755 --- a/ladi-system-tray +++ b/ladi-system-tray @@ -20,13 +20,9 @@ import os import sys -import signal import gettext import argparse -sig_handler = signal.getsignal(signal.SIGTERM) -signal.signal(signal.SIGINT, sig_handler) - from laditools import _gettext_domain gettext.install(_gettext_domain) @@ -89,6 +85,8 @@ class LadiStatusIcon (LadiMenu, LadiApp): LadiMenu.__init__(self, autostart, quit = self.quit) + LadiApp.__init__(self) + self.connect_signals_quit() def menu_activate(self, status_icon, button, activate_time, user_data=None): menu = self.create_menu() diff --git a/laditools/application.py b/laditools/application.py index 3ee4758..fa2092a 100644 --- a/laditools/application.py +++ b/laditools/application.py @@ -28,5 +28,16 @@ class LadiApp(object): @property def appid(self): return self._appid + def connect_signals_quit(self, signals=[], sig_handler=None): + if not signals: + signals = [signal.SIGTERM, + signal.SIGINT] + if not sig_handler: + sig_handler = self.quit + + for sig in signals: + signal.signal(sig, sig_handler) + signal.signal(sig, sig_handler) + def run(self): raise NotImplementedError def quit(self): raise NotImplementedError