GNOME Shell扩展按钮

时间:2017-04-04 07:52:51

标签: javascript gnome gnome-shell gnome-shell-extensions gjs

我正在尝试使用JavaScript编写扩展程序。我用Python通过Hello World编写了它!码。但是,在开始时,我的菜单项按钮不起作用。另外,我无法在Hello World中添加菜单项!码。我想,我想念一些事情。

按钮代码在这里:

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 个答案:

答案 0 :(得分:4)

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

希望能帮助某人(如果你不在身边)。