On Tue, 6 Jun 2023, adr wrote:
hmm... by the nature of xorg and looking at the code of ctwm this looks unachievable. It would be easy to add an option like MapToFocus so all new mapped windows get focus (and grab the pointer). That's the behaviour already when ClickToFocus is set and the window wants input (A similar behaviour occurs with transient windows when AutoFousToTransients is set). The window should also grab the pointer to not lose focus, for example moving it using the keyboard when ClicToFocus is not set.
This patch does that, if someone wants to try it. ================================================== diff -ur usr/xsrc/external/mit/ctwm/dist/ctwm_main.c /usr/xsrc/external/mit/ctwm/dist/ctwm_main.c --- usr/xsrc/external/mit/ctwm/dist/ctwm_main.c 2021-04-11 09:36:52.000000000 +0100 +++ /usr/xsrc/external/mit/ctwm/dist/ctwm_main.c 2023-06-07 02:33:34.572100881 +0100 @@ -1074,6 +1074,7 @@ scr->StayUpMenus = false; scr->WarpToDefaultMenuEntry = false; scr->ClickToFocus = false; + scr->MapToFocus = false; scr->SloppyFocus = false; scr->SaveWorkspaceFocus = false; scr->NoIconTitlebar = false; diff -ur usr/xsrc/external/mit/ctwm/dist/event_handlers.c /usr/xsrc/external/mit/ctwm/dist/event_handlers.c --- usr/xsrc/external/mit/ctwm/dist/event_handlers.c 2021-04-11 09:36:52.000000000 +0100 +++ /usr/xsrc/external/mit/ctwm/dist/event_handlers.c 2023-06-07 02:53:24.600649543 +0100 @@ -2020,6 +2020,9 @@ Tmp_win->wmhints->input) { SetFocus(Tmp_win, CurrentTime); } + if(Scr->MapToFocus && Tmp_win->wmhints->input) { + WarpToWindow(Tmp_win, true); + } break; case InactiveState: diff -ur usr/xsrc/external/mit/ctwm/dist/parse_be.c /usr/xsrc/external/mit/ctwm/dist/parse_be.c --- usr/xsrc/external/mit/ctwm/dist/parse_be.c 2021-04-11 09:36:52.000000000 +0100 +++ /usr/xsrc/external/mit/ctwm/dist/parse_be.c 2023-06-07 02:37:27.498039084 +0100 @@ -128,6 +128,7 @@ #define kw0_GrabServer 76 #define kw0_DontNameDecorations 77 #define kw0_StrictWinNameEncoding 78 +#define kw0_MapToFocus 79 #define kws_UsePPosition 1 #define kws_IconFont 2 @@ -326,6 +327,7 @@ { "lock", LOCK, 0 }, { "m", META, 0 }, { "maketitle", MAKE_TITLE, 0 }, + { "maptofocus", KEYWORD, kw0_MapToFocus }, { "mapwindowbackground", CLKEYWORD, kwcl_MapWindowBackground }, { "mapwindowcurrentworkspace", MAPWINDOWCURRENTWORKSPACE, 0}, { "mapwindowdefaultworkspace", MAPWINDOWDEFAULTWORKSPACE, 0}, @@ -788,6 +790,10 @@ Scr->ClickToFocus = true; return true; + case kw0_MapToFocus: + Scr->MapToFocus = true; + return true; + case kw0_ReallyMoveInWorkspaceManager: Scr->ReallyMoveInWorkspaceManager = true; return true; diff -ur usr/xsrc/external/mit/ctwm/dist/screen.h /usr/xsrc/external/mit/ctwm/dist/screen.h --- usr/xsrc/external/mit/ctwm/dist/screen.h 2021-04-11 11:11:58.000000000 +0100 +++ /usr/xsrc/external/mit/ctwm/dist/screen.h 2023-06-07 02:38:16.774530269 +0100 @@ -879,6 +879,7 @@ bool StayUpMenus; ///< StayUpMenus config var bool WarpToDefaultMenuEntry; ///< WarpToDefaultMenuEntry config var bool ClickToFocus; ///< ClickToFocus config var + bool MapToFocus; ///< MapToFocus config var bool SloppyFocus; ///< SloppyFocus config var bool SaveWorkspaceFocus; ///< SaveWorkspaceFocus config var bool NoIconManagers; ///< NoIconManagers config var