diff options
author | Jinkun Jang <jinkun.jang@samsung.com> | 2013-03-13 01:42:35 +0900 |
---|---|---|
committer | Jinkun Jang <jinkun.jang@samsung.com> | 2013-03-13 01:42:35 +0900 |
commit | 72835b3d805ac6c7cdaac7d3aff107567e938314 (patch) | |
tree | 0f2a04dc3d0672c0960a62804c6e7758673e393c /systray.py | |
parent | eb5e5ee9adb02776056d1b4494f66150a2fc45f1 (diff) | |
download | hplip-72835b3d805ac6c7cdaac7d3aff107567e938314.tar.gz hplip-72835b3d805ac6c7cdaac7d3aff107567e938314.tar.bz2 hplip-72835b3d805ac6c7cdaac7d3aff107567e938314.zip |
Tizen 2.1 base
Diffstat (limited to 'systray.py')
-rw-r--r-- | systray.py | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/systray.py b/systray.py new file mode 100644 index 0000000..52481a1 --- /dev/null +++ b/systray.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# (c) Copyright 2003-2007 Hewlett-Packard Development Company, L.P. +# +# 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 +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# Author: Don Welch + +__version__ = '2.0' +__mod__ = 'hp-systray' +__title__ = 'System Tray Status Service' +__doc__ = "" + +# StdLib +import sys +import os +import getopt +import signal + +# Local +from base.g import * +from base import utils, module +from prnt import cups + + + +if __name__ == '__main__': + + # Create a new session ID for the tray. This disassociates the + # tray from the controlling terminal so that it cannot receive + # keyboard interrupts. + # + # Only do this if we aren't already a session leader. This test + # only succeeds if we are executed from hp-toolbox. + if os.getpgid(os.getpid()) != os.getpid(): + os.setsid() + + mod = module.Module(__mod__, __title__, __version__, __doc__, None, + (GUI_MODE,), (UI_TOOLKIT_QT4, UI_TOOLKIT_QT3)) + + mod.setUsage(module.USAGE_FLAG_NONE, + extra_options=[("Startup even if no hplip CUPS queues are present:", "-x or --force-startup", "option", False)]) + + opts, device_uri, printer_name, mode, ui_toolkit, lang = \ + mod.parseStdOpts('x', ['force-startup'], False) + + force_startup = False + for o, a in opts: + if o in ('-x', '--force-startup'): + force_startup = True + + if os.getuid() == 0: + log.error("hp-systray cannot be run as root. Exiting.") + sys.exit(1) + + if ui_toolkit == 'qt3': + if not utils.canEnterGUIMode(): + log.error("%s requires Qt3 GUI and DBus support. Exiting." % __mod__) + sys.exit(1) + + else: + if not utils.canEnterGUIMode4(): + log.error("%s requires Qt4 GUI and DBus support. Exiting." % __mod__) + sys.exit(1) + + if not force_startup: + # Check for any hp: or hpfax: queues. If none, exit + if not utils.any([p.device_uri for p in cups.getPrinters()], lambda x : x.startswith('hp')): + log.warn("No hp: or hpfax: devices found in any installed CUPS queue. Exiting.") + sys.exit(1) + + mod.lockInstance() + + r1, w1 = os.pipe() + log.debug("Creating pipe: hpssd (%d) ==> systemtray (%d)" % (w1, r1)) + + parent_pid = os.getpid() + child_pid1 = os.fork() + + if child_pid1: + # parent (UI) + os.close(w1) + + if ui_toolkit == 'qt3': + try: + import ui.systemtray as systray + except ImportError: + log.error("Unable to load Qt3 support. Is it installed?") + sys.exit(1) + + else: # qt4 + try: + import ui4.systemtray as systray + except ImportError: + log.error("Unable to load Qt4 support. Is it installed?") + mod.unlockInstance() + sys.exit(1) + + try: + systray.run(r1) + finally: + mod.unlockInstance() + + else: + # child (dbus & device i/o [qt4] or dbus [qt3]) + os.close(r1) + + if ui_toolkit == 'qt4': + r2, w2 = os.pipe() + r3, w3 = os.pipe() + + log.debug("Creating pipe: hpssd (%d) ==> hpdio (%d)" % (w2, r2)) + log.debug("Creating pipe: hpdio (%d) ==> hpssd (%d)" % (w3, r3)) + + child_pid2 = os.fork() + if child_pid2: + # parent (dbus) + os.close(r2) + + import hpssd + hpssd.run(w1, w2, r3) + + else: + # child (device i/o) + os.close(w2) + + import hpdio + hpdio.run(r2, w3) + + else: # qt3 + import hpssd + hpssd.run(w1) |