Ticket #2854: terminal_r30297.diff
File terminal_r30297.diff, 7.9 KB (added by , 15 years ago) |
---|
-
src/apps/terminal/TermParse.cpp
1094 1094 // screen). 1095 1095 // Not supported yet. 1096 1096 break; 1097 case 9: 1098 // Set Mouse X and Y on button press. 1099 fBuffer->ReportX10MouseEvent(true); 1100 break; 1097 1101 case 12: 1098 1102 // Start Blinking Cursor. 1099 1103 // Not supported yet. … … 1107 1111 fBuffer->UseAlternateScreenBuffer(false); 1108 1112 break; 1109 1113 case 1000: 1110 // TODO: Send Mouse X & Y on button press and release. 1114 // Send Mouse X & Y on button press and release. 1115 fBuffer->ReportNormalMouseEvent(true); 1111 1116 break; 1117 case 1002: 1118 // Send Mouse X and Y on button press and release, and on motion 1119 // when the mouse enter a new cell 1120 fBuffer->ReportBtnMouseEvent(true); 1121 break; 1112 1122 case 1003: 1113 1123 // Use All Motion Mouse Tracking 1114 1124 fBuffer->ReportAnyMouseEvent(true); … … 1155 1165 // Normal Video (Leaves Reverse Video, cf. there). 1156 1166 // Not supported yet. 1157 1167 break; 1168 case 9: 1169 // Disable Mouse X and Y on button press. 1170 fBuffer->ReportX10MouseEvent(false); 1171 break; 1158 1172 case 12: 1159 1173 // Stop Blinking Cursor. 1160 1174 // Not supported yet. … … 1168 1182 fBuffer->UseNormalScreenBuffer(); 1169 1183 break; 1170 1184 case 1000: 1171 // TODO: Don't send Mouse X & Y on button press and release. 1185 // Don't send Mouse X & Y on button press and release. 1186 fBuffer->ReportNormalMouseEvent(false); 1172 1187 break; 1188 case 1002: 1189 // Don't send Mouse X and Y on button press and release, and on motion 1190 // when the mouse enter a new cell 1191 fBuffer->ReportBtnMouseEvent(false); 1192 break; 1173 1193 case 1003: 1174 1194 // Disable All Motion Mouse Tracking. 1175 1195 fBuffer->ReportAnyMouseEvent(false); -
src/apps/terminal/TermView.cpp
171 171 fRows(ROWS_DEFAULT), 172 172 fEncoding(M_UTF8), 173 173 fScrBufSize(historySize), 174 fReportX10MouseEvent(false), 175 fReportNormalMouseEvent(false), 176 fReportBtnMouseEvent(false), 174 177 fReportAnyMouseEvent(false) 175 178 { 176 179 _InitObject(argc, argv); … … 185 188 fRows(rows), 186 189 fEncoding(M_UTF8), 187 190 fScrBufSize(historySize), 191 fReportX10MouseEvent(false), 192 fReportNormalMouseEvent(false), 193 fReportBtnMouseEvent(false), 188 194 fReportAnyMouseEvent(false) 189 195 { 190 196 _InitObject(argc, argv); … … 210 216 fRows(ROWS_DEFAULT), 211 217 fEncoding(M_UTF8), 212 218 fScrBufSize(1000), 219 fReportX10MouseEvent(false), 220 fReportNormalMouseEvent(false), 221 fReportBtnMouseEvent(false), 213 222 fReportAnyMouseEvent(false) 214 223 { 215 224 // We need this … … 280 289 fMouseTracking = false; 281 290 fIMflag = false; 282 291 fCheckMouseTracking = false; 292 fPrevPos = TermPos(-1, - 1); 293 fReportX10MouseEvent = false; 294 fReportNormalMouseEvent = false; 295 fReportBtnMouseEvent = false; 283 296 fReportAnyMouseEvent = false; 284 297 285 298 fTextBuffer = new(std::nothrow) TerminalBuffer; … … 1521 1534 SetTitle(title); 1522 1535 break; 1523 1536 } 1524 case MSG_REPORT_ ANY_MOUSE_EVENT:1537 case MSG_REPORT_MOUSE_EVENT: 1525 1538 { 1539 bool reportX10MouseEvent; 1540 if (msg->FindBool("reportX10MouseEvent", &reportX10MouseEvent) == B_OK) 1541 fReportX10MouseEvent = reportX10MouseEvent; 1542 1543 bool reportNormalMouseEvent; 1544 if (msg->FindBool("reportNormalMouseEvent", &reportNormalMouseEvent) == B_OK) 1545 fReportNormalMouseEvent = reportNormalMouseEvent; 1546 1547 bool reportBtnMouseEvent; 1548 if (msg->FindBool("reportBtnMouseEvent", &reportBtnMouseEvent) == B_OK) 1549 fReportBtnMouseEvent = reportBtnMouseEvent; 1550 1526 1551 bool reportAnyMouseEvent; 1527 1552 if (msg->FindBool("reportAnyMouseEvent", &reportAnyMouseEvent) == B_OK) 1528 1553 fReportAnyMouseEvent = reportAnyMouseEvent; … … 2077 2102 2078 2103 fMouseButtons = buttons; 2079 2104 2080 if (fReportAnyMouseEvent) { 2105 if (fReportAnyMouseEvent || fReportBtnMouseEvent || fReportNormalMouseEvent 2106 || fReportX10MouseEvent) { 2081 2107 2082 2108 TermPos clickPos = _ConvertToTerminal(where); 2083 2109 _SendMouseEvent(buttons, modifier, clickPos.x, clickPos.y, false); … … 2169 2195 void 2170 2196 TermView::MouseMoved(BPoint where, uint32 transit, const BMessage *message) 2171 2197 { 2172 if (fReportAnyMouseEvent ) {2198 if (fReportAnyMouseEvent || fReportBtnMouseEvent) { 2173 2199 int32 modifier; 2174 2200 Window()->CurrentMessage()->FindInt32("modifiers", &modifier); 2175 2201 2176 2202 TermPos clickPos = _ConvertToTerminal(where); 2203 2204 if (fReportBtnMouseEvent) { 2205 if (fPrevPos.x != clickPos.x || fPrevPos.y != clickPos.y) { 2206 _SendMouseEvent(fMouseButtons, modifier, clickPos.x, clickPos.y, true); 2207 } 2208 fPrevPos = clickPos; 2209 return; 2210 } 2177 2211 _SendMouseEvent(fMouseButtons, modifier, clickPos.x, clickPos.y, true); 2178 2212 return; 2179 2213 } … … 2254 2288 int32 buttons; 2255 2289 Window()->CurrentMessage()->FindInt32("buttons", &buttons); 2256 2290 2257 if (fReportAnyMouseEvent) { 2291 if (fReportAnyMouseEvent || fReportBtnMouseEvent 2292 || fReportNormalMouseEvent) { 2293 2258 2294 TermPos clickPos = _ConvertToTerminal(where); 2259 2295 _SendMouseEvent(0, 0, clickPos.x, clickPos.y, false); 2260 2296 } else { -
src/apps/terminal/TerminalBuffer.h
35 35 void UseAlternateScreenBuffer(bool clear); 36 36 void UseNormalScreenBuffer(); 37 37 38 void ReportX10MouseEvent(bool reportX10MouseEvent); 39 void ReportNormalMouseEvent(bool reportNormalMouseEvent); 40 void ReportBtnMouseEvent(bool reportBtnMouseEvent); 38 41 void ReportAnyMouseEvent(bool reportAnyMouseEvent); 39 42 40 43 protected: -
src/apps/terminal/TerminalBuffer.cpp
75 75 76 76 77 77 void 78 TerminalBuffer::ReportX10MouseEvent(bool reportX10MouseEvent) 79 { 80 if (fListenerValid) { 81 BMessage message(MSG_REPORT_MOUSE_EVENT); 82 message.AddBool("reportX10MouseEvent", reportX10MouseEvent); 83 fListener.SendMessage(&message); 84 } 85 } 86 87 88 void 89 TerminalBuffer::ReportNormalMouseEvent(bool reportNormalMouseEvent) 90 { 91 if (fListenerValid) { 92 BMessage message(MSG_REPORT_MOUSE_EVENT); 93 message.AddBool("reportNormalMouseEvent", reportNormalMouseEvent); 94 fListener.SendMessage(&message); 95 } 96 } 97 98 99 void 100 TerminalBuffer::ReportBtnMouseEvent(bool reportBtnMouseEvent) 101 { 102 if (fListenerValid) { 103 BMessage message(MSG_REPORT_MOUSE_EVENT); 104 message.AddBool("reportBtnMouseEvent", reportBtnMouseEvent); 105 fListener.SendMessage(&message); 106 } 107 } 108 109 110 void 78 111 TerminalBuffer::ReportAnyMouseEvent(bool reportAnyMouseEvent) 79 112 { 80 113 if (fListenerValid) { 81 BMessage message(MSG_REPORT_ ANY_MOUSE_EVENT);114 BMessage message(MSG_REPORT_MOUSE_EVENT); 82 115 message.AddBool("reportAnyMouseEvent", reportAnyMouseEvent); 83 116 fListener.SendMessage(&message); 84 117 } -
src/apps/terminal/TermView.h
254 254 int fSelectGranularity; 255 255 BPoint fLastClickPoint; 256 256 257 // mouse 258 TermPos fPrevPos; 259 bool fReportX10MouseEvent; 260 bool fReportNormalMouseEvent; 261 bool fReportBtnMouseEvent; 257 262 bool fReportAnyMouseEvent; 258 263 259 264 // Input Method parameter. -
src/apps/terminal/TermConst.h
91 91 const uint32 MSG_TERMINAL_BUFFER_CHANGED = 'bufc'; 92 92 const uint32 MSG_SET_TERMNAL_TITLE = 'sett'; 93 93 const uint32 MSG_QUIT_TERMNAL = 'qutt'; 94 const uint32 MSG_REPORT_ ANY_MOUSE_EVENT= 'mous';94 const uint32 MSG_REPORT_MOUSE_EVENT = 'mous'; 95 95 96 96 // Preference Read/Write Keys 97 97 const char* const PREF_HALF_FONT_FAMILY = "Half Font Family";