Index: ui/base/x/selection_owner.cc |
diff --git a/ui/base/x/selection_owner.cc b/ui/base/x/selection_owner.cc |
index ea0ad226f32eafebc45101073a89fba1b5e146c6..b6beacc1d2216f09f157eb2cea1cfcb9dda0e1b5 100644 |
--- a/ui/base/x/selection_owner.cc |
+++ b/ui/base/x/selection_owner.cc |
@@ -9,6 +9,7 @@ |
#include <X11/Xatom.h> |
#include "base/logging.h" |
+#include "base/memory/ptr_util.h" |
#include "ui/base/x/selection_utils.h" |
#include "ui/base/x/x11_util.h" |
#include "ui/base/x/x11_window_event_manager.h" |
@@ -201,13 +202,13 @@ bool SelectionOwner::CanDispatchPropertyEvent(const XEvent& event) { |
} |
void SelectionOwner::OnPropertyEvent(const XEvent& event) { |
- std::vector<IncrementalTransfer>::iterator it = |
- FindIncrementalTransferForEvent(event); |
+ IncrementalTransferIt it = FindIncrementalTransferForEvent(event); |
if (it == incremental_transfers_.end()) |
return; |
- ProcessIncrementalTransfer(&(*it)); |
- if (!it->data.get()) |
+ IncrementalTransfer* incremental_transfer = (*it).get(); |
dcheng
2017/02/17 07:42:13
Does it->get() work?
pkotwicz
2017/02/17 19:19:07
Yes it does :) Thank you!
|
+ ProcessIncrementalTransfer(incremental_transfer); |
+ if (!incremental_transfer->data.get()) |
CompleteIncrementalTransfer(it); |
} |
@@ -269,10 +270,12 @@ bool SelectionOwner::ProcessTarget(XAtom target, |
base::TimeTicks timeout = |
base::TimeTicks::Now() + |
base::TimeDelta::FromMilliseconds(kIncrementalTransferTimeoutMs); |
- requestor_events_.reset( |
- new ui::XScopedEventSelector(requestor, PropertyChangeMask)); |
- incremental_transfers_.push_back(IncrementalTransfer( |
- requestor, target, property, it->second, 0, timeout)); |
+ std::unique_ptr<IncrementalTransfer> incremental_transfer( |
+ new IncrementalTransfer(requestor, target, property, |
+ base::WrapUnique(new XScopedEventSelector( |
dcheng
2017/02/17 07:42:13
Nit: base::MakeUnique
pkotwicz
2017/02/17 19:19:07
Done.
|
+ requestor, PropertyChangeMask)), |
+ it->second, 0, timeout)); |
+ incremental_transfers_.push_back(std::move(incremental_transfer)); |
// Start a timer to abort the data transfer in case that the selection |
// requestor does not support the INCR property or gets destroyed during |
@@ -331,29 +334,25 @@ void SelectionOwner::AbortStaleIncrementalTransfers() { |
base::TimeTicks now = base::TimeTicks::Now(); |
for (int i = static_cast<int>(incremental_transfers_.size()) - 1; |
i >= 0; --i) { |
- if (incremental_transfers_[i].timeout <= now) |
+ if (incremental_transfers_[i]->timeout <= now) |
CompleteIncrementalTransfer(incremental_transfers_.begin() + i); |
} |
} |
-void SelectionOwner::CompleteIncrementalTransfer( |
- std::vector<IncrementalTransfer>::iterator it) { |
- requestor_events_.reset(); |
dcheng
2017/02/17 07:42:13
Is it possible to just only reset this when transf
pkotwicz
2017/02/17 19:19:07
Unfortunately, there may be multiple requesting ap
|
- |
+void SelectionOwner::CompleteIncrementalTransfer(IncrementalTransferIt it) { |
incremental_transfers_.erase(it); |
if (incremental_transfers_.empty()) |
incremental_transfer_abort_timer_.Stop(); |
} |
-std::vector<SelectionOwner::IncrementalTransfer>::iterator |
- SelectionOwner::FindIncrementalTransferForEvent(const XEvent& event) { |
- for (std::vector<IncrementalTransfer>::iterator it = |
- incremental_transfers_.begin(); |
- it != incremental_transfers_.end(); |
- ++it) { |
- if (it->window == event.xproperty.window && |
- it->property == event.xproperty.atom) { |
+SelectionOwner::IncrementalTransferIt |
+SelectionOwner::FindIncrementalTransferForEvent(const XEvent& event) { |
+ for (IncrementalTransferIt it = incremental_transfers_.begin(); |
+ it != incremental_transfers_.end(); ++it) { |
+ IncrementalTransfer* incremental_transfer = (*it).get(); |
dcheng
2017/02/17 07:42:13
Nit: Does it->get() work?
pkotwicz
2017/02/17 19:19:07
Done.
|
+ if (incremental_transfer->window == event.xproperty.window && |
+ incremental_transfer->property == event.xproperty.atom) { |
return it; |
} |
} |
@@ -364,19 +363,18 @@ SelectionOwner::IncrementalTransfer::IncrementalTransfer( |
XID window, |
XAtom target, |
XAtom property, |
+ std::unique_ptr<XScopedEventSelector> event_selector, |
const scoped_refptr<base::RefCountedMemory>& data, |
int offset, |
base::TimeTicks timeout) |
: window(window), |
target(target), |
property(property), |
+ event_selector(std::move(event_selector)), |
data(data), |
offset(offset), |
timeout(timeout) {} |
-SelectionOwner::IncrementalTransfer::IncrementalTransfer( |
- const IncrementalTransfer& other) = default; |
- |
SelectionOwner::IncrementalTransfer::~IncrementalTransfer() { |
} |