Consider link types in link_new and link_free

This commit is contained in:
Moritz Lipp 2012-06-06 15:45:20 +02:00
parent dbe0a5c84b
commit 7d2265c294
2 changed files with 22 additions and 12 deletions

29
links.c
View file

@ -31,18 +31,16 @@ zathura_link_new(zathura_link_type_t type, zathura_rectangle_t position,
switch (type) {
case ZATHURA_LINK_GOTO_DEST:
link->target.page_number = target.page_number;
link->target = target;
if (target.value != NULL) {
link->target.value = g_strdup(target.value);
}
break;
case ZATHURA_LINK_GOTO_REMOTE:
case ZATHURA_LINK_URI:
if (target.value == NULL) {
g_free(link);
return NULL;
}
link->target.value = g_strdup(target.value);
break;
case ZATHURA_LINK_LAUNCH:
case ZATHURA_LINK_NAMED:
if (target.value == NULL) {
g_free(link);
return NULL;
@ -66,8 +64,11 @@ zathura_link_free(zathura_link_t* link)
}
switch (link->type) {
case ZATHURA_LINK_GOTO_DEST:
case ZATHURA_LINK_GOTO_REMOTE:
case ZATHURA_LINK_URI:
case ZATHURA_LINK_LAUNCH:
case ZATHURA_LINK_NAMED:
if (link->target.value != NULL) {
g_free(link->target.value);
}
@ -114,14 +115,24 @@ zathura_link_get_target(zathura_link_t* link)
void
zathura_link_evaluate(zathura_t* zathura, zathura_link_t* link)
{
if (zathura == NULL || link == NULL) {
if (zathura == NULL || zathura->document == NULL || link == NULL) {
return;
}
switch (link->type) {
case ZATHURA_LINK_GOTO_DEST:
switch (link->target.destination_type) {
case ZATHURA_LINK_DESTINATION_XYZ:
if (link->target.scale == 0) {
zathura_document_set_scale(zathura->document, link->target.scale);
}
page_set_delayed(zathura, link->target.page_number);
break;
default:
break;
}
break;
case ZATHURA_LINK_GOTO_REMOTE:
link_remote(zathura, link->target.value);
break;

View file

@ -150,8 +150,7 @@ typedef enum zathura_link_destination_type_e
ZATHURA_LINK_DESTINATION_FITR,
ZATHURA_LINK_DESTINATION_FITB,
ZATHURA_LINK_DESTINATION_FITBH,
ZATHURA_LINK_DESTINATION_FITBV,
ZATHURA_LINK_DESTINATION_NAMED
ZATHURA_LINK_DESTINATION_FITBV
} zathura_link_destination_type_t;
typedef struct zathura_link_target_s