/* Helper function; see sc_display_link and sc_follow. */ static bool draw_links(zathura_t* zathura) { /* set pages to draw links */ bool show_links = false; unsigned int page_offset = 0; const unsigned int number_of_pages = zathura_document_get_number_of_pages(zathura->document); for (unsigned int page_id = 0; page_id < number_of_pages; page_id++) { zathura_page_t* page = zathura_document_get_page(zathura->document, page_id); if (page == NULL) { continue; } GtkWidget* page_widget = zathura_page_get_widget(zathura, page); GObject* obj_page_widget = G_OBJECT(page_widget); g_object_set(obj_page_widget, "draw-search-results", FALSE, NULL); if (zathura_page_get_visibility(page) == true) { g_object_set(obj_page_widget, "draw-links", TRUE, NULL); int number_of_links = 0; g_object_get(obj_page_widget, "number-of-links", &number_of_links, NULL); if (number_of_links != 0) { show_links = true; } g_object_set(obj_page_widget, "offset-links", page_offset, NULL); page_offset += number_of_links; } else { g_object_set(obj_page_widget, "draw-links", FALSE, NULL); } } return show_links; }
bool cb_sc_follow(GtkEntry* entry, girara_session_t* session) { g_return_val_if_fail(session != NULL, FALSE); g_return_val_if_fail(session->global.data != NULL, FALSE); zathura_t* zathura = session->global.data; bool eval = true; char* input = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); if (input == NULL || strlen(input) == 0) { eval = false; } int index = 0; if (eval == true) { index = atoi(input); if (index == 0 && g_strcmp0(input, "0") != 0) { girara_notify(session, GIRARA_WARNING, _("Invalid input '%s' given."), input); eval = false; } index = index - 1; } /* set pages to draw links */ bool invalid_index = true; unsigned int number_of_pages = zathura_document_get_number_of_pages(zathura->document); for (unsigned int page_id = 0; page_id < number_of_pages; page_id++) { zathura_page_t* page = zathura_document_get_page(zathura->document, page_id); if (page == NULL || zathura_page_get_visibility(page) == false) { continue; } GtkWidget* page_widget = zathura_page_get_widget(zathura, page); g_object_set(page_widget, "draw-links", FALSE, NULL); if (eval == true) { zathura_link_t* link = zathura_page_widget_link_get(ZATHURA_PAGE(page_widget), index); if (link != NULL) { zathura_link_evaluate(zathura, link); invalid_index = false; } } } if (eval == true && invalid_index == true) { girara_notify(session, GIRARA_WARNING, _("Invalid index '%s' given."), input); } g_free(input); return (eval == TRUE) ? TRUE : FALSE; }
void update_visible_pages(zathura_t* zathura) { const unsigned int number_of_pages = zathura_document_get_number_of_pages(zathura->document); for (unsigned int page_id = 0; page_id < number_of_pages; page_id++) { zathura_page_t* page = zathura_document_get_page(zathura->document, page_id); GtkWidget* page_widget = zathura_page_get_widget(zathura, page); ZathuraPage* zathura_page_widget = ZATHURA_PAGE(page_widget); if (page_is_visible(zathura->document, page_id) == true) { /* make page visible */ if (zathura_page_get_visibility(page) == false) { zathura_page_set_visibility(page, true); zathura_page_widget_update_view_time(zathura_page_widget); zathura_renderer_page_cache_add(zathura->sync.render_thread, zathura_page_get_index(page)); } } else { /* make page invisible */ if (zathura_page_get_visibility(page) == true) { zathura_page_set_visibility(page, false); /* If a page becomes invisible, abort the render request. */ zathura_page_widget_abort_render_request(zathura_page_widget); } /* reset current search result */ girara_list_t* results = NULL; GObject* obj_page_widget = G_OBJECT(page_widget); g_object_get(obj_page_widget, "search-results", &results, NULL); if (results != NULL) { g_object_set(obj_page_widget, "search-current", 0, NULL); } } } }