diff options
-rw-r--r-- | apps/pdfapp.c | 12 | ||||
-rw-r--r-- | fitz/fitz.h | 9 | ||||
-rw-r--r-- | pdf/mupdf-internal.h | 1 | ||||
-rw-r--r-- | pdf/pdf_event.c | 28 | ||||
-rw-r--r-- | pdf/pdf_js.c | 23 |
5 files changed, 72 insertions, 1 deletions
diff --git a/apps/pdfapp.c b/apps/pdfapp.c index d7934196..2c5d90a3 100644 --- a/apps/pdfapp.c +++ b/apps/pdfapp.c @@ -114,9 +114,21 @@ static void event_cb(fz_doc_event *event, void *data) winalert(app, alert); } break; + case FZ_DOCUMENT_EVENT_PRINT: winprint(app); break; + + case FZ_DOCUMENT_EVENT_EXEC_MENU_ITEM: + { + char *item = fz_access_exec_menu_item_event(event); + + if (!strcmp(item, "Print")) + winprint(app); + else + pdfapp_warn(app, "The document attempted to execute menu item: %s. (Not supported)", item); + } + break; } } diff --git a/fitz/fitz.h b/fitz/fitz.h index 4e5607f3..fb9facc1 100644 --- a/fitz/fitz.h +++ b/fitz/fitz.h @@ -2575,7 +2575,8 @@ enum FZ_DOCUMENT_EVENT_PRINT, FZ_DOCUMENT_EVENT_LAUNCH_URL, FZ_DOCUMENT_EVENT_MAIL_DOC, - FZ_DOCUMENT_EVENT_SUBMIT + FZ_DOCUMENT_EVENT_SUBMIT, + FZ_DOCUMENT_EVENT_EXEC_MENU_ITEM }; /* @@ -2649,6 +2650,12 @@ enum fz_alert_event *fz_access_alert_event(fz_doc_event *event); /* + fz_access_exec_menu_item_event: access the details of am execMenuItem + event, which consists of just the name of the menu item +*/ +char *fz_access_exec_menu_item_event(fz_doc_event *event); + +/* fz_submit_event: details of a submit event. The app should submit the specified data to the specified url. "get" determines whether to use the GET or POST method. diff --git a/pdf/mupdf-internal.h b/pdf/mupdf-internal.h index 9e5b4848..a069e236 100644 --- a/pdf/mupdf-internal.h +++ b/pdf/mupdf-internal.h @@ -634,6 +634,7 @@ void pdf_set_doc_event_callback(pdf_document *doc, fz_doc_event_cb *event_cb, vo 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); /* * Javascript handler diff --git a/pdf/pdf_event.c b/pdf/pdf_event.c index 653d2a1f..eeaa5dfb 100644 --- a/pdf/pdf_event.c +++ b/pdf/pdf_event.c @@ -41,6 +41,34 @@ void pdf_event_issue_print(pdf_document *doc) doc->event_cb(&e, doc->event_cb_data); } +typedef struct +{ + fz_doc_event base; + char *item; +} fz_exec_menu_item_event_internal; + +char *fz_access_exec_menu_item_event(fz_doc_event *event) +{ + char *item = NULL; + + if (event->type == FZ_DOCUMENT_EVENT_EXEC_MENU_ITEM) + item = ((fz_exec_menu_item_event_internal *)event)->item; + + return item; +} + +void pdf_event_issue_exec_menu_item(pdf_document *doc, char *item) +{ + if (doc->event_cb) + { + fz_exec_menu_item_event_internal ievent; + ievent.base.type = FZ_DOCUMENT_EVENT_EXEC_MENU_ITEM; + ievent.item = item; + + doc->event_cb((fz_doc_event *)&ievent, 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 a5fb553c..441f49d4 100644 --- a/pdf/pdf_js.c +++ b/pdf/pdf_js.c @@ -99,6 +99,26 @@ static pdf_jsimp_obj *app_alert(void *jsctx, void *obj, int argc, pdf_jsimp_obj return nButton_obj; } +static pdf_jsimp_obj *app_execDialog(void *jsctx, void *obj, int argc, pdf_jsimp_obj *args[]) +{ + return NULL; +} + +static pdf_jsimp_obj *app_execMenuItem(void *jsctx, void *obj, int argc, pdf_jsimp_obj *args[]) +{ + pdf_js *js = (pdf_js *)jsctx; + + if (argc == 1) + pdf_event_issue_exec_menu_item(js->doc, pdf_jsimp_to_string(js->imp, args[0])); + + return NULL; +} + +static pdf_jsimp_obj *app_launchURL(void *jsctx, void *obj, int argc, pdf_jsimp_obj *args[]) +{ + return NULL; +} + static pdf_obj *load_color(fz_context *ctx, pdf_jsimp *imp, pdf_jsimp_obj *val) { pdf_obj *col = NULL; @@ -559,6 +579,9 @@ static void declare_dom(pdf_js *js) /* Create the app type */ js->apptype = pdf_jsimp_new_type(imp, NULL); pdf_jsimp_addmethod(imp, js->apptype, "alert", app_alert); + pdf_jsimp_addmethod(imp, js->apptype, "execDialog", app_execDialog); + pdf_jsimp_addmethod(imp, js->apptype, "execMenuItem", app_execMenuItem); + pdf_jsimp_addmethod(imp, js->apptype, "launchURL", app_launchURL); /* Create the document object and tell the engine to use */ pdf_jsimp_set_global_type(js->imp, js->doctype); |