summaryrefslogtreecommitdiff
path: root/core/input/input_event.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'core/input/input_event.cpp')
-rw-r--r--core/input/input_event.cpp90
1 files changed, 53 insertions, 37 deletions
diff --git a/core/input/input_event.cpp b/core/input/input_event.cpp
index 3f02d80c26..596b704732 100644
--- a/core/input/input_event.cpp
+++ b/core/input/input_event.cpp
@@ -142,13 +142,33 @@ int64_t InputEventFromWindow::get_window_id() const {
///////////////////////////////////
-void InputEventWithModifiers::set_store_command(bool p_enabled) {
- store_command = p_enabled;
+void InputEventWithModifiers::set_command_or_control_autoremap(bool p_enabled) {
+ command_or_control_autoremap = p_enabled;
+ if (command_or_control_autoremap) {
+#ifdef MACOS_ENABLED
+ ctrl_pressed = false;
+ meta_pressed = true;
+#else
+ ctrl_pressed = true;
+ meta_pressed = false;
+#endif
+ } else {
+ ctrl_pressed = false;
+ meta_pressed = false;
+ }
emit_changed();
}
-bool InputEventWithModifiers::is_storing_command() const {
- return store_command;
+bool InputEventWithModifiers::is_command_or_control_autoremap() const {
+ return command_or_control_autoremap;
+}
+
+bool InputEventWithModifiers::is_command_or_control_pressed() const {
+#ifdef MACOS_ENABLED
+ return meta_pressed;
+#else
+ return ctrl_pressed;
+#endif
}
void InputEventWithModifiers::set_shift_pressed(bool p_enabled) {
@@ -170,6 +190,7 @@ bool InputEventWithModifiers::is_alt_pressed() const {
}
void InputEventWithModifiers::set_ctrl_pressed(bool p_enabled) {
+ ERR_FAIL_COND_MSG(command_or_control_autoremap, "Command/Control autoremaping is enabled, cannot set Control directly!");
ctrl_pressed = p_enabled;
emit_changed();
}
@@ -179,6 +200,7 @@ bool InputEventWithModifiers::is_ctrl_pressed() const {
}
void InputEventWithModifiers::set_meta_pressed(bool p_enabled) {
+ ERR_FAIL_COND_MSG(command_or_control_autoremap, "Command/Control autoremaping is enabled, cannot set Meta directly!");
meta_pressed = p_enabled;
emit_changed();
}
@@ -187,15 +209,6 @@ bool InputEventWithModifiers::is_meta_pressed() const {
return meta_pressed;
}
-void InputEventWithModifiers::set_command_pressed(bool p_enabled) {
- command_pressed = p_enabled;
- emit_changed();
-}
-
-bool InputEventWithModifiers::is_command_pressed() const {
- return command_pressed;
-}
-
void InputEventWithModifiers::set_modifiers_from_event(const InputEventWithModifiers *event) {
set_alt_pressed(event->is_alt_pressed());
set_shift_pressed(event->is_shift_pressed());
@@ -217,6 +230,13 @@ Key InputEventWithModifiers::get_modifiers_mask() const {
if (is_meta_pressed()) {
mask |= KeyModifierMask::META;
}
+ if (is_command_or_control_autoremap()) {
+#ifdef MACOS_ENABLED
+ mask |= KeyModifierMask::META;
+#else
+ mask |= KeyModifierMask::CTRL;
+#endif
+ }
return mask;
}
@@ -248,8 +268,10 @@ String InputEventWithModifiers::to_string() {
}
void InputEventWithModifiers::_bind_methods() {
- ClassDB::bind_method(D_METHOD("set_store_command", "enable"), &InputEventWithModifiers::set_store_command);
- ClassDB::bind_method(D_METHOD("is_storing_command"), &InputEventWithModifiers::is_storing_command);
+ ClassDB::bind_method(D_METHOD("set_command_or_control_autoremap", "enable"), &InputEventWithModifiers::set_command_or_control_autoremap);
+ ClassDB::bind_method(D_METHOD("is_command_or_control_autoremap"), &InputEventWithModifiers::is_command_or_control_autoremap);
+
+ ClassDB::bind_method(D_METHOD("is_command_or_control_pressed"), &InputEventWithModifiers::is_command_or_control_pressed);
ClassDB::bind_method(D_METHOD("set_alt_pressed", "pressed"), &InputEventWithModifiers::set_alt_pressed);
ClassDB::bind_method(D_METHOD("is_alt_pressed"), &InputEventWithModifiers::is_alt_pressed);
@@ -263,34 +285,24 @@ void InputEventWithModifiers::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_meta_pressed", "pressed"), &InputEventWithModifiers::set_meta_pressed);
ClassDB::bind_method(D_METHOD("is_meta_pressed"), &InputEventWithModifiers::is_meta_pressed);
- ClassDB::bind_method(D_METHOD("set_command_pressed", "pressed"), &InputEventWithModifiers::set_command_pressed);
- ClassDB::bind_method(D_METHOD("is_command_pressed"), &InputEventWithModifiers::is_command_pressed);
-
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "store_command"), "set_store_command", "is_storing_command");
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "command_or_control_autoremap"), "set_command_or_control_autoremap", "is_command_or_control_autoremap");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "alt_pressed"), "set_alt_pressed", "is_alt_pressed");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "shift_pressed"), "set_shift_pressed", "is_shift_pressed");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ctrl_pressed"), "set_ctrl_pressed", "is_ctrl_pressed");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "meta_pressed"), "set_meta_pressed", "is_meta_pressed");
- ADD_PROPERTY(PropertyInfo(Variant::BOOL, "command_pressed"), "set_command_pressed", "is_command_pressed");
}
void InputEventWithModifiers::_validate_property(PropertyInfo &p_property) const {
- if (store_command) {
- // If we only want to Store "Command".
-#ifdef APPLE_STYLE_KEYS
- // Don't store "Meta" on Mac.
+ if (command_or_control_autoremap) {
+ // Cannot be used with Meta/Command or Control!
if (p_property.name == "meta_pressed") {
p_property.usage ^= PROPERTY_USAGE_STORAGE;
}
-#else
- // Don't store "Ctrl".
if (p_property.name == "ctrl_pressed") {
p_property.usage ^= PROPERTY_USAGE_STORAGE;
}
-#endif
} else {
- // We don't want to store command, only ctrl or meta (on mac).
- if (p_property.name == "command_pressed") {
+ if (p_property.name == "command_or_control_autoremap") {
p_property.usage ^= PROPERTY_USAGE_STORAGE;
}
}
@@ -399,14 +411,18 @@ Ref<InputEventKey> InputEventKey::create_reference(Key p_keycode) {
if ((p_keycode & KeyModifierMask::ALT) != Key::NONE) {
ie->set_alt_pressed(true);
}
- if ((p_keycode & KeyModifierMask::CTRL) != Key::NONE) {
- ie->set_ctrl_pressed(true);
- }
- if ((p_keycode & KeyModifierMask::CMD) != Key::NONE) {
- ie->set_command_pressed(true);
- }
- if ((p_keycode & KeyModifierMask::META) != Key::NONE) {
- ie->set_meta_pressed(true);
+ if ((p_keycode & KeyModifierMask::CMD_OR_CTRL) != Key::NONE) {
+ ie->set_command_or_control_autoremap(true);
+ if ((p_keycode & KeyModifierMask::CTRL) != Key::NONE || (p_keycode & KeyModifierMask::META) != Key::NONE) {
+ WARN_PRINT("Invalid Key Modifiers: Command or Control autoremapping is enabled, Meta and Control values are ignored!");
+ }
+ } else {
+ if ((p_keycode & KeyModifierMask::CTRL) != Key::NONE) {
+ ie->set_ctrl_pressed(true);
+ }
+ if ((p_keycode & KeyModifierMask::META) != Key::NONE) {
+ ie->set_meta_pressed(true);
+ }
}
return ie;