summaryrefslogtreecommitdiff
path: root/apps/pdfapp.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/pdfapp.c')
-rw-r--r--apps/pdfapp.c69
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;