mirror of
https://github.com/swaywm/sway.git
synced 2026-06-13 14:33:19 -04:00
Drops the in-tree icon theme parser and lookup logic in favor of libsfdo-icon, which implements the icon theme spec. Absolute icon paths are handled in swaybar itself with an access() probe, since libsfdo intentionally doesn't deal with them. Pixmap fallback still kicks in if load_image() fails on the absolute path. KDE's IconThemePath is honored via sfdo_icon_theme_load_from() with a per-SNI override theme that gets dropped when the property changes. The min/max size cache per SNI is replaced by re-lookup when the rendered size changes; libsfdo caches the parsed theme internally and reads gtk's icon-theme.cache files, so this is cheap. Theme switching at runtime is preserved via a new tray_reload_icon_theme() called from parse_bar_config(). The old code worked here implicitly because all themes were preloaded. Closes: https://github.com/swaywm/sway/issues/8607
58 lines
1.3 KiB
C
58 lines
1.3 KiB
C
#ifndef _SWAYBAR_TRAY_ITEM_H
|
|
#define _SWAYBAR_TRAY_ITEM_H
|
|
|
|
#include <cairo.h>
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
#include <wayland-util.h>
|
|
#include "swaybar/tray/tray.h"
|
|
#include "list.h"
|
|
|
|
struct swaybar_output;
|
|
|
|
struct swaybar_pixmap {
|
|
int size;
|
|
unsigned char pixels[];
|
|
};
|
|
|
|
struct swaybar_sni_slot {
|
|
struct wl_list link; // swaybar_sni::slots
|
|
struct swaybar_sni *sni;
|
|
const char *prop;
|
|
const char *type;
|
|
void *dest;
|
|
sd_bus_slot *slot;
|
|
};
|
|
|
|
struct swaybar_sni {
|
|
// icon properties
|
|
struct swaybar_tray *tray;
|
|
cairo_surface_t *icon;
|
|
int icon_size;
|
|
int target_size;
|
|
struct sfdo_icon_theme *icon_theme_override; // non-NULL if IconThemePath set
|
|
|
|
// dbus properties
|
|
char *watcher_id;
|
|
char *service;
|
|
char *path;
|
|
char *interface;
|
|
|
|
char *status;
|
|
char *icon_name;
|
|
list_t *icon_pixmap; // struct swaybar_pixmap *
|
|
char *attention_icon_name;
|
|
list_t *attention_icon_pixmap; // struct swaybar_pixmap *
|
|
bool item_is_menu;
|
|
char *menu;
|
|
char *icon_theme_path; // non-standard KDE property
|
|
|
|
struct wl_list slots; // swaybar_sni_slot::link
|
|
};
|
|
|
|
struct swaybar_sni *create_sni(char *id, struct swaybar_tray *tray);
|
|
void destroy_sni(struct swaybar_sni *sni);
|
|
uint32_t render_sni(cairo_t *cairo, struct swaybar_output *output, double *x,
|
|
struct swaybar_sni *sni);
|
|
|
|
#endif
|