aboutsummaryrefslogtreecommitdiff
path: root/xwayland/selection.c
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2017-12-14 23:57:44 +0100
committeremersion <contact@emersion.fr>2017-12-14 23:57:44 +0100
commitb884025558e750268a06818dc63bc46716c75843 (patch)
tree3939eb735813fc17fb54529e03874c65d64633e7 /xwayland/selection.c
parent343efd0c202ba7a2f872f117f6193175f831d97d (diff)
Deny access to clipboard if no xwayland window is focused
Diffstat (limited to 'xwayland/selection.c')
-rw-r--r--xwayland/selection.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/xwayland/selection.c b/xwayland/selection.c
index d98f006f..6b55f473 100644
--- a/xwayland/selection.c
+++ b/xwayland/selection.c
@@ -238,6 +238,7 @@ static void xwm_handle_selection_request(struct wlr_xwm *xwm,
(xcb_selection_request_event_t *) event;
if (selection_request->selection != xwm->atoms[CLIPBOARD]) {
+ xwm_send_selection_notify(xwm, XCB_ATOM_NONE);
return;
}
@@ -255,11 +256,19 @@ static void xwm_handle_selection_request(struct wlr_xwm *xwm,
}
if (xwm->seat->selection_source == NULL) {
- wlr_log(L_DEBUG, "not handling selection request:"
+ wlr_log(L_DEBUG, "not handling selection request: "
"no selection source assigned to xwayland seat");
return;
}
+ // No xwayland surface focused, deny access to clipboard
+ if (xwm->focus_surface == NULL) {
+ wlr_log(L_DEBUG, "denying read access to clipboard: "
+ "no xwayland surface focused");
+ xwm_send_selection_notify(xwm, XCB_ATOM_NONE);
+ return;
+ }
+
if (selection_request->target == xwm->atoms[TARGETS]) {
xwm_send_targets(xwm);
} else if (selection_request->target == xwm->atoms[TIMESTAMP]) {
@@ -531,6 +540,13 @@ static void xwm_handle_selection_notify(struct wlr_xwm *xwm,
return;
}
+ // No xwayland surface focused, deny access to clipboard
+ if (xwm->focus_surface == NULL) {
+ wlr_log(L_DEBUG, "denying write access to clipboard: "
+ "no xwayland surface focused");
+ return;
+ }
+
if (selection_notify->property == XCB_ATOM_NONE) {
wlr_log(L_ERROR, "convert selection failed");
} else if (selection_notify->target == xwm->atoms[TARGETS]) {