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 committed by Consolatis
parent dc474521ab
commit 26064fb8f6
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);