Support XKB_CONTEXT_NO_SECURE_GETENV flag

Since kwin play with CAP_SYS_NICE, secure_getenv will fail for xkbcommon
to load user level xkbmap. This allows kwin to load config under
~/.config/xkb

BUG: 447206
icc-effect-5.26.90
Weng Xuetian 2023-01-06 16:53:55 -08:00 committed by Vlad Zahorodnii
parent d4f847574e
commit 6e87fae7f7
3 changed files with 13 additions and 1 deletions

View File

@ -223,6 +223,11 @@ set_package_properties(XKB PROPERTIES
TYPE REQUIRED
PURPOSE "Required for building KWin with Wayland support"
)
if (XKB_VERSION VERSION_GREATER_EQUAL 1.5.0)
set(HAVE_XKBCOMMON_NO_SECURE_GETENV 1)
else()
set(HAVE_XKBCOMMON_NO_SECURE_GETENV 0)
endif()
pkg_check_modules(XKBX11 IMPORTED_TARGET xkbcommon-x11 REQUIRED)
add_feature_info(XKBX11 XKBX11_FOUND "Required for handling keyboard events in X11 backend")

View File

@ -19,6 +19,7 @@
#cmakedefine01 HAVE_BREEZE_DECO
#cmakedefine01 HAVE_SCHED_RESET_ON_FORK
#cmakedefine01 HAVE_ACCESSIBILITY
#cmakedefine01 HAVE_XKBCOMMON_NO_SECURE_GETENV
#if HAVE_BREEZE_DECO
#define BREEZE_KDECORATION_PLUGIN_ID "${BREEZE_KDECORATION_PLUGIN_ID}"
#endif

View File

@ -70,8 +70,14 @@ static void xkbLogHandler(xkb_context *context, xkb_log_level priority, const ch
}
}
#if HAVE_XKBCOMMON_NO_SECURE_GETENV
constexpr xkb_context_flags KWIN_XKB_CONTEXT_FLAGS = XKB_CONTEXT_NO_SECURE_GETENV;
#else
constexpr xkb_context_flags KWIN_XKB_CONTEXT_FLAGS = XKB_CONTEXT_NO_FLAGS;
#endif
Xkb::Xkb(bool followLocale1)
: m_context(xkb_context_new(XKB_CONTEXT_NO_FLAGS))
: m_context(xkb_context_new(KWIN_XKB_CONTEXT_FLAGS))
, m_keymap(nullptr)
, m_state(nullptr)
, m_shiftModifier(0)