| 799 | } |
| 800 | |
| 801 | int XWindow::reparentWindow(const XWindowPtr& parent, S32 x, S32 y) { |
| 802 | if (parent->c_class == InputOnly && c_class != InputOnly) { |
| 803 | return BadMatch; |
| 804 | } |
| 805 | bool needToRemap = false; |
| 806 | |
| 807 | if (isMapped) { |
| 808 | unmapWindow(); |
| 809 | needToRemap = true; |
| 810 | } |
| 811 | removeFromParent(); |
| 812 | this->parent = parent; |
| 813 | this->left = x; |
| 814 | this->top = y; |
| 815 | addToParent(); |
| 816 | |
| 817 | XServer::getServer()->iterateEventMask(parent->id, SubstructureNotifyMask, [this, parent, x, y](const DisplayDataPtr& data) { |
| 818 | XEvent event = {}; |
| 819 | event.xreparent.type = ReparentNotify; |
| 820 | event.xreparent.display = data->displayAddress; |
| 821 | event.xreparent.event = parent->id; |
| 822 | event.xreparent.window = id; |
| 823 | event.xreparent.parent = parent->id; |
| 824 | event.xreparent.x = x; |
| 825 | event.xreparent.y = y; |
| 826 | event.xreparent.serial = data->getNextEventSerial(); |
| 827 | event.xreparent.override_redirect = this->attributes.override_redirect; |
| 828 | data->putEvent(event); |
| 829 | |
| 830 | if (XServer::getServer()->trace) { |
| 831 | BString log; |
| 832 | log.append(data->displayId, 16); |
| 833 | log += " Event"; |
| 834 | log += " ReparentNofity"; |
| 835 | log += " event="; |
| 836 | log.append(parent->id, 16); |
| 837 | log += " win="; |
| 838 | log.append(id, 16); |
| 839 | log += " parent="; |
| 840 | log.append(parent->id, 16); |
| 841 | klog(log.c_str()); |
| 842 | } |
| 843 | }); |
| 844 | |
| 845 | XServer::getServer()->iterateEventMask(id, StructureNotifyMask, [this, parent, x, y](const DisplayDataPtr& data) { |
| 846 | XEvent event = {}; |
| 847 | event.xreparent.type = ReparentNotify; |
| 848 | event.xreparent.display = data->displayAddress; |
| 849 | event.xreparent.event = id; |
| 850 | event.xreparent.window = id; |
| 851 | event.xreparent.parent = parent->id; |
| 852 | event.xreparent.x = x; |
| 853 | event.xreparent.y = y; |
| 854 | event.xreparent.serial = data->getNextEventSerial(); |
| 855 | event.xreparent.override_redirect = this->attributes.override_redirect; |
| 856 | data->putEvent(event); |
| 857 | |
| 858 | if (XServer::getServer()->trace) { |
no test coverage detected