Modifications to how claims are closed
This commit is contained in:
parent
54ad3ebee6
commit
f4fadc0d3b
29
v2/claim.go
29
v2/claim.go
@ -25,7 +25,7 @@ type Claim struct {
|
|||||||
data Data
|
data Data
|
||||||
selection xproto.Atom
|
selection xproto.Atom
|
||||||
timestamp xproto.Timestamp
|
timestamp xproto.Timestamp
|
||||||
active bool
|
open bool
|
||||||
|
|
||||||
requests map[xproto.Atom] claimRequest
|
requests map[xproto.Atom] claimRequest
|
||||||
}
|
}
|
||||||
@ -64,7 +64,7 @@ func NewClaim (window *xwindow.Window, selection xproto.Atom, data Data, timesta
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &Claim {
|
return &Claim {
|
||||||
active: true,
|
open: true,
|
||||||
window: window,
|
window: window,
|
||||||
data: data,
|
data: data,
|
||||||
selection: selection,
|
selection: selection,
|
||||||
@ -131,6 +131,10 @@ func (claim *Claim) HandleSelectionRequest (
|
|||||||
connection *xgbutil.XUtil,
|
connection *xgbutil.XUtil,
|
||||||
event xevent.SelectionRequestEvent,
|
event xevent.SelectionRequestEvent,
|
||||||
) {
|
) {
|
||||||
|
// do not fulfill *new* selection requests after the claim has been
|
||||||
|
// relinquished
|
||||||
|
if !claim.open { return }
|
||||||
|
|
||||||
// Follow:
|
// Follow:
|
||||||
// https://tronche.com/gui/x/icccm/sec-2.html#s-2.2
|
// https://tronche.com/gui/x/icccm/sec-2.html#s-2.2
|
||||||
|
|
||||||
@ -279,15 +283,28 @@ func (claim *Claim) HandleSelectionClear (
|
|||||||
// is, before it receives notification that the requestor has received
|
// is, before it receives notification that the requestor has received
|
||||||
// all the data), it must continue to service the ongoing transfer until
|
// all the data), it must continue to service the ongoing transfer until
|
||||||
// it is complete.
|
// it is complete.
|
||||||
claim.active = false
|
claim.open = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open returns false if the claim has been relinquished, either from recieving
|
||||||
|
// a SelectionClear event or with the Close method.
|
||||||
|
func (claim *Claim) Open () bool {
|
||||||
|
return claim.open
|
||||||
|
}
|
||||||
|
|
||||||
|
// Active returns true if requests are currently being fulfilled. While this is
|
||||||
|
// true, the claim should still be forwarded events regardless if it is closed
|
||||||
|
// or not. It is safe to forward the same event to multiple claims.
|
||||||
|
func (claim *Claim) Active () bool {
|
||||||
|
return len(claim.requests) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close voluntarily relinquishes the selection claim. This will inform the X
|
// Close voluntarily relinquishes the selection claim. This will inform the X
|
||||||
// server that the selection is being voluntarily given up, and cause the claim
|
// server that the selection is being voluntarily given up, and cause the claim
|
||||||
// to stop responding to events.
|
// to stop fulfilling new requests.
|
||||||
func (claim *Claim) Close () error {
|
func (claim *Claim) Close () error {
|
||||||
if !claim.active { return nil }
|
if !claim.open { return nil }
|
||||||
claim.active = false
|
claim.open = false
|
||||||
|
|
||||||
// To relinquish ownership of a selection voluntarily, a client should
|
// To relinquish ownership of a selection voluntarily, a client should
|
||||||
// execute a SetSelectionOwner request for that selection atom, with
|
// execute a SetSelectionOwner request for that selection atom, with
|
||||||
|
Loading…
Reference in New Issue
Block a user