From 9002468229292c695b54817f3ca86bc64663364c Mon Sep 17 00:00:00 2001 From: Robbert van der Helm Date: Wed, 21 Jul 2021 18:06:18 +0200 Subject: [PATCH] Fetch the Wine and root window IDs early There's no reason to wait until the last moment to fetch these. --- src/wine-host/editor.cpp | 16 +++++----------- src/wine-host/editor.h | 5 ++++- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/wine-host/editor.cpp b/src/wine-host/editor.cpp index a3f339d3..d373f642 100644 --- a/src/wine-host/editor.cpp +++ b/src/wine-host/editor.cpp @@ -174,10 +174,12 @@ ATOM get_window_class() noexcept; DeferredWin32Window::DeferredWin32Window( MainContext& main_context, std::shared_ptr x11_connection, - HWND window) noexcept + HWND window) : handle(window), main_context(main_context), - x11_connection(x11_connection) {} + x11_connection(x11_connection), + wine_window(get_x11_handle(handle)), + root_window(get_root_window(*x11_connection, wine_window)) {} DeferredWin32Window::~DeferredWin32Window() noexcept { // NOTE: For some rason, Wine will sometimes try to delete a window twice if @@ -186,15 +188,7 @@ DeferredWin32Window::~DeferredWin32Window() noexcept { // iZotope Rx plugins. In Renoise this would otherwise trigger an X11 // error every time you close such a plugin's editor, and in other // DAWs I've also seen it happen from time to time. - try { - const xcb_window_t wine_window = get_x11_handle(handle); - const xcb_window_t root_window = - get_root_window(*x11_connection, wine_window); - xcb_reparent_window(x11_connection.get(), wine_window, root_window, 0, - 0); - } catch (const std::runtime_error& error) { - std::cerr << error.what() << std::endl; - } + xcb_reparent_window(x11_connection.get(), wine_window, root_window, 0, 0); // XXX: We are already deferring this closing by posting `WM_CLOSE` to the // message loop instead of calling `DestroyWindow()` ourselves, but we diff --git a/src/wine-host/editor.h b/src/wine-host/editor.h index 58abd01a..06f8ab73 100644 --- a/src/wine-host/editor.h +++ b/src/wine-host/editor.h @@ -102,7 +102,7 @@ class DeferredWin32Window { */ DeferredWin32Window(MainContext& main_context, std::shared_ptr x11_connection, - HWND window) noexcept; + HWND window); /** * Post a `WM_CLOSE` message to the `handle`'s message queue as described @@ -115,6 +115,9 @@ class DeferredWin32Window { private: MainContext& main_context; std::shared_ptr x11_connection; + + const xcb_window_t wine_window; + const xcb_window_t root_window; }; /**