From c6f029c94674b7e87f70ec2ea387c63fab00d6a5 Mon Sep 17 00:00:00 2001 From: Roman Dobosz Date: Thu, 26 Feb 2026 08:12:16 +0100 Subject: [PATCH] Make mouse wheel window focus configurable. With commit e45a3bc07d6356f57329c214e3fb32b87ad77669 a behavior change was introduced that may disrupt the workflow of a user who may intentionally want to give focus to a window without bringing it to the front. Using the scroll wheel is less intrusive compared to the left, right, and especially the middle (in the case of a terminal) mouse buttons. This commit introduces the ability to change the behavior by enabling or disabling the ability to focus a window with mouse wheel in the expert panel. --- WPrefs.app/Expert.c | 2 ++ src/WindowMaker.h | 1 + src/defaults.c | 2 ++ src/window.c | 2 +- 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/WPrefs.app/Expert.c b/WPrefs.app/Expert.c index d2d33028..d3731ae4 100644 --- a/WPrefs.app/Expert.c +++ b/WPrefs.app/Expert.c @@ -130,6 +130,8 @@ static struct expert_option { { N_("Keep dock on primary head."), /* default: */ False, OPTION_WMAKER, "KeepDockOnPrimaryHead"}, + { N_("Allow windows to take focus using mouse wheel."), + /* default: */ False, OPTION_WMAKER, "MouseWheelFocus"}, }; diff --git a/src/WindowMaker.h b/src/WindowMaker.h index dea943b9..f06f8015 100644 --- a/src/WindowMaker.h +++ b/src/WindowMaker.h @@ -378,6 +378,7 @@ extern struct WPreferences { char auto_focus; /* focus window when it's mapped */ char *icon_back_file; /* background image for icons */ char enforce_icon_margin; /* auto-shrink icon images */ + char mouse_wheel_focus; /* allow focus window with mouse wheel */ WCoord *root_menu_pos; /* initial position of the root menu*/ WCoord *app_menu_pos; diff --git a/src/defaults.c b/src/defaults.c index 6b6bc4c3..8472eac3 100644 --- a/src/defaults.c +++ b/src/defaults.c @@ -537,6 +537,8 @@ WDefaultEntry optionList[] = { NULL, getPropList, setHotCornerActions, NULL, NULL}, {"WindowListAppIcons", "NO", NULL, &wPreferences.window_list_app_icons, getBool, NULL, NULL, NULL}, + {"MouseWheelFocus", "NO", NULL, + &wPreferences.mouse_wheel_focus, getBool, NULL, NULL, NULL}, /* style options */ diff --git a/src/window.c b/src/window.c index 978f7b88..1f688cdc 100644 --- a/src/window.c +++ b/src/window.c @@ -2984,7 +2984,7 @@ static void frameMouseDown(WObjDescriptor *desc, XEvent *event) CloseWindowMenu(wwin->screen_ptr); - if (event->xbutton.button != Button4 && event->xbutton.button != Button5 && !(event->xbutton.state & ControlMask) && !WFLAGP(wwin, no_focusable)) + if ((wPreferences.mouse_wheel_focus || (event->xbutton.button != Button4 && event->xbutton.button != Button5)) && !(event->xbutton.state & ControlMask) && !WFLAGP(wwin, no_focusable)) wSetFocusTo(wwin->screen_ptr, wwin); if (event->xbutton.button == Button1)