From 4c5d7bb0f9950524bb91265b5c568ad4da7ea0bf Mon Sep 17 00:00:00 2001 From: mfranz Date: Sat, 26 Apr 2008 13:25:08 +0000 Subject: [PATCH] - export modifier bitmask - consider negative keys returned from an event handler as invalid (was 0 before) - warning-- --- src/Input/input.cxx | 16 +++++++++++++--- src/Input/input.hxx | 4 ++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Input/input.cxx b/src/Input/input.cxx index 2547e523d..3ecf5142f 100644 --- a/src/Input/input.cxx +++ b/src/Input/input.cxx @@ -84,6 +84,12 @@ static FGInput * default_input = 0; // Local functions. //////////////////////////////////////////////////////////////////////// +static int +getModifiers () +{ + return fgGetKeyModifiers() >> 1; +} + static bool getModShift () { @@ -166,6 +172,7 @@ FGInput::postinit () void FGInput::bind () { + fgTie("/devices/status/keyboard", getModifiers); fgTie("/devices/status/keyboard/shift", getModShift); fgTie("/devices/status/keyboard/ctrl", getModCtrl); fgTie("/devices/status/keyboard/alt", getModAlt); @@ -187,6 +194,7 @@ FGInput::bind () void FGInput::unbind () { + fgUntie("/devices/status/keyboard"); fgUntie("/devices/status/keyboard/shift"); fgUntie("/devices/status/keyboard/ctrl"); fgUntie("/devices/status/keyboard/alt"); @@ -250,7 +258,7 @@ FGInput::doKey (int k, int modifiers, int x, int y) } _key_code = k; - _key_modifiers = modifiers & ~KEYMOD_RELEASED; + _key_modifiers = modifiers >> 1; _key_pressed = !bool(modifiers & KEYMOD_RELEASED); _key_shift = bool(modifiers & KEYMOD_SHIFT); _key_ctrl = bool(modifiers & KEYMOD_CTRL); @@ -259,11 +267,13 @@ FGInput::doKey (int k, int modifiers, int x, int y) _key_super = bool(modifiers & KEYMOD_SUPER); _key_hyper = bool(modifiers & KEYMOD_HYPER); _key_event->fireValueChanged(); - if (!_key_code) + if (_key_code < 0) return; k = _key_code; - modifiers = _key_modifiers | (_key_pressed ? KEYMOD_NONE : KEYMOD_RELEASED); + modifiers = _key_modifiers << 1; + if (!_key_pressed) + modifiers |= KEYMOD_RELEASED; button &b = _key_bindings[k]; // Key pressed. diff --git a/src/Input/input.hxx b/src/Input/input.hxx index d6b75c5f1..9491685ec 100644 --- a/src/Input/input.hxx +++ b/src/Input/input.hxx @@ -233,13 +233,13 @@ private: virtual ~mouse (); int x; int y; + int save_x; + int save_y; SGPropertyNode_ptr mode_node; SGPropertyNode_ptr mouse_button_nodes[MAX_MOUSE_BUTTONS]; int nModes; int current_mode; double timeout; - int save_x; - int save_y; mouse_mode * modes; }; -- 2.39.5