Установить значок уведомления в оболочке Gnome ›= 3.16 (Пользовательское расширение)

Я развил расширение Gnome Shell, так как хочу изменить его в соответствии со своими личными предпочтениями. Я хочу отправлять уведомление каждый раз, когда происходит событие. Отправить само уведомление довольно просто с помощью Main.notify(summary, text). Однако я просто не могу понять, как установить собственный значок. [EDIT: следующее неверно. Я искал плохой код]Согласно репозиторию github gnome-shell, я могу определить значок с помощью необязательного параметра: Main.notify(summary, text, params), где params будет проверено в MessageTray.js l.367:

params = Params.parse(params, { gicon: null,
                                secondaryGIcon: null,
                                bannerMarkup: false,
                                clear: false,
                                soundName: null,
                                soundFile: null });

if (params.gicon || params.clear)
    this.gicon = params.gicon;

Поэтому я попытался использовать следующую команду:

Main.notify(summary, text, {gicon: myicon});

Но часть {gicon: myicon} полностью игнорируется и используется значок по умолчанию :-/. Я новичок в программировании Javascript и GNOME, так что, пожалуйста, не ненавидьте меня :-)

Рекомендуется ли вообще использовать Main.notify() или он устарел?

Ура, Мафардам


person tsabsch    schedule 03.10.2015    source источник


Ответы (1)


Я думаю, что обычно рекомендуется Main.notify(), так как он используется в некоторых "официальных" расширениях.

Однако Main.notify() принимает только два параметра (msg, details), поэтому вы не можете использовать эту функцию для установки пользовательского значка. Однако вы можете скопировать исходный код Main.notify() и адаптировать его под свои нужды. Внутри следующей функции source уведомления устанавливается на вновь созданный источник с пользовательским значком.

function notify(msg, details, icon) {
    let source = new MessageTray.Source("MyApp Information", icon);
    Main.messageTray.add(source);
    let notification = new MessageTray.Notification(source, msg, details);
    notification.setTransient(true);
    source.notify(notification);
}

Например, вы можете назвать это с помощью notify("MyApp", "Test", 'folder-symbolic');.

person JayStrictor    schedule 06.10.2015
comment
А, так информация о значке задается в переменной source. Спасибо, это то, что я пропустил. - person tsabsch; 06.10.2015
comment
Вы также можете использовать полностью настраиваемый GIcon, например: let notification = new MessageTray.Notification(source, msg, details, {gicon: my_g_icon});. Документация: gitlab.gnome. org/GNOME/gnome-shell/-/blob/master/js/ui/ - person Simme; 18.12.2020