В рамках обучения созданию расширений gnome-shell я хотел бы иметь возможность размещать окно на всех рабочих столах поверх всех остальных окон.
Я заметил, что в API mutter есть meta_window_set_above
in, 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 есть интроспекция gobject, так что этого было достаточно:
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
), все перечисленныездесь.