From d7902db240adc2f081bee7e8fc36b866976fa5d1 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Mon, 28 Jul 2008 22:56:12 +0000 Subject: modifier keys for binds --- src/client/input.cc | 46 +++++++++++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 17 deletions(-) (limited to 'src/client/input.cc') diff --git a/src/client/input.cc b/src/client/input.cc index d26c3ba..aaf83fa 100644 --- a/src/client/input.cc +++ b/src/client/input.cc @@ -129,8 +129,8 @@ void func_list_keys(std::string const &args) std::stringstream argstr(args); std::string keyname; if (argstr >> keyname) { - aux::lowercase(keyname); - keyboard->list_bind(keyname); + aux::to_lowercase(keyname); + keyboard->bind(keyname, ""); } else { keyboard->list_keys(); } @@ -145,8 +145,8 @@ void func_list_binds(std::string const &args) std::stringstream argstr(args); std::string keyname; if (argstr >> keyname) { - aux::lowercase(keyname); - keyboard->list_bind(keyname); + aux::to_lowercase(keyname); + keyboard->bind(keyname, ""); } else { keyboard->list_binds(); } @@ -161,17 +161,17 @@ void func_bind(std::string const &args) std::stringstream argstr(args); std::string keyname; if (argstr >> keyname) { - aux::lowercase(keyname); - if (args.size() > keyname.size()+1) { + aux::to_lowercase(keyname); + if (args.size() > keyname.size()+1) { keyboard->bind(keyname, args.substr(keyname.size()+1)); } else { - keyboard->list_bind(keyname); + keyboard->bind(keyname, ""); } return; + } else { + core::Func *func = core::Func::find("bind"); + con_print << "Usage: bind " << func->info() << std::endl; } - core::Func *func = core::Func::find("bind"); - con_print << "bind " << func->info() << std::endl; - } else { con_warn << "Keyboard handler not installed!" << std::endl; } @@ -390,6 +390,19 @@ void action_release(std::string const &action) } } +Key::Modifier convert_SDL_modifier(int const sdlmodifier) +{ + if (sdlmodifier & Key::Shift) + return Key::Shift; + else if (sdlmodifier & Key::Ctrl) + return Key::Ctrl; + else if (sdlmodifier & Key::Alt) + return Key::Alt; + else + return Key::None; + +} + void key_pressed(Key *key) { @@ -419,25 +432,24 @@ void key_pressed(Key *key) targets::select_target(targets::hover()); } else { - // FIXME modifiers - char c = key->bind(Key::None).c_str()[0]; + + char c = key->bind(convert_SDL_modifier(keyboard_modifiers)).c_str()[0]; if (c == '+') { // action bind - action_press(key->bind(Key::None)); + action_press(key->bind(convert_SDL_modifier(keyboard_modifiers))); } else if (c) { // normal bind - core::cmd() << key->bind(Key::None) << "\n"; + core::cmd() << key->bind(convert_SDL_modifier(keyboard_modifiers)) << "\n"; } } } else if (core::application()->connected()) { - // FIXME modifiers - char c = key->bind(Key::None).c_str()[0]; + char c = key->bind(convert_SDL_modifier(keyboard_modifiers)).c_str()[0]; if (c && c != '+') { // normal bind - core::cmd() << key->bind(Key::None) << "\n"; + core::cmd() << key->bind(convert_SDL_modifier(keyboard_modifiers)) << "\n"; } } -- cgit v1.2.3