mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
js: Cancel UI events when the mid end says they've been handled
This means that if a key doesn't do anything in a puzzle, it can operate the browser instead.
This commit is contained in:
26
emcc.c
26
emcc.c
@ -246,28 +246,37 @@ static void update_undo_redo(void)
|
|||||||
/*
|
/*
|
||||||
* Mouse event handlers called from JS.
|
* Mouse event handlers called from JS.
|
||||||
*/
|
*/
|
||||||
void mousedown(int x, int y, int button)
|
bool mousedown(int x, int y, int button)
|
||||||
{
|
{
|
||||||
|
bool handled;
|
||||||
|
|
||||||
button = (button == 0 ? LEFT_BUTTON :
|
button = (button == 0 ? LEFT_BUTTON :
|
||||||
button == 1 ? MIDDLE_BUTTON : RIGHT_BUTTON);
|
button == 1 ? MIDDLE_BUTTON : RIGHT_BUTTON);
|
||||||
midend_process_key(me, x, y, button, NULL);
|
midend_process_key(me, x, y, button, &handled);
|
||||||
update_undo_redo();
|
update_undo_redo();
|
||||||
|
return handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mouseup(int x, int y, int button)
|
bool mouseup(int x, int y, int button)
|
||||||
{
|
{
|
||||||
|
bool handled;
|
||||||
|
|
||||||
button = (button == 0 ? LEFT_RELEASE :
|
button = (button == 0 ? LEFT_RELEASE :
|
||||||
button == 1 ? MIDDLE_RELEASE : RIGHT_RELEASE);
|
button == 1 ? MIDDLE_RELEASE : RIGHT_RELEASE);
|
||||||
midend_process_key(me, x, y, button, NULL);
|
midend_process_key(me, x, y, button, &handled);
|
||||||
update_undo_redo();
|
update_undo_redo();
|
||||||
|
return handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mousemove(int x, int y, int buttons)
|
bool mousemove(int x, int y, int buttons)
|
||||||
{
|
{
|
||||||
int button = (buttons & 2 ? MIDDLE_DRAG :
|
int button = (buttons & 2 ? MIDDLE_DRAG :
|
||||||
buttons & 4 ? RIGHT_DRAG : LEFT_DRAG);
|
buttons & 4 ? RIGHT_DRAG : LEFT_DRAG);
|
||||||
midend_process_key(me, x, y, button, NULL);
|
bool handled;
|
||||||
|
|
||||||
|
midend_process_key(me, x, y, button, &handled);
|
||||||
update_undo_redo();
|
update_undo_redo();
|
||||||
|
return handled;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -283,6 +292,7 @@ bool key(int keycode, const char *key, const char *chr, int location,
|
|||||||
#define DOM_KEY_LOCATION_RIGHT 2
|
#define DOM_KEY_LOCATION_RIGHT 2
|
||||||
#define DOM_KEY_LOCATION_NUMPAD 3
|
#define DOM_KEY_LOCATION_NUMPAD 3
|
||||||
int keyevent = -1;
|
int keyevent = -1;
|
||||||
|
bool handled;
|
||||||
|
|
||||||
if (!strnullcmp(key, "Backspace") || !strnullcmp(key, "Delete") ||
|
if (!strnullcmp(key, "Backspace") || !strnullcmp(key, "Delete") ||
|
||||||
!strnullcmp(key, "Del"))
|
!strnullcmp(key, "Del"))
|
||||||
@ -379,9 +389,9 @@ bool key(int keycode, const char *key, const char *chr, int location,
|
|||||||
location == DOM_KEY_LOCATION_NUMPAD)
|
location == DOM_KEY_LOCATION_NUMPAD)
|
||||||
keyevent |= MOD_NUM_KEYPAD;
|
keyevent |= MOD_NUM_KEYPAD;
|
||||||
|
|
||||||
midend_process_key(me, 0, 0, keyevent, NULL);
|
midend_process_key(me, 0, 0, keyevent, &handled);
|
||||||
update_undo_redo();
|
update_undo_redo();
|
||||||
return true; /* We've probably handled the event. */
|
return handled;
|
||||||
}
|
}
|
||||||
return false; /* Event not handled, because we don't even recognise it. */
|
return false; /* Event not handled, because we don't even recognise it. */
|
||||||
}
|
}
|
||||||
|
15
emccpre.js
15
emccpre.js
@ -254,7 +254,7 @@ function initPuzzle() {
|
|||||||
// Set up mouse handlers. We do a bit of tracking of the currently
|
// Set up mouse handlers. We do a bit of tracking of the currently
|
||||||
// pressed mouse buttons, to avoid sending mousemoves with no
|
// pressed mouse buttons, to avoid sending mousemoves with no
|
||||||
// button down (our puzzles don't want those events).
|
// button down (our puzzles don't want those events).
|
||||||
mousedown = Module.cwrap('mousedown', 'void',
|
mousedown = Module.cwrap('mousedown', 'boolean',
|
||||||
['number', 'number', 'number']);
|
['number', 'number', 'number']);
|
||||||
|
|
||||||
button_phys2log = [null, null, null];
|
button_phys2log = [null, null, null];
|
||||||
@ -277,21 +277,23 @@ function initPuzzle() {
|
|||||||
else if (event.ctrlKey)
|
else if (event.ctrlKey)
|
||||||
logbutton = 2; // Ctrl-click overrides to right button
|
logbutton = 2; // Ctrl-click overrides to right button
|
||||||
|
|
||||||
mousedown(xy.x, xy.y, logbutton);
|
if (mousedown(xy.x, xy.y, logbutton))
|
||||||
|
event.preventDefault();
|
||||||
button_phys2log[event.button] = logbutton;
|
button_phys2log[event.button] = logbutton;
|
||||||
|
|
||||||
onscreen_canvas.setCapture(true);
|
onscreen_canvas.setCapture(true);
|
||||||
};
|
};
|
||||||
mousemove = Module.cwrap('mousemove', 'void',
|
mousemove = Module.cwrap('mousemove', 'boolean',
|
||||||
['number', 'number', 'number']);
|
['number', 'number', 'number']);
|
||||||
onscreen_canvas.onmousemove = function(event) {
|
onscreen_canvas.onmousemove = function(event) {
|
||||||
var down = buttons_down();
|
var down = buttons_down();
|
||||||
if (down) {
|
if (down) {
|
||||||
var xy = canvas_mouse_coords(event, onscreen_canvas);
|
var xy = canvas_mouse_coords(event, onscreen_canvas);
|
||||||
mousemove(xy.x, xy.y, down);
|
if (mousemove(xy.x, xy.y, down))
|
||||||
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
mouseup = Module.cwrap('mouseup', 'void',
|
mouseup = Module.cwrap('mouseup', 'boolean',
|
||||||
['number', 'number', 'number']);
|
['number', 'number', 'number']);
|
||||||
onscreen_canvas.onmouseup = function(event) {
|
onscreen_canvas.onmouseup = function(event) {
|
||||||
if (event.button >= 3)
|
if (event.button >= 3)
|
||||||
@ -299,7 +301,8 @@ function initPuzzle() {
|
|||||||
|
|
||||||
if (button_phys2log[event.button] !== null) {
|
if (button_phys2log[event.button] !== null) {
|
||||||
var xy = canvas_mouse_coords(event, onscreen_canvas);
|
var xy = canvas_mouse_coords(event, onscreen_canvas);
|
||||||
mouseup(xy.x, xy.y, button_phys2log[event.button]);
|
if (mouseup(xy.x, xy.y, button_phys2log[event.button]))
|
||||||
|
event.preventDefault();
|
||||||
button_phys2log[event.button] = null;
|
button_phys2log[event.button] = null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user