Chromium Code Reviews| Index: ui/base/x/selection_requestor.cc |
| diff --git a/ui/base/x/selection_requestor.cc b/ui/base/x/selection_requestor.cc |
| index 158028d515d878dc7df1889fa778f3f3ad33fe7a..83ab9780c71a5ce2c7e7237d9025bf1e85da9362 100644 |
| --- a/ui/base/x/selection_requestor.cc |
| +++ b/ui/base/x/selection_requestor.cc |
| @@ -69,12 +69,15 @@ bool SelectionRequestor::PerformBlockingConvertSelection( |
| DCHECK_EQ(&pending_request, pending_requests_.back()); |
| pending_requests_.pop_back(); |
| - if (pending_request.returned_property != property_to_set) |
| - return false; |
| - |
| - return ui::GetRawBytesOfProperty(x_window_, pending_request.returned_property, |
| - out_data, out_data_bytes, out_data_items, |
| - out_type); |
| + bool success = false; |
| + if (pending_request.returned_property == property_to_set) { |
| + success = ui::GetRawBytesOfProperty(x_window_, |
| + pending_request.returned_property, |
| + out_data, out_data_bytes, |
| + out_data_items, out_type); |
| + } |
| + XDeleteProperty(x_display_, x_window_, pending_request.returned_property); |
|
sadrul
2014/04/15 16:20:15
Should this be inside the if? and/or, should this
pkotwicz
2014/04/15 16:57:55
I checked and XDeleteProperty() does not do anythi
sadrul
2014/04/15 18:04:30
The man page claims XDeleteProperty can generate B
|
| + return success; |
| } |
| SelectionData SelectionRequestor::RequestAndWaitForTypes( |
| @@ -118,8 +121,13 @@ void SelectionRequestor::OnSelectionNotify(const XSelectionEvent& event) { |
| // This event doesn't correspond to any XConvertSelection calls that we |
| // issued in PerformBlockingConvertSelection. This shouldn't happen, but any |
| // client can send any message, so it can happen. |
| - if (!request_notified) |
| + if (!request_notified) { |
| + // ICCCM requires us to delete the property passed into SelectionNotify. If |
| + // |request_notified| is true, the property will be deleted when the run |
| + // loop has quit. |
| + XDeleteProperty(x_display_, x_window_, event.property); |
| return; |
| + } |
| request_notified->returned_property = event.property; |
| request_notified->returned = true; |