- * certain circumstnaces and instead flashes the windows toolbar icon.
- * Attaching the htread input queues avoids this behavior */
- DWORD oldId = GetWindowThreadProcessId(GetForegroundWindow(), NULL);
- DWORD newId = GetWindowThreadProcessId(win->sys->hwnd, NULL);
- AttachThreadInput(oldId, newId, TRUE);
- SetForegroundWindow(win->sys->hwnd);
- AttachThreadInput(oldId, newId, FALSE);
+ * certain circumstances and instead flashes the windows toolbar icon.
+ * Attaching the thread input queues avoids this behavior */
+ HWND fgWin = GetForegroundWindow();
+ if (fgWin == win->sys->hwnd)
+ return; // already focused
+ DWORD oldId = GetWindowThreadProcessId(fgWin, NULL);
+ DWORD newId = GetCurrentThreadId();
+ 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);
+
+ if (oldId != newId)
+ AttachThreadInput(oldId, newId, FALSE);