| 1383 | } |
| 1384 | |
| 1385 | void XWindow::buttonNotify(const DisplayDataPtr& data, U32 button, S32 x, S32 y, bool pressed) { |
| 1386 | S32 window_x = x; |
| 1387 | S32 window_y = y; |
| 1388 | screenToWindow(window_x, window_y); |
| 1389 | |
| 1390 | // winex11 doesn't seem to use subwindow |
| 1391 | XEvent event = {}; |
| 1392 | event.type = pressed ? ButtonPress : ButtonRelease; |
| 1393 | event.xbutton.serial = data->getNextEventSerial(); |
| 1394 | event.xbutton.display = data->displayAddress; |
| 1395 | event.xbutton.window = id; |
| 1396 | event.xbutton.root = data->root; |
| 1397 | event.xbutton.subwindow = 0; |
| 1398 | event.xbutton.time = XServer::getServer()->getEventTime(); |
| 1399 | event.xbutton.x = window_x; |
| 1400 | event.xbutton.y = window_y; |
| 1401 | event.xbutton.x_root = x; |
| 1402 | event.xbutton.y_root = y; |
| 1403 | event.xbutton.state = XServer::getServer()->getInputModifiers(); |
| 1404 | event.xbutton.button = button; |
| 1405 | event.xbutton.same_screen = True; |
| 1406 | data->putEvent(event); |
| 1407 | |
| 1408 | // The state member is set to indicate the logical state of the pointer buttons and modifier keys just prior to the event |
| 1409 | if (pressed) { |
| 1410 | event.xbutton.state &= ~((Button1Mask) << (button - 1)); |
| 1411 | } else { |
| 1412 | event.xbutton.state |= ((Button1Mask) << (button - 1)); |
| 1413 | } |
| 1414 | if (XServer::getServer()->trace) { |
| 1415 | BString log; |
| 1416 | log.append(data->displayId, 16); |
| 1417 | log += " Event"; |
| 1418 | log += pressed ? " ButtonPress" : " ButtonRelease"; |
| 1419 | log += " button="; |
| 1420 | log += button; |
| 1421 | log += " root="; |
| 1422 | log.append(XServer::getServer()->getRoot()->id, 16); |
| 1423 | log += " event="; |
| 1424 | log.append(id, 16); |
| 1425 | klog(log.c_str()); |
| 1426 | } |
| 1427 | } |
| 1428 | |
| 1429 | bool XWindow::mouseButtonScreenCoords(U32 button, S32 x, S32 y, bool pressed) { |
| 1430 | bool found = false; |
no test coverage detected