| Index: pdf/pdfium/pdfium_engine.cc
|
| diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc
|
| index 6457478f2bfcb062721d2a33b26564988c4bdc01..42f69e7bf2a9bb30154015f0bd2269ff6f0a908b 100644
|
| --- a/pdf/pdfium/pdfium_engine.cc
|
| +++ b/pdf/pdfium/pdfium_engine.cc
|
| @@ -561,6 +561,8 @@ PDFiumEngine::PDFiumEngine(PDFEngine::Client* client)
|
| form_(NULL),
|
| defer_page_unload_(false),
|
| selecting_(false),
|
| + mouse_down_state_(PDFiumPage::NONSELECTABLE_AREA,
|
| + PDFiumPage::LinkTarget()),
|
| next_page_to_search_(-1),
|
| last_page_to_search_(-1),
|
| last_character_index_to_search_(-1),
|
| @@ -1322,7 +1324,7 @@ bool PDFiumEngine::OnMouseDown(const pp::MouseInputEvent& event) {
|
| PDFiumPage::LinkTarget target;
|
| PDFiumPage::Area area = GetCharIndex(event, &page_index,
|
| &char_index, &target);
|
| - mouse_down_state_ = MouseDownState(area, target);
|
| + mouse_down_state_.Set(area, target);
|
|
|
| // Decide whether to open link or not based on user action in mouse up and
|
| // mouse move events.
|
| @@ -1410,7 +1412,7 @@ bool PDFiumEngine::OnMouseUp(const pp::MouseInputEvent& event) {
|
| GetCharIndex(event, &page_index, &char_index, &target);
|
|
|
| // Open link on mouse up for same link for which mouse down happened earlier.
|
| - if (mouse_down_state_ == MouseDownState(area, target)) {
|
| + if (mouse_down_state_.Matches(area, target)) {
|
| if (area == PDFiumPage::WEBLINK_AREA) {
|
| bool open_in_new_tab = !!(event.GetModifiers() & kDefaultKeyModifier);
|
| client_->NavigateTo(target.url, open_in_new_tab);
|
| @@ -1443,8 +1445,8 @@ bool PDFiumEngine::OnMouseMove(const pp::MouseInputEvent& event) {
|
|
|
| // Clear |mouse_down_state_| if mouse moves away from where the mouse down
|
| // happened.
|
| - if (mouse_down_state_ != MouseDownState(area, target))
|
| - mouse_down_state_ = MouseDownState();
|
| + if (!mouse_down_state_.Matches(area, target))
|
| + mouse_down_state_.Reset();
|
|
|
| if (!selecting_) {
|
| PP_CursorType_Dev cursor;
|
| @@ -2756,6 +2758,39 @@ PDFiumEngine::SelectionChangeInvalidator::GetVisibleSelectionsScreenRects(
|
| }
|
| }
|
|
|
| +PDFiumEngine::MouseDownState::MouseDownState(
|
| + const PDFiumPage::Area& area,
|
| + const PDFiumPage::LinkTarget& target)
|
| + : area_(area), target_(target) {
|
| +}
|
| +
|
| +PDFiumEngine::MouseDownState::~MouseDownState() {
|
| +}
|
| +
|
| +void PDFiumEngine::MouseDownState::Set(const PDFiumPage::Area& area,
|
| + const PDFiumPage::LinkTarget& target) {
|
| + area_ = area;
|
| + target_ = target;
|
| +}
|
| +
|
| +void PDFiumEngine::MouseDownState::Reset() {
|
| + area_ = PDFiumPage::NONSELECTABLE_AREA;
|
| + target_ = PDFiumPage::LinkTarget();
|
| +}
|
| +
|
| +bool PDFiumEngine::MouseDownState::Matches(
|
| + const PDFiumPage::Area& area,
|
| + const PDFiumPage::LinkTarget& target) const {
|
| + if (area_ == area) {
|
| + if (area == PDFiumPage::WEBLINK_AREA)
|
| + return target_.url == target.url;
|
| + if (area == PDFiumPage::DOCLINK_AREA)
|
| + return target_.page == target.page;
|
| + return true;
|
| + }
|
| + return false;
|
| +}
|
| +
|
| void PDFiumEngine::DeviceToPage(int page_index,
|
| float device_x,
|
| float device_y,
|
|
|