summaryrefslogtreecommitdiff
path: root/systray.py
diff options
context:
space:
mode:
authorJinkun Jang <jinkun.jang@samsung.com>2013-03-13 01:42:35 +0900
committerJinkun Jang <jinkun.jang@samsung.com>2013-03-13 01:42:35 +0900
commit72835b3d805ac6c7cdaac7d3aff107567e938314 (patch)
tree0f2a04dc3d0672c0960a62804c6e7758673e393c /systray.py
parenteb5e5ee9adb02776056d1b4494f66150a2fc45f1 (diff)
downloadhplip-72835b3d805ac6c7cdaac7d3aff107567e938314.tar.gz
hplip-72835b3d805ac6c7cdaac7d3aff107567e938314.tar.bz2
hplip-72835b3d805ac6c7cdaac7d3aff107567e938314.zip
Tizen 2.1 base
Diffstat (limited to 'systray.py')
-rw-r--r--systray.py145
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)