xwm: Claim the CLIPBOARD_MANAGER selection
This commit is contained in:
@@ -521,6 +521,15 @@ weston_wm_handle_selection_request(struct weston_wm *wm,
|
|||||||
wm->incr = 0;
|
wm->incr = 0;
|
||||||
wm->flush_property_on_delete = 0;
|
wm->flush_property_on_delete = 0;
|
||||||
|
|
||||||
|
if (selection_request->selection == wm->atom.clipboard_manager) {
|
||||||
|
/* The weston clipboard should already have grabbed
|
||||||
|
* the first target, so just send selection notify
|
||||||
|
* now. This isn't synchronized with the clipboard
|
||||||
|
* finishing getting the data, so there's a race here. */
|
||||||
|
weston_wm_send_selection_notify(wm, wm->selection_request.property);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (selection_request->target == wm->atom.targets) {
|
if (selection_request->target == wm->atom.targets) {
|
||||||
weston_wm_send_targets(wm);
|
weston_wm_send_targets(wm);
|
||||||
} else if (selection_request->target == wm->atom.timestamp) {
|
} else if (selection_request->target == wm->atom.timestamp) {
|
||||||
@@ -673,6 +682,11 @@ weston_wm_selection_init(struct weston_wm *wm)
|
|||||||
wm->screen->root_visual,
|
wm->screen->root_visual,
|
||||||
XCB_CW_EVENT_MASK, values);
|
XCB_CW_EVENT_MASK, values);
|
||||||
|
|
||||||
|
xcb_set_selection_owner(wm->conn,
|
||||||
|
wm->selection_window,
|
||||||
|
wm->atom.clipboard_manager,
|
||||||
|
XCB_TIME_CURRENT_TIME);
|
||||||
|
|
||||||
mask =
|
mask =
|
||||||
XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER |
|
XCB_XFIXES_SELECTION_EVENT_MASK_SET_SELECTION_OWNER |
|
||||||
XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY |
|
XCB_XFIXES_SELECTION_EVENT_MASK_SELECTION_WINDOW_DESTROY |
|
||||||
|
|||||||
@@ -1000,6 +1000,7 @@ wxs_wm_get_resources(struct weston_wm *wm)
|
|||||||
{ "_NET_SUPPORTED", F(atom.net_supported) },
|
{ "_NET_SUPPORTED", F(atom.net_supported) },
|
||||||
{ "_MOTIF_WM_HINTS", F(atom.motif_wm_hints) },
|
{ "_MOTIF_WM_HINTS", F(atom.motif_wm_hints) },
|
||||||
{ "CLIPBOARD", F(atom.clipboard) },
|
{ "CLIPBOARD", F(atom.clipboard) },
|
||||||
|
{ "CLIPBOARD_MANAGER", F(atom.clipboard_manager) },
|
||||||
{ "TARGETS", F(atom.targets) },
|
{ "TARGETS", F(atom.targets) },
|
||||||
{ "UTF8_STRING", F(atom.utf8_string) },
|
{ "UTF8_STRING", F(atom.utf8_string) },
|
||||||
{ "_WL_SELECTION", F(atom.wl_selection) },
|
{ "_WL_SELECTION", F(atom.wl_selection) },
|
||||||
|
|||||||
@@ -107,6 +107,7 @@ struct weston_wm {
|
|||||||
xcb_atom_t net_supported;
|
xcb_atom_t net_supported;
|
||||||
xcb_atom_t motif_wm_hints;
|
xcb_atom_t motif_wm_hints;
|
||||||
xcb_atom_t clipboard;
|
xcb_atom_t clipboard;
|
||||||
|
xcb_atom_t clipboard_manager;
|
||||||
xcb_atom_t targets;
|
xcb_atom_t targets;
|
||||||
xcb_atom_t utf8_string;
|
xcb_atom_t utf8_string;
|
||||||
xcb_atom_t wl_selection;
|
xcb_atom_t wl_selection;
|
||||||
|
|||||||
Reference in New Issue
Block a user