Index: views/controls/textfield/textfield_views_model.cc |
diff --git a/views/controls/textfield/textfield_views_model.cc b/views/controls/textfield/textfield_views_model.cc |
index 21783ec776d500bd7b06b36858a7033b7c969e57..3c179a8b35200bff9206139caec96b549894b05e 100644 |
--- a/views/controls/textfield/textfield_views_model.cc |
+++ b/views/controls/textfield/textfield_views_model.cc |
@@ -6,10 +6,13 @@ |
#include <algorithm> |
+#include "app/clipboard/clipboard.h" |
+#include "app/clipboard/scoped_clipboard_writer.h" |
#include "base/i18n/break_iterator.h" |
#include "base/logging.h" |
#include "base/utf_string_conversions.h" |
#include "gfx/font.h" |
+#include "views/views_delegate.h" |
namespace views { |
@@ -223,6 +226,42 @@ void TextfieldViewsModel::ClearSelection() { |
selection_begin_ = cursor_pos_; |
} |
+bool TextfieldViewsModel::HandleClipboardEvents(app::KeyboardCode key_code) { |
rjkroege
2011/01/05 15:31:22
please remember that cut&paste is also invokable f
varunjain
2011/01/05 16:19:31
Done.
|
+ Clipboard* clipboard = views::ViewsDelegate::views_delegate->GetClipboard(); |
+ bool text_changed = false; |
+ string16 result; |
+ switch (key_code) { |
+ case app::VKEY_C: |
+ if (HasSelection()) { |
+ ScopedClipboardWriter scw(clipboard); |
+ scw.WriteText(GetSelectedText()); |
+ } |
+ break; |
+ case app::VKEY_X: |
+ if (HasSelection()) { |
+ ScopedClipboardWriter scw(clipboard); |
+ scw.WriteText(GetSelectedText()); |
+ DeleteSelection(); |
+ text_changed = true; |
+ } |
+ break; |
+ case app::VKEY_V: |
+ clipboard->ReadText(Clipboard::BUFFER_STANDARD, &result); |
+ if (!result.empty()) { |
+ if (HasSelection()) |
+ DeleteSelection(); |
+ text_.insert(cursor_pos_, result); |
+ cursor_pos_ += result.length(); |
+ ClearSelection(); |
+ text_changed = true; |
+ } |
+ break; |
+ default: |
+ break; |
+ } |
+ return text_changed; |
+} |
+ |
bool TextfieldViewsModel::HasSelection() const { |
return selection_begin_ != cursor_pos_; |
} |