static EvLinkDest * get_djvu_link_dest (const DjvuDocument *djvu_document, const gchar *link_name, int base_page) { /* #+pagenum #-pagenum #file_id.djvu */ if (g_str_has_prefix (link_name, "#")) { if (g_str_has_suffix (link_name, ".djvu") || (base_page > 0 && g_str_has_prefix (link_name + 1, "+")) || (base_page > 0 && g_str_has_prefix (link_name + 1, "-"))) { return ev_link_dest_new_page (get_djvu_link_page (djvu_document, link_name, base_page)); } else { /* #pagenum #page_label: the djvu spec is not clear on whether #pagenum represents * a link to a page number or to a page label. Here we mimick djview, * and always treat #pagenum as a link to a page label */ return ev_link_dest_new_page_label (link_name + 1); } } return NULL; }
static void load_files (const char **files) { GdkScreen *screen = gdk_screen_get_default (); EvWindowRunMode mode = EV_WINDOW_MODE_NORMAL; gint i; EvLinkDest *global_dest = NULL; if (!files) { if (!ev_application_has_window (EV_APP)) ev_application_open_window (EV_APP, screen, GDK_CURRENT_TIME); return; } if (ev_page_label) global_dest = ev_link_dest_new_page_label (ev_page_label); else if (ev_page_index) global_dest = ev_link_dest_new_page (MAX (0, ev_page_index - 1)); else if (ev_named_dest) global_dest = ev_link_dest_new_named (ev_named_dest); if (fullscreen_mode) mode = EV_WINDOW_MODE_FULLSCREEN; else if (presentation_mode) mode = EV_WINDOW_MODE_PRESENTATION; for (i = 0; files[i]; i++) { const gchar *filename; gchar *uri; gchar *label; GFile *file; EvLinkDest *dest = NULL; const gchar *app_uri; filename = files[i]; label = get_label_from_filename (filename); if (label) { *label = 0; label++; dest = ev_link_dest_new_page_label (label); } else if (global_dest) { dest = g_object_ref (global_dest); } file = g_file_new_for_commandline_arg (filename); uri = g_file_get_uri (file); g_object_unref (file); app_uri = ev_application_get_uri (EV_APP); if (app_uri && strcmp (app_uri, uri) == 0) { g_free (uri); continue; } ev_application_open_uri_at_dest (EV_APP, uri, screen, dest, mode, ev_find_string, GDK_CURRENT_TIME); if (dest) g_object_unref (dest); g_free (uri); } }
static EvLinkDest * get_djvu_link_dest (const DjvuDocument *djvu_document, const gchar *link_name, int base_page) { return ev_link_dest_new_page (get_djvu_link_page (djvu_document, link_name, base_page)); }