2016-04-09 21 views
0

Ich entwickle eine Erweiterung der Gnome-Shell. Meine Erweiterung benötigt einen Schieberegler für eine Anzeige im Statusbereich. Ich hatte einige Probleme, es zu setzen, ich schrieb meinen Code auf diesem slightly outdated reference, das Hauptproblem war, dass das 'PopupSliderMenuItem' im Quellcode fehlte. Also habe ich etwas recherchiert und herausgefunden, dass es gelöscht wurde. Diese commit enthält weitere Informationen.addActor ist keine Funktion

Also habe ich versucht, auf die diese (aktualisiert) Code zu folgen begehen:

this._slider = new Slider.Slider(0); 
this._slider.connect('value-changed', Lang.bind(this, this._sliderChanged)); 
this._slider.connect('drag-end', Lang.bind(this, this._notifyVolumeChange)); 

this.item = new PopupMenu.PopupBaseMenuItem({ activate: false }); 
this.item.addActor(this._slider.actor, { expand: true }); 

ich diesen Code zu meinem Projekt Refactoring, und es sieht wie folgt aus:

this.slider = new Slider.Slider(0.5); 
this.slider.connect('value-changed', Lang.bind(this, this._sliderChanged)); 
this.slider.connect('drag-end', Lang.bind(this, this._setNewColorTemperature)); 

this.sliderContainer = new PopupMenu.PopupBaseMenuItem(); 
this.sliderContainer.addActor(this.slider.actor, { expand: true }); 
this.menu.addMenuItem(this.sliderContainer); 

Der erste Block ist auf dem Gnome-Shell-Quellcode (es setzt den Lautstärkeregler). Mein Code (der zweite Block) wirft diese Ausnahme auf der ‚addActor‘ line:

Gjs-Message: JS LOG: Extension ****censored**** had error: TypeError: sliderContainer.addActor is not a function 

Wer hat eine Ahnung, warum dieser Fehler passiert ist? Das Seltsamste ist, dass der Quellcode für die PopupBaseMenuItem class die Funktion hat, die ich anrufe.

Wenn Sie weitere Informationen benötigen, bin ich gerne bereit zu stellen.

+0

Können Sie ein einfaches allumfassenden Beispiel erzeugen – mplungjan

+0

von dem, was ich sagen kann, nennt PopupBaseMenuItem addActor durch „grabHelper“ [Zeile 1191] (https://git.gnome.org/browse/gnome-shell/tree/js/ui/popupMenu.js#n1191) this._grabHelper.addActor (source); – scottjustin5000

+0

Der GrabHelper ist für die PopupMenuManager-Klasse, ich brauchte etwas für das PopupBaseMenuItem. Aber vergiss es, ich fand die Lösung, nachdem ich geschlafen habe, hehe, ich werde es hier posten –

Antwort

2

Nachdem ich mit mehr Aufmerksamkeit auf die source code schaute, fand ich, dass der richtige Weg, um einen Akteur zu setzen, durch die Eigenschaft .actor ist.

So ist mein Code wie folgt nun auf der Suche (und es funktioniert):

this.slider = new Slider.Slider(0.5); 
this.slider.connect('value-changed', Lang.bind(this, this._sliderChanged)); 
this.slider.connect('drag-end', Lang.bind(this, this._setNewColorTemperature)); 

this.sliderContainer = new PopupMenu.PopupBaseMenuItem(); 
this.sliderContainer.actor = this.slider.actor; 
this.menu.addMenuItem(this.sliderContainer);