nsxiv87a1ace
(Un)mark single image through generic function
+18 −14
2 files changed
- M commands.c +6 −14
- M main.c +12 −0
| @@ -27,6 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | 28 | void remove_file(int, bool); | |
| 29 | 29 | void load_image(int); | |
| 30 | + | bool mark_image(int, bool); | |
| 30 | 31 | void close_info(void); | |
| 31 | 32 | void open_info(void); | |
| 32 | 33 | int ptr_third_x(void); | |
| @@ -193,12 +194,8 @@ bool cg_zoom(arg_t d) | |||
| 193 | 194 | ||
| 194 | 195 | bool cg_toggle_image_mark(arg_t _) | |
| 195 | 196 | { | |
| 196 | − | files[fileidx].flags ^= FF_MARK; | |
| 197 | − | markcnt += files[fileidx].flags & FF_MARK ? 1 : -1; | |
| 198 | − | if (mode == MODE_THUMB) | |
| 199 | − | tns_mark(&tns, fileidx, !!(files[fileidx].flags & FF_MARK)); | |
| 200 | 197 | markidx = fileidx; | |
| 201 | − | return true; | |
| 198 | + | return mark_image(fileidx, !(files[fileidx].flags & FF_MARK)); | |
| 202 | 199 | } | |
| 203 | 200 | ||
| 204 | 201 | bool cg_reverse_marks(arg_t _) | |
| @@ -217,18 +214,13 @@ bool cg_reverse_marks(arg_t _) | |||
| 217 | 214 | bool cg_mark_range(arg_t _) | |
| 218 | 215 | { | |
| 219 | 216 | int i, d = fileidx < markidx ? 1 : -1; | |
| 220 | − | int flag = files[markidx].flags & FF_MARK; | |
| 221 | − | int oldmarkcnt = markcnt; | |
| 217 | + | bool dirty = false, on = !!(files[markidx].flags & FF_MARK); | |
| 222 | 218 | ||
| 223 | 219 | for (i = fileidx; i != markidx; i += d) { | |
| 224 | − | if ((files[i].flags & FF_MARK) ^ flag) { | |
| 225 | − | files[i].flags = (files[i].flags & ~FF_MARK) | flag; | |
| 226 | − | markcnt += flag ? 1 : -1; | |
| 227 | − | if (mode == MODE_THUMB) | |
| 228 | − | tns_mark(&tns, i, !!flag); | |
| 229 | − | } | |
| 220 | + | if (mark_image(i, on)) | |
| 221 | + | dirty = true; | |
| 230 | 222 | } | |
| 231 | − | return markcnt != oldmarkcnt; | |
| 223 | + | return dirty; | |
| 232 | 224 | } | |
| 233 | 225 | ||
| 234 | 226 | bool cg_unmark_all(arg_t _) | |
| @@ -321,6 +321,18 @@ void load_image(int new) | |||
| 321 | 321 | reset_timeout(animate); | |
| 322 | 322 | } | |
| 323 | 323 | ||
| 324 | + | bool mark_image(int n, bool on) | |
| 325 | + | { | |
| 326 | + | if (!!(files[n].flags & FF_MARK) != on) { | |
| 327 | + | files[n].flags ^= FF_MARK; | |
| 328 | + | markcnt += on ? 1 : -1; | |
| 329 | + | if (mode == MODE_THUMB) | |
| 330 | + | tns_mark(&tns, n, on); | |
| 331 | + | return true; | |
| 332 | + | } | |
| 333 | + | return false; | |
| 334 | + | } | |
| 335 | + | ||
| 324 | 336 | void bar_put(win_bar_t *bar, const char *fmt, ...) | |
| 325 | 337 | { | |
| 326 | 338 | size_t len = bar->size - (bar->p - bar->buf), n; | |