Gnome GJS Ошибка: Gdk.Keymap.get_modifier_state не является функцией
Я пытаюсь получить состояние модификатора клавиатуры, перенося этот пример GDK здесь на Gnome GJS, чтобы использовать его в расширении Gnome.
Приведенный ниже код представляет собой модифицированную официальную демоверсию с https://developer.gnome.org/gnome-devel-demos/stable/hellognome.js.html.en.
Проблема в Gdk.Keymap.get_modifier_state()
сообщается как не функция, где Gdk.Keymap.get_default()
работает нормально
Возможно, я что-то упускаю при использовании функций с параметром структуры в JS. (Я не знаком с JS). Так что не так с моим кодом?
Код:
#!/usr/bin/gjs
//https://developer.gnome.org/gnome-devel-demos/stable/hellognome.js.html.en
const Gtk = imports.gi.Gtk;
const Gdk = imports.gi.Gdk;
const Lang = imports.lang;
const Webkit = imports.gi.WebKit;
const HelloGNOME = new Lang.Class ({
Name: 'Hello GNOME',
_init: function () {
this.application = new Gtk.Application ();
this.application.connect('activate', Lang.bind(this, this._onActivate));
this.application.connect('startup', Lang.bind(this, this._onStartup));
},
_onActivate: function () {
this._window.present ();
this._keymap = Gdk.Keymap.get_default ();
//this._state = Gdk.Keymap.get_modifier_state (this._keymap);
this._caps = Gdk.Keymap.get_modifier_state ();
},
_onStartup: function () {
this._buildUI ();
},
// Build the application's UI
_buildUI: function () {
// Create the application window
this._window = new Gtk.ApplicationWindow ({
application: this.application,
title: "Welcome to GNOME",
default_height: 200,
default_width: 400,
window_position: Gtk.WindowPosition.CENTER });
// Create a webview to show the web app
this._webView = new Webkit.WebView ();
// Put the web app into the webview
this._webView.load_uri (GLib.filename_to_uri (GLib.get_current_dir() +
"/hellognome.html", null));
// Put the webview into the window
this._window.add (this._webView);
// Show the window and all child widgets
this._window.show_all();
},
});
// Run the application
let app = new HelloGNOME ();
app.application.run (ARGV);
Сообщение об ошибке:
(gjs:2483): Gjs-WARNING **: JS ERROR: TypeError: Gdk.Keymap.get_modifier_state is not a function
HelloGNOME<._onActivate@./gdk_mod.js:23
wrapper@resource:///org/gnome/gjs/modules/lang.js:169
@./gdk_mod.js:58
Тем не менее, я вижу это в некоторых документах, таких как здесь: http://www.roojs.org/seed/gir-1.2-gtk-3.0/seed/Gdk.Keymap.html и в GIR mapping /usr/share/gir-1.0/Gdk-3.0.gir
:
<method name="get_modifier_state"
c:identifier="gdk_keymap_get_modifier_state"
version="3.4">
<doc xml:space="preserve">Returns the current modifier state.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">the current modifier state.</doc>
<type name="guint" c:type="guint"/>
</return-value>
<parameters>
<instance-parameter name="keymap" transfer-ownership="none">
<doc xml:space="preserve">a #GdkKeymap</doc>
<type name="Keymap" c:type="GdkKeymap*"/>
</instance-parameter>
</parameters>
</method>
Я пытался с Python, чтобы проверить, если проблема в привязке самоанализа. Во всяком случае, это работает хорошо.
#!/usr/bin/python
from gi.repository import Gdk, GLib
def update(keymap):
print Gdk.Keymap.get_modifier_state(keymap)
return True
if __name__=="__main__":
#Gdk.init()
loop = GLib.MainLoop()
keymap = Gdk.Keymap.get_default()
GLib.timeout_add_seconds(1, update, keymap)
loop.run()
1 ответ
С точки зрения ОО, вы пытаетесь вызвать метод класса, Gdk.Keymap
, а не на объекте, this._keymap
, Это сработало для меня:
this._keymap = Gdk.Keymap.get_default ();
this._caps = this._keymap.get_modifier_state ();