| 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 |