Add <theme><fallbackAppIcon>

This commit adds <theme><fallbackAppIcon> that configures the icon name
to be used when lookups for an application icon is failed. Its default
value is set as 'labwc' which shows our labwc logo.
This commit is contained in:
tokyo4j 2025-01-12 16:52:37 +09:00
parent b832c07a44
commit b21859fd6b
5 changed files with 19 additions and 0 deletions

View file

@ -483,6 +483,12 @@ extending outward from the snapped edge.
*<theme><icon>*
The name of the icon theme to use. It is not set by default.
*<theme><fallbackAppIcon>*
The name of the icon to use as a fallback when the application icon
(e.g. window icon in the titlebar) is not available. The name follows
the ones specified in "Icon=" entries in desktop files.
Default is 'labwc'.
*<theme><titlebar><layout>*
Selection and order of buttons in a window's titlebar.
The following identifiers can be used, each only once:

View file

@ -30,6 +30,7 @@
<theme>
<name></name>
<icon></icon>
<fallbackAppIcon>labwc</fallbackAppIcon>
<titlebar>
<layout>icon:iconify,max,close</layout>
<showTitle>yes</showTitle>

View file

@ -84,6 +84,7 @@ struct rcxml {
/* theme */
char *theme_name;
char *icon_theme_name;
char *fallback_app_icon_name;
struct wl_list title_buttons_left;
struct wl_list title_buttons_right;
int corner_radius;

View file

@ -27,6 +27,10 @@ _create_buffer(struct scaled_scene_buffer *scaled_buffer, double scale)
} else if (self->app_id) {
img = desktop_entry_load_icon_from_app_id(self->server,
self->app_id, icon_size, scale);
if (!img) {
img = desktop_entry_load_icon(self->server,
rc.fallback_app_icon_name, icon_size, scale);
}
}
if (!img) {

View file

@ -1073,6 +1073,8 @@ entry(xmlNode *node, char *nodename, char *content)
xstrdup_replace(rc.theme_name, content);
} else if (!strcmp(nodename, "icon.theme")) {
xstrdup_replace(rc.icon_theme_name, content);
} else if (!strcasecmp(nodename, "fallbackAppIcon.theme")) {
xstrdup_replace(rc.fallback_app_icon_name, content);
} else if (!strcasecmp(nodename, "layout.titlebar.theme")) {
fill_title_layout(content);
} else if (!strcasecmp(nodename, "showTitle.titlebar.theme")) {
@ -1677,6 +1679,10 @@ post_processing(void)
load_default_mouse_bindings();
}
if (!rc.fallback_app_icon_name) {
rc.fallback_app_icon_name = xstrdup("labwc");
}
if (!rc.title_layout_loaded) {
#if HAVE_LIBSFDO
fill_title_layout("icon:iconify,max,close");
@ -1928,6 +1934,7 @@ rcxml_finish(void)
zfree(rc.font_osd.name);
zfree(rc.theme_name);
zfree(rc.icon_theme_name);
zfree(rc.fallback_app_icon_name);
zfree(rc.workspace_config.prefix);
zfree(rc.tablet.output_name);