You are not logged in.
Pages: 1
is there any way to change the status tray icons to other than the theme default?
I am trying to change the bluetooth and volume icons
Last edited by callmejoe (2022-08-01 15:52:39)
Offline
Some apps will use hard-coded tray icons and others will look for specific named ones from the current icon theme. Which bluetooth app is that (blueman-applet?) and volume app (pulseaudio plugin?)
For example, the pulseaudio plugin uses the icons named audio-volume-*.
Also, which icon theme are you using?
Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki | Community | Contribute ---
Offline
blueman-applet and the volume is from pasystray
i am using the adwaita icon theme.
Some apps will use hard-coded tray icons
so no way to change these?
others will look for specific named ones from the current icon theme
and how does it know where to look? so many folders with icons. i guess there is a standard?
Offline
pasystray is going to use the following icon prefixes:
static icon_set_t volume_icon_names = {
[ICON_IDX_MUTED] = "audio-volume-muted",
[ICON_IDX_LOW] = "audio-volume-low",
[ICON_IDX_MEDIUM] = "audio-volume-medium",
[ICON_IDX_HIGH] = "audio-volume-high"
};
Depending on the version of the Adwaita icon theme you are using, these icons should be located in the *x*/status folder (but may also have one or more "symbolic" tagged on.
The Blueman applet should use the blueman-tray-{active,disabled,paired} icons. The code is somewhat difficult to figure out.
Unfortunately, its quite the adventure trying to find a way to replace them.
Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki | Community | Contribute ---
Offline
so no way to change these?
Hard-coded would mean that there isn't a way apart from modifying the source and recompiling.
You can easily find out which icons are currently in use with GTK Inspector:
Activate a plug-in, hover over any of its elements and press Ctrl+Shift+i. Note down which state uses which icon, then create a symbolic link to the preferred ones from them.
Remember to edit the subject of your topic to include the [SOLVED] tag once you're satisfied with the answers or have found a solution (in which case, don't forget to share it as well), so that other members of the community can quickly refer to it and save their time. Pretty please!
Offline
@kbar, Unfortunately, that doesn't work for me for any systray/notifier items. They all show as NULL.
Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki | Community | Contribute ---
Offline
My apologies, I did not test it for systray icons. However, sn items (even inside the new combined systray) should have this property set, you just have to select the second/last child element, like so (redshift-gtk):
Can you name a few others? I'd like to look into them. Thanks.
Last edited by KBar (2022-07-31 12:41:07)
Remember to edit the subject of your topic to include the [SOLVED] tag once you're satisfied with the answers or have found a solution (in which case, don't forget to share it as well), so that other members of the community can quickly refer to it and save their time. Pretty please!
Offline
Alright, I installed the pasystray package on Debian sid and it displays the icon-name propertly (second/last GtkImage element). It also shows it on icon hover. Do you get the same behavior?
Edit: regarding the question itself.
You can try copying your current icon theme to ~/.icons to prevent your package manager from overwriting local changes. Next, you may replace the icons for each state with the ones you prefer. For example, from the screenshot above it's set to audio-volume-medium-symbolic.
find ~/.icons/Adwaita -name 'audio-volume-medium-symbolic*'
will print list all of the theme icons for medium audio volume. You don't have to replace all of the sizes, just the ones that your panel uses. The icon size should be equal to the one you set in systray properties. The pixel-size property should also tell you about this.
After replacing the icons:
Optional: run
gtk-update-icon-cache -f -t ~/.icons/<theme_name>
to create an icon cache
The end result after I copied an icon for the medium volume state from the Ubuntu mono theme to ~/.icons/Adwaita/scalable/status/audio-volume-medium-symbolic.svg:
Just for funsies:
Last edited by KBar (2022-07-31 13:52:12)
Remember to edit the subject of your topic to include the [SOLVED] tag once you're satisfied with the answers or have found a solution (in which case, don't forget to share it as well), so that other members of the community can quickly refer to it and save their time. Pretty please!
Offline
Do you get the same behavior?
I'm on arch and no I don't. Hovering over the icon and Ctrl+Shift+I brings up the xfdesktop inspector. I have to click on the icon first then bring up the inspector. Icon name is always NULL. Its been like this for me for a while now. I wonder what the difference is between the two? It would be nice to be able to get the name of the icon being used without having to look it up in the code.
Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki | Community | Contribute ---
Offline
Hovering over the icon and Ctrl+Shift+I brings up the xfdesktop inspector.
What I meant is that pasystray itself displays icon-name on hover, which is rather strange, but incidentally helpful in this case.
I wonder what the difference is between the two? It would be nice to be able to get the name of the icon being used without having to look it up in the code.
I'm probably wrong but it looks like that one GtkImage widget is created for the icon itself and the other for something called "overlay icon" (not/never/rarely? used).
box->icon = gtk_image_new ();
gtk_widget_set_parent (box->icon, GTK_WIDGET (box));
gtk_widget_show (box->icon);
box->overlay = gtk_image_new ();
gtk_widget_set_parent (box->overlay, GTK_WIDGET (box));
gtk_widget_show (box->overlay);
Systray's code looks too "raw" (as in yet to be finished) to me. As far as I can tell, for systray items a GtkImage is never created explicitly, so they get none of its properties. I'll play with it in gdb this week and see what I can find. Hopefully, a patch.
As for blueman, I blacklisted all Bluetooth modules a while ago. It took a lot of tinkering, so I wouldn't want to touch it. Can you identify whether it runs inside systray or statusnotifier? Thanks.
Remember to edit the subject of your topic to include the [SOLVED] tag once you're satisfied with the answers or have found a solution (in which case, don't forget to share it as well), so that other members of the community can quickly refer to it and save their time. Pretty please!
Offline
wow. way more involved than i had hoped. i was thinking changing these status tray icons was as easy as changing a .desktop launcher icon. but it seems it is not that easy.
this from KBar sounds like the right approach
You can try copying your current icon theme to ~/.icons to prevent your package manager from overwriting local changes. Next, you may replace the icons for each state with the ones you prefer. For example, from the screenshot above it's set to audio-volume-medium-symbolic.
still not sure how to choose the correct size directory. my systray is set to adjust icon size automatically, not a fixed size.
Last edited by callmejoe (2022-08-01 02:51:28)
Offline
but it seems it is not that easy.
Well, it's easy. It's just finding the right icons is a bit involved like you said.
still not sure how to choose the correct size directory. my systray is set to adjust icon size automatically, not a fixed size.
Even if it's set to adjust automatically, you can rule out huge ones. Do you change the panel width constantly? I doubt it. Do you set your panel to occupy half of your screen? I doubt it. Unlike GtkImage properties, GTK Inspector still has the allocation size:
If I enable automatic adjustment, the icons shrink down to 16px and allocation updates instantly.
Remember to edit the subject of your topic to include the [SOLVED] tag once you're satisfied with the answers or have found a solution (in which case, don't forget to share it as well), so that other members of the community can quickly refer to it and save their time. Pretty please!
Offline
Looks like it's a 32px one. You can verify by looking at all of the available icons:
find /usr/share/icons/Adwaita/ -name '*audio*' -exec ristretto {} +
Remember to edit the subject of your topic to include the [SOLVED] tag once you're satisfied with the answers or have found a solution (in which case, don't forget to share it as well), so that other members of the community can quickly refer to it and save their time. Pretty please!
Offline
Systray items are drawn by Cairo. Not sure if cairo_t contains data like icon name and size. It probably cannot be exposed directly, but the Resources tab lists all icons to be used:
I guess with a bit of a detective work, you can find which icons are being used, but in no way this is easy (can't preview selected icons, some are not shown). At least, you don't have to wander around the source code.
Last edited by KBar (2022-08-01 05:57:09)
Remember to edit the subject of your topic to include the [SOLVED] tag once you're satisfied with the answers or have found a solution (in which case, don't forget to share it as well), so that other members of the community can quickly refer to it and save their time. Pretty please!
Offline
As for blueman, I blacklisted all Bluetooth modules a while ago. It took a lot of tinkering, so I wouldn't want to touch it. Can you identify whether it runs inside systray or statusnotifier? Thanks.
StatusNotifier. The icon being used isn't identified in the Inspector.
Please remember to mark your thread [SOLVED] to make it easier for others to find
--- How To Ask For Help | FAQ | Developer Wiki | Community | Contribute ---
Offline
Alright, I enabled my Bluetooth again just to test this in a Debian VM. The icon-name property is shown as expected:
Available by selecting the second GtkImage element:
blueman-tray icons are provided by blueman:
find /usr/share/icons/ -name '*blueman-*'
/usr/share/icons/hicolor/24x24/status/blueman-active.png
/usr/share/icons/hicolor/24x24/status/blueman-tray.png
/usr/share/icons/hicolor/24x24/status/blueman-disabled.png
/usr/share/icons/hicolor/128x128/status/blueman-active.png
/usr/share/icons/hicolor/128x128/status/blueman-tray.png
/usr/share/icons/hicolor/128x128/status/blueman-disabled.png
/usr/share/icons/hicolor/22x22/status/blueman-active.png
/usr/share/icons/hicolor/22x22/status/blueman-tray.png
/usr/share/icons/hicolor/22x22/status/blueman-disabled.png
/usr/share/icons/hicolor/48x48/status/blueman-active.png
/usr/share/icons/hicolor/48x48/status/blueman-disabled.png
/usr/share/icons/hicolor/192x192/status/blueman-active.png
/usr/share/icons/hicolor/192x192/status/blueman-tray.png
/usr/share/icons/hicolor/192x192/status/blueman-disabled.png
/usr/share/icons/hicolor/72x72/status/blueman-active.png
/usr/share/icons/hicolor/72x72/status/blueman-tray.png
/usr/share/icons/hicolor/72x72/status/blueman-disabled.png
/usr/share/icons/hicolor/64x64/status/blueman-active.png
/usr/share/icons/hicolor/64x64/status/blueman-tray.png
/usr/share/icons/hicolor/64x64/status/blueman-disabled.png
/usr/share/icons/hicolor/16x16/status/blueman-down-active.png
/usr/share/icons/hicolor/16x16/status/blueman-active.png
/usr/share/icons/hicolor/16x16/status/blueman-up-active.png
/usr/share/icons/hicolor/16x16/status/blueman-tray.png
/usr/share/icons/hicolor/16x16/status/blueman-down-inactive.png
/usr/share/icons/hicolor/16x16/status/blueman-up-inactive.png
/usr/share/icons/hicolor/16x16/status/blueman-disabled.png
/usr/share/icons/hicolor/16x16/devices/blueman-device.png
/usr/share/icons/hicolor/32x32/status/blueman-down-active.png
/usr/share/icons/hicolor/32x32/status/blueman-active.png
/usr/share/icons/hicolor/32x32/status/blueman-up-active.png
/usr/share/icons/hicolor/32x32/status/blueman-tray.png
/usr/share/icons/hicolor/32x32/status/blueman-down-inactive.png
/usr/share/icons/hicolor/32x32/status/blueman-up-inactive.png
/usr/share/icons/hicolor/32x32/status/blueman-disabled.png
/usr/share/icons/hicolor/256x256/status/blueman-active.png
/usr/share/icons/hicolor/256x256/status/blueman-tray.png
/usr/share/icons/hicolor/256x256/status/blueman-disabled.png
/usr/share/icons/hicolor/scalable/emblems/blueman-trusted-emblem.svg
/usr/share/icons/hicolor/scalable/emblems/blueman-paired-emblem.svg
/usr/share/icons/hicolor/scalable/emblems/blueman-blocked-emblem.svg
/usr/share/icons/hicolor/scalable/actions/blueman-trust-symbolic.svg
/usr/share/icons/hicolor/scalable/actions/blueman-pair-symbolic.svg
/usr/share/icons/hicolor/scalable/actions/blueman-block-symbolic.svg
/usr/share/icons/hicolor/scalable/actions/blueman-untrust-symbolic.svg
/usr/share/icons/hicolor/scalable/actions/blueman-send-symbolic.svg
/usr/share/icons/hicolor/scalable/status/blueman-symbolic.svg
/usr/share/icons/hicolor/scalable/status/blueman-active.svg
/usr/share/icons/hicolor/scalable/status/blueman-tray-symbolic.svg
/usr/share/icons/hicolor/scalable/status/blueman-disabled.svg
/usr/share/icons/hicolor/scalable/status/blueman-x.svg
/usr/share/icons/hicolor/scalable/status/blueman-active-symbolic.svg
/usr/share/icons/hicolor/scalable/status/blueman-disabled-symbolic.svg
/usr/share/icons/hicolor/scalable/status/blueman-tray.svg
/usr/share/icons/hicolor/scalable/devices/blueman-serial.svg
/usr/share/icons/hicolor/scalable/devices/blueman-device.svg
/usr/share/icons/hicolor/96x96/status/blueman-active.png
/usr/share/icons/hicolor/96x96/status/blueman-tray.png
/usr/share/icons/hicolor/96x96/status/blueman-disabled.png
callmejoe, please let me know after you change icons, as I'd like to disable my Bluetooth again. For now, I'm going to keep it on just in case.
Remember to edit the subject of your topic to include the [SOLVED] tag once you're satisfied with the answers or have found a solution (in which case, don't forget to share it as well), so that other members of the community can quickly refer to it and save their time. Pretty please!
Offline
thanks KBar I got it all sorted out. a little trial and error, but not too bad.
But like ToZ i still get null as the icon name with the gtk inspector.
Offline
Pages: 1
[ Generated in 0.013 seconds, 10 queries executed - Memory usage: 637.14 KiB (Peak: 669.98 KiB) ]