Обнаружил, что pytyle2 резервирует место под панели, даже если они в режиме автоскрытия, полез разбираться. Нашел такой вот кусок кода:
for wid in wids:
win = ptxcb.Window(wid)
# We're listening to _NET_WORKAREA, so a panel
# might have died before _NET_CLIENT_LIST was updated...
try:
x, y, w, h = win.get_geometry()
d = win.get_desktop_number()
except:
continue
if self.workspace.contains(win.get_desktop_number()) and self.contains(x, y):
struts = win.get_strut_partial()
if not struts:
struts = win.get_strut()
key = (x, y, w, h, struts)
if key in log:
continue
log.append(key)
if struts and not all([struts[i] == 0 for i in struts]):
if struts['left'] or struts['right']:
if struts['left']:
self.wa_x += w
self.wa_width -= w
if struts['top'] or struts['bottom']:
if struts['top']:
self.wa_y += h
self.wa_height -= h
elif struts:
# When accounting for struts on left/right, and
# struts are reported properly, x shouldn't be
# zero. Similarly for top/bottom and y.
if x > 0 and self.width == (x + w):
self.wa_width -= w
elif y > 0 and self.height == (y + h):
self.wa_height -= h
elif x > 0 and self.wa_x == x:
self.wa_x += w
self.wa_width -= w
elif y > 0 and self.wa_y == y:
self.wa_y += h
self.wa_height -= h
Тут перебираются окна верхнего уровня, проверяется их свойство struts, резервирующее место под окно панельного типа и пересчитывается размер области, доступной для окон приложений.
Долго медитировал, глядя на код. Мучили вопросы:
1. Зачем берутся размеры окна панели (self.wa_width -= w) вместо явно указанного в struts размера зарезервированной под панель области?
2. Какой мистический смысл заключен в проверке and not all([struts == 0 for i in struts])?
3. Что за wtf живёт под условием elif struts и какой частный случай он призвал был обслуживать?
Попробовал исправить п.1. Столкнулся с тем, что после этого перестало корректно вычисляться место рабочей области, если с одной стороны экрана пристыковано более одной панели. Что и логично, если посмотреть свойства окон через xprops. В итоге вышеуказанный винегрет переписал вот так:
for wid in wids:
win = ptxcb.Window(wid)
# We're listening to _NET_WORKAREA, so a panel
# might have died before _NET_CLIENT_LIST was updated...
try:
x, y, w, h = win.get_geometry()
d = win.get_desktop_number()
except:
continue
if self.workspace.contains(win.get_desktop_number()) and self.contains(x, y):
struts = win.get_strut_partial()
if not struts:
struts = win.get_strut()
key = (x, y, w, h, struts)
if key in log:
continue
log.append(key)
if struts:
struts_left = max(struts_left, struts['left'])
struts_right = max(struts_right, struts['right'])
struts_top = max(struts_top, struts['top'])
struts_bottom = max(struts_bottom, struts['bottom'])
self.wa_x += struts_left
self.wa_width -= struts_left + struts_right
self.wa_y += struts_top
self.wa_height -= struts_top + struts_bottom
У этом варианте, УМВР.
Собственно вопрос. Кто-нибудь понимает, что хотел сказать автор кода? Или это просто code wtf, бессмысленный и беспощадный?