|
|
|
@ -17,6 +17,7 @@
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
|
|
#include <X11/Xlib.h>
|
|
|
|
|
#include <X11/keysym.h>
|
|
|
|
@ -38,6 +39,9 @@ static void (*handler[LASTEvent])(XEvent*) = {
|
|
|
|
|
|
|
|
|
|
img_t img;
|
|
|
|
|
win_t win;
|
|
|
|
|
|
|
|
|
|
const char **filenames;
|
|
|
|
|
unsigned int filecnt;
|
|
|
|
|
unsigned int fileidx;
|
|
|
|
|
|
|
|
|
|
void run() {
|
|
|
|
@ -50,6 +54,8 @@ void run() {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main(int argc, char **argv) {
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
parse_options(argc, argv);
|
|
|
|
|
|
|
|
|
|
if (!options->filecnt) {
|
|
|
|
@ -57,7 +63,21 @@ int main(int argc, char **argv) {
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!(filenames = (const char**) malloc(options->filecnt * sizeof(char*))))
|
|
|
|
|
DIE("could not allocate memory");
|
|
|
|
|
|
|
|
|
|
fileidx = 0;
|
|
|
|
|
filecnt = 0;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < options->filecnt; ++i) {
|
|
|
|
|
if (!(img_load(&img, options->filenames[i]) < 0))
|
|
|
|
|
filenames[filecnt++] = options->filenames[i];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!filecnt) {
|
|
|
|
|
fprintf(stderr, "sxiv: no valid image filename given, aborting\n");
|
|
|
|
|
exit(1);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
img.zoom = 1.0;
|
|
|
|
|
img.scalemode = SCALE_MODE;
|
|
|
|
@ -68,7 +88,7 @@ int main(int argc, char **argv) {
|
|
|
|
|
win_open(&win);
|
|
|
|
|
imlib_init(&win);
|
|
|
|
|
|
|
|
|
|
img_load(&img, options->filenames[fileidx]);
|
|
|
|
|
img_load(&img, filenames[fileidx]);
|
|
|
|
|
img_display(&img, &win);
|
|
|
|
|
|
|
|
|
|
run();
|
|
|
|
@ -104,15 +124,15 @@ void on_keypress(XEvent *ev) {
|
|
|
|
|
exit(0);
|
|
|
|
|
case XK_n:
|
|
|
|
|
case XK_space:
|
|
|
|
|
if (fileidx + 1 < options->filecnt) {
|
|
|
|
|
img_load(&img, options->filenames[++fileidx]);
|
|
|
|
|
if (fileidx + 1 < filecnt) {
|
|
|
|
|
img_load(&img, filenames[++fileidx]);
|
|
|
|
|
img_display(&img, &win);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case XK_p:
|
|
|
|
|
case XK_BackSpace:
|
|
|
|
|
if (fileidx > 0) {
|
|
|
|
|
img_load(&img, options->filenames[--fileidx]);
|
|
|
|
|
img_load(&img, filenames[--fileidx]);
|
|
|
|
|
img_display(&img, &win);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|