X-Git-Url: http://pileus.org/git/?p=wmpus;a=blobdiff_plain;f=sys-win32.c;h=5d0550ab9cdafa398e1a739b86353dacb1808dbd;hp=8513bca081f71a38af95174aeb136b1bce3ac294;hb=a2379eee427e03e718b5307a6bd290453a058aca;hpb=5400d10e39b84ade9f890a9dcb1d146a517d7951 diff --git a/sys-win32.c b/sys-win32.c index 8513bca..5d0550a 100644 --- a/sys-win32.c +++ b/sys-win32.c @@ -342,16 +342,21 @@ void sys_focus(win_t *win) /* Windows prevents a thread from using SetForegroundInput under * certain circumstances and instead flashes the windows toolbar icon. * Attaching the thread input queues avoids this behavior */ - DWORD oldId = GetWindowThreadProcessId(GetForegroundWindow(), NULL); + HWND fgWin = GetForegroundWindow(); + if (fgWin == win->sys->hwnd) + return; // already focused + DWORD oldId = GetWindowThreadProcessId(fgWin, NULL); DWORD newId = GetCurrentThreadId(); - AttachThreadInput(oldId, newId, TRUE); + if (oldId != newId) + AttachThreadInput(oldId, newId, TRUE); HWND next = GetWindow(win->sys->hwnd, GW_HWNDNEXT); SetWindowPos(win->sys->hwnd, NULL, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); if (next) SetWindowPos(win->sys->hwnd, next, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); - AttachThreadInput(oldId, newId, FALSE); + if (oldId != newId) + AttachThreadInput(oldId, newId, FALSE); } void sys_show(win_t *win, state_t state)