Расширение Gnome: изменить изображение St.Icon при наведении?

Итак, задача проста, но не для меня - зеленого нуба по разработке расширений Gnome. Конечно, я гуглил это, но не нашел здесь ничего полезного.

расширение.js:

https://pastebin.com/TqDVp8Yz — потому что «ваш пост в основном код».

таблица стилей.css:

.poppy-button {
    background-size: 20px;
    width: 20px;
    height: 20px;
    background-image: url("Resources/poppy.svg");
}

.poppy-button:active,
.poppy-button:focus,
.poppy-button:checked,
.poppy-button:hover {
    background-image: url("Resources/poppy-active.svg");
}

person DIES    schedule 14.08.2017    source источник


Ответы (1)


Я бы избегал CSS и подключался к "enter-event" и "событие выхода" сигналы, так как все элементы StWidget также являются ClutterActors.

myIcon = new St.Icon({ icon_name: "normal-icon-name"; });

myIcon.connect("enter-event", (widget) => {
    widget.icon_name = "hover-icon-name";
});

myIcon.connect("leave-event", (widget) => {
    widget.icon_name = "normal-icon-name";
});

С другой стороны, ваш CSS может работать, если вы установите "track-hover" в true на StIcon.

Совет профессионалам-любителям: добавляйте тег "gjs" к своим вопросам, чтобы получить дополнительную справку по расширениям Gnome Shell.

person andy.holmes    schedule 15.08.2017
comment
Событие подключения не работает по какой-то причине, я пытался много раз, и все сводилось к тому, что «расширение вообще не активировалось» и «события просто игнорировались». Мне не остается ничего другого, кроме как использовать «track_hover» и то, что я не знаю, что мне нужно перед «реактивным». Есть ли еще какая-нибудь вещь «track_active»? Если вы хотите увидеть мой код прямо сейчас (он почти не изменился) - pastebin.com/m0adRq2w - person DIES; 15.08.2017
comment
Ваше расширение работает нормально (насколько я могу судить), но вы не определили icon_name для this.icon в строке 74. Вы должны добавить что-то вроде icon_name: "gnome-applications" к хэшу для этого определения. - person andy.holmes; 16.08.2017
comment
Кроме того, запуск journalctl /usr/bin/gnome-shell -f -o cat в открытом терминале даст вам полезный результат и поможет отладить ошибки. - person andy.holmes; 16.08.2017
comment
Он не определен из-за того, что я использую собственный значок, которого нет в теме значков. - person DIES; 18.08.2017
comment
В этом случае код, который вы разместили для своего расширения, сработал для меня. Поскольку иерархия ClutterActor-›StWidget-›StIcon, см. Свойства StWidget и Свойства ClutterActor. - person andy.holmes; 19.08.2017
comment
TL;DR Установите reactive: true, track_hover: true, затем либо поймайте enter-event/leave-event, либо попробуйте myIcon.connect("notify::hover", (widget) => { widget.icon_name = (widget.hover) ? "hover_icon_name" : "not_hover_icon_name" });. С пользовательским значком вы, вероятно, загрузите его как GIcon и будете использовать параметр gicon вместо icon_name. - person andy.holmes; 19.08.2017