Я работаю над приложением которое представляет из себя мессенджер. Когда приходит сообщение то при помощи QSystemIconTray отображается сообщение об этом. Уведомления нормально отображаются. Когда я жму на уведомление то по сигналу MessageClicked() открывается окно приложения. Однако после открытия окно находится не в фокусе, а при попытке напечатать что-то в поле ввода ни к чему не приводит. Реагировать приложение начинает только после нажатия на него.
Для попытки открыть окно на переднем плане я пока использую текущей код:
appWindow->setWindowState(static_cast<Qt::WindowState>(appWindow->windowState() & ~Qt::WindowMinimized));
const auto winId = appWindow->winId();
#ifdef Q_OS_WIN
QWindowsWindowFunctions::setWindowActivationBehavior(QWindowsWindowFunctions::AlwaysActivateWindow);
appWindow->requestActivate();
AllowSetForegroundWindow(ASFW_ANY);
HWND appWinHandle = HWND(winId);
HWND curWinHandle = GetForegroundWindow();
DWORD appWinThreadID = GetCurrentThreadId();
DWORD curWinThreadID = GetWindowThreadProcessId(curWinHandle, NULL);
SetWindowPos(appWinHandle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
SetWindowPos(appWinHandle, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
AllowSetForegroundWindow(curWinThreadID);
keybd_event(VK_MENU, 0, 0, 0);
SetForegroundWindow(appWinHandle);
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
AttachThreadInput(curWinThreadID, appWinThreadID, FALSE);
SetFocus(appWinHandle);
SetActiveWindow(appWinHandle);
Но всё равно не помогает. Насколько я знаю в Windows есть ограничения на то, какое приложение может захватить фокус. Однако я видел что многие другие приложения открываются в фокусе после нажатия на их уведомления в центре уведомлений. При этом получается довольно странно, что если пользователь жмет на уведомление от приложения в центре уведомлений то это не считается пользовательским вводом.
Есть ли какие-нибудь способы исправить это ?