poppler/Form.cc | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-)
New commits: commit f3f5a166bcd16b6f2cb516cceb2b3f41b6faf0b4 Author: Fabio D'Urso <[email protected]> Date: Fri Nov 2 01:53:24 2012 +0100 Editable FormFieldChoice: Clear editedChoice when one of the predefined option is selected This patch clears the user-entered text when the user interacts with predefined options. diff --git a/poppler/Form.cc b/poppler/Form.cc index f3bf39d..78c25e3 100644 --- a/poppler/Form.cc +++ b/poppler/Form.cc @@ -1286,20 +1286,30 @@ void FormFieldChoice::unselectAll () } void FormFieldChoice::deselectAll () { + delete editedChoice; + editedChoice = NULL; + unselectAll(); updateSelection(); } void FormFieldChoice::toggle (int i) { + delete editedChoice; + editedChoice = NULL; + choices[i].selected = !choices[i].selected; updateSelection(); } void FormFieldChoice::select (int i) { + delete editedChoice; + editedChoice = NULL; + if (!multiselect) unselectAll(); + choices[i].selected = true; updateSelection(); } commit ddcd5dc0ceecc02f0d4f740cb6c9b557dfd33c74 Author: Fabio D'Urso <[email protected]> Date: Thu Nov 1 00:58:51 2012 +0100 FormFieldChoice ctor: Added support to recognize user strings as /V value Fixes http://lists.freedesktop.org/archives/poppler/2012-October/009688.html diff --git a/poppler/Form.cc b/poppler/Form.cc index d38f2a9..f3bf39d 100644 --- a/poppler/Form.cc +++ b/poppler/Form.cc @@ -1165,6 +1165,11 @@ FormFieldChoice::FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, For break; // We've determined that this option is selected. No need to keep on scanning } } + + // Set custom value if /V doesn't refer to any predefined option and the field is user-editable + if (!optionFound && edit) { + editedChoice = obj1.getString()->copy(); + } } else if (obj1.isArray()) { for (int i = 0; i < numChoices; i++) { for (int j = 0; j < obj1.arrayGetLength(); j++) { commit 1302bf52bba7e6446f01358240a4b5b583e196a9 Author: Fabio D'Urso <[email protected]> Date: Wed Oct 31 19:56:37 2012 +0100 FormFieldChoice ctor: Stop scanning if /V is a string and the corresponding option has been identified diff --git a/poppler/Form.cc b/poppler/Form.cc index 586482d..d38f2a9 100644 --- a/poppler/Form.cc +++ b/poppler/Form.cc @@ -1147,16 +1147,23 @@ FormFieldChoice::FormFieldChoice(PDFDoc *docA, Object *aobj, const Ref& ref, For // However, if /Opt is an array of (exportVal,optionName) pairs, acroread // seems to expect the exportVal instead of the optionName and so we do too. if (Form::fieldLookup(dict, "V", &obj1)->isString()) { + GBool optionFound = gFalse; + for (int i = 0; i < numChoices; i++) { if (choices[i].exportVal) { if (choices[i].exportVal->cmp(obj1.getString()) == 0) { - choices[i].selected = true; + optionFound = gTrue; } } else if (choices[i].optionName) { if (choices[i].optionName->cmp(obj1.getString()) == 0) { - choices[i].selected = true; + optionFound = gTrue; } } + + if (optionFound) { + choices[i].selected = true; + break; // We've determined that this option is selected. No need to keep on scanning + } } } else if (obj1.isArray()) { for (int i = 0; i < numChoices; i++) { _______________________________________________ poppler mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/poppler
