]> git.mdlowis.com Git - proto/labwc.git/commitdiff
sfdo: add sfdo_desktop_entry_name_lookup()
authorJens Peters <jp7677@gmail.com>
Mon, 18 Nov 2024 18:03:39 +0000 (19:03 +0100)
committerJens Peters <jp7677@gmail.com>
Tue, 19 Nov 2024 17:36:54 +0000 (18:36 +0100)
include/desktop-entry.h
src/desktop-entry.c

index 30db1546750e07c506f331a2ab38ec376878cae5..42b4708129732d05144bcaf97e40fa8e4b6eaaa0 100644 (file)
@@ -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 */
index d51451edd1dff0bc34d1ee84621661e6f3846f2b..404bc9890f3da5171bd17dc1569ff50c9951b340 100644 (file)
@@ -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;
+}