Terminal: add support for mouse press/release events in Extended/SGR 1006 mode
fixes #17532 Change-Id: Ic9f19ace5c728b6823caa5ce8ec35dc35d244220 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4867 Tested-by: Commit checker robot <[email protected]> Reviewed-by: waddlesplash <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
abe423c6e4
commit
9a7f2c2459
@@ -2462,7 +2462,7 @@ TermView::_MouseDistanceSinceLastClick(BPoint where)
|
||||
|
||||
void
|
||||
TermView::_SendMouseEvent(int32 buttons, int32 mode, int32 x, int32 y,
|
||||
bool motion)
|
||||
bool motion, bool upEvent)
|
||||
{
|
||||
if (!fEnableExtendedMouseCoordinates) {
|
||||
char xtermButtons;
|
||||
@@ -2491,13 +2491,16 @@ TermView::_SendMouseEvent(int32 buttons, int32 mode, int32 x, int32 y,
|
||||
fShell->Write(destBuffer, 6);
|
||||
} else {
|
||||
char xtermButtons;
|
||||
if (buttons == B_PRIMARY_MOUSE_BUTTON)
|
||||
if ((buttons & B_PRIMARY_MOUSE_BUTTON)
|
||||
!= (fMouseButtons & B_PRIMARY_MOUSE_BUTTON)) {
|
||||
xtermButtons = 0;
|
||||
else if (buttons == B_SECONDARY_MOUSE_BUTTON)
|
||||
} else if ((buttons & B_SECONDARY_MOUSE_BUTTON)
|
||||
!= (fMouseButtons & B_SECONDARY_MOUSE_BUTTON)) {
|
||||
xtermButtons = 1;
|
||||
else if (buttons == B_TERTIARY_MOUSE_BUTTON)
|
||||
} else if ((buttons & B_TERTIARY_MOUSE_BUTTON)
|
||||
!= (fMouseButtons & B_TERTIARY_MOUSE_BUTTON)) {
|
||||
xtermButtons = 2;
|
||||
else
|
||||
} else
|
||||
xtermButtons = 3;
|
||||
|
||||
if (motion)
|
||||
@@ -2519,8 +2522,7 @@ TermView::_SendMouseEvent(int32 buttons, int32 mode, int32 x, int32 y,
|
||||
destBuffer[9] = xtermY / 100 % 10 + '0';
|
||||
destBuffer[10] = xtermY / 10 % 10 + '0';
|
||||
destBuffer[11] = xtermY % 10 + '0';
|
||||
// No support for button press/release
|
||||
destBuffer[12] = 'M';
|
||||
destBuffer[12] = upEvent ? 'm' : 'M';
|
||||
fShell->Write(destBuffer, 13);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -254,7 +254,8 @@ private:
|
||||
void _ScrollToRange(TermPos start, TermPos end);
|
||||
|
||||
void _SendMouseEvent(int32 button, int32 mode,
|
||||
int32 x, int32 y, bool motion);
|
||||
int32 x, int32 y, bool motion,
|
||||
bool upEvent = false);
|
||||
|
||||
void _DrawInlineMethodString();
|
||||
void _HandleInputMethodChanged(BMessage* message);
|
||||
|
||||
@@ -423,7 +423,7 @@ TermView::DefaultState::MouseDown(BPoint where, int32 buttons, int32 modifiers)
|
||||
|| fView->fReportNormalMouseEvent || fView->fReportX10MouseEvent) {
|
||||
TermPos clickPos = fView->_ConvertToTerminal(where);
|
||||
fView->_SendMouseEvent(buttons, modifiers, clickPos.x, clickPos.y,
|
||||
false);
|
||||
false, false);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -452,6 +452,18 @@ TermView::DefaultState::MouseMoved(BPoint where, uint32 transit,
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TermView::DefaultState::MouseUp(BPoint where, int32 buttons)
|
||||
{
|
||||
if (fView->fReportAnyMouseEvent || fView->fReportButtonMouseEvent
|
||||
|| fView->fReportNormalMouseEvent || fView->fReportX10MouseEvent) {
|
||||
TermPos clickPos = fView->_ConvertToTerminal(where);
|
||||
fView->_SendMouseEvent(buttons, 0, clickPos.x, clickPos.y,
|
||||
false, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
TermView::DefaultState::WindowActivated(bool active)
|
||||
{
|
||||
|
||||
@@ -72,6 +72,7 @@ public:
|
||||
int32 modifiers);
|
||||
virtual void MouseMoved(BPoint where, uint32 transit,
|
||||
const BMessage* dragMessage, int32 modifiers);
|
||||
virtual void MouseUp(BPoint where, int32 buttons);
|
||||
|
||||
virtual void WindowActivated(bool active);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user