mirror of
https://git.pwmt.org/pwmt/zathura.git
synced 2024-11-10 22:13:48 +01:00
initial bookmarks implementation
This commit is contained in:
parent
bb466fc891
commit
a6596fb908
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 <girara.h>
|
||||||
|
|
||||||
|
#include "bookmarks.h"
|
||||||
#include "callbacks.h"
|
#include "callbacks.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "document.h"
|
#include "document.h"
|
||||||
@ -189,6 +190,10 @@ zathura_init(int argc, char* argv[])
|
|||||||
free(string_value);
|
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 */
|
/* open document if passed */
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
zathura_document_info_t* document_info = malloc(sizeof(zathura_document_info_t));
|
zathura_document_info_t* document_info = malloc(sizeof(zathura_document_info_t));
|
||||||
@ -231,6 +236,9 @@ zathura_free(zathura_t* zathura)
|
|||||||
|
|
||||||
document_close(zathura);
|
document_close(zathura);
|
||||||
|
|
||||||
|
/* bookmarks */
|
||||||
|
girara_list_free(zathura->bookmarks.bookmarks);
|
||||||
|
|
||||||
/* free print settings */
|
/* free print settings */
|
||||||
g_object_unref(zathura->print.settings);
|
g_object_unref(zathura->print.settings);
|
||||||
g_object_unref(zathura->print.page_setup);
|
g_object_unref(zathura->print.page_setup);
|
||||||
|
@ -84,6 +84,12 @@ typedef struct zathura_s
|
|||||||
girara_mode_t insert; /**> Insert mode */
|
girara_mode_t insert; /**> Insert mode */
|
||||||
} modes;
|
} modes;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
gchar* file; /**> bookmarks file */
|
||||||
|
girara_list_t* bookmarks; /**> bookmarks */
|
||||||
|
} bookmarks;
|
||||||
|
|
||||||
zathura_document_t* document; /**> The current document */
|
zathura_document_t* document; /**> The current document */
|
||||||
} zathura_t;
|
} zathura_t;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user