diff options
Diffstat (limited to 'apps/pdfapp.c')
-rw-r--r-- | apps/pdfapp.c | 69 |
1 files changed, 49 insertions, 20 deletions
diff --git a/apps/pdfapp.c b/apps/pdfapp.c index 5e235ddf..fed8a025 100644 --- a/apps/pdfapp.c +++ b/apps/pdfapp.c @@ -145,7 +145,7 @@ static void pdfapp_open_pdf(pdfapp_t *app, char *filename, int fd) app->outline = pdf_load_outline(app->xref); - app->doctitle = filename; + app->doctitle = fz_strdup(ctx, filename); if (strrchr(app->doctitle, '\\')) app->doctitle = strrchr(app->doctitle, '\\') + 1; if (strrchr(app->doctitle, '/')) @@ -189,7 +189,7 @@ static void pdfapp_open_xps(pdfapp_t *app, char *filename, int fd) } fz_close(file); - app->doctitle = filename; + app->doctitle = fz_strdup(app->ctx, filename); app->pagecount = xps_count_pages(app->xps); } @@ -225,6 +225,22 @@ void pdfapp_open(pdfapp_t *app, char *filename, int fd, int reload) void pdfapp_close(pdfapp_t *app) { + if (app->page_list) + fz_free_display_list(app->ctx, app->page_list); + app->page_list = NULL; + + if (app->page_text) + fz_free_text_span(app->ctx, app->page_text); + app->page_text = NULL; + + if (app->page_links) + pdf_free_link(app->ctx, app->page_links); + app->page_links = NULL; + + if (app->doctitle) + fz_free(app->ctx, app->doctitle); + app->doctitle = NULL; + if (app->cache) fz_free_glyph_cache(app->ctx, app->cache); app->cache = NULL; @@ -234,7 +250,7 @@ void pdfapp_close(pdfapp_t *app) app->image = NULL; if (app->outline) - pdf_free_outline(app->ctx, app->outline); + fz_free_outline(app->outline); app->outline = NULL; if (app->xref) @@ -629,13 +645,8 @@ static void pdfapp_searchforward(pdfapp_t *app, enum panning *panto) } while (app->pageno != startpage); if (app->pageno == startpage) - { pdfapp_warn(app, "String '%s' not found.", app->search); - winrepaintsearch(app); - } - else - winrepaint(app); - + winrepaint(app); wincursor(app, HAND); } @@ -683,13 +694,9 @@ static void pdfapp_searchbackward(pdfapp_t *app, enum panning *panto) } while (app->pageno != startpage); if (app->pageno == startpage) - { pdfapp_warn(app, "String '%s' not found.", app->search); - winrepaintsearch(app); - } - else - winrepaint(app); + winrepaint(app); wincursor(app, HAND); } @@ -726,6 +733,16 @@ void pdfapp_onkey(pdfapp_t *app, int c) if (n > 0) { winrepaintsearch(app); + + if (app->searchdir < 0) + { + if (app->pageno == 1) + app->pageno = app->pagecount; + else + app->pageno--; + pdfapp_showpage(app, 1, 1, 0); + } + pdfapp_onkey(app, 'n'); } else @@ -762,10 +779,6 @@ void pdfapp_onkey(pdfapp_t *app, int c) switch (c) { - case '?': - winhelp(app); - break; - case 'q': winclose(app); break; @@ -951,8 +964,18 @@ void pdfapp_onkey(pdfapp_t *app, int c) * Searching */ + case '?': + app->isediting = 1; + app->searchdir = -1; + app->search[0] = 0; + app->hit = -1; + app->hitlen = 0; + winrepaintsearch(app); + break; + case '/': app->isediting = 1; + app->searchdir = 1; app->search[0] = 0; app->hit = -1; app->hitlen = 0; @@ -960,12 +983,18 @@ void pdfapp_onkey(pdfapp_t *app, int c) break; case 'n': - pdfapp_searchforward(app, &panto); + if (app->searchdir > 0) + pdfapp_searchforward(app, &panto); + else + pdfapp_searchbackward(app, &panto); loadpage = 0; break; case 'N': - pdfapp_searchbackward(app, &panto); + if (app->searchdir > 0) + pdfapp_searchbackward(app, &panto); + else + pdfapp_searchforward(app, &panto); loadpage = 0; break; |