diff options
Diffstat (limited to 'pdf')
-rw-r--r-- | pdf/mupdf-internal.h | 1 | ||||
-rw-r--r-- | pdf/pdf_event.c | 29 | ||||
-rw-r--r-- | pdf/pdf_js.c | 16 |
3 files changed, 46 insertions, 0 deletions
diff --git a/pdf/mupdf-internal.h b/pdf/mupdf-internal.h index 8c058195..7ac97f2a 100644 --- a/pdf/mupdf-internal.h +++ b/pdf/mupdf-internal.h @@ -636,6 +636,7 @@ void pdf_event_issue_alert(pdf_document *doc, fz_alert_event *event); void pdf_event_issue_print(pdf_document *doc); void pdf_event_issue_exec_menu_item(pdf_document *doc, char *item); void pdf_event_issue_exec_dialog(pdf_document *doc); +void pdf_event_issue_launch_url(pdf_document *doc, char *url, int new_frame); /* * Javascript handler diff --git a/pdf/pdf_event.c b/pdf/pdf_event.c index 61af6a29..f76058ce 100644 --- a/pdf/pdf_event.c +++ b/pdf/pdf_event.c @@ -79,6 +79,35 @@ void pdf_event_issue_exec_dialog(pdf_document *doc) doc->event_cb(&e, doc->event_cb_data); } +typedef struct +{ + fz_doc_event base; + fz_launch_url_event launch_url; +} fz_launch_url_event_internal; + +fz_launch_url_event *fz_access_launch_url_event(fz_doc_event *event) +{ + fz_launch_url_event *launch_url = NULL; + + if (event->type == FZ_DOCUMENT_EVENT_LAUNCH_URL) + launch_url = &((fz_launch_url_event_internal *)event)->launch_url; + + return launch_url; +} + +void pdf_event_issue_launch_url(pdf_document *doc, char *url, int new_frame) +{ + if (doc->event_cb) + { + fz_launch_url_event_internal e; + + e.base.type = FZ_DOCUMENT_EVENT_LAUNCH_URL; + e.launch_url.url = url; + e.launch_url.new_frame = new_frame; + doc->event_cb((fz_doc_event *)&e, doc->event_cb_data); + } +} + void pdf_set_doc_event_callback(pdf_document *doc, fz_doc_event_cb *fn, void *data) { doc->event_cb = fn; diff --git a/pdf/pdf_js.c b/pdf/pdf_js.c index d401b3a2..e690ad09 100644 --- a/pdf/pdf_js.c +++ b/pdf/pdf_js.c @@ -120,6 +120,22 @@ static pdf_jsimp_obj *app_execMenuItem(void *jsctx, void *obj, int argc, pdf_jsi static pdf_jsimp_obj *app_launchURL(void *jsctx, void *obj, int argc, pdf_jsimp_obj *args[]) { + pdf_js *js = (pdf_js *)jsctx; + char *cUrl; + int bNewFrame = 0; + + switch(argc) + { + default: + return NULL; + case 2: + bNewFrame = (int)pdf_jsimp_to_number(js->imp, args[1]); + case 1: + cUrl = pdf_jsimp_to_string(js->imp, args[0]); + } + + pdf_event_issue_launch_url(js->doc, cUrl, bNewFrame); + return NULL; } |