Date:2012-01-22 21:49:52 (12 years 2 months ago)
Author:Paul Cercueil
Commit:273770dad3e66a3cb4a7a55816072fdc4ed62d8c
Message:InputManager: prevent unmapped buttons from generating events.

Files: src/inputmanager.cpp (5 diffs)
src/inputmanager.h (1 diff)

Change Details

src/inputmanager.cpp
121121
122122InputManager::Button InputManager::waitForButton(ButtonState state) {
123123    ButtonEvent event;
124    do {
125        waitForEvent(&event);
126    } while (event.state != state);
124    while (!waitForEvent(&event) || event.state != state);
127125    return event.button;
128126}
129127
130void InputManager::waitForEvent(ButtonEvent *event) {
131    getEvent(event, true);
128bool InputManager::waitForEvent(ButtonEvent *event) {
129    return getEvent(event, true);
132130}
133131
134132bool InputManager::pollEvent(ButtonEvent *event) {
...... 
139137    //TODO: when an event is processed, program a new event
140138    //in some time, and when it occurs, do a key repeat
141139
140    int i;
141
142142#ifndef SDL_JOYSTICK_DISABLED
143143    if (joystick) {
144144        SDL_JoystickUpdate();
...... 
179179    }
180180
181181    if (source == KEYBOARD) {
182        for (int i = 0; i < BUTTON_TYPE_SIZE; i++) {
182        for (i = 0; i < BUTTON_TYPE_SIZE; i++) {
183183            if (buttonMap[i].source == KEYBOARD
184184                    && (unsigned int)event.key.keysym.sym == buttonMap[i].code) {
185185                bevent->button = static_cast<Button>(i);
...... 
188188        }
189189#ifndef SDL_JOYSTICK_DISABLED
190190    } else if (source == JOYSTICK) {
191        for (int i = 0; i < BUTTON_TYPE_SIZE; i++) {
191        for (i = 0; i < BUTTON_TYPE_SIZE; i++) {
192192            if (buttonMap[i].source == JOYSTICK
193193                    && (unsigned int)event.jbutton.button == buttonMap[i].code) {
194194                bevent->button = static_cast<Button>(i);
...... 
197197        }
198198#endif
199199    }
200
201    if (i == BUTTON_TYPE_SIZE)
202        return false;
203
200204    if (wait && PowerSaver::isRunning()) {
201205        PowerSaver::getInstance()->resetScreenTimer();
202206    }
src/inputmanager.h
4646    ~InputManager();
4747
4848    void init(const std::string &conffile);
49    void waitForEvent(ButtonEvent *event);
49    bool waitForEvent(ButtonEvent *event);
5050    Button waitForPressedButton();
5151    Button waitForReleasedButton();
5252    bool pollEvent(ButtonEvent *event);

Archive Download the corresponding diff file



interactive