Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
pwmt
zathura
Commits
f1a5fb45
Commit
f1a5fb45
authored
Dec 07, 2015
by
Sebastian Ramacher
Browse files
Move jumplist code
parent
bd25ce0a
Changes
2
Hide whitespace changes
Inline
Side-by-side
zathura/jumplist.c
0 → 100644
View file @
f1a5fb45
#include "zathura.h"
#include "document.h"
#include "database.h"
#include <girara/utils.h>
static
void
zathura_jumplist_reset_current
(
zathura_t
*
zathura
);
static
void
zathura_jumplist_append_jump
(
zathura_t
*
zathura
);
static
void
zathura_jumplist_save
(
zathura_t
*
zathura
);
bool
zathura_jumplist_has_previous
(
zathura_t
*
zathura
)
{
return
girara_list_iterator_has_previous
(
zathura
->
jumplist
.
cur
);
}
bool
zathura_jumplist_has_next
(
zathura_t
*
zathura
)
{
return
girara_list_iterator_has_next
(
zathura
->
jumplist
.
cur
);
}
zathura_jump_t
*
zathura_jumplist_current
(
zathura_t
*
zathura
)
{
if
(
zathura
->
jumplist
.
cur
!=
NULL
)
{
return
girara_list_iterator_data
(
zathura
->
jumplist
.
cur
);
}
else
{
return
NULL
;
}
}
void
zathura_jumplist_forward
(
zathura_t
*
zathura
)
{
if
(
girara_list_iterator_has_next
(
zathura
->
jumplist
.
cur
))
{
girara_list_iterator_next
(
zathura
->
jumplist
.
cur
);
}
}
void
zathura_jumplist_backward
(
zathura_t
*
zathura
)
{
if
(
girara_list_iterator_has_previous
(
zathura
->
jumplist
.
cur
))
{
girara_list_iterator_previous
(
zathura
->
jumplist
.
cur
);
}
}
static
void
zathura_jumplist_reset_current
(
zathura_t
*
zathura
)
{
g_return_if_fail
(
zathura
!=
NULL
&&
zathura
->
jumplist
.
cur
!=
NULL
);
while
(
true
)
{
if
(
girara_list_iterator_has_next
(
zathura
->
jumplist
.
cur
)
==
false
)
{
return
;
}
girara_list_iterator_next
(
zathura
->
jumplist
.
cur
);
}
}
static
void
zathura_jumplist_append_jump
(
zathura_t
*
zathura
)
{
g_return_if_fail
(
zathura
!=
NULL
&&
zathura
->
jumplist
.
list
!=
NULL
);
zathura_jump_t
*
jump
=
g_try_malloc0
(
sizeof
(
zathura_jump_t
));
if
(
jump
==
NULL
)
{
return
;
}
jump
->
page
=
0
;
jump
->
x
=
0
.
0
;
jump
->
y
=
0
.
0
;
girara_list_append
(
zathura
->
jumplist
.
list
,
jump
);
if
(
zathura
->
jumplist
.
size
==
0
)
{
zathura
->
jumplist
.
cur
=
girara_list_iterator
(
zathura
->
jumplist
.
list
);
}
++
zathura
->
jumplist
.
size
;
zathura_jumplist_trim
(
zathura
);
}
void
zathura_jumplist_trim
(
zathura_t
*
zathura
)
{
g_return_if_fail
(
zathura
!=
NULL
&&
zathura
->
jumplist
.
list
!=
NULL
&&
zathura
->
jumplist
.
size
!=
0
);
girara_list_iterator_t
*
cur
=
girara_list_iterator
(
zathura
->
jumplist
.
list
);
while
(
zathura
->
jumplist
.
size
>
zathura
->
jumplist
.
max_size
)
{
if
(
girara_list_iterator_data
(
cur
)
==
girara_list_iterator_data
(
zathura
->
jumplist
.
cur
))
{
girara_list_iterator_free
(
zathura
->
jumplist
.
cur
);
zathura
->
jumplist
.
cur
=
NULL
;
}
girara_list_iterator_remove
(
cur
);
--
zathura
->
jumplist
.
size
;
}
if
(
zathura
->
jumplist
.
size
==
0
||
(
zathura
->
jumplist
.
size
!=
0
&&
zathura
->
jumplist
.
cur
!=
NULL
))
{
girara_list_iterator_free
(
cur
);
}
else
{
zathura
->
jumplist
.
cur
=
cur
;
}
}
void
zathura_jumplist_add
(
zathura_t
*
zathura
)
{
g_return_if_fail
(
zathura
!=
NULL
&&
zathura
->
document
!=
NULL
&&
zathura
->
jumplist
.
list
!=
NULL
);
unsigned
int
pagenum
=
zathura_document_get_current_page_number
(
zathura
->
document
);
double
x
=
zathura_document_get_position_x
(
zathura
->
document
);
double
y
=
zathura_document_get_position_y
(
zathura
->
document
);
if
(
zathura
->
jumplist
.
size
!=
0
)
{
zathura_jumplist_reset_current
(
zathura
);
zathura_jump_t
*
cur
=
zathura_jumplist_current
(
zathura
);
if
(
cur
!=
NULL
)
{
if
(
cur
->
page
==
pagenum
&&
cur
->
x
==
x
&&
cur
->
y
==
y
)
{
return
;
}
}
}
zathura_jumplist_append_jump
(
zathura
);
zathura_jumplist_reset_current
(
zathura
);
zathura_jumplist_save
(
zathura
);
}
bool
zathura_jumplist_load
(
zathura_t
*
zathura
,
const
char
*
file
)
{
g_return_val_if_fail
(
zathura
!=
NULL
&&
file
!=
NULL
,
false
);
if
(
zathura
->
database
==
NULL
)
{
return
false
;
}
zathura
->
jumplist
.
list
=
zathura_db_load_jumplist
(
zathura
->
database
,
file
);
if
(
zathura
->
jumplist
.
list
==
NULL
)
{
girara_error
(
"Failed to load the jumplist from the database"
);
return
false
;
}
zathura
->
jumplist
.
size
=
girara_list_size
(
zathura
->
jumplist
.
list
);
if
(
zathura
->
jumplist
.
size
!=
0
)
{
zathura
->
jumplist
.
cur
=
girara_list_iterator
(
zathura
->
jumplist
.
list
);
zathura_jumplist_reset_current
(
zathura
);
zathura_jumplist_trim
(
zathura
);
girara_debug
(
"Loaded the jumplist from the database"
);
}
else
{
girara_debug
(
"No jumplist for this file in the database yet"
);
}
return
true
;
}
static
void
zathura_jumplist_save
(
zathura_t
*
zathura
)
{
g_return_if_fail
(
zathura
!=
NULL
&&
zathura
->
document
!=
NULL
);
zathura_jump_t
*
cur
=
zathura_jumplist_current
(
zathura
);
unsigned
int
pagenum
=
zathura_document_get_current_page_number
(
zathura
->
document
);
if
(
cur
!=
NULL
)
{
cur
->
page
=
pagenum
;
cur
->
x
=
zathura_document_get_position_x
(
zathura
->
document
);
cur
->
y
=
zathura_document_get_position_y
(
zathura
->
document
);
}
}
zathura/zathura.c
View file @
f1a5fb45
...
...
@@ -55,9 +55,6 @@ typedef struct zathura_document_info_s {
static
gboolean
document_info_open
(
gpointer
data
);
static
void
zathura_jumplist_reset_current
(
zathura_t
*
zathura
);
static
void
zathura_jumplist_append_jump
(
zathura_t
*
zathura
);
static
void
zathura_jumplist_save
(
zathura_t
*
zathura
);
#ifdef G_OS_UNIX
static
gboolean
zathura_signal_sigterm
(
gpointer
data
);
...
...
@@ -1437,178 +1434,6 @@ error_ret:
return
false
;
}
bool
zathura_jumplist_has_previous
(
zathura_t
*
zathura
)
{
return
girara_list_iterator_has_previous
(
zathura
->
jumplist
.
cur
);
}
bool
zathura_jumplist_has_next
(
zathura_t
*
zathura
)
{
return
girara_list_iterator_has_next
(
zathura
->
jumplist
.
cur
);
}
zathura_jump_t
*
zathura_jumplist_current
(
zathura_t
*
zathura
)
{
if
(
zathura
->
jumplist
.
cur
!=
NULL
)
{
return
girara_list_iterator_data
(
zathura
->
jumplist
.
cur
);
}
else
{
return
NULL
;
}
}
void
zathura_jumplist_forward
(
zathura_t
*
zathura
)
{
if
(
girara_list_iterator_has_next
(
zathura
->
jumplist
.
cur
))
{
girara_list_iterator_next
(
zathura
->
jumplist
.
cur
);
}
}
void
zathura_jumplist_backward
(
zathura_t
*
zathura
)
{
if
(
girara_list_iterator_has_previous
(
zathura
->
jumplist
.
cur
))
{
girara_list_iterator_previous
(
zathura
->
jumplist
.
cur
);
}
}
static
void
zathura_jumplist_reset_current
(
zathura_t
*
zathura
)
{
g_return_if_fail
(
zathura
!=
NULL
&&
zathura
->
jumplist
.
cur
!=
NULL
);
while
(
true
)
{
if
(
girara_list_iterator_has_next
(
zathura
->
jumplist
.
cur
)
==
false
)
{
return
;
}
girara_list_iterator_next
(
zathura
->
jumplist
.
cur
);
}
}
static
void
zathura_jumplist_append_jump
(
zathura_t
*
zathura
)
{
g_return_if_fail
(
zathura
!=
NULL
&&
zathura
->
jumplist
.
list
!=
NULL
);
zathura_jump_t
*
jump
=
g_try_malloc0
(
sizeof
(
zathura_jump_t
));
if
(
jump
==
NULL
)
{
return
;
}
jump
->
page
=
0
;
jump
->
x
=
0
.
0
;
jump
->
y
=
0
.
0
;
girara_list_append
(
zathura
->
jumplist
.
list
,
jump
);
if
(
zathura
->
jumplist
.
size
==
0
)
{
zathura
->
jumplist
.
cur
=
girara_list_iterator
(
zathura
->
jumplist
.
list
);
}
++
zathura
->
jumplist
.
size
;
zathura_jumplist_trim
(
zathura
);
}
void
zathura_jumplist_trim
(
zathura_t
*
zathura
)
{
g_return_if_fail
(
zathura
!=
NULL
&&
zathura
->
jumplist
.
list
!=
NULL
&&
zathura
->
jumplist
.
size
!=
0
);
girara_list_iterator_t
*
cur
=
girara_list_iterator
(
zathura
->
jumplist
.
list
);
while
(
zathura
->
jumplist
.
size
>
zathura
->
jumplist
.
max_size
)
{
if
(
girara_list_iterator_data
(
cur
)
==
girara_list_iterator_data
(
zathura
->
jumplist
.
cur
))
{
girara_list_iterator_free
(
zathura
->
jumplist
.
cur
);
zathura
->
jumplist
.
cur
=
NULL
;
}
girara_list_iterator_remove
(
cur
);
--
zathura
->
jumplist
.
size
;
}
if
(
zathura
->
jumplist
.
size
==
0
||
(
zathura
->
jumplist
.
size
!=
0
&&
zathura
->
jumplist
.
cur
!=
NULL
))
{
girara_list_iterator_free
(
cur
);
}
else
{
zathura
->
jumplist
.
cur
=
cur
;
}
}
void
zathura_jumplist_add
(
zathura_t
*
zathura
)
{
g_return_if_fail
(
zathura
!=
NULL
&&
zathura
->
document
!=
NULL
&&
zathura
->
jumplist
.
list
!=
NULL
);
unsigned
int
pagenum
=
zathura_document_get_current_page_number
(
zathura
->
document
);
double
x
=
zathura_document_get_position_x
(
zathura
->
document
);
double
y
=
zathura_document_get_position_y
(
zathura
->
document
);
if
(
zathura
->
jumplist
.
size
!=
0
)
{
zathura_jumplist_reset_current
(
zathura
);
zathura_jump_t
*
cur
=
zathura_jumplist_current
(
zathura
);
if
(
cur
!=
NULL
)
{
if
(
cur
->
page
==
pagenum
&&
cur
->
x
==
x
&&
cur
->
y
==
y
)
{
return
;
}
}
}
zathura_jumplist_append_jump
(
zathura
);
zathura_jumplist_reset_current
(
zathura
);
zathura_jumplist_save
(
zathura
);
}
bool
zathura_jumplist_load
(
zathura_t
*
zathura
,
const
char
*
file
)
{
g_return_val_if_fail
(
zathura
!=
NULL
&&
file
!=
NULL
,
false
);
if
(
zathura
->
database
==
NULL
)
{
return
false
;
}
zathura
->
jumplist
.
list
=
zathura_db_load_jumplist
(
zathura
->
database
,
file
);
if
(
zathura
->
jumplist
.
list
==
NULL
)
{
girara_error
(
"Failed to load the jumplist from the database"
);
return
false
;
}
zathura
->
jumplist
.
size
=
girara_list_size
(
zathura
->
jumplist
.
list
);
if
(
zathura
->
jumplist
.
size
!=
0
)
{
zathura
->
jumplist
.
cur
=
girara_list_iterator
(
zathura
->
jumplist
.
list
);
zathura_jumplist_reset_current
(
zathura
);
zathura_jumplist_trim
(
zathura
);
girara_debug
(
"Loaded the jumplist from the database"
);
}
else
{
girara_debug
(
"No jumplist for this file in the database yet"
);
}
return
true
;
}
static
void
zathura_jumplist_save
(
zathura_t
*
zathura
)
{
g_return_if_fail
(
zathura
!=
NULL
&&
zathura
->
document
!=
NULL
);
zathura_jump_t
*
cur
=
zathura_jumplist_current
(
zathura
);
unsigned
int
pagenum
=
zathura_document_get_current_page_number
(
zathura
->
document
);
if
(
cur
!=
NULL
)
{
cur
->
page
=
pagenum
;
cur
->
x
=
zathura_document_get_position_x
(
zathura
->
document
);
cur
->
y
=
zathura_document_get_position_y
(
zathura
->
document
);
}
}
#ifdef G_OS_UNIX
static
gboolean
zathura_signal_sigterm
(
gpointer
data
)
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment