diff options
-rwxr-xr-x | pkg/postmkvenv.sh | 4 | ||||
-rw-r--r-- | src/leap/app.py | 3 | ||||
-rw-r--r-- | src/leap/base/constants.py | 1 | ||||
-rw-r--r-- | src/leap/baseapp/dialogs.py | 11 | ||||
-rw-r--r-- | src/leap/baseapp/unitychecks.py | 98 |
5 files changed, 117 insertions, 0 deletions
diff --git a/pkg/postmkvenv.sh b/pkg/postmkvenv.sh index 99e364c0..efdbc2fb 100755 --- a/pkg/postmkvenv.sh +++ b/pkg/postmkvenv.sh @@ -1,8 +1,12 @@ #!/bin/bash # This hook is run after a new virtualenv is activated. # ~/.virtualenvs/postmkvirtualenv +# tested and working in debian # Symlinks PyQt4 from global installation into virtualenv site-packages +# XXX TODO: +# script fails in ubuntu, with path: /usr/lib/pymodules/python2.7/PyQt4 +# use import PyQt4; PyQt4.__path__ instead LIBS=( PyQt4 sip.so ) diff --git a/src/leap/app.py b/src/leap/app.py index 5849848c..322118c5 100644 --- a/src/leap/app.py +++ b/src/leap/app.py @@ -1,3 +1,4 @@ +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 import logging # This is only needed for Python v2 but is harmless for Python v3. import sip @@ -5,6 +6,7 @@ sip.setapi('QVariant', 2) from PyQt4.QtGui import (QApplication, QSystemTrayIcon, QMessageBox) from leap.baseapp.mainwindow import LeapWindow +from leap.baseapp import unitychecks def main(): @@ -45,6 +47,7 @@ def main(): logger.info('Starting app') app = QApplication(sys.argv) + unitychecks.do_check() if not QSystemTrayIcon.isSystemTrayAvailable(): QMessageBox.critical(None, "Systray", diff --git a/src/leap/base/constants.py b/src/leap/base/constants.py index 991a1dfe..0ec3e016 100644 --- a/src/leap/base/constants.py +++ b/src/leap/base/constants.py @@ -1,4 +1,5 @@ """constants to be used in base module""" +APP_NAME = "leap" # default provider placeholder # using `example.org` we make sure that this diff --git a/src/leap/baseapp/dialogs.py b/src/leap/baseapp/dialogs.py index d4acb09d..3cb539cf 100644 --- a/src/leap/baseapp/dialogs.py +++ b/src/leap/baseapp/dialogs.py @@ -1,3 +1,4 @@ +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 import logging from PyQt4.QtGui import (QDialog, QFrame, QPushButton, QLabel, QMessageBox) @@ -45,3 +46,13 @@ class ErrorDialog(QDialog): logger.info('Quitting') import sys sys.exit() + + def confirmMessage(self, msg, label, action): + msgBox = QMessageBox(QMessageBox.Critical, + "QMessageBox.critical()", msg, + QMessageBox.NoButton, self) + msgBox.addButton("&Ok", QMessageBox.AcceptRole) + msgBox.addButton("&Cancel", QMessageBox.RejectRole) + + if msgBox.exec_() == QMessageBox.AcceptRole: + action() 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() |