qt: Send dialog status to VM-manager & fix pause

- Manager is notified of modal dialogs blocking the main window.
- Pause command from manager uses action to prevent desyncing pause status
in the menus and toolbar.
This commit is contained in:
ts-korhonen
2022-01-22 02:41:02 +02:00
parent 7995be4adb
commit 3d0b100199
5 changed files with 41 additions and 2 deletions

View File

@@ -144,15 +144,23 @@ int main(int argc, char* argv[]) {
std::unique_ptr<WindowsManagerFilter> wmfilter;
if (source_hwnd)
{
HWND main_hwnd = (HWND)main_window->winId();
wmfilter.reset(new WindowsManagerFilter());
QObject::connect(wmfilter.get(), WindowsManagerFilter::showsettings, main_window, MainWindow::showSettings);
QObject::connect(wmfilter.get(), WindowsManagerFilter::pause, [](){ plat_pause(dopause ^ 1); });
QObject::connect(wmfilter.get(), WindowsManagerFilter::pause, main_window, MainWindow::togglePause);
QObject::connect(wmfilter.get(), WindowsManagerFilter::reset, main_window, MainWindow::hardReset);
QObject::connect(wmfilter.get(), WindowsManagerFilter::shutdown, [](){ plat_power_off(); });
QObject::connect(wmfilter.get(), WindowsManagerFilter::ctrlaltdel, [](){ pc_send_cad(); });
QObject::connect(wmfilter.get(), WindowsManagerFilter::dialogstatus, [main_hwnd](bool open){
PostMessage((HWND)(uintptr_t)source_hwnd, WM_SENDDLGSTATUS, (WPARAM)(open ? 1 : 0), (LPARAM)main_hwnd);
});
/* Native filter to catch VM-managers commands */
app.installNativeEventFilter(wmfilter.get());
HWND main_hwnd = (HWND)main_window->winId();
/* Filter to catch main window being blocked (by modal dialog) */
main_window->installEventFilter(wmfilter.get());
/* Send main window HWND to manager */
PostMessage((HWND)(uintptr_t)source_hwnd, WM_SENDHWND, (WPARAM)unique_id, (LPARAM)main_hwnd);