Stop sending release events for mouse wheel 'buttons' in X mouse mode.

On Windows (X mouse reporting of the mouse wheel isn't currently done
by the Unix front end, though I'm shortly about to fix that too) a
mouse wheel event is translated into a virtual button, and we send
both a press and a release of that button to terminal.c, which encodes
both in X mouse reporting escape sequences and passes them on to the
server. This isn't consistent with what xterm does - scroll-wheel
events are encoded _like_ button presses, but differ semantically in
that they don't have matching releases. So we're updating to match
xterm.

[originally from svn r10138]
This commit is contained in:
Simon Tatham 2014-02-16 16:40:45 +00:00
Родитель 0f04cab151
Коммит 7d394fc9e9
2 изменённых файлов: 18 добавлений и 8 удалений

Просмотреть файл

@ -5896,7 +5896,7 @@ void term_mouse(Terminal *term, Mouse_Button braw, Mouse_Button bcooked,
*/
if (raw_mouse &&
(term->selstate != ABOUT_TO) && (term->selstate != DRAGGING)) {
int encstate = 0, r, c;
int encstate = 0, r, c, wheel;
char abuf[32];
int len = 0;
@ -5905,22 +5905,35 @@ void term_mouse(Terminal *term, Mouse_Button braw, Mouse_Button bcooked,
switch (braw) {
case MBT_LEFT:
encstate = 0x00; /* left button down */
wheel = FALSE;
break;
case MBT_MIDDLE:
encstate = 0x01;
wheel = FALSE;
break;
case MBT_RIGHT:
encstate = 0x02;
wheel = FALSE;
break;
case MBT_WHEEL_UP:
encstate = 0x40;
wheel = TRUE;
break;
case MBT_WHEEL_DOWN:
encstate = 0x41;
wheel = TRUE;
break;
default: break; /* placate gcc warning about enum use */
default:
return;
}
switch (a) {
if (wheel) {
/* For mouse wheel buttons, we only ever expect to see
* MA_CLICK actions, and we don't try to keep track of
* the buttons being 'pressed' (since without matching
* click/release pairs that's pointless). */
if (a != MA_CLICK)
return;
} else switch (a) {
case MA_DRAG:
if (term->xterm_mouse == 1)
return;
@ -5937,7 +5950,8 @@ void term_mouse(Terminal *term, Mouse_Button braw, Mouse_Button bcooked,
return;
term->mouse_is_down = braw;
break;
default: break; /* placate gcc warning about enum use */
default:
return;
}
if (shift)
encstate += 0x04;

Просмотреть файл

@ -3248,10 +3248,6 @@ static LRESULT CALLBACK WndProc(HWND hwnd, UINT message,
TO_CHR_X(p.x),
TO_CHR_Y(p.y), shift_pressed,
control_pressed, is_alt_pressed());
term_mouse(term, b, translate_button(b),
MA_RELEASE, TO_CHR_X(p.x),
TO_CHR_Y(p.y), shift_pressed,
control_pressed, is_alt_pressed());
} /* else: not sure when this can fail */
} else {
/* trigger a scroll */