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

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

Issue 397223002: Enable copying long text to Chrome and pasting long text from Chrome (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/base/x/x11_foreign_window_manager.h"
6
7 #include <X11/Xlib.h>
8
9 #include "base/memory/singleton.h"
10
11 namespace ui {
12
13 // static
14 XForeignWindowManager* XForeignWindowManager::GetInstance() {
15 return Singleton<XForeignWindowManager>::get();
16 }
17
18 int XForeignWindowManager::RequestEvents(XID xid, long event_mask) {
19 request_map_[xid].push_back(Request(next_request_id_, event_mask));
20 UpdateSelectedEvents(xid);
21 return next_request_id_++;
22 }
23
24 void XForeignWindowManager::CancelRequest(int request_id) {
25 for (std::map<XID, RequestVector>::iterator map_it = request_map_.begin();
26 map_it != request_map_.end(); ++map_it) {
27 RequestVector* vector = &map_it->second;
28 for (RequestVector::iterator vector_it = vector->begin();
29 vector_it != vector->end(); ++vector_it) {
30 if (vector_it->request_id == request_id) {
31 vector->erase(vector_it);
32 UpdateSelectedEvents(map_it->first);
33 if (vector->empty())
34 request_map_.erase(map_it);
35 return;
36 }
37 }
38 }
39 }
40
41 void XForeignWindowManager::OnWindowDestroyed(XID xid) {
42 request_map_.erase(xid);
43 }
44
45 XForeignWindowManager::XForeignWindowManager() : next_request_id_(0) {
46 }
47
48 XForeignWindowManager::~XForeignWindowManager() {
49 }
50
51 void XForeignWindowManager::UpdateSelectedEvents(XID xid) {
52 std::map<XID, RequestVector>::iterator it = request_map_.find(xid);
53 if (it == request_map_.end())
54 return;
55
56 long event_mask = NoEventMask;
57 const RequestVector& list = it->second;
58 for (size_t i = 0; i < list.size(); ++i)
59 event_mask |= list[i].event_mask;
60
61 XSelectInput(gfx::GetXDisplay(), xid, event_mask);
62 }
63
64 XForeignWindowManager::Request::Request(int request_id, long event_mask)
65 : request_id(request_id),
66 event_mask(event_mask) {
67 }
68
69 XForeignWindowManager::Request::~Request() {
70 }
71
72 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698