UI/Qt: Preserve macOS web modifier semantics

Qt swaps Command into ControlModifier and Control into MetaModifier on
macOS so shortcut definitions can stay portable. Convert those modifiers
back to Web-facing semantics before sending input events to LibWeb.

This lets Command-click behave as platform-control click instead of
being mistaken for Control-click, while physical Control-click still
opens the context menu on macOS.
This commit is contained in:
Andreas Kling 2026-06-01 03:09:15 +02:00 committed by Andreas Kling
parent 3ae41f1ac8
commit daaf1c8c9e

View file

@ -240,24 +240,25 @@ static Web::UIEvents::KeyModifier get_modifiers_from_qt_keyboard_modifiers(Qt::K
auto result = Web::UIEvents::KeyModifier::Mod_None;
if (modifiers.testFlag(Qt::AltModifier))
result |= Web::UIEvents::KeyModifier::Mod_Alt;
if (modifiers.testFlag(Qt::ControlModifier))
result |= Web::UIEvents::KeyModifier::Mod_Ctrl;
if (modifiers.testFlag(Qt::ShiftModifier))
result |= Web::UIEvents::KeyModifier::Mod_Shift;
#if defined(AK_OS_MACOS)
if (modifiers.testFlag(Qt::ControlModifier))
result |= Web::UIEvents::KeyModifier::Mod_Super;
if (modifiers.testFlag(Qt::MetaModifier))
result |= Web::UIEvents::KeyModifier::Mod_Ctrl;
#else
if (modifiers.testFlag(Qt::ControlModifier))
result |= Web::UIEvents::KeyModifier::Mod_Ctrl;
if (modifiers.testFlag(Qt::MetaModifier))
result |= Web::UIEvents::KeyModifier::Mod_Super;
#endif
return result;
}
static Web::UIEvents::KeyModifier get_modifiers_from_qt_key_event(QKeyEvent const& event)
{
auto modifiers = Web::UIEvents::KeyModifier::Mod_None;
if (event.modifiers().testFlag(Qt::AltModifier))
modifiers |= Web::UIEvents::KeyModifier::Mod_Alt;
if (event.modifiers().testFlag(Qt::ControlModifier))
modifiers |= Web::UIEvents::KeyModifier::Mod_Ctrl;
if (event.modifiers().testFlag(Qt::MetaModifier))
modifiers |= Web::UIEvents::KeyModifier::Mod_Super;
if (event.modifiers().testFlag(Qt::ShiftModifier))
modifiers |= Web::UIEvents::KeyModifier::Mod_Shift;
auto modifiers = get_modifiers_from_qt_keyboard_modifiers(event.modifiers());
if (event.modifiers().testFlag(Qt::KeypadModifier))
modifiers |= Web::UIEvents::KeyModifier::Mod_Keypad;
return modifiers;