desktop-entry: demote libsfdo error-logging

...to WLR_INFO to avoid logging issues with .desktop files as errors, for
example:

    [sfdo-desktop] 1:1: Name is unset
    [sfdo-desktop] Failed to load /usr/share/applications/lxqt-panel.desktop
    [sfdo-desktop] 1:1: Exec is unset while DBusActivatable is unset or false
    [sfdo-desktop] Failed to load /usr/share/applications/qemu.desktop

Also make libsfdo debug/info logging depend on environment variable
LABWC_DEBUG_LIBSFDO being set to avoid disproportionately verbose logging
by default for one particular sub-system.

Add an 'ENVIRONMENT VARIABLES' section to labwc(1) to describe the above
as well as other hitherto undocumented env vars with prefix LABWC_DEBUG_.
This commit is contained in:
Johan Malm 2024-12-27 22:19:35 +00:00 committed by Consolatis
parent cd3d88974c
commit 304a94e716
2 changed files with 50 additions and 1 deletions

View file

@ -39,7 +39,8 @@ the `--exit` and `--reconfigure` options use.
Specify a config directory
*-d, --debug*
Enable full logging, including debug information
Enable full logging, including debug information. See *ENVIRONMENT
VARIABLES* section below for further options.
*-e, --exit*
Exit the compositor by sending SIGTERM to `$LABWC_PID`
@ -117,6 +118,32 @@ this is accomplished by setting the session variables to empty strings. For
systemd, the command `systemctl --user unset-environment` will be invoked to
actually remove the variables from the activation environment.
# ENVIRONMENT VARIABLES
Set the environment variables listed below to enable specific debug options.
This can be done in either the *environment* file or on the command line, for
example: *LABWC_DEBUG_FOO=1 labwc*.
*LABWC_DEBUG_LIBSFDO*
Enable debug and info logging for libsfdo, for example for parsing of
.desktop files and searching for icons. Note that libsfdo error logging
is always enabled regardless of this environment variable but will only
be shown with the *-V|--version* option.
*LABWC_DEBUG_DIR_CONFIG_AND_THEME*
Increase logging of paths for config files (for example rc.xml,
autostart, environment and menu.xml) as well as titlebar buttons.
*LABWC_DEBUG_CONFIG_NODENAMES*++
*LABWC_DEBUG_MENU_NODENAMES*
Enable logging of all nodenames (for example *policy.placement: Cascade*
for *<placement><policy>Cascade</policy></placement>*) for config and
menu files respectively.
*LABWC_DEBUG_KEY_STATE*
Enable logging of press and release events for bound keys (generally
key-combinations like *Ctrl-Alt-t*)
# SEE ALSO
labwc-actions(5), labwc-config(5), labwc-menu(5), labwc-theme(5)

View file

@ -2,6 +2,7 @@
#include <sfdo-desktop.h>
#include <sfdo-icon.h>
#include <sfdo-basedir.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <wlr/util/log.h>
@ -13,6 +14,8 @@
#include "labwc.h"
static const char *debug_libsfdo;
struct sfdo {
struct sfdo_desktop_ctx *desktop_ctx;
struct sfdo_icon_ctx *icon_ctx;
@ -23,6 +26,23 @@ struct sfdo {
static void
log_handler(enum sfdo_log_level level, const char *fmt, va_list args, void *tag)
{
/*
* libsfdo info/debug logging is only provided when LABWC_DEBUG_LIBSFDO
* is set to avoid disproportionately verbose logging by default for one
* particularly sub-system.
*/
if (!debug_libsfdo && level > SFDO_LOG_LEVEL_ERROR) {
return;
}
/*
* To avoid logging issues with .desktop files as errors, all libsfdo
* error-logging is demoted to info level.
*/
if (level == SFDO_LOG_LEVEL_ERROR) {
level = SFDO_LOG_LEVEL_INFO;
}
/* add a prefix if the format length is reasonable */
char buf[256];
if (snprintf(buf, sizeof(buf), "[%s] %s", (const char *)tag, fmt)
@ -38,6 +58,8 @@ desktop_entry_init(struct server *server)
{
struct sfdo *sfdo = znew(*sfdo);
debug_libsfdo = getenv("LABWC_DEBUG_LIBSFDO");
struct sfdo_basedir_ctx *basedir_ctx = sfdo_basedir_ctx_create();
if (!basedir_ctx) {
goto err_basedir_ctx;