diff options
author | Paul Gardiner <paulg.artifex@glidos.net> | 2012-09-25 17:07:19 +0100 |
---|---|---|
committer | Paul Gardiner <paulg.artifex@glidos.net> | 2012-09-25 17:07:19 +0100 |
commit | ae14bea1c5a26e85bdabacbc105fca037808429e (patch) | |
tree | 188e85b57074450e7a625b8dc9e3684dc22a7fc4 | |
parent | 9edce60dbb86110b2a89baa46db1b01fa192d1d8 (diff) | |
download | mupdf-ae14bea1c5a26e85bdabacbc105fca037808429e.tar.xz |
Forms: handle app.launchUrl, currently by displaying a warning
-rw-r--r-- | apps/pdfapp.c | 8 | ||||
-rw-r--r-- | fitz/fitz.h | 17 | ||||
-rw-r--r-- | pdf/mupdf-internal.h | 1 | ||||
-rw-r--r-- | pdf/pdf_event.c | 29 | ||||
-rw-r--r-- | pdf/pdf_js.c | 16 |
5 files changed, 71 insertions, 0 deletions
diff --git a/apps/pdfapp.c b/apps/pdfapp.c index 608db8b8..682c0db2 100644 --- a/apps/pdfapp.c +++ b/apps/pdfapp.c @@ -133,6 +133,14 @@ static void event_cb(fz_doc_event *event, void *data) case FZ_DOCUMENT_EVENT_EXEC_DIALOG: pdfapp_warn(app, "The document attempted to open a dialog box. (Not supported)"); break; + + case FZ_DOCUMENT_EVENT_LAUNCH_URL: + { + fz_launch_url_event *launch_url = fz_access_launch_url_event(event); + + pdfapp_warn(app, "The document attempted to open url: %s. (Not supported by app)", launch_url->url); + } + break; } } diff --git a/fitz/fitz.h b/fitz/fitz.h index cb71418a..3a34535c 100644 --- a/fitz/fitz.h +++ b/fitz/fitz.h @@ -2676,6 +2676,23 @@ typedef struct */ fz_submit_event *fz_access_submit_event(fz_doc_event *event); +/* + fz_launch_url_event: details of a launch-url event. The app should + open the url, either in a new frame or in the current window. +*/ +typedef struct +{ + char *url; + int new_frame; +} fz_launch_url_event; + +/* + fz_access_launch_url_event: access the details of a launch-url + event. The returned pointer and all data referred to by the structure + are owned by mupdf and need not be freed by the caller. +*/ +fz_launch_url_event *fz_access_launch_url_event(fz_doc_event *event); + typedef struct fz_write_options_s fz_write_options; /* 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; } |