summaryrefslogtreecommitdiff
path: root/src/leap/baseapp/unitychecks.py
diff options
context:
space:
mode:
authorkali <kali@leap.se>2012-09-12 08:50:31 +0900
committerkali <kali@leap.se>2012-09-12 08:50:31 +0900
commita7c77a931dadd6e4b94c00551d34fddff961e25b (patch)
tree42698f48d5a13b0e7bcf78c840390657b52a2ac0 /src/leap/baseapp/unitychecks.py
parent77f4686d43443d08f3b1bb1bb364d24dd127c8ce (diff)
parentddd11604a5ae376ba27f70c9eb9a6971e749b1f9 (diff)
Merge branch 'feature/unity-checks' into develop
Closes #340.
Diffstat (limited to 'src/leap/baseapp/unitychecks.py')
-rw-r--r--src/leap/baseapp/unitychecks.py98
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()