Установить свойства окна (выше, во всех рабочих пространствах) в js/gnome-shell-extension?
Как часть обучения себя тому, как создавать расширения gnome-shell, я хотел бы иметь возможность указать, что окно должно быть во всех рабочих пространствах поверх всех остальных окон.
Я заметил, что в API Mutter есть meta_window_set_above
в window.c
но это не похоже на интерфейс JS. Через пробу и ошибку я также, кажется, могу позвонить window.set_property('above',true)
но эта функция, кажется, ничего не делает (есть 'title'
свойство, которое я проверял и использую set_property
на это похоже ничего не поделать).
Итак, кто-нибудь знает альтернативный способ установки свойств окна в расширении оболочки gnome? (и как определить, открывается ли функция в API через javascript? Я (наивно) думал, что это будет так же просто, как "о, есть meta_window_set_above
в window.c
так что я должен быть в состоянии позвонить window.set_above(true)
но я не думаю.
1 ответ
Я задал этот вопрос в списке рассылки gnome - оказалось, что все свойства мета-окна доступны только для чтения, поэтому я не могу (на данный момент) установить параметры выше / для всех рабочих пространств, используя mutter.
Тем не менее, я могу использовать библиотеку wnck для достижения этой цели. Хотя бормотание все еще является предпочтительным, это может быть единственным способом на данный момент.
К счастью, у wnck есть самоанализ объекта, так что этого было достаточно:
const Wnck = imports.gi.Wnck;
let window = Wnck.Screen.get_default().get_active_window();
if ( window ) {
window.make_above();
}
Есть функции make_above
, unmake_above
, pin
, unpin
, stick
, а также unstick
(хотя я не знаю, в чем разница между pin
а также stick
), все перечисленное здесь.