aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
authornotaz2010-12-10 00:23:40 +0200
committernotaz2010-12-14 15:25:05 +0200
commit7eda34c1986911c3be91383550ec60c28f04db99 (patch)
treec65124bd8e4bcb005b9b1be3312c72aea678cb6a /frontend
parentdde34648d8423d127e34027bccd168def7d2aded (diff)
downloadpcsx_rearmed-7eda34c1986911c3be91383550ec60c28f04db99.tar.gz
pcsx_rearmed-7eda34c1986911c3be91383550ec60c28f04db99.tar.bz2
pcsx_rearmed-7eda34c1986911c3be91383550ec60c28f04db99.zip
update in_evdev, fix return from menu
Diffstat (limited to 'frontend')
-rw-r--r--frontend/linux/in_evdev.c99
-rw-r--r--frontend/menu.c2
2 files changed, 52 insertions, 49 deletions
diff --git a/frontend/linux/in_evdev.c b/frontend/linux/in_evdev.c
index 0b73302..e6bdad1 100644
--- a/frontend/linux/in_evdev.c
+++ b/frontend/linux/in_evdev.c
@@ -402,60 +402,59 @@ static int in_evdev_update_keycode(void *data, int *is_down)
struct input_event ev;
int rd;
- while (1)
- {
- rd = read(dev->fd, &ev, sizeof(ev));
- if (rd < (int) sizeof(ev)) {
- if (errno != EAGAIN) {
- perror("in_evdev: error reading");
- sleep(1);
- }
- goto out;
+ /* do single event, the caller sometimes wants
+ * to do select() in blocking mode */
+ rd = read(dev->fd, &ev, sizeof(ev));
+ if (rd < (int) sizeof(ev)) {
+ if (errno != EAGAIN) {
+ perror("in_evdev: error reading");
+ sleep(1);
}
+ goto out;
+ }
- if (ev.type == EV_KEY) {
- if (ev.value < 0 || ev.value > 1)
- continue;
- ret_kc = ev.code;
- ret_down = ev.value;
+ if (ev.type == EV_KEY) {
+ if (ev.value < 0 || ev.value > 1)
goto out;
+ ret_kc = ev.code;
+ ret_down = ev.value;
+ goto out;
+ }
+ else if (ev.type == EV_ABS)
+ {
+ int lzone = dev->abs_lzone, down = 0, *last;
+
+ // map absolute to up/down/left/right
+ if (lzone != 0 && ev.code == ABS_X) {
+ if (ev.value < dev->abs_min_x + lzone)
+ down = KEY_LEFT;
+ else if (ev.value > dev->abs_max_x - lzone)
+ down = KEY_RIGHT;
+ last = &dev->abs_lastx;
}
- else if (ev.type == EV_ABS)
- {
- int lzone = dev->abs_lzone, down = 0, *last;
-
- // map absolute to up/down/left/right
- if (lzone != 0 && ev.code == ABS_X) {
- if (ev.value < dev->abs_min_x + lzone)
- down = KEY_LEFT;
- else if (ev.value > dev->abs_max_x - lzone)
- down = KEY_RIGHT;
- last = &dev->abs_lastx;
- }
- else if (lzone != 0 && ev.code == ABS_Y) {
- if (ev.value < dev->abs_min_y + lzone)
- down = KEY_UP;
- else if (ev.value > dev->abs_max_y - lzone)
- down = KEY_DOWN;
- last = &dev->abs_lasty;
- }
- else
- continue;
-
- if (down == *last)
- continue;
-
- if (down == 0 || *last != 0) {
- /* key up or direction change, return up event for old key */
- ret_kc = *last;
- ret_down = 0;
- *last = 0;
- goto out;
- }
- ret_kc = *last = down;
- ret_down = 1;
+ else if (lzone != 0 && ev.code == ABS_Y) {
+ if (ev.value < dev->abs_min_y + lzone)
+ down = KEY_UP;
+ else if (ev.value > dev->abs_max_y - lzone)
+ down = KEY_DOWN;
+ last = &dev->abs_lasty;
+ }
+ else
+ goto out;
+
+ if (down == *last)
+ goto out;
+
+ if (down == 0 || *last != 0) {
+ /* key up or direction change, return up event for old key */
+ ret_kc = *last;
+ ret_down = 0;
+ *last = 0;
goto out;
}
+ ret_kc = *last = down;
+ ret_down = 1;
+ goto out;
}
out:
@@ -571,7 +570,9 @@ static void in_evdev_get_def_binds(int *binds)
{
int i;
- for (i = 0; in_evdev_defbinds[i].bit != 0; i++) {
+ for (i = 0; ; i++) {
+ if (in_evdev_defbinds[i].bit == 0 && in_evdev_defbinds[i].code == 0)
+ break;
binds[IN_BIND_OFFS(in_evdev_defbinds[i].code, in_evdev_defbinds[i].btype)] =
1 << in_evdev_defbinds[i].bit;
}
diff --git a/frontend/menu.c b/frontend/menu.c
index 3b38a95..4291ac5 100644
--- a/frontend/menu.c
+++ b/frontend/menu.c
@@ -16,6 +16,7 @@
#include "omap.h"
#include "common/plat.h"
#include "../libpcsxcore/misc.h"
+#include "../libpcsxcore/new_dynarec/new_dynarec.h"
#define MENU_X2 1
#define array_size(x) (sizeof(x) / sizeof(x[0]))
@@ -439,6 +440,7 @@ strcpy(last_selected_fname, "/mnt/ntz/stuff/psx");
memset(g_menuscreen_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2);
menu_draw_end();
omap_enable_layer(1);
+ stop = 0;
}
void me_update_msg(const char *msg)