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

Side by Side Diff: ui/base/x/selection_requestor.cc

Issue 14189002: linux_aura: Implement dropping in chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase to ToT Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/base/x/selection_requestor.h ('k') | ui/base/x/selection_utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/base/x/selection_requestor.h" 5 #include "ui/base/x/selection_requestor.h"
6 6
7 #include "base/message_pump_aurax11.h" 7 #include "base/message_pump_aurax11.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "ui/base/x/selection_utils.h"
9 10
10 namespace ui { 11 namespace ui {
11 12
12 namespace { 13 namespace {
13 14
14 const char kChromeSelection[] = "CHROME_SELECTION"; 15 const char kChromeSelection[] = "CHROME_SELECTION";
15 16
16 const char* kAtomsToCache[] = { 17 const char* kAtomsToCache[] = {
17 kChromeSelection, 18 kChromeSelection,
18 NULL 19 NULL
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 110
110 if (out_data_items) 111 if (out_data_items)
111 *out_data_items = nitems; 112 *out_data_items = nitems;
112 113
113 if (out_type) 114 if (out_type)
114 *out_type = prop_type; 115 *out_type = prop_type;
115 116
116 return true; 117 return true;
117 } 118 }
118 119
120 scoped_ptr<SelectionData> SelectionRequestor::RequestAndWaitForTypes(
121 const std::vector< ::Atom>& types) {
122 for (std::vector< ::Atom>::const_iterator it = types.begin();
123 it != types.end(); ++it) {
124 unsigned char* data = NULL;
125 size_t data_bytes = 0;
126 ::Atom type = None;
127 if (PerformBlockingConvertSelection(*it,
128 &data,
129 &data_bytes,
130 NULL,
131 &type) &&
132 type == *it) {
133 scoped_ptr<SelectionData> data_out(new SelectionData(x_display_));
134 data_out->Set(type, (char*)data, data_bytes, true);
135 return data_out.Pass();
136 }
137 }
138
139 return scoped_ptr<SelectionData>();
140 }
141
119 void SelectionRequestor::OnSelectionNotify(const XSelectionEvent& event) { 142 void SelectionRequestor::OnSelectionNotify(const XSelectionEvent& event) {
120 if (!in_nested_loop_) { 143 if (!in_nested_loop_) {
121 // This shouldn't happen; we're not waiting on the X server for data, but 144 // This shouldn't happen; we're not waiting on the X server for data, but
122 // any client can send any message... 145 // any client can send any message...
123 return; 146 return;
124 } 147 }
125 148
126 if (selection_name_ == event.selection && 149 if (selection_name_ == event.selection &&
127 current_target_ == event.target) { 150 current_target_ == event.target) {
128 returned_property_ = event.property; 151 returned_property_ = event.property;
129 } else { 152 } else {
130 // I am assuming that if some other client sent us a message after we've 153 // I am assuming that if some other client sent us a message after we've
131 // asked for data, but it's malformed, we should just treat as if they sent 154 // asked for data, but it's malformed, we should just treat as if they sent
132 // us an error message. 155 // us an error message.
133 returned_property_ = None; 156 returned_property_ = None;
134 } 157 }
135 158
136 quit_closure_.Run(); 159 quit_closure_.Run();
137 } 160 }
138 161
139 } // namespace ui 162 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/x/selection_requestor.h ('k') | ui/base/x/selection_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698