nsxiva367d35
Update title when moving selection
+22 −13
4 files changed
| @@ -1,6 +1,6 @@ | |||
| 1 | 1 | all: sxiv | |
| 2 | 2 | ||
| 3 | − | VERSION=git-20110218 | |
| 3 | + | VERSION=git-20110219 | |
| 4 | 4 | ||
| 5 | 5 | CC?=gcc | |
| 6 | 6 | PREFIX?=/usr/local | |
| @@ -386,7 +386,7 @@ void on_keypress(XKeyEvent *kev) { | |||
| 386 | 386 | else | |
| 387 | 387 | tns.sel = 0; | |
| 388 | 388 | mode = MODE_THUMBS; | |
| 389 | − | changed = 1; | |
| 389 | + | changed = tns.dirty = 1; | |
| 390 | 390 | } | |
| 391 | 391 | break; | |
| 392 | 392 | ||
| @@ -416,19 +416,19 @@ void on_keypress(XKeyEvent *kev) { | |||
| 416 | 416 | /* move selection */ | |
| 417 | 417 | case XK_h: | |
| 418 | 418 | case XK_Left: | |
| 419 | − | tns_move_selection(&tns, &win, MOVE_LEFT); | |
| 419 | + | changed = tns_move_selection(&tns, &win, MOVE_LEFT); | |
| 420 | 420 | break; | |
| 421 | 421 | case XK_j: | |
| 422 | 422 | case XK_Down: | |
| 423 | − | tns_move_selection(&tns, &win, MOVE_DOWN); | |
| 423 | + | changed = tns_move_selection(&tns, &win, MOVE_DOWN); | |
| 424 | 424 | break; | |
| 425 | 425 | case XK_k: | |
| 426 | 426 | case XK_Up: | |
| 427 | − | tns_move_selection(&tns, &win, MOVE_UP); | |
| 427 | + | changed = tns_move_selection(&tns, &win, MOVE_UP); | |
| 428 | 428 | break; | |
| 429 | 429 | case XK_l: | |
| 430 | 430 | case XK_Right: | |
| 431 | − | tns_move_selection(&tns, &win, MOVE_RIGHT); | |
| 431 | + | changed = tns_move_selection(&tns, &win, MOVE_RIGHT); | |
| 432 | 432 | break; | |
| 433 | 433 | } | |
| 434 | 434 | } | |
| @@ -594,6 +594,8 @@ void run() { | |||
| 594 | 594 | timeout = 75000; | |
| 595 | 595 | if (mode == MODE_NORMAL) | |
| 596 | 596 | img.checkpan = 1; | |
| 597 | + | else | |
| 598 | + | tns.dirty = 1; | |
| 597 | 599 | } | |
| 598 | 600 | break; | |
| 599 | 601 | case ClientMessage: | |
| @@ -35,6 +35,7 @@ void tns_init(tns_t *tns, int cnt) { | |||
| 35 | 35 | tns->cnt = tns->first = tns->sel = 0; | |
| 36 | 36 | tns->thumbs = (thumb_t*) s_malloc(cnt * sizeof(thumb_t)); | |
| 37 | 37 | memset(tns->thumbs, 0, cnt * sizeof(thumb_t)); | |
| 38 | + | tns->dirty = 0; | |
| 38 | 39 | } | |
| 39 | 40 | ||
| 40 | 41 | void tns_free(tns_t *tns, win_t *win) { | |
| @@ -81,12 +82,14 @@ void tns_load(tns_t *tns, win_t *win, const char *filename) { | |||
| 81 | 82 | imlib_render_image_part_on_drawable_at_size(0, 0, w, h, | |
| 82 | 83 | 0, 0, t->w, t->h); | |
| 83 | 84 | imlib_free_image(); | |
| 85 | + | ||
| 86 | + | tns->dirty = 1; | |
| 84 | 87 | } | |
| 85 | 88 | ||
| 86 | 89 | void tns_render(tns_t *tns, win_t *win) { | |
| 87 | 90 | int i, cnt, x, y; | |
| 88 | 91 | ||
| 89 | − | if (!tns || !win) | |
| 92 | + | if (!tns || !tns->dirty || !win) | |
| 90 | 93 | return; | |
| 91 | 94 | ||
| 92 | 95 | tns->cols = MAX(1, win->w / thumb_dim); | |
| @@ -117,6 +120,8 @@ void tns_render(tns_t *tns, win_t *win) { | |||
| 117 | 120 | } | |
| 118 | 121 | } | |
| 119 | 122 | ||
| 123 | + | tns->dirty = 0; | |
| 124 | + | ||
| 120 | 125 | tns_highlight(tns, win, -1); | |
| 121 | 126 | } | |
| 122 | 127 | ||
| @@ -138,13 +143,13 @@ void tns_highlight(tns_t *tns, win_t *win, int old) { | |||
| 138 | 143 | win_draw(win); | |
| 139 | 144 | } | |
| 140 | 145 | ||
| 141 | − | void tns_move_selection(tns_t *tns, win_t *win, movedir_t dir) { | |
| 146 | + | int tns_move_selection(tns_t *tns, win_t *win, movedir_t dir) { | |
| 142 | 147 | int sel, old; | |
| 143 | 148 | ||
| 144 | 149 | if (!tns || !win) | |
| 145 | − | return; | |
| 150 | + | return 0; | |
| 146 | 151 | ||
| 147 | − | sel = tns->sel; | |
| 152 | + | sel = old = tns->sel; | |
| 148 | 153 | ||
| 149 | 154 | switch (dir) { | |
| 150 | 155 | case MOVE_LEFT: | |
| @@ -165,11 +170,12 @@ void tns_move_selection(tns_t *tns, win_t *win, movedir_t dir) { | |||
| 165 | 170 | break; | |
| 166 | 171 | } | |
| 167 | 172 | ||
| 168 | − | if (sel != tns->sel && tns->thumbs[sel].x != 0) { | |
| 169 | − | old = tns->sel; | |
| 173 | + | if (sel != old && tns->thumbs[sel].x != 0) { | |
| 170 | 174 | tns->sel = sel; | |
| 171 | 175 | tns_highlight(tns, win, old); | |
| 172 | 176 | } | |
| 177 | + | ||
| 178 | + | return sel != old; | |
| 173 | 179 | } | |
| 174 | 180 | ||
| 175 | 181 | int tns_translate(tns_t *tns, int x, int y) { | |
| @@ -45,6 +45,7 @@ typedef struct tns_s { | |||
| 45 | 45 | int rows; | |
| 46 | 46 | int first; | |
| 47 | 47 | int sel; | |
| 48 | + | unsigned char dirty; | |
| 48 | 49 | } tns_t; | |
| 49 | 50 | ||
| 50 | 51 | void tns_init(tns_t*, int); | |
| @@ -55,7 +56,7 @@ void tns_load(tns_t*, win_t*, const char*); | |||
| 55 | 56 | void tns_render(tns_t*, win_t*); | |
| 56 | 57 | void tns_highlight(tns_t*, win_t*, int); | |
| 57 | 58 | ||
| 58 | − | void tns_move_selection(tns_t*, win_t*, movedir_t); | |
| 59 | + | int tns_move_selection(tns_t*, win_t*, movedir_t); | |
| 59 | 60 | ||
| 60 | 61 | int tns_translate(tns_t*, int, int); | |
| 61 | 62 | ||