From 52b4eb464f57ff0b7ec13a0ca07fc7b9ffc70514 Mon Sep 17 00:00:00 2001 From: Moritz Lipp Date: Wed, 5 May 2010 12:36:04 +0200 Subject: [PATCH] Added page labels With this commit it is possible to show and use the labels of a page, which makes it possible to use a page offset. E.g.: Sometimes the page numbers written on the page in the document differ from the order in the file, which can be annoying by e.g. trying to go to the page number >20< that is instead page number >24< in the document. --- config.def.h | 2 ++ zathura.c | 41 ++++++++++++++++++++++++----------------- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/config.def.h b/config.def.h index 3f9eb25..ffc445c 100644 --- a/config.def.h +++ b/config.def.h @@ -55,6 +55,7 @@ static const char DEFAULT_TEXT[] = "[No Name]"; #define SHOW_SCROLLBARS 0 #define ADJUST_OPEN ADJUST_BESTFIT #define RECOLOR_OPEN 0 +#define ENABLE_LABELS 1 /* shortcuts */ Shortcut shortcuts[] = { @@ -159,4 +160,5 @@ Setting settings[] = { /* name, variable, type, render, description */ {"recolor", &(Zathura.Global.recolor), 'b', TRUE, "Invert the image"}, {"password", &(Zathura.PDF.password), 's', FALSE, "The password of the document"}, + {"labels", &(Zathura.Global.enable_labels), 'b', FALSE, "Use labels for pages"}, }; diff --git a/zathura.c b/zathura.c index 8465622..65468b6 100644 --- a/zathura.c +++ b/zathura.c @@ -111,7 +111,9 @@ typedef struct typedef struct { - PopplerPage *page; + PopplerPage *page; + int id; + char *label; } Page; typedef struct @@ -184,6 +186,7 @@ struct int mode; int viewing_mode; gboolean recolor; + gboolean enable_labels; GtkLabel *status_text; GtkLabel *status_buffer; GtkLabel *status_state; @@ -409,6 +412,7 @@ init_zathura() Zathura.Global.viewing_mode = NORMAL; Zathura.Global.recolor = RECOLOR_OPEN; Zathura.Global.adjust_mode = ADJUST_OPEN; + Zathura.Global.enable_labels = ENABLE_LABELS; Zathura.State.filename = (char*) DEFAULT_TEXT; Zathura.State.pages = ""; @@ -850,7 +854,9 @@ open_file(char* path, char* password) for(i = 0; i < Zathura.PDF.number_of_pages; i++) { Zathura.PDF.pages[i] = malloc(sizeof(Page)); + Zathura.PDF.pages[i]->id = i + 1; Zathura.PDF.pages[i]->page = poppler_document_get_page(Zathura.PDF.document, i); + g_object_get(G_OBJECT(Zathura.PDF.pages[i]->page), "label", &(Zathura.PDF.pages[i]->label), NULL); } g_static_mutex_unlock(&(Zathura.Lock.pdflib_lock)); @@ -906,9 +912,20 @@ update_status() /* update text */ gtk_label_set_markup((GtkLabel*) Zathura.Global.status_text, Zathura.State.filename); + /* update pages */ + if( Zathura.PDF.document && Zathura.PDF.pages ) + { + int page = Zathura.PDF.page_number; + if(Zathura.Global.enable_labels && Zathura.PDF.pages[page]->label) + Zathura.State.pages = g_strdup_printf("[%s/%i]", + Zathura.PDF.pages[page]->label, Zathura.PDF.number_of_pages); + else + Zathura.State.pages = g_strdup_printf("[%i/%i]", page + 1, Zathura.PDF.number_of_pages); + } + /* update state */ char* zoom_level = (Zathura.PDF.scale != 0) ? g_strdup_printf("%d%%", Zathura.PDF.scale) : ""; - char* status_text = g_strdup_printf("%s %d%% %s", zoom_level, Zathura.State.scroll_percentage, Zathura.State.pages); + char* status_text = g_strdup_printf("%s %s", zoom_level, Zathura.State.pages); gtk_label_set_markup((GtkLabel*) Zathura.Global.status_state, status_text); } @@ -1048,7 +1065,6 @@ set_page(int page) } Zathura.PDF.page_number = page; - Zathura.State.pages = g_strdup_printf("[%i/%i]", page + 1, Zathura.PDF.number_of_pages); Argument argument; argument.n = TOP; @@ -1145,10 +1161,6 @@ search(void* parameter) gdk_threads_leave(); } - else - { - printf("Nothing found for %s\n", search_item); - } g_static_mutex_lock(&(Zathura.Lock.search_lock)); Zathura.Thread.search_thread_running = FALSE; @@ -1406,12 +1418,6 @@ sc_scroll(Argument* argument) else gtk_adjustment_set_value(adjustment, (value + SCROLL_STEP) > max ? max : (value + SCROLL_STEP)); - int percentage = 100 * (value / max); - percentage = (percentage < 0) ? 0 : ((percentage > 100) ? 100 : percentage); - - if( (argument->n != LEFT) && (argument->n != RIGHT) ) - Zathura.State.scroll_percentage = percentage; - update_status(); } @@ -2402,9 +2408,9 @@ cmd_set(int argc, char** argv) if(argv[1]) { if(!strcmp(argv[1], "false") || !strcmp(argv[1], "0")) - *x = TRUE; - else *x = FALSE; + else + *x = TRUE; } } else if(settings[i].type == 'i') @@ -2446,6 +2452,7 @@ cmd_set(int argc, char** argv) } } + update_status(); return TRUE; } @@ -3181,11 +3188,11 @@ int main(int argc, char* argv[]) init_zathura(); init_directories(); - update_status(); - if(argc >= 2) open_file(argv[1], (argc == 3) ? argv[2] : NULL); + update_status(); + gtk_widget_show_all(GTK_WIDGET(Zathura.UI.window)); gdk_threads_enter();