From cb4cddb168aefbacc05e616df3a05f310e4fe705 Mon Sep 17 00:00:00 2001 From: Renn <8340896+AkazaRenn@users.noreply.github.com> Date: Mon, 7 Oct 2024 19:10:47 -0400 Subject: [PATCH] fix(deck): Use super + 1/2 for Overlay/QAM (#1724) * fix(deck): Use super 1/2 for overlay/qam * fix(deck): fix filename in spec files * fix(deck): fix filename in spec files * fix(deck): keep ctrl modifier as an option, default on --- spec_files/gamescope/gamescope-legacy.spec | 2 +- spec_files/gamescope/gamescope.spec | 2 +- ...-ctrl-1-2-to-steam-s-wayland-session.patch | 40 ----------------- .../v2-0001-steam-overlay-hotkeys.patch | 44 +++++++++++++++++++ system_files/deck/shared/etc/environment | 3 ++ 5 files changed, 49 insertions(+), 42 deletions(-) delete mode 100644 spec_files/gamescope/v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch create mode 100644 spec_files/gamescope/v2-0001-steam-overlay-hotkeys.patch diff --git a/spec_files/gamescope/gamescope-legacy.spec b/spec_files/gamescope/gamescope-legacy.spec index 5feb51701d..805bc3e0b8 100644 --- a/spec_files/gamescope/gamescope-legacy.spec +++ b/spec_files/gamescope/gamescope-legacy.spec @@ -18,7 +18,7 @@ Source2: https://github.com/Joshua-Ashton/reshade/archive/%{reshade_commi Patch0: 0001-cstdint.patch # https://hhd.dev/ -Patch1: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch +Patch1: v2-0001-steam-overlay-hotkeys.patch # ChimeraOS Patch2: legacy-720p.patch diff --git a/spec_files/gamescope/gamescope.spec b/spec_files/gamescope/gamescope.spec index 52f377b43f..b9d9e4e2e8 100644 --- a/spec_files/gamescope/gamescope.spec +++ b/spec_files/gamescope/gamescope.spec @@ -22,7 +22,7 @@ Patch1: chimeraos.patch # https://hhd.dev/ Patch2: disable-steam-touch-click-atom.patch -Patch3: v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch +Patch3: v2-0001-steam-overlay-hotkeys.patch # https://github.com/ValveSoftware/gamescope/issues/1369 Patch4: revert-299bc34.patch diff --git a/spec_files/gamescope/v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch b/spec_files/gamescope/v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch deleted file mode 100644 index b583936d9d..0000000000 --- a/spec_files/gamescope/v2-0001-always-send-ctrl-1-2-to-steam-s-wayland-session.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 35e001dc59a44227d670c667a85a6ef5472eee58 Mon Sep 17 00:00:00 2001 -From: antheas -Date: Sat, 20 Jul 2024 01:23:19 +0300 -Subject: [PATCH v2] always send ctrl+1/2 to steam's wayland session - ---- - src/wlserver.cpp | 10 +++++++++- - 1 file changed, 9 insertions(+), 1 deletion(-) - -diff --git a/src/wlserver.cpp b/src/wlserver.cpp -index 1852be9..7de737d 100644 ---- a/src/wlserver.cpp -+++ b/src/wlserver.cpp -@@ -369,7 +369,12 @@ static void wlserver_handle_key(struct wl_listener *listener, void *data) - keysym == XKB_KEY_XF86AudioLowerVolume || - keysym == XKB_KEY_XF86AudioRaiseVolume || - keysym == XKB_KEY_XF86PowerOff; -- if ( ( event->state == WL_KEYBOARD_KEY_STATE_PRESSED || event->state == WL_KEYBOARD_KEY_STATE_RELEASED ) && forbidden_key ) -+ -+ // Check for steam keys (ctrl + 1/2) -+ bool is_steamshortcut = (keyboard->wlr->modifiers.depressed & WLR_MODIFIER_CTRL) && (keysym == XKB_KEY_1 || -+ keysym == XKB_KEY_2); -+ -+ if ( ( event->state == WL_KEYBOARD_KEY_STATE_PRESSED || event->state == WL_KEYBOARD_KEY_STATE_RELEASED ) && (forbidden_key || is_steamshortcut) ) - { - // Always send volume+/- to root server only, to avoid it reaching the game. - struct wlr_surface *old_kb_surf = wlserver.kb_focus_surface; -@@ -378,6 +383,9 @@ static void wlserver_handle_key(struct wl_listener *listener, void *data) - { - wlserver_keyboardfocus( new_kb_surf, false ); - wlr_seat_set_keyboard( wlserver.wlr.seat, keyboard->wlr ); -+ // Send modifiers to steam for it to work -+ if (is_steamshortcut) -+ wlr_seat_keyboard_notify_modifiers(wlserver.wlr.seat, &keyboard->wlr->modifiers); - wlr_seat_keyboard_notify_key( wlserver.wlr.seat, event->time_msec, event->keycode, event->state ); - wlserver_keyboardfocus( old_kb_surf, false ); - return; --- -2.45.2 - diff --git a/spec_files/gamescope/v2-0001-steam-overlay-hotkeys.patch b/spec_files/gamescope/v2-0001-steam-overlay-hotkeys.patch new file mode 100644 index 0000000000..c22ea43baf --- /dev/null +++ b/spec_files/gamescope/v2-0001-steam-overlay-hotkeys.patch @@ -0,0 +1,44 @@ +diff --git a/src/wlserver.cpp b/src/wlserver.cpp +index 3535c9b..d29a3d5 100644 +--- a/src/wlserver.cpp ++++ b/src/wlserver.cpp +@@ -290,6 +290,9 @@ static void wlserver_handle_modifiers(struct wl_listener *listener, void *data) + bump_input_counter(); + } + ++// false if GS_ENABLE_CTRL_12 exists and is 0, true otherwise ++bool env_gs_enable_ctrl_12 = getenv("GS_ENABLE_CTRL_12") ? (getenv("GS_ENABLE_CTRL_12")[0] != '0') : true; ++ + static void wlserver_handle_key(struct wl_listener *listener, void *data) + { + struct wlserver_keyboard *keyboard = wl_container_of( listener, keyboard, key ); +@@ -310,7 +313,14 @@ static void wlserver_handle_key(struct wl_listener *listener, void *data) + keysym == XKB_KEY_XF86AudioLowerVolume || + keysym == XKB_KEY_XF86AudioRaiseVolume || + keysym == XKB_KEY_XF86PowerOff; +- if ( ( event->state == WL_KEYBOARD_KEY_STATE_PRESSED || event->state == WL_KEYBOARD_KEY_STATE_RELEASED ) && forbidden_key ) ++ ++ // Check for steam overlay key (ctrl/super + 1/2) ++ bool is_steamshortcut = ++ ((env_gs_enable_ctrl_12 && (keyboard->wlr->modifiers.depressed & WLR_MODIFIER_CTRL)) || ++ (keyboard->wlr->modifiers.depressed & WLR_MODIFIER_LOGO)) && ++ (keysym == XKB_KEY_1 || keysym == XKB_KEY_2); ++ ++ if ( ( event->state == WL_KEYBOARD_KEY_STATE_PRESSED || event->state == WL_KEYBOARD_KEY_STATE_RELEASED ) && (forbidden_key || is_steamshortcut) ) + { + // Always send volume+/- to root server only, to avoid it reaching the game. + struct wlr_surface *old_kb_surf = wlserver.kb_focus_surface; +@@ -319,6 +329,13 @@ static void wlserver_handle_key(struct wl_listener *listener, void *data) + { + wlserver_keyboardfocus( new_kb_surf, false ); + wlr_seat_set_keyboard( wlserver.wlr.seat, keyboard->wlr ); ++ if (is_steamshortcut) ++ { ++ // send ctrl down modifier to trigger the overlay ++ wlr_keyboard_modifiers ctrl_down_modifier; ++ ctrl_down_modifier.depressed = WLR_MODIFIER_CTRL; ++ wlr_seat_keyboard_notify_modifiers(wlserver.wlr.seat, &ctrl_down_modifier); ++ } + wlr_seat_keyboard_notify_key( wlserver.wlr.seat, event->time_msec, event->keycode, event->state ); + wlserver_keyboardfocus( old_kb_surf, false ); + return; diff --git a/system_files/deck/shared/etc/environment b/system_files/deck/shared/etc/environment index d28b52a004..cb049800c7 100644 --- a/system_files/deck/shared/etc/environment +++ b/system_files/deck/shared/etc/environment @@ -3,3 +3,6 @@ EDITOR=/usr/bin/vim # Disable Brew auto-update HOMEBREW_NO_AUTO_UPDATE=1 + +# Passthrough ctrl + 1/2 ingame +#GS_ENABLE_CTRL_12=0 \ No newline at end of file