2016-04-09 47 views
0

Gnome kabuğuna bir uzantı geliştiriyorum. Uzantım, durum alanındaki bir göstergeye kaydırıcı çubuğu gerektiriyor. Ayarlamakta bazı problemlerim vardı, bu slightly outdated reference kodumu yazıyordum, ana sorun 'PopupSliderMenuItem' kaynak kodunda eksikti. Bu yüzden biraz araştırma yaptım ve silinmiş olduğunu öğrendim. Bu commit, daha fazla bilgiye sahiptir. addActor bir işlev değil

Yani bu (güncellendi) kodunu takip etmeye çalıştı işlemek:

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 }); 

Projemde bu kodu refactored ve şuna benzer:

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); 

ilk bloktur gnome-shell kaynak kodunda (ses seviyesi kaydırıcısını ayarlar). Kodum (ikinci blok) 'addActor' on line bu istisna atıyor:

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

herkes bu hata neden oluyor bir fikrin var? En garip olan şey, PopupBaseMenuItem class için kaynak kodun aradığım işleve sahip olmasıdır.

Sağladığınız başka bilgilere ihtiyacınız varsa vermekten mutluluk duyuyorum.

+0

sen Ne söyleyebilirim basit bir tam içerdiği örnek – mplungjan

+0

üretebilir miyim, PopupBaseMenuItem "grabHelper" [1191 Hat] aracılığıyla addActor çağırır (https://git.gnome.org/browse/gnome-shell/tree/js/ui/popupMenu.js#n1191) this._grabHelper.addActor (kaynak); – scottjustin5000

+0

GrabHelper, PopupMenuManager sınıfı içindir, PopupBaseMenuItem için bir şeye ihtiyacım vardı. Ama nevermind, biraz uyku aldıktan sonra çözümü buldum, buraya göndereceğim –

cevap

2

source code ürününe daha fazla önem verdikten sonra, bir aktör ayarlamanın doğru yolunun .actor özelliği aracılığıyla olduğunu öğrendim.

Yani benim kod artık böyle bakıyor (ve işe yarıyor):

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);