Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(752)

Unified Diff: ui/base/clipboard/clipboard_aurax11.cc

Issue 391593002: Process SelectionRequestor::PerformBlockingConvertSelection() requests one at a time (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | ui/base/x/selection_requestor.h » ('j') | ui/base/x/selection_requestor.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/base/clipboard/clipboard_aurax11.cc
diff --git a/ui/base/clipboard/clipboard_aurax11.cc b/ui/base/clipboard/clipboard_aurax11.cc
index 45ee987b35d65a4ba5947d7f2d7ed44e6b175b05..88bbc05f7186b44089a766c1e7cbccd7b34da0c8 100644
--- a/ui/base/clipboard/clipboard_aurax11.cc
+++ b/ui/base/clipboard/clipboard_aurax11.cc
@@ -241,9 +241,6 @@ class Clipboard::AuraX11Details : public PlatformEventDispatcher {
// CLIPBOARD_TYPE_COPY_PASTE.
::Atom GetCopyPasteSelection() const;
- // Returns the object which is responsible for communication on |type|.
- SelectionRequestor* GetSelectionRequestorForClipboardType(ClipboardType type);
-
// Finds the SelectionFormatMap for the incoming selection atom.
const SelectionFormatMap& LookupStorageForAtom(::Atom atom);
@@ -305,10 +302,8 @@ class Clipboard::AuraX11Details : public PlatformEventDispatcher {
X11AtomCache atom_cache_;
- // Objects which request and receive selection data.
- SelectionRequestor clipboard_requestor_;
- SelectionRequestor primary_requestor_;
- SelectionRequestor clipboard_manager_requestor_;
+ // Object which requests and receives selection data.
+ SelectionRequestor selection_requestor_;
// Temporary target map that we write to during DispatchObects.
SelectionFormatMap clipboard_data_;
@@ -333,12 +328,7 @@ Clipboard::AuraX11Details::AuraX11Details()
0,
NULL)),
atom_cache_(x_display_, kAtomsToCache),
- clipboard_requestor_(x_display_, x_window_,
- atom_cache_.GetAtom(kClipboard), this),
- primary_requestor_(x_display_, x_window_, XA_PRIMARY, this),
- clipboard_manager_requestor_(x_display_, x_window_,
- atom_cache_.GetAtom(kClipboardManager),
- this),
+ selection_requestor_(x_display_, x_window_, this),
clipboard_owner_(x_display_, x_window_, atom_cache_.GetAtom(kClipboard)),
primary_owner_(x_display_, x_window_, XA_PRIMARY) {
// We don't know all possible MIME types at compile time.
@@ -379,15 +369,6 @@ const SelectionFormatMap& Clipboard::AuraX11Details::LookupStorageForAtom(
return clipboard_owner_.selection_format_map();
}
-ui::SelectionRequestor*
-Clipboard::AuraX11Details::GetSelectionRequestorForClipboardType(
- ClipboardType type) {
- if (type == CLIPBOARD_TYPE_COPY_PASTE)
- return &clipboard_requestor_;
- else
- return &primary_requestor_;
-}
-
void Clipboard::AuraX11Details::CreateNewClipboardData() {
clipboard_data_ = SelectionFormatMap();
}
@@ -423,11 +404,12 @@ SelectionData Clipboard::AuraX11Details::RequestAndWaitForTypes(
}
} else {
TargetList targets = WaitAndGetTargetsList(type);
- SelectionRequestor* receiver = GetSelectionRequestorForClipboardType(type);
+ ::Atom selection_name = LookupSelectionForClipboardType(type);
std::vector< ::Atom> intersection;
ui::GetAtomIntersection(types, targets.target_list(), &intersection);
- return receiver->RequestAndWaitForTypes(intersection);
+ return selection_requestor_.RequestAndWaitForTypes(selection_name,
+ intersection);
}
return SelectionData();
@@ -450,11 +432,12 @@ TargetList Clipboard::AuraX11Details::WaitAndGetTargetsList(
size_t out_data_items = 0;
::Atom out_type = None;
- SelectionRequestor* receiver = GetSelectionRequestorForClipboardType(type);
- if (receiver->PerformBlockingConvertSelection(atom_cache_.GetAtom(kTargets),
- &data,
- &out_data_items,
- &out_type)) {
+ if (selection_requestor_.PerformBlockingConvertSelection(
+ selection_name,
+ atom_cache_.GetAtom(kTargets),
+ &data,
+ &out_data_items,
+ &out_type)) {
// Some apps return an |out_type| of "TARGETS". (crbug.com/377893)
if (out_type == XA_ATOM || out_type == atom_cache_.GetAtom(kTargets)) {
const ::Atom* atom_array =
@@ -473,10 +456,11 @@ TargetList Clipboard::AuraX11Details::WaitAndGetTargetsList(
for (std::vector< ::Atom>::const_iterator it = types.begin();
it != types.end(); ++it) {
::Atom type = None;
- if (receiver->PerformBlockingConvertSelection(*it,
- NULL,
- NULL,
- &type) &&
+ if (selection_requestor_.PerformBlockingConvertSelection(selection_name,
+ *it,
+ NULL,
+ NULL,
+ &type) &&
type == *it) {
out.push_back(*it);
}
@@ -520,8 +504,10 @@ void Clipboard::AuraX11Details::StoreCopyPasteDataAndWait() {
std::vector<Atom> targets = format_map.GetTypes();
base::TimeTicks start = base::TimeTicks::Now();
- clipboard_manager_requestor_.PerformBlockingConvertSelectionWithParameter(
- atom_cache_.GetAtom(kSaveTargets), targets);
+ selection_requestor_.PerformBlockingConvertSelectionWithParameter(
+ atom_cache_.GetAtom(kClipboardManager),
+ atom_cache_.GetAtom(kSaveTargets),
+ targets);
UMA_HISTOGRAM_TIMES("Clipboard.X11StoreCopyPasteDuration",
base::TimeTicks::Now() - start);
}
@@ -543,16 +529,9 @@ uint32_t Clipboard::AuraX11Details::DispatchEvent(const PlatformEvent& xev) {
}
break;
}
- case SelectionNotify: {
- ::Atom selection = xev->xselection.selection;
- if (selection == XA_PRIMARY)
- primary_requestor_.OnSelectionNotify(xev->xselection);
- else if (selection == GetCopyPasteSelection())
- clipboard_requestor_.OnSelectionNotify(xev->xselection);
- else if (selection == atom_cache_.GetAtom(kClipboardManager))
- clipboard_manager_requestor_.OnSelectionNotify(xev->xselection);
+ case SelectionNotify:
+ selection_requestor_.OnSelectionNotify(xev->xselection);
break;
- }
case SelectionClear: {
if (xev->xselectionclear.selection == XA_PRIMARY) {
primary_owner_.OnSelectionClear(xev->xselectionclear);
« no previous file with comments | « no previous file | ui/base/x/selection_requestor.h » ('j') | ui/base/x/selection_requestor.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698