в общем апплет был написан без знаний явы методом тыка по аналогии. Документация использовалась при написании только из /usr/share/cinnamon/applets/ ну и немного логики и школьных знаний.
Написалось вот это:
const Cinnamon = imports.gi.Cinnamon;
const Applet = imports.ui.applet;
const Main = imports.ui.main;
const Lang = imports.lang;
const St = imports.gi.St;
const PopupMenu = imports.ui.popupMenu;
const Util = imports.misc.util;
const GLib = imports.gi.GLib;
const ModalDialog = imports.ui.modalDialog;
var pict = "r-button";
function ConfirmDialog(){
this._init();
}
function MyApplet(orientation) {
this._init(orientation);
}
MyApplet.prototype = {
__proto__: Applet.IconApplet.prototype,
_init: function(orientation) {
Applet.IconApplet.prototype._init.call(this, orientation);
try {
if (GLib.file_test("/usr/share/cinnamon/applets/FireWallApplet@antares127/marker", GLib.FileTest.EXISTS))
{pict = "g-button";}
else
{pict = "r-button";}
this.set_applet_icon_name(pict);
this.set_applet_tooltip(_("Кнопка управления Файерволом."));
this.menuManager = new PopupMenu.PopupMenuManager(this);
this.menu = new Applet.AppletPopupMenu(this, orientation);
this.menuManager.addMenu(this.menu);
this._contentSection = new PopupMenu.PopupMenuSection();
this.menu.addMenuItem(this._contentSection);
this.menu.addAction(_("Отключить файервол"), function(event) {
Util.spawnCommandLine("sudo /usr/share/cinnamon/applets/FireWallApplet@antares127/fw_off.sh");
pict = "r-button";
this.set_applet_icon_name(pict);
});
this.menu.addAction(_("Включить файервол"), function(event) {
Util.spawnCommandLine("sudo /usr/share/cinnamon/applets/FireWallApplet@antares127/fw_on.sh");
pict = "g-button";
this.set_applet_icon_name(pict);
});
this.menu.addAction(_("Включить файервол и ICMP"), function(event) {
Util.spawnCommandLine("sudo /usr/share/cinnamon/applets/FireWallApplet@antares127/fw_icmp_all.sh");
pict = "g-button";
this.set_applet_icon_name(pict);
});
}
catch (e) {
global.logError(e);
}
},
on_applet_clicked: function(event) {
this.set_applet_icon_name(pict);
this.menu.toggle();
},
};
function main(metadata, orientation) {
let myApplet = new MyApplet(orientation);
return myApplet;
}
Для отображения значка в трее, как видно, используются два картинко. И в зависимости от того в каком состоянии находится апплет иконка должна меняться. Но иконка мне упорно гадит. Перерисовывание иконки происходит только в тот момент когда после клика по меню и исполнения команды, повторно кликаешь по иконке. С моим уровнем знания явы и гугла заставить иконку перерисовываться вовремя мне не удалось. Прошу помощи.