Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
On certain platforms [0] a char may be unsigned [1]. The loop for
getopt would loop forever because:
(char)-1 => 255 and 255 != -1
A signed char also worked. I don't know what that would mean for
performance or portability. int feels simpler to me.
[0]: I'm using Arch Linux ARM on the Samsung Chromebook 2, which is
armv7h. Not sure about other ARM platforms. With this fix, imv
appears to work correctly.
details: https://archlinuxarm.org/platforms/armv7/samsung/samsung-chromebook-2
[1]: http://stackoverflow.com/questions/2054939/is-char-signed-or-unsigned-by-default#2054941
|
|
|
|
When the user hits left/right to change image, the time left until the
slideshow changes images is reset. If the user changes image by closing
the current image, the timer is not reset. This patch resolves that.
|
|
It is actually a trivial task for strtoul + some bit shifting, so there is no
need for two separate functions.
|
|
|
|
|
|
This prevents imv from trying to "catch up" on the time that it was
asleep for by playing the gif back at high speed.
|
|
From read(2) manual page on OpenBSD:
Error checks should explicitly test for -1. Code such as
while ((nr = read(fd, buf, sizeof(buf))) > 0)
is not maximally portable, as some platforms allow for nbytes to range
between SSIZE_MAX and SIZE_MAX - 2, in which case the return value of an
error-free read() may appear as a negative number distinct from -1.
Proper loops should use
while ((nr = read(fd, buf, sizeof(buf))) != -1 && nr != 0)
Distingushing between error and eof would also help for debugging.
|
|
|
|
|
|
|
|
Previously imv used -std=gnu11 flag which activated GNU "extensions" of C11
standard. This masked a portability issue in imv: strduo(3) should not have
been visible in `src/loader.c` without inclusion of `<string.h>` header. This
have been fixed. To remidy GNU libc's stange choice to hide X/Open interfaces
in C99 code by default _XOPEN_SOURCE macro was also set. (This should have no
effect on most other platforms.)
|
|
In case of error return non-zero value instead of cleaning up navigator. This
way main loop may do some more cleanup, or maybe even act differently.
|
|
Implementation details should not leak to other parts of the code.
While at it, clean up initialization and destruction of navigator.
|
|
Set "last_time" to current time at declaration time, so that it holds at least
something by the time it is used.
|
|
|
|
This allows to drop extra printing steps and memory allocations.
|
|
This change effectively backs out f1737ddd06141afbe99f37af3b5c2d0f1df5fe7a,
implementing the same functionality in a simpler and more correct way.
Implementation details:
* imv_navigator.wrapped - a new field that has value "0" by default; once
navigator wraps around the list, this field recieves value "1".
* imv_navigator_wrapped(&nav) - a new function that returns non-zero value iff
navigator wrapped around the list. Currently just returns value of
imv_navigator.wrapped.
While at it, expanded "test_navigator_remove" and merged it with
"test_navigator_add". Resulting test is called "test_navigator_add_remove".
Fixes #94.
|
|
When non-cycling mode prevents navigator from wrapping to the other end of list,
undo change to nav->cur_path. Otherwise it will remain out-of-bounds, so that
subsequent calls to navigator functions may produce unexpected results, up to
segmentation violation.
Fixes #93
|
|
Apparently bg_next_frame() functions marked first frames of gifs old before
imv_loader_get_image() had a chance to report them to the main loop. Move
unsetting of ldr->out_is_new_image to imv_loader_get_image().
Fixes #81.
|
|
|
|
|