From a9641940cb8b2fad47a0dfe242e409cf274afcca Mon Sep 17 00:00:00 2001 From: Kurt Kartaltepe Date: Sun, 23 Oct 2022 20:05:00 -0700 Subject: [PATCH] libobs: Add media key support for linux Links up the xkb keysyms with the obs vk codes. Fixes #7649 --- libobs/obs-nix-wayland.c | 30 ++++++++++++++++++++++++++++++ libobs/obs-nix-x11.c | 15 +++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/libobs/obs-nix-wayland.c b/libobs/obs-nix-wayland.c index 5ed882bdd..b649f131e 100644 --- a/libobs/obs-nix-wayland.c +++ b/libobs/obs-nix-wayland.c @@ -1061,6 +1061,21 @@ static obs_key_t obs_nix_wayland_key_from_virtual_key(int sym) return OBS_KEY_NUM8; case XKB_KEY_KP_9: return OBS_KEY_NUM9; + + case XKB_KEY_XF86AudioPlay: + return OBS_KEY_VK_MEDIA_PLAY_PAUSE; + case XKB_KEY_XF86AudioStop: + return OBS_KEY_VK_MEDIA_STOP; + case XKB_KEY_XF86AudioPrev: + return OBS_KEY_VK_MEDIA_PREV_TRACK; + case XKB_KEY_XF86AudioNext: + return OBS_KEY_VK_MEDIA_NEXT_TRACK; + case XKB_KEY_XF86AudioMute: + return OBS_KEY_VK_VOLUME_MUTE; + case XKB_KEY_XF86AudioRaiseVolume: + return OBS_KEY_VK_VOLUME_DOWN; + case XKB_KEY_XF86AudioLowerVolume: + return OBS_KEY_VK_VOLUME_UP; } return OBS_KEY_NONE; } @@ -1607,6 +1622,21 @@ static int obs_nix_wayland_key_to_virtual_key(obs_key_t key) return XKB_KEY_KP_8; case OBS_KEY_NUM9: return XKB_KEY_KP_9; + + case OBS_KEY_VK_MEDIA_PLAY_PAUSE: + return XKB_KEY_XF86AudioPlay; + case OBS_KEY_VK_MEDIA_STOP: + return XKB_KEY_XF86AudioStop; + case OBS_KEY_VK_MEDIA_PREV_TRACK: + return XKB_KEY_XF86AudioPrev; + case OBS_KEY_VK_MEDIA_NEXT_TRACK: + return XKB_KEY_XF86AudioNext; + case OBS_KEY_VK_VOLUME_MUTE: + return XKB_KEY_XF86AudioMute; + case OBS_KEY_VK_VOLUME_DOWN: + return XKB_KEY_XF86AudioRaiseVolume; + case OBS_KEY_VK_VOLUME_UP: + return XKB_KEY_XF86AudioLowerVolume; default: break; } diff --git a/libobs/obs-nix-x11.c b/libobs/obs-nix-x11.c index 54eea1628..ce571b977 100644 --- a/libobs/obs-nix-x11.c +++ b/libobs/obs-nix-x11.c @@ -673,6 +673,21 @@ static int get_keysym(obs_key_t key) case OBS_KEY_MOUSE5: return MOUSE_5; + case OBS_KEY_VK_MEDIA_PLAY_PAUSE: + return XF86XK_AudioPlay; + case OBS_KEY_VK_MEDIA_STOP: + return XF86XK_AudioStop; + case OBS_KEY_VK_MEDIA_PREV_TRACK: + return XF86XK_AudioPrev; + case OBS_KEY_VK_MEDIA_NEXT_TRACK: + return XF86XK_AudioNext; + case OBS_KEY_VK_VOLUME_MUTE: + return XF86XK_AudioMute; + case OBS_KEY_VK_VOLUME_DOWN: + return XF86XK_AudioRaiseVolume; + case OBS_KEY_VK_VOLUME_UP: + return XF86XK_AudioLowerVolume; + /* TODO: Implement keys for non-US keyboards */ default:; }