Можно ли вызвать Gdk.Seat.grab() в GJS?

Кажется, когда я вызываю Gdk.Seat.grab() в GJS, я получаю сообщение об ошибке:

Gjs-WARNING **: JS ERROR: TypeError: Gdk.Seat.grab is not a function

Эта функция и класс перечислены в GJS Docs, а может я неправильно называю? Если я позвоню typeof на Gdk.Seat.grab, он вернется undefined. Это невозможно, или есть другой способ, которым я могу сфокусироваться таким образом?

Мой вариант использования — получение привязки клавиш от пользователя, для чего я могу использовать Gtk.CellRendererAccel, но я бы предпочел не использовать Gtk.TreeView. Документы говорят о CellRenderers, что:

Эти объекты в основном используются виджетом GtkTreeView, хотя они не привязаны к ним каким-либо особым образом.

а также...

В первую очередь GtkCellRenderer используется для рисования определенных графических элементов на cairo_t.

Это означает, что я мог бы использовать его вне TreeView, но без подсказок, как это сделать.


person andy.holmes    schedule 01.09.2017    source источник


Ответы (1)


grab() — это метод Gdk.Seat, поэтому вам нужен объект Gdk.Seat для его вызова. Похоже, вы вызываете его как статический метод, Gdk.Seat.grab(). Итак, вам понадобится что-то вроде Gdk.DeviceManager.get().get_default_display().get_default_seat(), или вы можете получить объект Gdk.Seat из Gdk.Event.

Из описанного варианта использования неясно, что вы пытаетесь сделать с захватом, но может быть более простой способ сделать это.

person ptomato    schedule 02.09.2017
comment
Ах, я должен был понять это. Когда я не могу найти хороший пример GJS, я обычно прибегаю к поиску примера на C или Vala (в данном случае gnome-control-center), но это действительно не моя сильная сторона, поэтому подход с ошибочным статическим методом. Мой вариант использования — настраиваемые пользователем сочетания клавиш для расширения оболочки, но CellRendererAccel в маршруте TreeView оказывается более подходящим для моих нужд. Спасибо за ответ в любом случае. - person andy.holmes; 04.09.2017