2017-04-04 6 views
1

J'essaye d'écrire une extension en utilisant simplement JavaScript. Je l'ai écrit avec Python via Hello World! code. Mais, au début, mon bouton pour les éléments de menu ne fonctionne pas. En outre, je ne pouvais pas ajouter d'élément de menu avec Hello World! code. Je pense, quelque chose me manque.GNOME Shell Extension Button

Le code bouton est ici:

const Lang = imports.lang; 
 
const Main = imports.ui.main; 
 
const PanelMenu = imports.ui.panelMenu; 
 
const PopupMenu = imports.ui.popupMenu; 
 
const St = imports.gi.St; 
 

 
const TimeButton = new Lang.Class({ 
 
    Name: "Salah Time", 
 
    Extends: PanelMenu.Button, 
 

 
    _init: function() { 
 
     let box = new St.BoxLayout({ 
 
      style_class: "system-status-icon" 
 
     }); 
 
     let label = new St.Label({text: "Salah Time"}); 
 
     box.add_child(label); 
 
     this.actor.addActor(box); 
 
    } 
 
}); 
 

 
function init() { 
 

 
} 
 

 
function enable() { 
 
    let but = new TimeButton(); 
 
    Main.panel._leftBox.insert_child_at_index(but, 1); 
 
} 
 

 
function disable() { 
 
    Main.panel._leftBox.remove_child(but); 
 
}

Il n'y a pas beaucoup tutoriel pour GJS. J'essaie déjà d'écrire en lisant d'autres extensions.

Merci.

Répondre

1
const Lang = imports.lang; 
const Main = imports.ui.main; 
const PanelMenu = imports.ui.panelMenu; 
const PopupMenu = imports.ui.popupMenu; 
const St = imports.gi.St; 

const TimeButton = new Lang.Class({ 
    Name: "TimeButton", 
    Extends: PanelMenu.Button, 

    _init: function() { 
     this.parent(null, "TimeButton"); 

     // Icon 
     this.icon = new St.Icon({ 
      icon_name: "appointment-symbolic", 
      style_class: "system-status-icon" 
     }); 
     this.actor.add_actor(this.icon); 

     // Menu 
     this.menuItem = new PopupMenu.PopupMenuItem("Salah Time", {}); 
     this.menu.addMenuItem(this.menuItem); 
    } 
}); 

function init() { 
} 

function enable() { 
    let indicator = new TimeButton(); 
    Main.panel.addToStatusArea("should-be-a-unique-string", indicator); 

    // hide 
    Main.panel.statusArea["should-be-a-unique-string"].actor.visible = false; 

    // change icon 
    Main.panel.statusArea["should-be-a-unique-string"].icon.icon_name = "appointment-soon-symbolic"; 

    // show 
    Main.panel.statusArea["should-be-a-unique-string"].actor.visible = true; 
} 

function disable() { 
    // you could also track "indicator" and just call indicator.destroy() 
    Main.panel.statusArea["should-be-a-unique-string"].destroy(); 
} 

Espérons que cela aide quelqu'un (si vous n'êtes plus là).