2017-04-04 137 views
1

我正在嘗試使用JavaScript編寫擴展。我用Python通過Hello World寫了它!碼。但是,在一開始,我的菜單項按鈕不起作用。另外,我無法在Hello World中添加菜單項!碼。我想,我想念一些事情。GNOME外殼擴展按鈕

按鈕的代碼是在這裏:

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

沒有很多教程GJS。我已經試着通過閱讀其他擴展來寫作。

感謝。

回答

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

希望能幫助某人(如果你不在身邊)。