summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Gardiner <paulg.artifex@glidos.net>2012-09-19 15:06:04 +0100
committerPaul Gardiner <paulg.artifex@glidos.net>2012-09-19 15:06:04 +0100
commit7428d9e85791260bf9d481b49e90c4321339453a (patch)
treeb0ca0a6868c47119ade0f5a8a846f4d1ceef6782
parent5f8e096b9090577ed93072448339a6500a5178f3 (diff)
downloadmupdf-7428d9e85791260bf9d481b49e90c4321339453a.tar.xz
Forms: handle print request, both from javascript and from named action
Currently the app windows app responds with a message box explaining that the MuPDF library passes print requests to the app, but the app does not implement printing.
-rw-r--r--apps/jstest_main.c5
-rw-r--r--apps/pdfapp.c3
-rw-r--r--apps/pdfapp.h1
-rw-r--r--apps/win_main.c5
-rw-r--r--apps/x11_main.c5
-rw-r--r--pdf/mupdf-internal.h1
-rw-r--r--pdf/pdf_event.c10
-rw-r--r--pdf/pdf_form.c7
-rw-r--r--pdf/pdf_js.c10
9 files changed, 47 insertions, 0 deletions
diff --git a/apps/jstest_main.c b/apps/jstest_main.c
index a6ff06d1..7f4bc54a 100644
--- a/apps/jstest_main.c
+++ b/apps/jstest_main.c
@@ -53,6 +53,11 @@ void winalert(pdfapp_t *app, fz_alert_event *alert)
}
}
+void winprint(pdfapp_t *app)
+{
+ fprintf(stderr, "The MuPDF library supports printing, but this application currently does not");
+}
+
static char pd_password[256] = "";
static char td_textinput[LONGLINE] = "";
diff --git a/apps/pdfapp.c b/apps/pdfapp.c
index 0a87565a..5cb0adea 100644
--- a/apps/pdfapp.c
+++ b/apps/pdfapp.c
@@ -113,6 +113,9 @@ static void event_cb(fz_doc_event *event, void *data)
winalert(app, alert);
}
break;
+ case FZ_DOCUMENT_EVENT_PRINT:
+ winprint(app);
+ break;
}
}
diff --git a/apps/pdfapp.h b/apps/pdfapp.h
index 46dcf291..4f251c4d 100644
--- a/apps/pdfapp.h
+++ b/apps/pdfapp.h
@@ -38,6 +38,7 @@ extern void winfullscreen(pdfapp_t*, int state);
extern int winsavequery(pdfapp_t*);
extern int wingetsavepath(pdfapp_t*, char *buf, int len);
extern void winalert(pdfapp_t *, fz_alert_event *alert);
+extern void winprint(pdfapp_t *);
struct pdfapp_s
{
diff --git a/apps/win_main.c b/apps/win_main.c
index 97f927f2..ba9e74a7 100644
--- a/apps/win_main.c
+++ b/apps/win_main.c
@@ -155,6 +155,11 @@ void winalert(pdfapp_t *app, fz_alert_event *alert)
}
}
+void winprint(pdfapp_t *app)
+{
+ MessageBoxA(hwndframe, "The MuPDF library supports printing, but this application currently does not", "Print document", MB_ICONWARNING);
+}
+
int winsavequery(pdfapp_t *app)
{
switch(MessageBoxA(hwndframe, "File has unsaved changes. Do you want to save", "MuPDF", MB_YESNOCANCEL))
diff --git a/apps/x11_main.c b/apps/x11_main.c
index 182aadb4..722568d5 100644
--- a/apps/x11_main.c
+++ b/apps/x11_main.c
@@ -126,6 +126,11 @@ void winalert(pdfapp_t *app, fz_alert_event *alert)
}
}
+void winprint(pdfapp_t *app)
+{
+ fprintf(stderr, "The MuPDF library supports printing, but this application currently does not");
+}
+
char *winpassword(pdfapp_t *app, char *filename)
{
char *r = password;
diff --git a/pdf/mupdf-internal.h b/pdf/mupdf-internal.h
index 7fd287dd..9e5b4848 100644
--- a/pdf/mupdf-internal.h
+++ b/pdf/mupdf-internal.h
@@ -633,6 +633,7 @@ void pdf_choice_widget_set_value(pdf_document *doc, fz_widget *tw, int n, char *
void pdf_set_doc_event_callback(pdf_document *doc, fz_doc_event_cb *event_cb, void *data);
void pdf_event_issue_alert(pdf_document *doc, fz_alert_event *event);
+void pdf_event_issue_print(pdf_document *doc);
/*
* Javascript handler
diff --git a/pdf/pdf_event.c b/pdf/pdf_event.c
index 5be3534b..653d2a1f 100644
--- a/pdf/pdf_event.c
+++ b/pdf/pdf_event.c
@@ -31,6 +31,16 @@ void pdf_event_issue_alert(pdf_document *doc, fz_alert_event *alert)
}
}
+void pdf_event_issue_print(pdf_document *doc)
+{
+ fz_doc_event e;
+
+ e.type = FZ_DOCUMENT_EVENT_PRINT;
+
+ if (doc->event_cb)
+ doc->event_cb(&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_form.c b/pdf/pdf_form.c
index 6821e232..22b552cf 100644
--- a/pdf/pdf_form.c
+++ b/pdf/pdf_form.c
@@ -1688,6 +1688,13 @@ static void execute_action(pdf_document *doc, pdf_obj *obj, pdf_obj *a)
{
reset_form(doc, pdf_dict_gets(a, "Fields"), pdf_to_int(pdf_dict_gets(a, "Flags")) & 1);
}
+ else if (!strcmp(type, "Named"))
+ {
+ char *name = pdf_to_name(pdf_dict_gets(a, "N"));
+
+ if (!strcmp(name, "Print"))
+ pdf_event_issue_print(doc);
+ }
}
}
diff --git a/pdf/pdf_js.c b/pdf/pdf_js.c
index 2a3c865c..a5fb553c 100644
--- a/pdf/pdf_js.c
+++ b/pdf/pdf_js.c
@@ -519,6 +519,15 @@ static pdf_jsimp_obj *doc_resetForm(void *jsctx, void *obj, int argc, pdf_jsimp_
return NULL;
}
+static pdf_jsimp_obj *doc_print(void *jsctx, void *obj, int argc, pdf_jsimp_obj *args[])
+{
+ pdf_js *js = (pdf_js *)jsctx;
+
+ pdf_event_issue_print(js->doc);
+
+ return NULL;
+}
+
static void declare_dom(pdf_js *js)
{
pdf_jsimp *imp = js->imp;
@@ -527,6 +536,7 @@ static void declare_dom(pdf_js *js)
js->doctype = pdf_jsimp_new_type(imp, NULL);
pdf_jsimp_addmethod(imp, js->doctype, "getField", doc_getField);
pdf_jsimp_addmethod(imp, js->doctype, "resetForm", doc_resetForm);
+ pdf_jsimp_addmethod(imp, js->doctype, "print", doc_print);
pdf_jsimp_addproperty(imp, js->doctype, "event", doc_getEvent, doc_setEvent);
pdf_jsimp_addproperty(imp, js->doctype, "app", doc_getApp, doc_setApp);