2017-09-01 13 views
0

Es scheint, als ich Gdk.Seat.grab() in GJS nenne ich eine Fehlermeldung erhalten:Kann Gdk.Seat.grab() in GJS aufgerufen werden?

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

Diese Funktion und Klasse ist listed in the GJS Docs, aber vielleicht ist es falsch Ich rufe? Wenn ich typeof auf Gdk.Seat.grab rufe, kommt es zurück undefined. Ist das nicht möglich oder gibt es einen anderen Weg, den Fokus auf diese Art zu fokussieren?

Mein Anwendungsfall sammelt eine Tastenkombination von einem Benutzer, für den ich Gtk.CellRendererAccel verwenden kann, aber ich würde lieber keinen Gtk.TreeView verwenden. Die docs sagen CellRenderers dass:

These objects are used primarily by the GtkTreeView widget, though they aren’t tied to them in any specific way.

und ...

The primary use of a GtkCellRenderer is for drawing a certain graphical elements on a cairo_t.

was bedeutet, ich es außerhalb von TreeView verwenden könnte, aber ohne Hinweise, wie.

Antwort

1

grab() ist eine Methode der Gdk.Seat, so benötigen Sie einen Gdk.Seat Objekt, um es zu rufen. Es sieht so aus, als würden Sie es als statische Methode bezeichnen, Gdk.Seat.grab(). Sie benötigen also etwas wie Gdk.DeviceManager.get().get_default_display().get_default_seat() oder Sie können ein Gdk.Seat Objekt von einem Gdk.Event erhalten.

Aus dem beschriebenen Anwendungsfall geht nicht hervor, was Sie mit dem Greifer machen wollen, aber es könnte ein einfacherer Weg sein, dies zu erreichen.

+0

Ah, das hätte ich gemerkt. Wenn ich kein gutes GJS-Beispiel finden kann, fange ich normalerweise an, ein Beispiel in C oder Vala zu finden (in diesem Fall gnome-control-center), aber das ist wirklich nicht meine Stärke, also die Methode der statischen Fehlermethode. Mein Anwendungsfall sind vom Benutzer konfigurierbare Tastaturbelegungen für eine Shell-Erweiterung, aber der CellRendererAccel in einer TreeView-Route stellt sich als besser für meine Bedürfnisse heraus. Danke für die Antwort auf jeden Fall. –

Verwandte Themen