1
0
mirror of synced 2025-01-26 16:23:44 +01:00

fix: Pattern editor shortcuts being set to use CTRL on macOS

This commit is contained in:
WerWolv 2024-12-15 22:39:24 +01:00
parent 89090b25e3
commit a07c79efcb
4 changed files with 53 additions and 47 deletions

View File

@ -138,6 +138,7 @@ namespace hex {
constexpr Key() = default; constexpr Key() = default;
constexpr Key(Keys key) : m_key(static_cast<u32>(key)) { } constexpr Key(Keys key) : m_key(static_cast<u32>(key)) { }
bool operator==(const Key &) const = default;
auto operator<=>(const Key &) const = default; auto operator<=>(const Key &) const = default;
[[nodiscard]] constexpr u32 getKeyCode() const { return m_key; } [[nodiscard]] constexpr u32 getKeyCode() const { return m_key; }
@ -171,7 +172,7 @@ namespace hex {
Shortcut& operator=(Shortcut &&) noexcept = default; Shortcut& operator=(Shortcut &&) noexcept = default;
constexpr static inline auto None = Keys(0); constexpr static auto None = Keys(0);
Shortcut operator+(const Key &other) const { Shortcut operator+(const Key &other) const {
Shortcut result = *this; Shortcut result = *this;
@ -187,25 +188,21 @@ namespace hex {
} }
bool operator<(const Shortcut &other) const { bool operator<(const Shortcut &other) const {
u64 left = 0; return m_keys < other.m_keys;
for (const auto &key : m_keys)
left |= key.getKeyCode();
u64 right = 0;
for (const auto &key : other.m_keys)
right |= key.getKeyCode();
return left < right;
} }
bool operator==(const Shortcut &other) const { bool operator==(const Shortcut &other) const {
u64 left = 0; return m_keys == other.m_keys;
for (const auto &key : m_keys) }
left |= key.getKeyCode();
u64 right = 0; bool match(const Shortcut &other) const {
for (const auto &key : other.m_keys) auto left = m_keys;
right |= key.getKeyCode(); auto right = other.m_keys;
left.erase(AllowWhileTyping);
right.erase(AllowWhileTyping);
left.erase(CurrentView);
right.erase(CurrentView);
return left == right; return left == right;
} }
@ -214,6 +211,10 @@ namespace hex {
return m_keys.contains(CurrentView); return m_keys.contains(CurrentView);
} }
bool allowWhileTyping() const {
return m_keys.contains(AllowWhileTyping);
}
std::string toString() const; std::string toString() const;
const std::set<Key>& getKeys() const { return m_keys; } const std::set<Key>& getKeys() const { return m_keys; }

View File

@ -181,22 +181,26 @@ namespace hex {
void ShortcutManager::addGlobalShortcut(const Shortcut &shortcut, const std::vector<UnlocalizedString> &unlocalizedName, const std::function<void()> &callback) { void ShortcutManager::addGlobalShortcut(const Shortcut &shortcut, const std::vector<UnlocalizedString> &unlocalizedName, const std::function<void()> &callback) {
log::debug("Adding global shortcut {} for {}", shortcut.toString(), unlocalizedName.back().get()); log::debug("Adding global shortcut {} for {}", shortcut.toString(), unlocalizedName.back().get());
s_globalShortcuts->insert({ shortcut, { shortcut, unlocalizedName, callback } }); auto [it, inserted] = s_globalShortcuts->insert({ shortcut, { shortcut, unlocalizedName, callback } });
if (!inserted) log::error("Failed to add shortcut!");
} }
void ShortcutManager::addGlobalShortcut(const Shortcut &shortcut, const UnlocalizedString &unlocalizedName, const std::function<void()> &callback) { void ShortcutManager::addGlobalShortcut(const Shortcut &shortcut, const UnlocalizedString &unlocalizedName, const std::function<void()> &callback) {
log::debug("Adding global shortcut {} for {}", shortcut.toString(), unlocalizedName.get()); log::debug("Adding global shortcut {} for {}", shortcut.toString(), unlocalizedName.get());
s_globalShortcuts->insert({ shortcut, { shortcut, { unlocalizedName }, callback } }); auto [it, inserted] = s_globalShortcuts->insert({ shortcut, { shortcut, { unlocalizedName }, callback } });
if (!inserted) log::error("Failed to add shortcut!");
} }
void ShortcutManager::addShortcut(View *view, const Shortcut &shortcut, const std::vector<UnlocalizedString> &unlocalizedName, const std::function<void()> &callback) { void ShortcutManager::addShortcut(View *view, const Shortcut &shortcut, const std::vector<UnlocalizedString> &unlocalizedName, const std::function<void()> &callback) {
log::debug("Adding shortcut {} for {}", shortcut.toString(), unlocalizedName.back().get()); log::debug("Adding shortcut {} for {}", shortcut.toString(), unlocalizedName.back().get());
view->m_shortcuts.insert({ shortcut + CurrentView, { shortcut, unlocalizedName, callback } }); auto [it, inserted] = view->m_shortcuts.insert({ shortcut + CurrentView, { shortcut, unlocalizedName, callback } });
if (!inserted) log::error("Failed to add shortcut!");
} }
void ShortcutManager::addShortcut(View *view, const Shortcut &shortcut, const UnlocalizedString &unlocalizedName, const std::function<void()> &callback) { void ShortcutManager::addShortcut(View *view, const Shortcut &shortcut, const UnlocalizedString &unlocalizedName, const std::function<void()> &callback) {
log::debug("Adding shortcut {} for {}", shortcut.toString(), unlocalizedName.get()); log::debug("Adding shortcut {} for {}", shortcut.toString(), unlocalizedName.get());
view->m_shortcuts.insert({ shortcut + CurrentView, { shortcut, { unlocalizedName }, callback } }); auto [it, inserted] = view->m_shortcuts.insert({ shortcut + CurrentView, { shortcut, { unlocalizedName }, callback } });
if (!inserted) log::error("Failed to add shortcut!");
} }
static Shortcut getShortcut(bool ctrl, bool alt, bool shift, bool super, bool focused, u32 keyCode) { static Shortcut getShortcut(bool ctrl, bool alt, bool shift, bool super, bool focused, u32 keyCode) {
@ -224,11 +228,11 @@ namespace hex {
if (ImGui::IsPopupOpen(ImGuiID(0), ImGuiPopupFlags_AnyPopupId)) if (ImGui::IsPopupOpen(ImGuiID(0), ImGuiPopupFlags_AnyPopupId))
return; return;
if (shortcuts.contains(shortcut + AllowWhileTyping)) { for (const auto &[potentialShortcut, entry] : shortcuts) {
shortcuts.at(shortcut + AllowWhileTyping).callback(); if (potentialShortcut.match(shortcut)) {
} else if (shortcuts.contains(shortcut)) { if (!ImGui::GetIO().WantTextInput || potentialShortcut.allowWhileTyping())
if (!ImGui::GetIO().WantTextInput) entry.callback();
shortcuts.at(shortcut).callback(); }
} }
} }

View File

@ -283,7 +283,7 @@ namespace hex::plugin::builtin {
bool settingChanged = false; bool settingChanged = false;
ImGui::BeginDisabled(m_drawShortcut == m_defaultShortcut); ImGui::BeginDisabled(m_drawShortcut.match(m_defaultShortcut));
if (ImGuiExt::IconButton(ICON_VS_X, ImGui::GetStyleColorVec4(ImGuiCol_Text))) { if (ImGuiExt::IconButton(ICON_VS_X, ImGui::GetStyleColorVec4(ImGuiCol_Text))) {
m_hasDuplicate = !ShortcutManager::updateShortcut(m_shortcut, m_defaultShortcut, m_view); m_hasDuplicate = !ShortcutManager::updateShortcut(m_shortcut, m_defaultShortcut, m_view);
@ -320,8 +320,9 @@ namespace hex::plugin::builtin {
m_editing = false; m_editing = false;
ShortcutManager::resumeShortcuts(); ShortcutManager::resumeShortcuts();
settingChanged = true; settingChanged = true;
if (!m_hasDuplicate) { if (!m_hasDuplicate) {
} }
} }
} }

View File

@ -2294,16 +2294,16 @@ namespace hex::plugin::builtin {
} }
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::G + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.goto_line", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::G + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.goto_line", [this] {
m_openGotoLinePopUp = true; m_openGotoLinePopUp = true;
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::F + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.find", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::F + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.find", [this] {
m_openFindReplacePopUp = true; m_openFindReplacePopUp = true;
m_replaceMode = false; m_replaceMode = false;
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::H + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.replace", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::H + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.replace", [this] {
if (m_focusedSubWindowName.contains(textEditorView)) { if (m_focusedSubWindowName.contains(textEditorView)) {
m_openFindReplacePopUp = true; m_openFindReplacePopUp = true;
m_replaceMode = true; m_replaceMode = true;
@ -2358,11 +2358,11 @@ namespace hex::plugin::builtin {
hex::plugin::builtin::saveProjectAs(); hex::plugin::builtin::saveProjectAs();
}); });
// ShortcutManager::addShortcut(this, CTRL + Keys::Insert + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.copy", [this] { // ShortcutManager::addShortcut(this, CTRLCMD + Keys::Insert + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.copy", [this] {
// m_textEditor.Copy(); // m_textEditor.Copy();
// }); // });
ShortcutManager::addShortcut(this, CTRL + Keys::C + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.copy", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::C + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.copy", [this] {
if (auto editor = getEditorFromFocusedWindow(); editor != nullptr) if (auto editor = getEditorFromFocusedWindow(); editor != nullptr)
editor->Copy(); editor->Copy();
}); });
@ -2371,12 +2371,12 @@ namespace hex::plugin::builtin {
// m_textEditor.Paste(); // m_textEditor.Paste();
// }); // });
ShortcutManager::addShortcut(this, CTRL + Keys::V + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.paste", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::V + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.paste", [this] {
if (m_focusedSubWindowName.contains(textEditorView)) if (m_focusedSubWindowName.contains(textEditorView))
m_textEditor.Paste(); m_textEditor.Paste();
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::X + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.cut", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::X + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.cut", [this] {
if (m_focusedSubWindowName.contains(textEditorView)) if (m_focusedSubWindowName.contains(textEditorView))
m_textEditor.Cut(); m_textEditor.Cut();
}); });
@ -2385,7 +2385,7 @@ namespace hex::plugin::builtin {
// m_textEditor.Cut(); // m_textEditor.Cut();
// }); // });
ShortcutManager::addShortcut(this, CTRL + Keys::Z + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.undo", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::Z + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.undo", [this] {
if (m_focusedSubWindowName.contains(textEditorView)) if (m_focusedSubWindowName.contains(textEditorView))
m_textEditor.Undo(); m_textEditor.Undo();
}); });
@ -2399,12 +2399,12 @@ namespace hex::plugin::builtin {
m_textEditor.Delete(); m_textEditor.Delete();
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::Y + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.redo", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::Y + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.redo", [this] {
if (m_focusedSubWindowName.contains(textEditorView)) if (m_focusedSubWindowName.contains(textEditorView))
m_textEditor.Redo(); m_textEditor.Redo();
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::A + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.select_all", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::A + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.select_all", [this] {
if (auto editor = getEditorFromFocusedWindow(); editor != nullptr) if (auto editor = getEditorFromFocusedWindow(); editor != nullptr)
editor->SelectAll(); editor->SelectAll();
}); });
@ -2414,7 +2414,7 @@ namespace hex::plugin::builtin {
editor->MoveRight(1, true, false); editor->MoveRight(1, true, false);
}); });
ShortcutManager::addShortcut(this, CTRL + SHIFT + Keys::Right + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.select_word_right", [this] { ShortcutManager::addShortcut(this, CTRLCMD + SHIFT + Keys::Right + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.select_word_right", [this] {
if (auto editor = getEditorFromFocusedWindow(); editor != nullptr) if (auto editor = getEditorFromFocusedWindow(); editor != nullptr)
editor->MoveRight(1, true, true); editor->MoveRight(1, true, true);
}); });
@ -2424,7 +2424,7 @@ namespace hex::plugin::builtin {
editor->MoveLeft(1, true, false); editor->MoveLeft(1, true, false);
}); });
ShortcutManager::addShortcut(this, CTRL + SHIFT + Keys::Left + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.select_word_left", [this] { ShortcutManager::addShortcut(this, CTRLCMD + SHIFT + Keys::Left + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.select_word_left", [this] {
if (auto editor = getEditorFromFocusedWindow(); editor != nullptr) if (auto editor = getEditorFromFocusedWindow(); editor != nullptr)
editor->MoveLeft(1, true, true); editor->MoveLeft(1, true, true);
}); });
@ -2449,12 +2449,12 @@ namespace hex::plugin::builtin {
editor->MoveDown(editor->GetPageSize()-4, true); editor->MoveDown(editor->GetPageSize()-4, true);
}); });
ShortcutManager::addShortcut(this, CTRL + SHIFT + Keys::Home + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.select_top", [this] { ShortcutManager::addShortcut(this, CTRLCMD + SHIFT + Keys::Home + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.select_top", [this] {
if (auto editor = getEditorFromFocusedWindow(); editor != nullptr) if (auto editor = getEditorFromFocusedWindow(); editor != nullptr)
editor->MoveTop(true); editor->MoveTop(true);
}); });
ShortcutManager::addShortcut(this, CTRL + SHIFT + Keys::End + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.select_bottom", [this] { ShortcutManager::addShortcut(this, CTRLCMD + SHIFT + Keys::End + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.select_bottom", [this] {
if (auto editor = getEditorFromFocusedWindow(); editor != nullptr) if (auto editor = getEditorFromFocusedWindow(); editor != nullptr)
editor->MoveBottom(true); editor->MoveBottom(true);
}); });
@ -2469,12 +2469,12 @@ namespace hex::plugin::builtin {
editor->MoveEnd(true); editor->MoveEnd(true);
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::Delete + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.delete_word_right", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::Delete + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.delete_word_right", [this] {
if (m_focusedSubWindowName.contains(textEditorView)) if (m_focusedSubWindowName.contains(textEditorView))
m_textEditor.DeleteWordRight(); m_textEditor.DeleteWordRight();
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::Backspace + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.delete_word_left", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::Backspace + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.delete_word_left", [this] {
if (m_focusedSubWindowName.contains(textEditorView)) if (m_focusedSubWindowName.contains(textEditorView))
m_textEditor.DeleteWordLeft(); m_textEditor.DeleteWordLeft();
}); });
@ -2489,7 +2489,7 @@ namespace hex::plugin::builtin {
m_textEditor.SetOverwrite(!m_textEditor.IsOverwrite()); m_textEditor.SetOverwrite(!m_textEditor.IsOverwrite());
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::Right + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.move_word_right", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::Right + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.move_word_right", [this] {
if (auto editor = getEditorFromFocusedWindow(); editor != nullptr) if (auto editor = getEditorFromFocusedWindow(); editor != nullptr)
editor->MoveRight(1, false, true); editor->MoveRight(1, false, true);
}); });
@ -2499,7 +2499,7 @@ namespace hex::plugin::builtin {
editor->MoveRight(1, false, false); editor->MoveRight(1, false, false);
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::Left + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.move_word_left", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::Left + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.move_word_left", [this] {
if (auto editor = getEditorFromFocusedWindow(); editor != nullptr) if (auto editor = getEditorFromFocusedWindow(); editor != nullptr)
editor->MoveLeft(1, false, true); editor->MoveLeft(1, false, true);
}); });
@ -2529,12 +2529,12 @@ namespace hex::plugin::builtin {
editor->MoveDown(editor->GetPageSize()-4, false); editor->MoveDown(editor->GetPageSize()-4, false);
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::Home + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.move_top", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::Home + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.move_top", [this] {
if (auto editor = getEditorFromFocusedWindow(); editor != nullptr) if (auto editor = getEditorFromFocusedWindow(); editor != nullptr)
editor->MoveTop(false); editor->MoveTop(false);
}); });
ShortcutManager::addShortcut(this, CTRL + Keys::End + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.move_bottom", [this] { ShortcutManager::addShortcut(this, CTRLCMD + Keys::End + AllowWhileTyping, "hex.builtin.view.pattern_editor.shortcut.move_bottom", [this] {
if (auto editor = getEditorFromFocusedWindow(); editor != nullptr) if (auto editor = getEditorFromFocusedWindow(); editor != nullptr)
editor->MoveBottom(false); editor->MoveBottom(false);
}); });