From 390d93bbce5c76d8f6776a7d5d44cb4c526d756f Mon Sep 17 00:00:00 2001 From: lars-berger Date: Tue, 1 Oct 2024 08:52:09 +0100 Subject: [PATCH] fix: change focus method; remove input simulation to other processes (#754) --- .../common/events/handle_window_focused.rs | 1 - .../wm/src/common/platform/native_window.rs | 30 ++++++------------- 2 files changed, 9 insertions(+), 22 deletions(-) diff --git a/packages/wm/src/common/events/handle_window_focused.rs b/packages/wm/src/common/events/handle_window_focused.rs index e684161a7..57e7bf0f7 100644 --- a/packages/wm/src/common/events/handle_window_focused.rs +++ b/packages/wm/src/common/events/handle_window_focused.rs @@ -9,7 +9,6 @@ use crate::{ containers::{commands::set_focused_descendant, traits::CommonGetters}, user_config::{UserConfig, WindowRuleEvent}, windows::{commands::run_window_rules, traits::WindowGetters}, - wm_event::WmEvent, wm_state::WmState, workspaces::{commands::focus_workspace, WorkspaceTarget}, }; diff --git a/packages/wm/src/common/platform/native_window.rs b/packages/wm/src/common/platform/native_window.rs index 6b29c9a13..04d196111 100644 --- a/packages/wm/src/common/platform/native_window.rs +++ b/packages/wm/src/common/platform/native_window.rs @@ -15,10 +15,7 @@ use windows::{ PROCESS_QUERY_LIMITED_INFORMATION, }, UI::{ - Input::KeyboardAndMouse::{ - SendInput, INPUT, INPUT_0, INPUT_KEYBOARD, KEYBDINPUT, - KEYBD_EVENT_FLAGS, VIRTUAL_KEY, - }, + Input::KeyboardAndMouse::{SendInput, INPUT, INPUT_MOUSE}, WindowsAndMessaging::{ EnumWindows, GetClassNameW, GetWindow, GetWindowLongPtrW, GetWindowRect, GetWindowTextW, GetWindowThreadProcessId, IsIconic, @@ -284,23 +281,14 @@ impl NativeWindow { } pub fn set_foreground(&self) -> anyhow::Result<()> { - let input = INPUT { - r#type: INPUT_KEYBOARD, - Anonymous: INPUT_0 { - ki: KEYBDINPUT { - wVk: VIRTUAL_KEY(1), - wScan: 0, - dwFlags: KEYBD_EVENT_FLAGS(0), - time: 0, - dwExtraInfo: 0, - }, - }, - }; - - // Simulate a key press event to activate the window. VK code 1 is a - // left mouse button press and caused the least side effects versus - // other key codes. - unsafe { SendInput(&[input], std::mem::size_of::() as i32) }; + let input = [INPUT { + r#type: INPUT_MOUSE, + ..Default::default() + }]; + + // Bypass restriction for setting the foreground window by sending an + // input to our own process first. + unsafe { SendInput(&input, std::mem::size_of::() as i32) }; // Set as the foreground window. unsafe { SetForegroundWindow(HWND(self.handle)) }.ok()?;