commit 22d2c10b2ed9bee8cfadf37ba29a3f5eec84baed Author: John Bintz Date: Sat Apr 16 11:31:16 2016 -0400 starting on this diff --git a/yoga.py b/yoga.py new file mode 100755 index 0000000..680ea0d --- /dev/null +++ b/yoga.py @@ -0,0 +1,161 @@ +#!/usr/bin/env python + +import signal +import subprocess +import re + +from PyQt4 import QtGui, QtCore + +APPINDICATOR_ID = 'yoga-applet' +touch = "" +stylus = "" +eraser = "" +video_driver = "" + +class Menu(QtGui.QMenu): + def __init__(self, parent=None): + QtGui.QMenu.__init__(self, "Yoga", parent) + + is_nvidia = (video_driver == 'nvidia') + + self.everything_menu = QtGui.QAction("&Everything", self) + self.everything_menu.triggered.connect(self.enable_everything) + + self.addAction(self.everything_menu) + + self.touchpad_and_pen_menu = QtGui.QAction("&Touchpad and Pen", self) + self.touchpad_and_pen_menu.triggered.connect(self.touchpad_and_pen) + + self.addAction(self.touchpad_and_pen_menu) + self.addSeparator() + + self.tablet_everything_menu = QtGui.QAction("&Tablet - Everything", self) + self.tablet_everything_menu.triggered.connect(self.tablet_everything) + self.tablet_everything_menu.setDisabled(is_nvidia) + + self.addAction(self.tablet_everything_menu) + + self.tablet_pen_only_menu = QtGui.QAction("&Tablet - Pen Only", self) + self.tablet_pen_only_menu.triggered.connect(self.tablet_pen_only) + self.tablet_pen_only_menu.setDisabled(is_nvidia) + + self.addAction(self.tablet_pen_only_menu) + + self.righty_everything_menu = QtGui.QAction("&Righty - Everything", self) + self.righty_everything_menu.triggered.connect(self.righty_everything) + self.righty_everything_menu.setDisabled(is_nvidia) + + self.addAction(self.righty_everything_menu) + + def touchpad_and_pen(self, event): + self.do_rotate('none') + self.do_disable_touch() + self.do_enable_trackpad() + + def enable_everything(self, event): + self.do_rotate('none') + self.do_enable_touch() + self.do_enable_trackpad() + + def tablet_everything(self, event): + self.do_rotate('half') + self.do_enable_touch() + self.do_disable_trackpad() + + def tablet_pen_only(self, event): + self.do_rotate('half') + self.do_disable_touch() + self.do_disable_trackpad() + + def righty_everything(self, event): + self.do_rotate('ccw') + self.do_enable_touch() + self.do_disable_trackpad() + + def do_enable_touch(self): + global touch + + subprocess.call("xsetwacom --set '{}' gesture on".format(touch), shell=True) + subprocess.call("xsetwacom --set '{}' touch on".format(touch), shell=True) + + def do_disable_touch(self): + global touch + + subprocess.call("xsetwacom --set '{}' gesture off".format(touch), shell=True) + subprocess.call("xsetwacom --set '{}' touch off".format(touch), shell=True) + + def do_enable_trackpad(self): + global touchpad_id + + subprocess.call("xinput enable {}".format(touchpad_id), shell=True) + + def do_disable_trackpad(self): + global touchpad_id + + subprocess.call("xinput disable {}".format(touchpad_id), shell=True) + + def do_rotate(self, direction): + for device in [touch, stylus, eraser]: + subprocess.call("xsetwacom --set '{}' rotate {}".format(device, direction), shell=True) + + xrandr_rotates = { + "none": "normal", + "half": "inverted", + "ccw": "left", + } + + subprocess.call("xrandr -o {}".format(xrandr_rotates[direction]), shell=True) + +class SystemTrayIcon(QtGui.QSystemTrayIcon): + def __init__(self, parent=None): + QtGui.QSystemTrayIcon.__init__(self, parent) + self.setIcon(QtGui.QIcon.fromTheme('document-save')) + + self.left_menu = Menu() + self.activated.connect(self.click_trap) + + def click_trap(self, value): + if value == self.Trigger: + self.left_menu.exec_(QtGui.QCursor.pos()) + + def show(self): + QtGui.QSystemTrayIcon.show(self) + +def main(): + global touch, stylus, eraser, video_driver, touchpad_id + + devices = subprocess.check_output('xsetwacom --list devices', shell=True).split('\n') + for x in devices: + if 'type: TOUCH' in x: + touch = x.split('\t')[0] + if 'type: STYLUS' in x: + stylus = x.split('\t')[0] + if 'type: ERASER' in x: + eraser = x.split('\t')[0] + + devices = subprocess.check_output('xinput list', shell=True).split('\n') + for x in devices: + if 'Touchpad' in x: + result = re.search('id=(\d+)', x) + touchpad_id = result.group(1) + + print touchpad_id + + video_driver = subprocess.check_output('prime-select query', shell=True).split('\n')[0] + + print video_driver + + signal.signal(signal.SIGINT, signal.SIG_DFL) + + app = QtGui.QApplication([]) + + icon = SystemTrayIcon() + icon.show() + + app.exec_() + +def click_indicator(): + print "hi" + +if __name__ == "__main__": + main()