summaryrefslogtreecommitdiff
path: root/pdf
diff options
context:
space:
mode:
authorPaul Gardiner <paulg.artifex@glidos.net>2012-09-25 17:07:19 +0100
committerPaul Gardiner <paulg.artifex@glidos.net>2012-09-25 17:07:19 +0100
commitae14bea1c5a26e85bdabacbc105fca037808429e (patch)
tree188e85b57074450e7a625b8dc9e3684dc22a7fc4 /pdf
parent9edce60dbb86110b2a89baa46db1b01fa192d1d8 (diff)
downloadmupdf-ae14bea1c5a26e85bdabacbc105fca037808429e.tar.xz
Forms: handle app.launchUrl, currently by displaying a warning
Diffstat (limited to 'pdf')
-rw-r--r--pdf/mupdf-internal.h1
-rw-r--r--pdf/pdf_event.c29
-rw-r--r--pdf/pdf_js.c16
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;
}