void XWaylandManager::wmSelection() { m_selRequest.requestor = XCB_NONE; quint32 values[1]; values[0] = XCB_EVENT_MASK_PROPERTY_CHANGE; m_selWindow = xcb_generate_id(Xcb::connection()); xcb_create_window(Xcb::connection(), XCB_COPY_FROM_PARENT, m_selWindow, Xcb::rootWindow(), 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, Xcb::rootVisual(), XCB_CW_EVENT_MASK, values); xcb_set_selection_owner(Xcb::connection(), m_selWindow, Xcb::resources()->atoms->clipboard_manager, XCB_TIME_CURRENT_TIME); quint32 mask = XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE; xcb_xfixes_select_selection_input(Xcb::connection(), m_selWindow, Xcb::resources()->atoms->clipboard, mask); //weston_wm_set_selection }
void weston_wm_dnd_init(struct weston_wm *wm) { uint32_t mask; mask = XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE; xcb_xfixes_select_selection_input(wm->conn, wm->selection_window, wm->atom.xdnd_selection, mask); }
void weston_wm_selection_init(struct weston_wm *wm) { struct weston_seat *seat; uint32_t values[1], mask; wm->selection_request.requestor = XCB_NONE; values[0] = XCB_EVENT_MASK_PROPERTY_CHANGE; wm->selection_window = xcb_generate_id(wm->conn); xcb_create_window(wm->conn, XCB_COPY_FROM_PARENT, wm->selection_window, wm->screen->root, 0, 0, 10, 10, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT, wm->screen->root_visual, XCB_CW_EVENT_MASK, values); xcb_set_selection_owner(wm->conn, wm->selection_window, wm->atom.clipboard_manager, XCB_TIME_CURRENT_TIME); mask = XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY | XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_CLIENT_CLOSE; xcb_xfixes_select_selection_input(wm->conn, wm->selection_window, wm->atom.clipboard, mask); seat = weston_wm_pick_seat(wm); wm->selection_listener.notify = weston_wm_set_selection; wl_signal_add(&seat->selection_signal, &wm->selection_listener); weston_wm_set_selection(&wm->selection_listener, seat); }