Directly focus wine_window while holding Shift

This lets you type spaces in Bitwig, and it also allows you to interact
with the settings/license popup dialogs in Voxengo plugins in a normal
way.
This commit is contained in:
Robbert van der Helm
2021-07-31 16:24:38 +02:00
parent bf59e5e8ce
commit e430c5f015
4 changed files with 58 additions and 1 deletions
+16 -1
View File
@@ -785,7 +785,17 @@ void Editor::fix_local_coordinates() const {
}
void Editor::set_input_focus(bool grab) const {
const xcb_window_t focus_target = grab ? parent_window : host_window;
// NOTE: When grabbing focus, you can hold down the shift key to focus the
// Wine window directly. This allows you to use the space key in
// plugin GUIs in Bitwig when necessary (e.g. for naming presets) but
// still allow space to pause/resume the transport when it's not
// needed. It's also needed for dialogs in Voxengo plugins to function
// properly, as they don't grab input focus themselves.
const xcb_window_t focus_target =
grab ? (get_active_modifiers().value_or(0) & XCB_MOD_MASK_SHIFT
? wine_window
: parent_window)
: host_window;
xcb_generic_error_t* error = nullptr;
const xcb_get_input_focus_cookie_t focus_cookie =
@@ -865,6 +875,11 @@ std::optional<uint16_t> Editor::get_active_modifiers() const noexcept {
return std::nullopt;
}
logger.log_editor_trace([&]() {
return "DEBUG: Active keyboard modifiers: " +
std::to_string(query_pointer_reply->mask);
});
return query_pointer_reply->mask;
}