summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-08-01 11:11:29 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-08-01 11:11:29 +0000
commit3f7356f6f3b1825d53e41abe52aa4f16434ca75d (patch)
tree6748ea78874d8359e472a9894a2321efd5ca06eb /plugins
parent8bca7a2d9797c2b0546895f5e62fc05b38183468 (diff)
downloadpcsxr-3f7356f6f3b1825d53e41abe52aa4f16434ca75d.tar.gz
dfinput: only accept axis input when the current axis position is off enough from previous or initial position in config dialog box.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@55344 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'plugins')
-rw-r--r--plugins/dfinput/cfg-gtk2.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/plugins/dfinput/cfg-gtk2.c b/plugins/dfinput/cfg-gtk2.c
index 4bc5a7a3..cfbd8fa2 100644
--- a/plugins/dfinput/cfg-gtk2.c
+++ b/plugins/dfinput/cfg-gtk2.c
@@ -325,11 +325,20 @@ static void ReadDKeyEvent(int padnum, int key) {
time_t t;
GdkEvent *ge;
int i;
- Sint16 axis;
+ Sint16 axis, numAxes = 0, InitAxisPos[256], PrevAxisPos[256];
if (g.cfg.PadDef[padnum].DevNum >= 0) {
js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum);
SDL_JoystickEventState(SDL_IGNORE);
+
+ SDL_JoystickUpdate();
+
+ numAxes = SDL_JoystickNumAxes(js);
+ if (numAxes > 256) numAxes = 256;
+
+ for (i = 0; i < numAxes; i++) {
+ InitAxisPos[i] = PrevAxisPos[i] = SDL_JoystickGetAxis(js, i);
+ }
} else {
js = NULL;
}
@@ -349,13 +358,14 @@ static void ReadDKeyEvent(int padnum, int key) {
}
}
- for (i = 0; i < SDL_JoystickNumAxes(js); i++) {
+ for (i = 0; i < numAxes; i++) {
axis = SDL_JoystickGetAxis(js, i);
- if (abs(axis) > 16383) {
+ if (abs(axis) > 16383 && (abs(axis - InitAxisPos[i]) > 4096 || abs(axis - PrevAxisPos[i]) > 4096)) {
g.cfg.PadDef[padnum].KeyDef[key].JoyEvType = AXIS;
g.cfg.PadDef[padnum].KeyDef[key].J.Axis = (i + 1) * (axis > 0 ? 1 : -1);
goto end;
}
+ PrevAxisPos[i] = axis;
}
for (i = 0; i < SDL_JoystickNumHats(js); i++) {
@@ -404,11 +414,20 @@ static void ReadAnalogEvent(int padnum, int analognum, int analogdir) {
time_t t;
GdkEvent *ge;
int i;
- Sint16 axis;
+ Sint16 axis, numAxes = 0, InitAxisPos[256], PrevAxisPos[256];
if (g.cfg.PadDef[padnum].DevNum >= 0) {
js = SDL_JoystickOpen(g.cfg.PadDef[padnum].DevNum);
SDL_JoystickEventState(SDL_IGNORE);
+
+ SDL_JoystickUpdate();
+
+ numAxes = SDL_JoystickNumAxes(js);
+ if (numAxes > 256) numAxes = 256;
+
+ for (i = 0; i < SDL_JoystickNumAxes(js); i++) {
+ InitAxisPos[i] = PrevAxisPos[i] = SDL_JoystickGetAxis(js, i);
+ }
} else {
js = NULL;
}
@@ -428,13 +447,14 @@ static void ReadAnalogEvent(int padnum, int analognum, int analogdir) {
}
}
- for (i = 0; i < SDL_JoystickNumAxes(js); i++) {
+ for (i = 0; i < numAxes; i++) {
axis = SDL_JoystickGetAxis(js, i);
- if (abs(axis) > 16383) {
+ if (abs(axis) > 16383 && (abs(axis - InitAxisPos[i]) > 4096 || abs(axis - PrevAxisPos[i]) > 4096)) {
g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].JoyEvType = AXIS;
g.cfg.PadDef[padnum].AnalogDef[analognum][analogdir].J.Axis = (i + 1) * (axis > 0 ? 1 : -1);
goto end;
}
+ PrevAxisPos[i] = axis;
}
for (i = 0; i < SDL_JoystickNumHats(js); i++) {