Skip to content

Commit 6d5fa4c

Browse files
committed
Refactor jumplist handling
1 parent 5d29a65 commit 6d5fa4c

File tree

3 files changed

+45
-31
lines changed

3 files changed

+45
-31
lines changed

zathura/jumplist.c

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,14 +128,14 @@ bool zathura_jumplist_load(zathura_t* zathura, const char* file) {
128128
return false;
129129
}
130130

131-
zathura->jumplist.list = zathura_db_load_jumplist(zathura->database, file);
132-
133-
if (zathura->jumplist.list == NULL) {
131+
girara_list_t* list = zathura_db_load_jumplist(zathura->database, file);
132+
if (list == NULL) {
134133
girara_error("Failed to load the jumplist from the database");
135-
136134
return false;
137135
}
138136

137+
girara_list_free(zathura->jumplist.list);
138+
zathura->jumplist.list = list;
139139
zathura->jumplist.size = girara_list_size(zathura->jumplist.list);
140140

141141
if (zathura->jumplist.size != 0) {
@@ -149,3 +149,23 @@ bool zathura_jumplist_load(zathura_t* zathura, const char* file) {
149149

150150
return true;
151151
}
152+
153+
void zathura_jumplist_init(zathura_t* zathura, size_t max_size) {
154+
zathura->jumplist.max_size = max_size;
155+
zathura->jumplist.list = girara_list_new_with_free(g_free);
156+
zathura->jumplist.size = 0;
157+
zathura->jumplist.cur = NULL;
158+
}
159+
160+
void zathura_jumplist_clear(zathura_t* zathura) {
161+
if (zathura == NULL) {
162+
return;
163+
}
164+
165+
/* remove jump list */
166+
girara_list_iterator_free(zathura->jumplist.cur);
167+
zathura->jumplist.cur = NULL;
168+
girara_list_free(zathura->jumplist.list);
169+
zathura->jumplist.list = NULL;
170+
zathura->jumplist.size = 0;
171+
}

zathura/jumplist.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,19 @@ void zathura_jumplist_trim(zathura_t* zathura);
7575
*/
7676
bool zathura_jumplist_load(zathura_t* zathura, const char* file);
7777

78+
/**
79+
* Init jumplist with a maximum size
80+
*
81+
* @param zathura The zathura session
82+
* @param max_size maximum jumplist size (or 0 for unbounded lists)
83+
*/
84+
void zathura_jumplist_init(zathura_t* zathura, size_t max_size);
85+
86+
/**
87+
* Clear jumplist
88+
*
89+
* @param zathura The zathura session
90+
*/
91+
void zathura_jumplist_clear(zathura_t* zathura);
92+
7893
#endif

zathura/zathura.c

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -384,16 +384,6 @@ static void init_database(zathura_t* zathura) {
384384
}
385385
#endif
386386

387-
static void init_jumplist(zathura_t* zathura) {
388-
int jumplist_size = 20;
389-
girara_setting_get(zathura->ui.session, "jumplist-size", &jumplist_size);
390-
391-
zathura->jumplist.max_size = jumplist_size < 0 ? 0 : jumplist_size;
392-
zathura->jumplist.list = NULL;
393-
zathura->jumplist.size = 0;
394-
zathura->jumplist.cur = NULL;
395-
}
396-
397387
static void init_shortcut_helpers(zathura_t* zathura) {
398388
zathura->shortcut.mouse.x = 0;
399389
zathura->shortcut.mouse.y = 0;
@@ -439,7 +429,9 @@ bool zathura_init(zathura_t* zathura) {
439429
(girara_free_function_t)zathura_bookmark_free);
440430

441431
/* jumplist */
442-
init_jumplist(zathura);
432+
int jumplist_size = 20;
433+
girara_setting_get(zathura->ui.session, "jumplist-size", &jumplist_size);
434+
zathura_jumplist_init(zathura, MAX(jumplist_size, 0));
443435

444436
/* CSS for index mode */
445437
if (init_css(zathura) == false) {
@@ -524,13 +516,7 @@ void zathura_free(zathura_t* zathura) {
524516
g_free(zathura->config.cache_dir);
525517

526518
/* free jumplist */
527-
if (zathura->jumplist.cur != NULL) {
528-
girara_list_iterator_free(zathura->jumplist.cur);
529-
}
530-
531-
if (zathura->jumplist.list != NULL) {
532-
girara_list_free(zathura->jumplist.list);
533-
}
519+
zathura_jumplist_clear(zathura);
534520

535521
g_free(zathura);
536522
}
@@ -1192,7 +1178,6 @@ bool document_open(zathura_t* zathura, const char* path, const char* uri, const
11921178
/* jumplist */
11931179
if (zathura_jumplist_load(zathura, file_path) == false) {
11941180
girara_debug("Failed to load jumplist.");
1195-
zathura->jumplist.list = girara_list_new2(g_free);
11961181
}
11971182

11981183
/* quickmarks */
@@ -1202,8 +1187,7 @@ bool document_open(zathura_t* zathura, const char* path, const char* uri, const
12021187
}
12031188
} else {
12041189
/* create fallback lists */
1205-
zathura->jumplist.list = girara_list_new2(g_free);
1206-
zathura->global.marks = girara_list_new2(g_free);
1190+
zathura->global.marks = girara_list_new2(g_free);
12071191
}
12081192

12091193
if (zathura->jumplist.list == NULL || zathura->global.marks == NULL) {
@@ -1466,12 +1450,7 @@ bool document_close(zathura_t* zathura, bool keep_monitor) {
14661450
zathura->global.marks = NULL;
14671451
}
14681452

1469-
/* remove jump list */
1470-
girara_list_iterator_free(zathura->jumplist.cur);
1471-
zathura->jumplist.cur = NULL;
1472-
girara_list_free(zathura->jumplist.list);
1473-
zathura->jumplist.list = NULL;
1474-
zathura->jumplist.size = 0;
1453+
zathura_jumplist_clear(zathura);
14751454

14761455
/* release render thread */
14771456
g_clear_object(&zathura->sync.render_thread);

0 commit comments

Comments
 (0)