LINUX.ORG.RU

Свежий gnome 3.32 и экстеншены

 , ,


0

1

На extensions.gnome.org один из пользователей моего расширения пожаловался что оно не работает под gnome 3.32. Делать нечего, установил в виртуалке dayly build Ubuntu 19.04, пробую - действительно не работает. Мой код не может вызывать методы моих классов потому что не видит их. Отчего - ума не приложу.

Экстеншены свои я делал недавно, с переходом на 18.04. Сразу старался использовать самый новый синтаксис, без всяких Lang.Class. Вопщем, классы мои выглядят корректно. Крутил и так и этак - методы не вызываются. Нашёл это - https://gitlab.gnome.org/GNOME/gjs/issues/233 - ходил по ссылкам, крутил код. Не помогло.

Может кто-нибудь разбирается в программировании под гномшелл, и укажет мне на ошибку? Чувствую что что-то не так в описании класса, но что?

Примеры экстеншенов:

https://github.com/eugene-rom/vbox-applet/blob/master/src/extension.js

https://github.com/eugene-rom/syspeek-gs/blob/master/src/extension.js


--- a/extension.js                                                    
+++ b/extension.js                                                    
@@ -1,39 +1,35 @@                                                     
 /* global imports */                                                 
                                                                      
-const St = imports.gi.St;                                            
-const Gio = imports.gi.Gio;                                          
+const { GLib, Gio, GObject, St } = imports.gi;                       
+const ByteArray = imports.byteArray;                                 
 const PanelMenu = imports.ui.panelMenu;                              
 const PopupMenu = imports.ui.popupMenu;                              
-const GLib = imports.gi.GLib;
 const Main = imports.ui.main;
 const Mainloop = imports.mainloop;
 const Me = imports.misc.extensionUtils.getCurrentExtension();
 
 const TEXT_VBOXAPP = 'VirtualBox applet';           
 const TEXT_LOGID   = 'vbox-applet';                 
-const ICON_SIZE    = 22;                            
 const DEBUG        = false;                         
 
 let vboxapplet;                                     
 let enabled = false;                                
 
-class VBoxApplet extends PanelMenu.Button           
-{                                                   
-    constructor() {                                 
-        super( 0.0, TEXT_VBOXAPP );                 
-                                                    
+let VBoxApplet = GObject.registerClass(             
+class VBoxApplet extends PanelMenu.Button {         
+    _init() {                                       
+        super._init(0.0, TEXT_VBOXAPP);             
         this._populated = false;
         this._menuitems = [];
-        let hbox = new St.BoxLayout( { style_class: 'panel-status-menu-box' } );
         let gicon = Gio.icon_new_for_string( Me.path + '/icons/vbox.svg' );
-        hbox.add_child( new St.Icon( { gicon: gicon, icon_size: ICON_SIZE } ) );
-        this.actor.add_child(hbox);
+        let icon = new St.Icon( { gicon: gicon, style_class: 'system-status-icon' } );
+        this.add_child(icon);
         this.menu.actor.connect('notify::visible', this._onVisibilityChanged.bind(this));
 
         this._tmpItem = new PopupMenu.PopupMenuItem( '...' );
         this.menu.addMenuItem( this._tmpItem );
 
-        Mainloop.timeout_add_seconds( 5, this.populateMenu.bind(this) );
+        GLib.timeout_add_seconds(GLib.PRIORITY_DEFAULT, 5, this.populateMenu.bind(this) );
     }
 
     startVbox() {
@@ -80,7 +76,7 @@
         let vms;
         try {
             this._log( 'Run \'vboxmanage list vms\'' );
-            vms = String( GLib.spawn_command_line_sync( 'vboxmanage list vms' )[1] );
+            vms = ByteArray.toString( GLib.spawn_command_line_sync( 'vboxmanage list vms' )[1] );
         }
         catch (err) {
             this._log( err );
@@ -184,7 +180,7 @@
             }
         }
     }
-};
+});
 
 
 function enable() {
bass ★★★★★
()

у второго фиксы аналогичные

bass ★★★★★
()
Ответ на: комментарий от bass

Спасибо огромное, работает! Счас ещё проверю не поломается ли поддержка 3.28 .)

eros2
() автор топика
Ответ на: комментарий от bass

Мда, в 3.28 не работает, ругается TypeError: GObject.registerClass() used with invalid base class (is PanelMenuButton)

Буду дальше копать.

eros2
() автор топика
3 сентября 2020 г.
Ответ на: комментарий от eros2

похожая ошибка с другим расширением под 3.36

gnome-shell[3055]: JS ERROR: Extension blabla: TypeError: GObject.registerClass() used with invalid base class (is PopupMenuSection) @/extension.js:2306:28

const 	PopupMenu = imports.ui.popupMenu;
...
const  lala = GObject.registerClass(
  class lala extends PopupMenu.PopupMenuSection {

	_init(args) {
		super._init();
...

как решилось?

s-o
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.