aboutsummaryrefslogtreecommitdiff
path: root/src/navigator.c
diff options
context:
space:
mode:
authorHarry Jeffery <harry@exec64.co.uk>2017-11-24 17:19:22 +0000
committerHarry Jeffery <harry@exec64.co.uk>2017-11-24 17:19:22 +0000
commit764f2d30a4eafcb3e828cc971e08f09eebc5698c (patch)
tree5cb6c6937d0f7930d0d47bc22da234931f4ee0ee /src/navigator.c
parentf55ec6749e71c3e70fa5c51474b0437ab27bb0d5 (diff)
downloadimv-764f2d30a4eafcb3e828cc971e08f09eebc5698c.tar.gz
Make the navigator interface opaque
Diffstat (limited to 'src/navigator.c')
-rw-r--r--src/navigator.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/navigator.c b/src/navigator.c
index 9defcbc..23c57ba 100644
--- a/src/navigator.c
+++ b/src/navigator.c
@@ -23,6 +23,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
+#include <time.h>
+
+struct imv_navigator {
+ int num_paths;
+ int cur_path;
+ char **paths;
+ time_t *mtimes;
+ time_t *ctimes;
+ int last_move_direction;
+ int changed;
+ int wrapped;
+ int poll_countdown;
+};
struct imv_navigator *imv_navigator_create(void)
{
@@ -57,11 +70,13 @@ void imv_navigator_free(struct imv_navigator *nav)
static int add_item(struct imv_navigator *nav, const char *path,
time_t mtime)
{
- if(nav->num_paths % BUFFER_SIZE == 0) {
+ const size_t buf_size = 512;
+
+ if(nav->num_paths % buf_size == 0) {
char **new_paths;
time_t *new_mtimes;
time_t *new_ctimes;
- size_t new_size = nav->num_paths + BUFFER_SIZE;
+ size_t new_size = nav->num_paths + buf_size;
new_paths = realloc(nav->paths, sizeof(char*) * new_size);
new_mtimes = realloc(nav->mtimes, sizeof(time_t) * new_size);
new_ctimes = realloc(nav->ctimes, sizeof(time_t) * new_size);
@@ -128,6 +143,11 @@ const char *imv_navigator_selection(struct imv_navigator *nav)
return nav->paths[nav->cur_path];
}
+size_t imv_navigator_index(struct imv_navigator *nav)
+{
+ return (size_t)nav->cur_path;
+}
+
void imv_navigator_select_rel(struct imv_navigator *nav, int direction)
{
const int prev_path = nav->cur_path;
@@ -282,9 +302,9 @@ int imv_navigator_wrapped(struct imv_navigator *nav)
return nav->wrapped;
}
-int imv_navigator_length(struct imv_navigator *nav)
+size_t imv_navigator_length(struct imv_navigator *nav)
{
- return nav->num_paths;
+ return (size_t)nav->num_paths;
}
char *imv_navigator_at(struct imv_navigator *nav, int index)