This commit is contained in:
Sebastian Ramacher 2018-06-02 11:12:14 +02:00
parent 2899daa838
commit abb76d8dfe

View file

@ -118,75 +118,17 @@ zathura_link_get_target(zathura_link_t* link)
}
static void
link_remote(zathura_t* zathura, const char* file)
link_goto_dest(zathura_t* zathura, const zathura_link_t* link)
{
if (zathura == NULL || file == NULL || zathura->document == NULL) {
return;
}
const char* path = zathura_document_get_path(zathura->document);
char* dir = g_path_get_dirname(path);
char* uri = g_build_filename(dir, file, NULL);
char* argv[] = {
*(zathura->global.arguments),
uri,
NULL
};
GError* error = NULL;
if (g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error) == FALSE) {
girara_error("Failed to execute command: %s", error->message);
g_error_free(error);
}
g_free(uri);
g_free(dir);
}
static void
link_launch(zathura_t* zathura, zathura_link_t* link)
{
if (zathura == NULL || link == NULL || zathura->document == NULL) {
return;
}
/* get file path */
if (link->target.value == NULL) {
return;
};
char* path = NULL;
if (g_path_is_absolute(link->target.value) == TRUE) {
path = g_strdup(link->target.value);
} else {
const char* document = zathura_document_get_path(zathura->document);
char* dir = g_path_get_dirname(document);
path = g_build_filename(dir, link->target.value, NULL);
g_free(dir);
}
if (girara_xdg_open(path) == false) {
girara_notify(zathura->ui.session, GIRARA_ERROR, _("Failed to run xdg-open."));
}
g_free(path);
}
void
zathura_link_evaluate(zathura_t* zathura, zathura_link_t* link)
{
if (zathura == NULL || zathura->document == NULL || link == NULL) {
if (link->target.destination_type == ZATHURA_LINK_DESTINATION_UNKNOWN) {
girara_warning("link destination type unknown");
return;
}
bool link_zoom = true;
girara_setting_get(zathura->ui.session, "link-zoom", &link_zoom);
switch (link->type) {
case ZATHURA_LINK_GOTO_DEST:
if (link->target.destination_type != ZATHURA_LINK_DESTINATION_UNKNOWN) {
if (link->target.zoom >= DBL_EPSILON && link_zoom) {
if (link->target.zoom >= DBL_EPSILON && link_zoom == true) {
zathura_document_set_zoom(zathura->document,
zathura_correct_zoom_value(zathura->ui.session, link->target.zoom));
render_all(zathura);
@ -196,6 +138,7 @@ zathura_link_evaluate(zathura_t* zathura, zathura_link_t* link)
zathura_page_t* page = zathura_document_get_page(zathura->document,
link->target.page_number);
if (page == NULL) {
girara_warning("link to non-existing page %u", link->target.page_number);
return;
}
@ -246,6 +189,69 @@ zathura_link_evaluate(zathura_t* zathura, zathura_link_t* link)
position_set(zathura, pos_x, pos_y);
zathura_jumplist_add(zathura);
}
static void
link_remote(zathura_t* zathura, const char* file)
{
if (zathura == NULL || file == NULL || zathura->document == NULL) {
return;
}
const char* path = zathura_document_get_path(zathura->document);
char* dir = g_path_get_dirname(path);
char* uri = g_build_filename(dir, file, NULL);
char* argv[] = {
*(zathura->global.arguments),
uri,
NULL
};
GError* error = NULL;
if (g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error) == FALSE) {
girara_error("Failed to execute command: %s", error->message);
g_error_free(error);
}
g_free(uri);
g_free(dir);
}
static void
link_launch(zathura_t* zathura, const zathura_link_t* link)
{
/* get file path */
if (link->target.value == NULL) {
return;
};
char* path = NULL;
if (g_path_is_absolute(link->target.value) == TRUE) {
path = g_strdup(link->target.value);
} else {
const char* document = zathura_document_get_path(zathura->document);
char* dir = g_path_get_dirname(document);
path = g_build_filename(dir, link->target.value, NULL);
g_free(dir);
}
if (girara_xdg_open(path) == false) {
girara_notify(zathura->ui.session, GIRARA_ERROR, _("Failed to run xdg-open."));
}
g_free(path);
}
void
zathura_link_evaluate(zathura_t* zathura, zathura_link_t* link)
{
if (zathura == NULL || zathura->document == NULL || link == NULL) {
return;
}
switch (link->type) {
case ZATHURA_LINK_GOTO_DEST:
link_goto_dest(zathura, link);
break;
case ZATHURA_LINK_GOTO_REMOTE:
link_remote(zathura, link->target.value);