- *trimmed_identifier* Show trimmed identifier. Trimming removes
the first two nodes of 'org.' strings.
+ - *desktop_entry_name* Show application name from freedesktop.org desktop
+ entry/file. Falls back to trimmed identifier (trimmed_identifier).
+
- *title* Show window title if different to app_id
- *workspace* Show workspace name
- 's' - state of window (short form), values [M|m|F] (1 space)
- 'I' - wm-class/app-id
- 'i' - wm-class/app-id trimmed, remove "org." if available
+ - 'n' - desktop entry/file application name, falls back to
+ wm-class/app-id trimmed
- 'W' - workspace name
- 'w' - workspace name (if more than 1 ws configured)
- 'O' - output name
#include "view.h"
#include "workspaces.h"
#include "labwc.h"
+#if HAVE_LIBSFDO
+#include "desktop-entry.h"
+#endif
#include "osd.h"
/* includes '%', terminating 's' and NULL byte, 8 is enough for %-9999s */
return identifier;
}
+static const char *
+get_desktop_name(struct view *view)
+{
+#if HAVE_LIBSFDO
+ const char *app_id = view_get_string_prop(view, "app_id");
+ const char *name = desktop_entry_name_lookup(view->server, app_id);
+ if (name) {
+ return name;
+ }
+#endif
+
+ return get_app_id_or_class(view, /* trim */ true);
+}
+
static const char *
get_type(struct view *view, bool short_form)
{
buf_add(buf, get_app_id_or_class(view, /*trim*/ true));
}
+static void
+field_set_desktop_entry_name(struct buf *buf, struct view *view, const char *format)
+{
+ /* custom type conversion-specifier: n */
+ buf_add(buf, get_desktop_name(view));
+}
+
static void
field_set_title(struct buf *buf, struct view *view, const char *format)
{
[LAB_FIELD_WIN_STATE] = { 's', field_set_win_state },
[LAB_FIELD_IDENTIFIER] = { 'I', field_set_identifier },
[LAB_FIELD_TRIMMED_IDENTIFIER] = { 'i', field_set_identifier_trimmed },
+ [LAB_FIELD_DESKTOP_ENTRY_NAME] = { 'n', field_set_desktop_entry_name},
[LAB_FIELD_WORKSPACE] = { 'W', field_set_workspace },
[LAB_FIELD_WORKSPACE_SHORT] = { 'w', field_set_workspace_short },
[LAB_FIELD_OUTPUT] = { 'O', field_set_output },
field->content = LAB_FIELD_IDENTIFIER;
} else if (!strcmp(content, "trimmed_identifier")) {
field->content = LAB_FIELD_TRIMMED_IDENTIFIER;
+ } else if (!strcmp(content, "desktop_entry_name")) {
+ field->content = LAB_FIELD_DESKTOP_ENTRY_NAME;
} else if (!strcmp(content, "title")) {
/* Keep old defaults */
field->content = LAB_FIELD_TITLE_SHORT;