From 18109193b239be6e7ecc4c2d07c9c999e33081f8 Mon Sep 17 00:00:00 2001 From: kali Date: Wed, 12 Sep 2012 21:29:49 +0000 Subject: checks for systray in unity --- pkg/postmkvenv.sh | 4 +++ src/leap/app.py | 3 ++ src/leap/base/constants.py | 1 + src/leap/baseapp/dialogs.py | 12 +++++++ src/leap/baseapp/unitychecks.py | 79 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 src/leap/baseapp/unitychecks.py 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..af531154 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) @@ -31,6 +32,7 @@ class ErrorDialog(QDialog): # closing the dialog. we can pass that # in the constructor + def criticalMessage(self, msg, label): msgBox = QMessageBox(QMessageBox.Critical, "QMessageBox.critical()", msg, @@ -45,3 +47,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..aa644c5f --- /dev/null +++ b/src/leap/baseapp/unitychecks.py @@ -0,0 +1,79 @@ +#!/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(): + (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 Leap is not allowed to use Tray icon. Press OK to add Leap to Unity's white list and then restart Unity" + +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() + -- cgit v1.2.3 From ddd11604a5ae376ba27f70c9eb9a6971e749b1f9 Mon Sep 17 00:00:00 2001 From: kali Date: Wed, 12 Sep 2012 08:49:13 +0900 Subject: pep8 --- src/leap/baseapp/dialogs.py | 1 - src/leap/baseapp/unitychecks.py | 45 +++++++++++++++++++++++++++++------------ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/leap/baseapp/dialogs.py b/src/leap/baseapp/dialogs.py index af531154..3cb539cf 100644 --- a/src/leap/baseapp/dialogs.py +++ b/src/leap/baseapp/dialogs.py @@ -32,7 +32,6 @@ class ErrorDialog(QDialog): # closing the dialog. we can pass that # in the constructor - def criticalMessage(self, msg, label): msgBox = QMessageBox(QMessageBox.Critical, "QMessageBox.critical()", msg, diff --git a/src/leap/baseapp/unitychecks.py b/src/leap/baseapp/unitychecks.py index aa644c5f..72c9ee6f 100644 --- a/src/leap/baseapp/unitychecks.py +++ b/src/leap/baseapp/unitychecks.py @@ -17,9 +17,14 @@ 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]) +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)]) -set_whitelist = lambda ls: Popen(['gsettings', 'set', 'com.canonical.Unity.Panel', 'systray-whitelist', repr(ls)]) def add_to_whitelist(): ls = get_whitelist() @@ -27,21 +32,29 @@ def add_to_whitelist(): 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(): - (output, error) = Popen('ps aux | grep [u]nity-panel-service', stdout=PIPE, shell=True).communicate() + #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, error) = Popen( + 'ps aux | grep [u]nity-2d-panel', + stdout=PIPE, shell=True).communicate() output = bool(str(output)) return output -def need_to_add(): + +def need_to_add(): if is_unity_running(): wlist = get_whitelist() if not (APP_NAME in wlist or 'all' in wlist): @@ -49,11 +62,17 @@ def 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 Leap is not allowed to use Tray icon. Press OK to add Leap to Unity's white list and then restart Unity" + +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(): @@ -63,17 +82,17 @@ def do_check(): "add to systray?", add_and_restart) -if __name__=='__main__': - if len(sys.argv)>1: + +if __name__ == '__main__': + if len(sys.argv) > 1: cmd = sys.argv[1] - if cmd=='add': + if cmd == 'add': add_to_whitelist() - elif cmd=='rm': + elif cmd == 'rm': remove_from_whitelist() - elif cmd=='print': + elif cmd == 'print': print get_whitelist() - elif cmd=="check": + elif cmd == "check": from PyQt4.QtGui import QApplication app = QApplication(sys.argv) do_check() - -- cgit v1.2.3