Установить свойства окна (выше, во всех рабочих пространствах) в 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), все перечисленное здесь.

Другие вопросы по тегам