OLD | NEW |
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 "remoting/host/clipboard.h" | 5 #include "remoting/host/clipboard.h" |
6 | 6 |
7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 15 matching lines...) Expand all Loading... |
26 namespace remoting { | 26 namespace remoting { |
27 | 27 |
28 class ClipboardMac : public Clipboard { | 28 class ClipboardMac : public Clipboard { |
29 public: | 29 public: |
30 ClipboardMac(); | 30 ClipboardMac(); |
31 ~ClipboardMac() override; | 31 ~ClipboardMac() override; |
32 | 32 |
33 // Must be called on the UI thread. | 33 // Must be called on the UI thread. |
34 void Start(scoped_ptr<protocol::ClipboardStub> client_clipboard) override; | 34 void Start(scoped_ptr<protocol::ClipboardStub> client_clipboard) override; |
35 void InjectClipboardEvent(const protocol::ClipboardEvent& event) override; | 35 void InjectClipboardEvent(const protocol::ClipboardEvent& event) override; |
36 void Stop() override; | |
37 | 36 |
38 private: | 37 private: |
39 void CheckClipboardForChanges(); | 38 void CheckClipboardForChanges(); |
40 | 39 |
41 scoped_ptr<protocol::ClipboardStub> client_clipboard_; | 40 scoped_ptr<protocol::ClipboardStub> client_clipboard_; |
42 scoped_ptr<base::RepeatingTimer<ClipboardMac> > clipboard_polling_timer_; | 41 scoped_ptr<base::RepeatingTimer<ClipboardMac> > clipboard_polling_timer_; |
43 NSInteger current_change_count_; | 42 NSInteger current_change_count_; |
44 | 43 |
45 DISALLOW_COPY_AND_ASSIGN(ClipboardMac); | 44 DISALLOW_COPY_AND_ASSIGN(ClipboardMac); |
46 }; | 45 }; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; | 82 NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; |
84 [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] | 83 [pasteboard declareTypes:[NSArray arrayWithObject:NSStringPboardType] |
85 owner:nil]; | 84 owner:nil]; |
86 [pasteboard setString:text forType:NSStringPboardType]; | 85 [pasteboard setString:text forType:NSStringPboardType]; |
87 | 86 |
88 // Update local change-count to prevent this change from being picked up by | 87 // Update local change-count to prevent this change from being picked up by |
89 // CheckClipboardForChanges. | 88 // CheckClipboardForChanges. |
90 current_change_count_ = [[NSPasteboard generalPasteboard] changeCount]; | 89 current_change_count_ = [[NSPasteboard generalPasteboard] changeCount]; |
91 } | 90 } |
92 | 91 |
93 void ClipboardMac::Stop() { | |
94 clipboard_polling_timer_.reset(); | |
95 client_clipboard_.reset(); | |
96 } | |
97 | |
98 void ClipboardMac::CheckClipboardForChanges() { | 92 void ClipboardMac::CheckClipboardForChanges() { |
99 NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; | 93 NSPasteboard* pasteboard = [NSPasteboard generalPasteboard]; |
100 NSInteger change_count = [pasteboard changeCount]; | 94 NSInteger change_count = [pasteboard changeCount]; |
101 if (change_count == current_change_count_) { | 95 if (change_count == current_change_count_) { |
102 return; | 96 return; |
103 } | 97 } |
104 current_change_count_ = change_count; | 98 current_change_count_ = change_count; |
105 | 99 |
106 NSString* data = [pasteboard stringForType:NSStringPboardType]; | 100 NSString* data = [pasteboard stringForType:NSStringPboardType]; |
107 if (data == nil) { | 101 if (data == nil) { |
108 return; | 102 return; |
109 } | 103 } |
110 | 104 |
111 protocol::ClipboardEvent event; | 105 protocol::ClipboardEvent event; |
112 event.set_mime_type(kMimeTypeTextUtf8); | 106 event.set_mime_type(kMimeTypeTextUtf8); |
113 event.set_data(base::SysNSStringToUTF8(data)); | 107 event.set_data(base::SysNSStringToUTF8(data)); |
114 client_clipboard_->InjectClipboardEvent(event); | 108 client_clipboard_->InjectClipboardEvent(event); |
115 } | 109 } |
116 | 110 |
117 scoped_ptr<Clipboard> Clipboard::Create() { | 111 scoped_ptr<Clipboard> Clipboard::Create() { |
118 return make_scoped_ptr(new ClipboardMac()); | 112 return make_scoped_ptr(new ClipboardMac()); |
119 } | 113 } |
120 | 114 |
121 } // namespace remoting | 115 } // namespace remoting |
OLD | NEW |