initial bookmarks implementation

This commit is contained in:
Sebastian Ramacher 2011-09-01 15:43:34 +02:00
parent bb466fc891
commit a6596fb908
4 changed files with 109 additions and 0 deletions

66
bookmarks.c Normal file
View file

@ -0,0 +1,66 @@
/* See LICENSE file for license and copyright information */
#include <string.h>
#include "bookmarks.h"
zathura_bookmark_t*
zathura_bookmark_add(zathura_t* zathura, const gchar* id, unsigned int page)
{
g_return_val_if_fail(zathura && zathura->bookmarks.bookmarks, NULL);
g_return_val_if_fail(id, NULL);
GIRARA_LIST_FOREACH(zathura->bookmarks.bookmarks, zathura_bookmark_t*, iter, bookmark)
if (strcmp(bookmark->id, id) == 0)
{
girara_list_iterator_free(iter);
return NULL;
}
GIRARA_LIST_FOREACH_END(zathura->bookmarks.bookmarks, zathura_bookmark_t*, iter, bookmark)
zathura_bookmark_t* bookmark = g_malloc0(sizeof(zathura_bookmark_t));
bookmark->id = g_strdup(id);
bookmark->page = page;
girara_list_append(zathura->bookmarks.bookmarks, bookmark);
return bookmark;
}
void zathura_bookmark_remove(zathura_t* zathura, const gchar* id)
{
g_return_if_fail(zathura && zathura->bookmarks.bookmarks);
g_return_if_fail(id);
zathura_bookmark_t* bookmark = zathura_bookmark_get(zathura, id);
if (bookmark)
{
girara_list_remove(zathura->bookmarks.bookmarks, bookmark);
}
}
zathura_bookmark_t* zathura_bookmark_get(zathura_t* zathura, const gchar* id)
{
g_return_val_if_fail(zathura && zathura->bookmarks.bookmarks, NULL);
g_return_val_if_fail(id, NULL);
GIRARA_LIST_FOREACH(zathura->bookmarks.bookmarks, zathura_bookmark_t*, iter, bookmark)
if (strcmp(bookmark->id, id) == 0)
{
girara_list_iterator_free(iter);
return bookmark;
}
GIRARA_LIST_FOREACH_END(zathura->bookmarks.bookmarks, zathura_bookmark_t*, iter, bookmark)
return NULL;
}
void zathura_bookmark_free(zathura_bookmark_t* bookmark)
{
if (!bookmark)
{
return;
}
g_free(bookmark->id);
g_free(bookmark);
}

29
bookmarks.h Normal file
View file

@ -0,0 +1,29 @@
/* See LICENSE file for license and copyright information */
#ifndef BOOKMARKS_H
#define BOOKMARKS_H
#include <stdbool.h>
#include "zathura.h"
struct zathura_bookmark_s
{
gchar* id;
unsigned int page;
};
typedef struct zathura_bookmark_s zathura_bookmark_t;
zathura_bookmark_t* zathura_bookmark_add(zathura_t* zathura, const gchar* id, unsigned int page);
void zathura_bookmark_remove(zathura_t* zathura, const gchar* id);
zathura_bookmark_t* zathura_bookmark_get(zathura_t* zathura, const gchar* id);
void zathura_bookmark_free(zathura_bookmark_t* bookmark);
bool zathura_bookmarks_load(zathura_t* zathura, const gchar* file);
bool zathura_bookmarks_save(zathura_t* zathura, const gchar* file);
#endif // BOOKMARKS_H

View file

@ -4,6 +4,7 @@
#include <girara.h>
#include "bookmarks.h"
#include "callbacks.h"
#include "config.h"
#include "document.h"
@ -189,6 +190,10 @@ zathura_init(int argc, char* argv[])
free(string_value);
}
/* bookmarks */
zathura->bookmarks.bookmarks = girara_list_new();
girara_list_set_free_function(zathura->bookmarks.bookmarks, (girara_free_function_t) zathura_bookmark_free);
/* open document if passed */
if (argc > 1) {
zathura_document_info_t* document_info = malloc(sizeof(zathura_document_info_t));
@ -231,6 +236,9 @@ zathura_free(zathura_t* zathura)
document_close(zathura);
/* bookmarks */
girara_list_free(zathura->bookmarks.bookmarks);
/* free print settings */
g_object_unref(zathura->print.settings);
g_object_unref(zathura->print.page_setup);

View file

@ -84,6 +84,12 @@ typedef struct zathura_s
girara_mode_t insert; /**> Insert mode */
} modes;
struct
{
gchar* file; /**> bookmarks file */
girara_list_t* bookmarks; /**> bookmarks */
} bookmarks;
zathura_document_t* document; /**> The current document */
} zathura_t;