From 7149492e32b1d95a5611f2de831b5aa23e668ad1 Mon Sep 17 00:00:00 2001 From: Giorgio Bonvicini Date: Fri, 30 Jun 2017 13:40:52 +0200 Subject: [PATCH 1/2] Fixed focus management. Rewrote the `_Focus()` function to give focus to the foremost window in the desktop. Replaced the `_FocusIfRequested()` function with `_Focus()`. Had to update the library to the latest version as the `IsWindowOnDesktopNumber` function seemed not to work in the version previoulsy used. This solves #64 and possibly even the glitch of the flashing orange icons in the taskbar: I could not reproduce it in my tests for this version of the code, while with the stable release it happened quite often. --- libraries/virtual-desktop-accessor.dll | Bin 25600 -> 35840 bytes virtual-desktop-enhancer.ahk | 39 ++++++++++++++++--------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/libraries/virtual-desktop-accessor.dll b/libraries/virtual-desktop-accessor.dll index ece0458c7ff60c0fb1baf061c1b49c258ae62473..96abc285b7cce5bb04fa54957f6dc9e28d5cf98f 100644 GIT binary patch literal 35840 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 diff --git a/virtual-desktop-enhancer.ahk b/virtual-desktop-enhancer.ahk index b1f5b9f..90e1f24 100644 --- a/virtual-desktop-enhancer.ahk +++ b/virtual-desktop-enhancer.ahk @@ -24,7 +24,7 @@ global RegisterPostMessageHookProc := DllCall("GetProcAddress", Ptr, hVirtualDes global UnregisterPostMessageHookProc := DllCall("GetProcAddress", Ptr, hVirtualDesktopAccessor, AStr, "UnregisterPostMessageHook", "Ptr") global GetCurrentDesktopNumberProc := DllCall("GetProcAddress", Ptr, hVirtualDesktopAccessor, AStr, "GetCurrentDesktopNumber", "Ptr") global GetDesktopCountProc := DllCall("GetProcAddress", Ptr, hVirtualDesktopAccessor, AStr, "GetDesktopCount", "Ptr") -global IsWindowOnCurrentVirtualDesktopProc := DllCall("GetProcAddress", Ptr, hVirtualDesktopAccessor, AStr, "IsWindowOnCurrentVirtualDesktop", "Ptr") +global IsWindowOnDesktopNumberProc := DllCall("GetProcAddress", Ptr, hVirtualDesktopAccessor, AStr, "IsWindowOnDesktopNumber", "Ptr") global MoveWindowToDesktopNumberProc := DllCall("GetProcAddress", Ptr, hVirtualDesktopAccessor, AStr, "MoveWindowToDesktopNumber", "Ptr") global IsPinnedWindowProc := DllCall("GetProcAddress", Ptr, hVirtualDesktopAccessor, AStr, "IsPinnedWindow", "Ptr") global PinWindowProc := DllCall("GetProcAddress", Ptr, hVirtualDesktopAccessor, AStr, "PinWindow", "Ptr") @@ -74,7 +74,6 @@ global GeneralUseNativePrevNextDesktopSwitchingIfConflicting := (GeneralUseNativ global taskbarPrimaryID=0 global taskbarSecondaryID=0 global previousDesktopNo=0 -global doFocusAfterNextSwitch=0 global hasSwitchedDesktopsBefore=1 initialDesktopNo := _GetCurrentDesktopNumber() @@ -316,12 +315,14 @@ OnTogglePinAppPress() { } OnDesktopSwitch(n:=1) { + ; Give focus first, then display the popup, otherwise the popup could + ; steal the focus from the legitimate window until it disappears. + _Focus() if (TooltipsEnabled) { _ShowTooltipForDesktopSwitch(n) } _ChangeAppearance(n) _ChangeBackground(n) - _FocusIfRequested() if (previousDesktopNo) { _RunProgramWhenSwitchingFromDesktop(previousDesktopNo) @@ -335,7 +336,6 @@ OnDesktopSwitch(n:=1) { ; ====================================================================== SwitchToDesktop(n:=1) { - doFocusAfterNextSwitch=1 _ChangeDesktop(n) } @@ -345,7 +345,6 @@ MoveToDesktop(n:=1) { } MoveAndSwitchToDesktop(n:=1) { - doFocusAfterNextSwitch=1 _MoveCurrentWindowToDesktop(n) _ChangeDesktop(n) } @@ -535,16 +534,30 @@ _ChangeAppearance(n:=1) { } } -_FocusIfRequested() { - if (doFocusAfterNextSwitch) { - _Focus() - doFocusAfterNextSwitch=0 - } +; Give focus to the foremost window on teh desktop. +_Focus() { + foremostWindowId := _GetforemostWindowIdOnDesktop(_GetCurrentDesktopNumber()) + WinActivate, ahk_id %foremostWindowId% } -_Focus() { - WinActivate, ahk_class Shell_TrayWnd - SendEvent !{Esc} +; Select the ahk_id of the foremost window in a given virtual desktop. +_GetforemostWindowIdOnDesktop(n) { + if (n == 0) { + n := 10 + } + ; Desktop count starts at 1 for this script, but at 0 for Windows. + n -= 1 + + ; winIDList contains a list of windows IDs ordered from the top to the bottom for each desktop. + WinGet winIDList, list + Loop % winIDList { + windowID := % winIDList%A_Index% + windowIsOnDesktop := DllCall(IsWindowOnDesktopNumberProc, UInt, WindowID, UInt, n) + ; Select the first (and foremost) window which is in the specified desktop. + if (WindowIsOnDesktop == 1) { + return WindowID + } + } } _ShowTooltip(message:="") { From 026c79e1b009f3201552be4804b2c05a87c225a5 Mon Sep 17 00:00:00 2001 From: Giorgio Bonvicini Date: Sat, 1 Jul 2017 12:09:30 +0200 Subject: [PATCH 2/2] Reintroduced `_FocusIfRequested()`. Fixed typos. --- virtual-desktop-enhancer.ahk | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/virtual-desktop-enhancer.ahk b/virtual-desktop-enhancer.ahk index 90e1f24..4db4d9e 100644 --- a/virtual-desktop-enhancer.ahk +++ b/virtual-desktop-enhancer.ahk @@ -74,6 +74,7 @@ global GeneralUseNativePrevNextDesktopSwitchingIfConflicting := (GeneralUseNativ global taskbarPrimaryID=0 global taskbarSecondaryID=0 global previousDesktopNo=0 +global doFocusAfterNextSwitch=0 global hasSwitchedDesktopsBefore=1 initialDesktopNo := _GetCurrentDesktopNumber() @@ -317,7 +318,7 @@ OnTogglePinAppPress() { OnDesktopSwitch(n:=1) { ; Give focus first, then display the popup, otherwise the popup could ; steal the focus from the legitimate window until it disappears. - _Focus() + _FocusIfRequested() if (TooltipsEnabled) { _ShowTooltipForDesktopSwitch(n) } @@ -336,6 +337,7 @@ OnDesktopSwitch(n:=1) { ; ====================================================================== SwitchToDesktop(n:=1) { + doFocusAfterNextSwitch=1 _ChangeDesktop(n) } @@ -345,6 +347,7 @@ MoveToDesktop(n:=1) { } MoveAndSwitchToDesktop(n:=1) { + doFocusAfterNextSwitch=1 _MoveCurrentWindowToDesktop(n) _ChangeDesktop(n) } @@ -534,14 +537,22 @@ _ChangeAppearance(n:=1) { } } -; Give focus to the foremost window on teh desktop. +; Only give focus to the foremost window if it has been requested. +_FocusIfRequested() { + if (doFocusAfterNextSwitch) { + _Focus() + doFocusAfterNextSwitch=0 + } +} + +; Give focus to the foremost window on the desktop. _Focus() { - foremostWindowId := _GetforemostWindowIdOnDesktop(_GetCurrentDesktopNumber()) + foremostWindowId := _GetForemostWindowIdOnDesktop(_GetCurrentDesktopNumber()) WinActivate, ahk_id %foremostWindowId% } ; Select the ahk_id of the foremost window in a given virtual desktop. -_GetforemostWindowIdOnDesktop(n) { +_GetForemostWindowIdOnDesktop(n) { if (n == 0) { n := 10 }