Могу ли я использовать расширение _NET_WM_WINDOW_TYPE_DOCK EWHM в openbox?
Openbox говорится, что EWMH соответствует здесь. Я хочу использовать этот уровень соответствия для реализации окна без декораций, как предлагается в лучшем ответе на этот вопрос.
Таким образом, я пытаюсь создать простое окно, используя python и Xlib, которое использует подсказку типа _NET_WM_WINDOW_TYPE_DOCK, чтобы избавиться от декораций окна. Но процесс не выполняется со следующим кодом:
from Xlib import X, display
d = display.Display()
s = d.screen()
w = s.root.create_window(10, 10, 100, 100, 1, s.root_depth, background_pixel=s.black_pixel, event_mask=X.ExposureMask|X.KeyPressMask)
int_atom = d.intern_atom('int')
wm_window_type = d.intern_atom('_NET_WM_WINDOW_TYPE')
wm_window_type_dock = d.intern_atom('_NET_WM_WINDOW_TYPE_DOCK')
w.change_property(wm_window_type, int_atom, 32, [wm_window_type_dock, ], X.PropModeReplace)
w.map()
d.next_event()
d.next_event()
print(w.get_full_property(wm_window_type, X.AnyPropertyType).value[0])
print(wm_window_type_dock)
Окно появляется, но все еще украшено. Оба последних оператора печати возвращают434
, поэтому я предполагаю, что у окна действительно есть допустимый EWMH window_type. Итак, вопрос двоякий:
Подходит ли мой код для этой цели?
Должен ли openbox рисовать окно без декораций? (А почему нет?)
1 ответ
Что ж, мне потребовалось около 12 часов, чтобы найти ответ:
Я использовал неправильный атом в change_property
. Звонок должен был гласить:
w.change_property(wm_window_type, Xatom.ATOM, 32, [wm_window_type_dock, ], X.PropModeReplace)
Итак, с соответствующими import
оператор, весь код становится:
from Xlib import X, Xatom, display
d = display.Display()
s = d.screen()
w = s.root.create_window(10, 10, 100, 100, 1, s.root_depth, background_pixel=s.black_pixel, event_mask=X.ExposureMask|X.KeyPressMask)
wm_window_type = d.intern_atom('_NET_WM_WINDOW_TYPE')
wm_window_type_dock = d.intern_atom('_NET_WM_WINDOW_TYPE_DOCK')
w.change_property(wm_window_type, Xatom.ATOM, 32, [wm_window_type_dock, ], X.PropModeReplace)
w.map()
d.next_event()
d.next_event()
print(w.get_full_property(wm_window_type, Xatom.ATOM).value[0])
print(wm_window_type_dock)
Что работает, как ожидалось (обратите внимание, что если фон вашего экрана черный, вы должны изменить значение background_pixel, чтобы вообще что-нибудь увидеть).