J :
* Fix issue 340 for good. * On X systems this still depends on a working X detectable repeat, which is not the case in stable releases of some popular linux distributons at this time. This is expected to be fixed soon. I haven't chosen yet whether I wait for the fix on X side or if I work around the bug.
This commit is contained in:
@@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <set>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
#include "../include/JGE.h"
|
#include "../include/JGE.h"
|
||||||
@@ -128,16 +129,20 @@ void JGE::HoldKey_NoRepeat(const JButton sym)
|
|||||||
}
|
}
|
||||||
void JGE::ReleaseKey(const LocalKeySym sym)
|
void JGE::ReleaseKey(const LocalKeySym sym)
|
||||||
{
|
{
|
||||||
|
set<JButton> s;
|
||||||
const pair<keycodes_it, keycodes_it> rng = keyBinds.equal_range(sym);
|
const pair<keycodes_it, keycodes_it> rng = keyBinds.equal_range(sym);
|
||||||
for (keycodes_it it = rng.first; it != rng.second; ++it)
|
for (keycodes_it it = rng.first; it != rng.second; ++it)
|
||||||
holds.erase(it->second);
|
{
|
||||||
|
s.insert(it->second);
|
||||||
|
holds.erase(it->second);
|
||||||
|
}
|
||||||
|
|
||||||
queue< pair<pair<LocalKeySym, JButton>, bool> > r;
|
queue< pair<pair<LocalKeySym, JButton>, bool> > r;
|
||||||
while (!keyBuffer.empty())
|
while (!keyBuffer.empty())
|
||||||
{
|
{
|
||||||
pair<pair<LocalKeySym, JButton>, bool> q = keyBuffer.front();
|
pair<pair<LocalKeySym, JButton>, bool> q = keyBuffer.front();
|
||||||
keyBuffer.pop();
|
keyBuffer.pop();
|
||||||
if ((!q.second)) r.push(q);
|
if ((!q.second) || (s.end() == s.find(q.first.second))) r.push(q);
|
||||||
}
|
}
|
||||||
keyBuffer = r;
|
keyBuffer = r;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user