mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-12-29 09:26:00 +01:00
initial bookmarks implementation
This commit is contained in:
parent
bb466fc891
commit
a6596fb908
4 changed files with 109 additions and 0 deletions
66
bookmarks.c
Normal file
66
bookmarks.c
Normal 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
29
bookmarks.h
Normal 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
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue