Implement focus-shifting on Windows and waiting status

This commit is contained in:
Cacodemon345
2025-07-11 18:04:58 +06:00
parent bb7ebc72c8
commit 07c6a8a154
11 changed files with 70 additions and 1 deletions

View File

@@ -218,19 +218,32 @@ VMManagerClientSocket::eventFilter(QObject *obj, QEvent *event)
if (event->type() == QEvent::WindowBlocked) {
running_state = dopause ? VMManagerProtocol::RunningState::PausedWaiting : VMManagerProtocol::RunningState::RunningWaiting;
clientRunningStateChanged(running_state);
window_blocked = true;
} else if (event->type() == QEvent::WindowUnblocked) {
running_state = dopause ? VMManagerProtocol::RunningState::Paused : VMManagerProtocol::RunningState::Running;
clientRunningStateChanged(running_state);
window_blocked = false;
}
}
return QObject::eventFilter(obj, event);
}
void
VMManagerClientSocket::sendWinIdMessage(WId id)
{
QJsonObject extra_object;
extra_object["params"] = static_cast<int>(id);
sendMessageWithObject(VMManagerProtocol::ClientMessage::WinIdMessage, extra_object);
}
void
VMManagerClientSocket::clientRunningStateChanged(VMManagerProtocol::RunningState state) const
{
QJsonObject extra_object;
if ((state == VMManagerProtocol::RunningState::Paused
|| state == VMManagerProtocol::RunningState::Running) && window_blocked) {
state = (state == VMManagerProtocol::RunningState::Paused) ? VMManagerProtocol::RunningState::PausedWaiting : VMManagerProtocol::RunningState::RunningWaiting;
}
extra_object["status"] = static_cast<int>(state);
sendMessageWithObject(VMManagerProtocol::ClientMessage::RunningStateChanged, extra_object);
}