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

Side by Side Diff: ui/base/dragdrop/os_exchange_data_provider_aurax11.cc

Issue 219743002: x11: Move X event handling out of the message-pump. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: tot-merge-r261267 Created 6 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/dragdrop/os_exchange_data_provider_aurax11.h" 5 #include "ui/base/dragdrop/os_exchange_data_provider_aurax11.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/ref_counted_memory.h" 8 #include "base/memory/ref_counted_memory.h"
9 #include "base/message_loop/message_pump_x11.h"
10 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
11 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
12 #include "net/base/net_util.h" 11 #include "net/base/net_util.h"
13 #include "ui/base/clipboard/clipboard.h" 12 #include "ui/base/clipboard/clipboard.h"
14 #include "ui/base/clipboard/scoped_clipboard_writer.h" 13 #include "ui/base/clipboard/scoped_clipboard_writer.h"
15 #include "ui/base/dragdrop/file_info.h" 14 #include "ui/base/dragdrop/file_info.h"
16 #include "ui/base/x/selection_utils.h" 15 #include "ui/base/x/selection_utils.h"
17 #include "ui/base/x/x11_util.h" 16 #include "ui/base/x/x11_util.h"
17 #include "ui/events/platform/platform_event_source.h"
18 18
19 // Note: the GetBlah() methods are used immediately by the 19 // Note: the GetBlah() methods are used immediately by the
20 // web_contents_view_aura.cc:PrepareDropData(), while the omnibox is a 20 // web_contents_view_aura.cc:PrepareDropData(), while the omnibox is a
21 // little more discriminating and calls HasBlah() before trying to get the 21 // little more discriminating and calls HasBlah() before trying to get the
22 // information. 22 // information.
23 23
24 namespace ui { 24 namespace ui {
25 25
26 namespace { 26 namespace {
27 27
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 NULL)), 76 NULL)),
77 atom_cache_(x_display_, kAtomsToCache), 77 atom_cache_(x_display_, kAtomsToCache),
78 format_map_(), 78 format_map_(),
79 selection_owner_(x_display_, x_window_, 79 selection_owner_(x_display_, x_window_,
80 atom_cache_.GetAtom(kDndSelection)) { 80 atom_cache_.GetAtom(kDndSelection)) {
81 // We don't know all possible MIME types at compile time. 81 // We don't know all possible MIME types at compile time.
82 atom_cache_.allow_uncached_atoms(); 82 atom_cache_.allow_uncached_atoms();
83 83
84 XStoreName(x_display_, x_window_, "Chromium Drag & Drop Window"); 84 XStoreName(x_display_, x_window_, "Chromium Drag & Drop Window");
85 85
86 base::MessagePumpX11::Current()->AddDispatcherForWindow(this, x_window_); 86 PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
87 } 87 }
88 88
89 OSExchangeDataProviderAuraX11::~OSExchangeDataProviderAuraX11() { 89 OSExchangeDataProviderAuraX11::~OSExchangeDataProviderAuraX11() {
90 if (own_window_) { 90 if (own_window_) {
91 base::MessagePumpX11::Current()->RemoveDispatcherForWindow(x_window_); 91 PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this);
92 XDestroyWindow(x_display_, x_window_); 92 XDestroyWindow(x_display_, x_window_);
93 } 93 }
94 } 94 }
95 95
96 void OSExchangeDataProviderAuraX11::TakeOwnershipOfSelection() const { 96 void OSExchangeDataProviderAuraX11::TakeOwnershipOfSelection() const {
97 selection_owner_.TakeOwnershipOfSelection(format_map_); 97 selection_owner_.TakeOwnershipOfSelection(format_map_);
98 } 98 }
99 99
100 void OSExchangeDataProviderAuraX11::RetrieveTargets( 100 void OSExchangeDataProviderAuraX11::RetrieveTargets(
101 std::vector<Atom>* targets) const { 101 std::vector<Atom>* targets) const {
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 } 487 }
488 488
489 const gfx::ImageSkia& OSExchangeDataProviderAuraX11::GetDragImage() const { 489 const gfx::ImageSkia& OSExchangeDataProviderAuraX11::GetDragImage() const {
490 return drag_image_; 490 return drag_image_;
491 } 491 }
492 492
493 const gfx::Vector2d& OSExchangeDataProviderAuraX11::GetDragImageOffset() const { 493 const gfx::Vector2d& OSExchangeDataProviderAuraX11::GetDragImageOffset() const {
494 return drag_image_offset_; 494 return drag_image_offset_;
495 } 495 }
496 496
497 uint32_t OSExchangeDataProviderAuraX11::Dispatch( 497 bool OSExchangeDataProviderAuraX11::CanDispatchEvent(
498 const base::NativeEvent& event) { 498 const PlatformEvent& event) {
499 return event->xany.window == x_window_;
500 }
501
502 uint32_t OSExchangeDataProviderAuraX11::DispatchEvent(
503 const PlatformEvent& event) {
499 XEvent* xev = event; 504 XEvent* xev = event;
500 switch (xev->type) { 505 switch (xev->type) {
501 case SelectionRequest: 506 case SelectionRequest:
502 selection_owner_.OnSelectionRequest(xev->xselectionrequest); 507 selection_owner_.OnSelectionRequest(xev->xselectionrequest);
503 break; 508 return ui::POST_DISPATCH_STOP_PROPAGATION;
504 default: 509 default:
505 NOTIMPLEMENTED(); 510 NOTIMPLEMENTED();
506 } 511 }
507 512 return ui::POST_DISPATCH_NONE;
508 return POST_DISPATCH_NONE;
509 } 513 }
510 514
511 bool OSExchangeDataProviderAuraX11::GetPlainTextURL(GURL* url) const { 515 bool OSExchangeDataProviderAuraX11::GetPlainTextURL(GURL* url) const {
512 base::string16 text; 516 base::string16 text;
513 if (GetString(&text)) { 517 if (GetString(&text)) {
514 GURL test_url(text); 518 GURL test_url(text);
515 if (test_url.is_valid()) { 519 if (test_url.is_valid()) {
516 *url = test_url; 520 *url = test_url;
517 return true; 521 return true;
518 } 522 }
519 } 523 }
520 524
521 return false; 525 return false;
522 } 526 }
523 527
524 std::vector< ::Atom> OSExchangeDataProviderAuraX11::GetTargets() const { 528 std::vector< ::Atom> OSExchangeDataProviderAuraX11::GetTargets() const {
525 return format_map_.GetTypes(); 529 return format_map_.GetTypes();
526 } 530 }
527 531
528 /////////////////////////////////////////////////////////////////////////////// 532 ///////////////////////////////////////////////////////////////////////////////
529 // OSExchangeData, public: 533 // OSExchangeData, public:
530 534
531 // static 535 // static
532 OSExchangeData::Provider* OSExchangeData::CreateProvider() { 536 OSExchangeData::Provider* OSExchangeData::CreateProvider() {
533 return new OSExchangeDataProviderAuraX11(); 537 return new OSExchangeDataProviderAuraX11();
534 } 538 }
535 539
536 } // namespace ui 540 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/dragdrop/os_exchange_data_provider_aurax11.h ('k') | ui/base/dragdrop/os_exchange_data_provider_aurax11_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698