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

Unified Diff: pdf/pdfium/pdfium_engine.cc

Issue 2924343005: Add functionality for copying text within form text fields and form combobox text fields (Closed)
Patch Set: Removed unwanted diff files Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: pdf/pdfium/pdfium_engine.cc
diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
index 37c01618778ebd942421fbab1c4c6f6b8a3affcf..9fead52b6667a8c7ccad8d9bd7e98b1ca4bec670 100644
--- a/pdf/pdfium/pdfium_engine.cc
+++ b/pdf/pdfium/pdfium_engine.cc
@@ -1624,6 +1624,26 @@ void PDFiumEngine::FitContentsToPrintableAreaIfRequired(
void PDFiumEngine::SaveSelectedFormForPrint() {
FORM_ForceToKillFocus(form_);
client_->FormTextFieldFocusChange(false);
+ SetInFormTextField(false);
+}
+
+void PDFiumEngine::SetFormSelectedText(const FPDF_FORMHANDLE& hHandle,
+ const FPDF_PAGE& page) {
+ size_t form_sel_text_len = FORM_GetSelectedText(hHandle, page, nullptr, 0);
+
+ if (form_sel_text_len) {
Lei Zhang 2017/06/10 01:55:49 Invert + early return.
drgage 2017/06/12 18:57:47 Done.
+ base::string16 selected_form_text;
Lei Zhang 2017/06/10 01:55:49 How about calling the std::string version selected
drgage 2017/06/12 18:57:47 Done.
+ PDFiumAPIStringBufferSizeInBytesAdapter<base::string16> string_adapter(
+ &selected_form_text, form_sel_text_len, false);
+ string_adapter.Close(FORM_GetSelectedText(
+ hHandle, page, string_adapter.GetData(), form_sel_text_len));
+
+ std::string str_selected_form_text = UTF16ToUTF8(selected_form_text);
+ if (str_selected_form_text.c_str() && str_selected_form_text != "") {
Lei Zhang 2017/06/10 01:55:49 I think you just want to check: !str_selected_form
drgage 2017/06/12 18:57:47 Done.
+ pp::PDF::SetSelectedText(GetPluginInstance(),
+ str_selected_form_text.c_str());
+ }
+ }
}
void PDFiumEngine::PrintEnd() {
@@ -1720,18 +1740,20 @@ bool PDFiumEngine::OnMouseDown(const pp::MouseInputEvent& event) {
FORM_OnLButtonDown(form_, pages_[page_index]->GetPage(), 0, page_x, page_y);
if (form_type > FPDF_FORMFIELD_UNKNOWN) { // returns -1 sometimes...
- mouse_down_state_.Set(PDFiumPage::NONSELECTABLE_AREA, target);
+ mouse_down_state_.Set(PDFiumPage::FORM_TEXT_AREA, target);
bool is_valid_control = (form_type == FPDF_FORMFIELD_TEXTFIELD ||
form_type == FPDF_FORMFIELD_COMBOBOX);
#if defined(PDF_ENABLE_XFA)
is_valid_control |= (form_type == FPDF_FORMFIELD_XFA);
#endif
client_->FormTextFieldFocusChange(is_valid_control);
+ SetInFormTextField(is_valid_control);
Lei Zhang 2017/06/10 01:55:49 Isn't this also going to be true for a combo box?
drgage 2017/06/12 18:57:47 Yeah, you're right. Do you think I should change h
return true; // Return now before we get into the selection code.
}
}
client_->FormTextFieldFocusChange(false);
+ SetInFormTextField(false);
if (area != PDFiumPage::TEXT_AREA)
return true; // Return true so WebKit doesn't do its own highlighting.
@@ -1807,11 +1829,13 @@ bool PDFiumEngine::OnMouseUp(const pp::MouseInputEvent& event) {
client_->NavigateTo(target.url, disposition);
client_->FormTextFieldFocusChange(false);
+ SetInFormTextField(false);
return true;
}
if (area == PDFiumPage::DOCLINK_AREA) {
client_->ScrollToPage(target.page);
client_->FormTextFieldFocusChange(false);
+ SetInFormTextField(false);
return true;
}
}
@@ -1827,6 +1851,10 @@ bool PDFiumEngine::OnMouseUp(const pp::MouseInputEvent& event) {
FORM_OnLButtonUp(form_, pages_[page_index]->GetPage(), 0, page_x, page_y);
}
+ if (area == PDFiumPage::FORM_TEXT_AREA) {
+ SetFormSelectedText(form_, pages_[last_page_mouse_down_]->GetPage());
+ }
+
if (!selecting_)
return false;
@@ -1991,6 +2019,13 @@ bool PDFiumEngine::OnKeyUp(const pp::KeyboardInputEvent& event) {
if (last_page_mouse_down_ == -1)
return false;
+ uint32_t modifiers = event.GetModifiers();
+ bool shift_key = !!(modifiers & PP_INPUTEVENT_MODIFIER_SHIFTKEY);
+
+ if (in_form_text_field_ && shift_key) {
Lei Zhang 2017/06/10 01:55:49 If |in_form_text_field_| is false, then it is not
drgage 2017/06/12 18:57:47 Done.
+ SetFormSelectedText(form_, pages_[last_page_mouse_down_]->GetPage());
+ }
+
return !!FORM_OnKeyUp(form_, pages_[last_page_mouse_down_]->GetPage(),
event.GetKeyCode(), event.GetModifiers());
}
@@ -3552,6 +3587,10 @@ void PDFiumEngine::SetSelecting(bool selecting) {
client_->IsSelectingChanged(selecting);
}
+void PDFiumEngine::SetInFormTextField(bool in_form_text_field) {
+ in_form_text_field_ = in_form_text_field;
+}
+
void PDFiumEngine::ScheduleTouchTimer(const pp::TouchInputEvent& evt) {
touch_timers_[++next_touch_timer_id_] = evt;
client_->ScheduleTouchTimerCallback(next_touch_timer_id_,

Powered by Google App Engine
This is Rietveld 408576698