diff --git a/mario/scenes/editor_main.cpp b/mario/scenes/editor_main.cpp index f25abd8..306eff2 100644 --- a/mario/scenes/editor_main.cpp +++ b/mario/scenes/editor_main.cpp @@ -1,3 +1,4 @@ +#include "SDL2/SDL_keyboard.h" #include "editor_scenes.hpp" #include "../../sdlpp/sdlpp.hpp" #include "../gui/gui.hpp" @@ -796,6 +797,10 @@ void placeTool(SDLPP::Scene &scene) { } } +bool controlOrCommandPressed() { + return SDL_GetModState() & KMOD_CTRL || SDL_GetModState() & KMOD_GUI; +} + void pollEvents(std::shared_ptr &scene) { SDL_Event event; while (SDLPP::getSDLEvent(event)) { @@ -804,9 +809,9 @@ void pollEvents(std::shared_ptr &scene) { setFlag(QUIT_FLAG); break; case SDL_KEYUP: - if (!getFlag(TEXT_INPUT_FLAG)) { + if (!getFlag(TEXT_INPUT_FLAG) && !controlOrCommandPressed()) { handleKeyUp(event.key.keysym.sym, *scene); - } else { + } else if (!controlOrCommandPressed()) { if (event.key.keysym.sym == SDLK_ESCAPE || event.key.keysym.sym == SDLK_RETURN) { setFlag(STOP_TEXT_FLAG); @@ -819,16 +824,16 @@ void pollEvents(std::shared_ptr &scene) { !level_name_text.empty()) { level_name_text.pop_back(); setFlag(TEXT_UPDATE_FLAG); - } else if (event.key.keysym.sym == SDLK_c && - SDL_GetModState() & KMOD_CTRL) { + } else if (event.key.keysym.sym == SDLK_c && controlOrCommandPressed()) { // handle copy SDL_SetClipboardText(level_name_text.c_str()); - } else if (event.key.keysym.sym == SDLK_v && - SDL_GetModState() & KMOD_CTRL) { + } else if (event.key.keysym.sym == SDLK_v && controlOrCommandPressed()) { // handle paste level_name_text += SDL_GetClipboardText(); setFlag(TEXT_UPDATE_FLAG); } + } else if (event.key.keysym.sym == SDLK_s && controlOrCommandPressed()) { + saveMapCallback(nullptr, nullptr); } break; case SDL_WINDOWEVENT: