2014-06-13 3 views
1

Récemment, je me suis lancé dans le développement d'extensions GNOME. En exécutant gnome-shell-extension-tool --create-extension dans le terminal que j'ai créé bonjour l'extension du monde, mais quand je change le code pour construire un pop-up comme l'extension Je reçois cette erreur enter image description hereObtention d'une erreur dans le code d'extension modifié de GNOME

Le code JS J'utilise est

const St = imports.gi.St; 
const Mainloop = imports.mainloop; 
const Main = imports.ui.main; 
const Shell = imports.gi.Shell; 
const Lang = imports.lang; 
const PopupMenu = imports.ui.popupMenu; 
const PanelMenu = imports.ui.panelMenu; 
const Gettext = imports.gettext; 
const MessageTray = imports.ui.messageTray; 

const _ = Gettext.gettext; 

function _myButton() { 
    this._init(); 
} 

_myButton.prototype = { 
    __proto__: PanelMenu.Button.prototype, 

    _init: function() { 
     PanelMenu.Button.prototype._init.call(this, 0.0); 
     this._label = new St.Label({ style_class: 'panel-label', text: _("HelloWorld Button") }); 
     this.actor.set_child(this._label); 
     Main.panel._centerBox.add(this.actor, { y_fill: true }); 

     this._myMenu = new PopupMenu.PopupMenuItem(_('HelloWorld MenuItem')); 
     this.menu.addMenuItem(this._myMenu); 
     this._myMenu.connect('activate', Lang.bind(this, _showHello)); 
    }, 

    _onDestroy: function() {} 
}; 

function _showHello() { 

    let text = new St.Label({ style_class: 'helloworld-label', text: _("Hello, world!") }); 
    let monitor = global.get_primary_monitor(); 

    global.stage.add_actor(text); 
    text.set_position(Math.floor (monitor.width/2 - text.width/2), 
         Math.floor(monitor.height/2 - text.height/2)); 

    Mainloop.timeout_add(3000, function() { text.destroy(); }); 
} 


function main(extensionMeta) { 

    let userExtensionLocalePath = extensionMeta.path + '/locale'; 
    Gettext.bindtextdomain("helloworld", userExtensionLocalePath); 
    Gettext.textdomain("helloworld"); 

    let _myPanelButton = new _myButton(); 
} 

Can Quelqu'un me dit pourquoi je reçois cette erreur. J'utilise Fedora 20 avec GNOME Shell 3.10.2.1

Répondre

2

Vous n'avez pas les fonctions enable() etdans extension.js. Ces 2 sont obligatoires: enable() est le point d'entrée après le chargement de votre extension (au lieu de main()); et disable() est appelé après la désactivation dans gnome-tweak-tool. Ces fonctions de base doivent être présentes dans toutes les extensions, y compris l'exemple "Hello World" que vous avez mentionné.

La documentation de Gnome Shell est rare et déficiente. Je suppose que vous basez votre code sur des directives très anciennes, car la fonction main() était obsolète depuis la version 3.2. Lisez ces références: 1, 2

Questions connexes