summaryrefslogtreecommitdiffstats
path: root/powerline/bindings/qtile/widget.py
blob: 92e3a27e452a89659efc816ba98f66d2f6b2aa34 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# vim:fileencoding=utf-8:noet
from __future__ import (unicode_literals, division, absolute_import, print_function)

from libqtile.bar import CALCULATED
from libqtile.widget import TextBox

from powerline import Powerline


class QTilePowerline(Powerline):
	def do_setup(self, obj):
		obj.powerline = self


class PowerlineTextBox(TextBox):
	# TODO Replace timeout argument with update_interval argument in next major 
	#      release.
	def __init__(self, timeout=2, text=b' ', width=CALCULATED, side='right', update_interval=None, **config):
		super(PowerlineTextBox, self).__init__(text, width, **config)
		self.side = side
		self.update_interval = update_interval or timeout
		self.did_run_timer_setup = False
		powerline = QTilePowerline(ext='wm', renderer_module='pango_markup')
		powerline.setup(self)

	def update(self):
		if not self.configured:
			return True
		self.text = self.powerline.render(side=self.side).encode('utf-8')
		self.bar.draw()
		return True

	def cmd_update(self, text):
		self.update(text)

	def cmd_get(self):
		return self.text

	def timer_setup(self):
		if not self.did_run_timer_setup:
			self.did_run_timer_setup = True
			self.timeout_add(self.update_interval, self.update)

	def _configure(self, qtile, bar):
		super(PowerlineTextBox, self)._configure(qtile, bar)
		if self.layout.markup:
			# QTile-0.9.1: no need to recreate layout or run timer_setup
			return
		self.layout = self.drawer.textlayout(
			self.text,
			self.foreground,
			self.font,
			self.fontsize,
			self.fontshadow,
			markup=True,
		)
		self.timer_setup()


# TODO: Remove this at next major release
Powerline = PowerlineTextBox