Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

X11 clipboard support #5547

Merged
merged 6 commits into from Apr 21, 2015
Prev

Make the channel argument to TextInput::new be optional, to support t…

…he signature expected by the unit tests.
  • Loading branch information
aweinstock314 committed Apr 21, 2015
commit cf6aef5d51cab7d5ec86e12dbe464d17695eefab
@@ -120,7 +120,7 @@ impl HTMLInputElement {
checked_changed: Cell::new(false),
value_changed: Cell::new(false),
size: Cell::new(DEFAULT_INPUT_SIZE),
textinput: DOMRefCell::new(TextInput::new(Single, "".to_owned(), chan)),
textinput: DOMRefCell::new(TextInput::new(Single, "".to_owned(), Some(chan))),
activation_state: DOMRefCell::new(InputActivationState::new())
}
}
@@ -94,7 +94,7 @@ impl HTMLTextAreaElement {
let chan = document.window().root().r().constellation_chan();
HTMLTextAreaElement {
htmlelement: HTMLElement::new_inherited(HTMLElementTypeId::HTMLTextAreaElement, localName, prefix, document),
textinput: DOMRefCell::new(TextInput::new(Lines::Multiple, "".to_owned(), chan)),
textinput: DOMRefCell::new(TextInput::new(Lines::Multiple, "".to_owned(), Some(chan))),
cols: Cell::new(DEFAULT_COLS),
rows: Cell::new(DEFAULT_ROWS),
value_changed: Cell::new(false),
@@ -43,7 +43,7 @@ pub struct TextInput {
selection_begin: Option<TextPoint>,
/// Is this a multiline input?
multiline: bool,
constellation_channel: ConstellationChan
constellation_channel: Option<ConstellationChan>
}

/// Resulting action to be taken by the owner of a text input that is handling an event.
@@ -91,7 +91,7 @@ fn is_control_key(event: JSRef<KeyboardEvent>) -> bool {

impl TextInput {
/// Instantiate a new text input control
pub fn new(lines: Lines, initial: DOMString, cc: ConstellationChan) -> TextInput {
pub fn new(lines: Lines, initial: DOMString, cc: Option<ConstellationChan>) -> TextInput {
let mut i = TextInput {
lines: vec!(),
edit_point: Default::default(),
@@ -298,9 +298,14 @@ impl TextInput {
},
"v" if is_control_key(event) => {
let (tx, rx) = channel();
self.constellation_channel.0.send(ConstellationMsg::GetClipboardContents(tx)).unwrap();
let contents = rx.recv().unwrap();
self.insert_string(contents.as_slice());
let mut contents = None;
if let Some(ref cc) = self.constellation_channel {
cc.0.send(ConstellationMsg::GetClipboardContents(tx)).unwrap();
contents = Some(rx.recv().unwrap());
}
if let Some(contents) = contents {
self.insert_string(contents.as_slice());
}
KeyReaction::DispatchInput
},
// printable characters have single-character key values
@@ -12,7 +12,7 @@ use std::borrow::ToOwned;

#[test]
fn test_textinput_delete_char() {
let mut textinput = TextInput::new(Lines::Single, "abcdefg".to_owned());
let mut textinput = TextInput::new(Lines::Single, "abcdefg".to_owned(), None);
textinput.adjust_horizontal(2, Selection::NotSelected);
textinput.delete_char(DeleteDir::Backward);
assert_eq!(textinput.get_content(), "acdefg");
@@ -27,7 +27,7 @@ fn test_textinput_delete_char() {

#[test]
fn test_textinput_insert_char() {
let mut textinput = TextInput::new(Lines::Single, "abcdefg".to_owned());
let mut textinput = TextInput::new(Lines::Single, "abcdefg".to_owned(), None);
textinput.adjust_horizontal(2, Selection::NotSelected);
textinput.insert_char('a');
assert_eq!(textinput.get_content(), "abacdefg");
@@ -39,7 +39,7 @@ fn test_textinput_insert_char() {

#[test]
fn test_textinput_get_sorted_selection() {
let mut textinput = TextInput::new(Lines::Single, "abcdefg".to_owned());
let mut textinput = TextInput::new(Lines::Single, "abcdefg".to_owned(), None);
textinput.adjust_horizontal(2, Selection::NotSelected);
textinput.adjust_horizontal(2, Selection::Selected);
let (begin, end) = textinput.get_sorted_selection();
@@ -56,7 +56,7 @@ fn test_textinput_get_sorted_selection() {

#[test]
fn test_textinput_replace_selection() {
let mut textinput = TextInput::new(Lines::Single, "abcdefg".to_owned());
let mut textinput = TextInput::new(Lines::Single, "abcdefg".to_owned(), None);
textinput.adjust_horizontal(2, Selection::NotSelected);
textinput.adjust_horizontal(2, Selection::Selected);

@@ -66,7 +66,7 @@ fn test_textinput_replace_selection() {

#[test]
fn test_textinput_current_line_length() {
let mut textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned());
let mut textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned(), None);
assert_eq!(textinput.current_line_length(), 3);

textinput.adjust_vertical(1, Selection::NotSelected);
@@ -78,7 +78,7 @@ fn test_textinput_current_line_length() {

#[test]
fn test_textinput_adjust_vertical() {
let mut textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned());
let mut textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned(), None);
textinput.adjust_horizontal(3, Selection::NotSelected);
textinput.adjust_vertical(1, Selection::NotSelected);
assert_eq!(textinput.edit_point.line, 1);
@@ -95,7 +95,7 @@ fn test_textinput_adjust_vertical() {

#[test]
fn test_textinput_adjust_horizontal() {
let mut textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned());
let mut textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned(), None);
textinput.adjust_horizontal(4, Selection::NotSelected);
assert_eq!(textinput.edit_point.line, 1);
assert_eq!(textinput.edit_point.index, 0);
@@ -115,20 +115,20 @@ fn test_textinput_adjust_horizontal() {

#[test]
fn test_textinput_handle_return() {
let mut single_line_textinput = TextInput::new(Lines::Single, "abcdef".to_owned());
let mut single_line_textinput = TextInput::new(Lines::Single, "abcdef".to_owned(), None);
single_line_textinput.adjust_horizontal(3, Selection::NotSelected);
single_line_textinput.handle_return();
assert_eq!(single_line_textinput.get_content(), "abcdef");

let mut multi_line_textinput = TextInput::new(Lines::Multiple, "abcdef".to_owned());
let mut multi_line_textinput = TextInput::new(Lines::Multiple, "abcdef".to_owned(), None);
multi_line_textinput.adjust_horizontal(3, Selection::NotSelected);
multi_line_textinput.handle_return();
assert_eq!(multi_line_textinput.get_content(), "abc\ndef");
}

#[test]
fn test_textinput_select_all() {
let mut textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned());
let mut textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned(), None);
assert_eq!(textinput.edit_point.line, 0);
assert_eq!(textinput.edit_point.index, 0);

@@ -139,16 +139,16 @@ fn test_textinput_select_all() {

#[test]
fn test_textinput_get_content() {
let single_line_textinput = TextInput::new(Lines::Single, "abcdefg".to_owned());
let single_line_textinput = TextInput::new(Lines::Single, "abcdefg".to_owned(), None);
assert_eq!(single_line_textinput.get_content(), "abcdefg");

let multi_line_textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned());
let multi_line_textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned(), None);
assert_eq!(multi_line_textinput.get_content(), "abc\nde\nf");
}

#[test]
fn test_textinput_set_content() {
let mut textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned());
let mut textinput = TextInput::new(Lines::Multiple, "abc\nde\nf".to_owned(), None);
assert_eq!(textinput.get_content(), "abc\nde\nf");

textinput.set_content("abc\nf".to_owned());
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.