summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/pdfapp.c12
-rw-r--r--fitz/fitz.h9
-rw-r--r--pdf/mupdf-internal.h1
-rw-r--r--pdf/pdf_event.c28
-rw-r--r--pdf/pdf_js.c23
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);