From 57aee700f731262e771ae33c4128aa1385878143 Mon Sep 17 00:00:00 2001 From: Jens Peters Date: Mon, 18 Nov 2024 19:03:39 +0100 Subject: [PATCH] sfdo: add sfdo_desktop_entry_name_lookup() --- include/desktop-entry.h | 11 +++++++++++ src/desktop-entry.c | 40 +++++++++++++++++++++++++++++++++++----- 2 files changed, 46 insertions(+), 5 deletions(-) diff --git a/include/desktop-entry.h b/include/desktop-entry.h index 30db1546..42b47081 100644 --- a/include/desktop-entry.h +++ b/include/desktop-entry.h @@ -6,7 +6,18 @@ struct server; void desktop_entry_init(struct server *server); void desktop_entry_finish(struct server *server); + struct lab_data_buffer *desktop_entry_icon_lookup(struct server *server, const char *app_id, int size, float scale); +/** + * desktop_entry_name_lookup() - return the application name + * from the sfdo desktop entry database based on app_id + * + * The lifetime of the returned value is the same as that + * of sfdo_desktop_db (from `struct sfdo.desktop_db`) + */ +const char *desktop_entry_name_lookup(struct server *server, + const char *app_id); + #endif /* LABWC_DESKTOP_ENTRY_H */ diff --git a/src/desktop-entry.c b/src/desktop-entry.c index d51451ed..404bc989 100644 --- a/src/desktop-entry.c +++ b/src/desktop-entry.c @@ -255,6 +255,18 @@ get_db_entry_by_id_fuzzy(struct sfdo_desktop_db *db, const char *app_id) return NULL; } +static struct sfdo_desktop_entry * +get_desktop_entry(struct sfdo *sfdo, const char *app_id) +{ + struct sfdo_desktop_entry *entry = sfdo_desktop_db_get_entry_by_id( + sfdo->desktop_db, app_id, SFDO_NT); + if (!entry) { + entry = get_db_entry_by_id_fuzzy(sfdo->desktop_db, app_id); + } + + return entry; +} + struct lab_data_buffer * desktop_entry_icon_lookup(struct server *server, const char *app_id, int size, float scale) @@ -265,11 +277,7 @@ desktop_entry_icon_lookup(struct server *server, const char *app_id, int size, } const char *icon_name = NULL; - struct sfdo_desktop_entry *entry = sfdo_desktop_db_get_entry_by_id( - sfdo->desktop_db, app_id, SFDO_NT); - if (!entry) { - entry = get_db_entry_by_id_fuzzy(sfdo->desktop_db, app_id); - } + struct sfdo_desktop_entry *entry = get_desktop_entry(sfdo, app_id); if (entry) { icon_name = sfdo_desktop_entry_get_icon(entry, NULL); } @@ -321,3 +329,25 @@ desktop_entry_icon_lookup(struct server *server, const char *app_id, int size, free(ctx.path); return icon_buffer; } + +const char * +desktop_entry_name_lookup(struct server *server, const char *app_id) +{ + struct sfdo *sfdo = server->sfdo; + if (!sfdo) { + return NULL; + } + + struct sfdo_desktop_entry *entry = get_desktop_entry(sfdo, app_id); + if (!entry) { + return NULL; + } + + size_t len; + const char *name = sfdo_desktop_entry_get_name(entry, &len); + if (!len) { + return NULL; + } + + return name; +}