#!/usr/bin/python2 # vim: tabstop=8 expandtab shiftwidth=5 softtabstop=4 """ modified from code from the starcal2 project copyright Saeed Rasooli License: GPL """ import logging import platform import sys from subprocess import Popen, PIPE logger = logging.getLogger(__name__) from leap.base.constants import APP_NAME from leap.baseapp.dialogs import ErrorDialog get_whitelist = lambda: eval( Popen(['gsettings', 'get', 'com.canonical.Unity.Panel', 'systray-whitelist'], stdout=PIPE).communicate()[0]) set_whitelist = lambda ls: Popen( ['gsettings', 'set', 'com.canonical.Unity.Panel', 'systray-whitelist', repr(ls)]) def add_to_whitelist(): ls = get_whitelist() if not APP_NAME in ls: ls.append(APP_NAME) set_whitelist(ls) def remove_from_whitelist(): ls = get_whitelist() if APP_NAME in ls: ls.remove(APP_NAME) set_whitelist(ls) def is_unity_running(): #XXX use psutil instead (output, error) = Popen( 'ps aux | grep [u]nity-panel-service', stdout=PIPE, shell=True).communicate() output = bool(str(output)) if not output: (output, error) = Popen( 'ps aux | grep [u]nity-2d-panel', stdout=PIPE, shell=True).communicate() output = bool(str(output)) return output def need_to_add(): if is_unity_running(): wlist = get_whitelist() if not (APP_NAME in wlist or 'all' in wlist): logger.debug('need to add') return True return False def add_and_restart(): add_to_whitelist() Popen('LANG=en_US.UTF-8 unity', shell=True) MSG = ("Seems that you are using a Unity desktop " "and %s is not allowed to use Tray icon. " "Press OK to add %s to Unity's white list " "and then restart Unity" % (APP_NAME, APP_NAME)) def do_check(): if platform.system() == "Linux" and need_to_add(): dialog = ErrorDialog() dialog.confirmMessage( MSG, "add to systray?", add_and_restart) if __name__ == '__main__': if len(sys.argv) > 1: cmd = sys.argv[1] if cmd == 'add': add_to_whitelist() elif cmd == 'rm': remove_from_whitelist() elif cmd == 'print': print get_whitelist() elif cmd == "check": from PyQt4.QtGui import QApplication app = QApplication(sys.argv) do_check()