diff options
Diffstat (limited to 'src/leap/baseapp/unitychecks.py')
-rw-r--r-- | src/leap/baseapp/unitychecks.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/leap/baseapp/unitychecks.py b/src/leap/baseapp/unitychecks.py new file mode 100644 index 00000000..72c9ee6f --- /dev/null +++ b/src/leap/baseapp/unitychecks.py @@ -0,0 +1,98 @@ +#!/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 + +logging.basicConfig() +logger = logging.getLogger(__name__) +logger.setLevel('DEBUG') + +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() |