mirror of
https://github.com/termux/termux-app
synced 2024-06-18 07:07:08 +00:00
Do not send mouse clicks out of range (fixes #501)
This commit is contained in:
parent
50f66a12da
commit
f802d6001d
|
@ -301,6 +301,11 @@ public final class TerminalEmulator {
|
|||
* @param mouseButton one of the MOUSE_* constants of this class.
|
||||
*/
|
||||
public void sendMouseEvent(int mouseButton, int column, int row, boolean pressed) {
|
||||
if (column < 1) column = 1;
|
||||
if (column > mColumns) column = mColumns;
|
||||
if (row < 1) row = 1;
|
||||
if (row > mRows) row = mRows;
|
||||
|
||||
if (mouseButton == MOUSE_LEFT_BUTTON_MOVED && !isDecsetInternalBitSet(DECSET_BIT_MOUSE_TRACKING_BUTTON_EVENT)) {
|
||||
// Do not send tracking.
|
||||
} else if (isDecsetInternalBitSet(DECSET_BIT_MOUSE_PROTOCOL_SGR)) {
|
||||
|
@ -308,7 +313,7 @@ public final class TerminalEmulator {
|
|||
} else {
|
||||
mouseButton = pressed ? mouseButton : 3; // 3 for release of all buttons.
|
||||
// Clip to screen, and clip to the limits of 8-bit data.
|
||||
boolean out_of_bounds = column < 1 || row < 1 || column > mColumns || row > mRows || column > 255 - 32 || row > 255 - 32;
|
||||
boolean out_of_bounds = column > 255 - 32 || row > 255 - 32;
|
||||
if (!out_of_bounds) {
|
||||
byte[] data = {'\033', '[', 'M', (byte) (32 + mouseButton), (byte) (32 + column), (byte) (32 + row)};
|
||||
mSession.write(data, 0, data.length);
|
||||
|
|
|
@ -55,6 +55,14 @@ public class TerminalTest extends TerminalTestCase {
|
|||
assertEquals("\033[<0;3;4M", mOutput.getOutputAndClear());
|
||||
mTerminal.sendMouseEvent(TerminalEmulator.MOUSE_LEFT_BUTTON, 3, 4, false);
|
||||
assertEquals("\033[<0;3;4m", mOutput.getOutputAndClear());
|
||||
|
||||
// When the client says that a click is outside (which could happen when pixels are outside
|
||||
// the terminal area, see https://github.com/termux/termux-app/issues/501) the terminal
|
||||
// sends a click at the edge.
|
||||
mTerminal.sendMouseEvent(TerminalEmulator.MOUSE_LEFT_BUTTON, 0, 0, true);
|
||||
assertEquals("\033[<0;1;1M", mOutput.getOutputAndClear());
|
||||
mTerminal.sendMouseEvent(TerminalEmulator.MOUSE_LEFT_BUTTON, 11, 11, false);
|
||||
assertEquals("\033[<0;10;10m", mOutput.getOutputAndClear());
|
||||
}
|
||||
|
||||
public void testNormalization() throws UnsupportedEncodingException {
|
||||
|
|
Loading…
Reference in New Issue
Block a user