bugfix for ticket #3263 - mcview hex: Incorrect highlight when search string not found
Signed-off-by: Andreas Mohr <and@gmx.li>
diff -ruN mc-4.8.13/src/viewer/actions_cmd.c mc-4.8.13.patch/src/viewer/actions_cmd.c
old
|
new
|
|
99 | 99 | static void |
100 | 100 | mcview_search (mcview_t * view, gboolean start_search) |
101 | 101 | { |
| 102 | off_t want_search_start = view->search_start; |
| 103 | |
102 | 104 | if (start_search) |
103 | 105 | { |
104 | 106 | if (mcview_dialog_search (view)) |
105 | 107 | { |
106 | 108 | if (view->hex_mode) |
107 | | view->search_start = view->hex_cursor; |
| 109 | want_search_start = view->hex_cursor; |
108 | 110 | |
109 | | mcview_do_search (view); |
| 111 | mcview_do_search (view,want_search_start); |
110 | 112 | } |
111 | 113 | } |
112 | 114 | else |
… |
… |
|
114 | 116 | if (view->hex_mode) |
115 | 117 | { |
116 | 118 | if (!mcview_search_options.backwards) |
117 | | view->search_start = view->hex_cursor + 1; |
| 119 | want_search_start = view->hex_cursor + 1; |
118 | 120 | else if (view->hex_cursor > 0) |
119 | | view->search_start = view->hex_cursor - 1; |
| 121 | want_search_start = view->hex_cursor - 1; |
120 | 122 | else |
121 | | view->search_start = 0; |
| 123 | want_search_start = 0; |
122 | 124 | } |
123 | 125 | |
124 | | mcview_do_search (view); |
| 126 | mcview_do_search (view,want_search_start); |
125 | 127 | } |
126 | 128 | } |
127 | 129 | |
diff -ruN mc-4.8.13/src/viewer/internal.h mc-4.8.13.patch/src/viewer/internal.h
old
|
new
|
|
326 | 326 | mc_search_cbret_t mcview_search_cmd_callback (const void *user_data, gsize char_offset, |
327 | 327 | int *current_char); |
328 | 328 | mc_search_cbret_t mcview_search_update_cmd_callback (const void *user_data, gsize char_offset); |
329 | | void mcview_do_search (mcview_t * view); |
| 329 | void mcview_do_search (mcview_t * view, off_t); |
330 | 330 | |
331 | 331 | /*** inline functions ****************************************************************************/ |
332 | 332 | |
diff -ruN mc-4.8.13/src/viewer/search.c mc-4.8.13.patch/src/viewer/search.c
old
|
new
|
|
262 | 262 | /* --------------------------------------------------------------------------------------------- */ |
263 | 263 | |
264 | 264 | void |
265 | | mcview_do_search (mcview_t * view) |
| 265 | mcview_do_search (mcview_t * view, off_t want_search_start) |
266 | 266 | { |
267 | 267 | mcview_search_status_msg_t vsm; |
268 | 268 | |
269 | 269 | off_t search_start = 0; |
| 270 | off_t orig_search_start = view->search_start; |
270 | 271 | gboolean isFound = FALSE; |
271 | 272 | gboolean need_search_again = TRUE; |
272 | 273 | |
273 | 274 | size_t match_len; |
274 | 275 | |
| 276 | view->search_start = want_search_start; |
275 | 277 | /* for avoid infinite search loop we need to increase or decrease start offset of search */ |
276 | 278 | |
277 | 279 | if (view->search_start != 0) |
… |
… |
|
352 | 354 | { |
353 | 355 | int result; |
354 | 356 | |
| 357 | view->search_start = orig_search_start; |
355 | 358 | mcview_update (view); |
356 | 359 | |
357 | 360 | result = |
… |
… |
|
369 | 372 | /* continue search form beginning */ |
370 | 373 | off_t search_end; |
371 | 374 | |
372 | | search_end = view->search_start; |
| 375 | search_end = orig_search_start; |
373 | 376 | /* search_start is 0 here */ |
374 | 377 | view->update_activate = search_start; |
375 | 378 | |
… |
… |
|
390 | 393 | } |
391 | 394 | |
392 | 395 | if (!isFound && view->search->error_str != NULL) |
| 396 | { |
| 397 | view->search_start = orig_search_start; |
| 398 | mcview_update (view); |
393 | 399 | query_dialog (_("Search"), view->search->error_str, D_NORMAL, 1, _("&Dismiss")); |
394 | | |
| 400 | } |
395 | 401 | view->dirty++; |
396 | 402 | } |
397 | 403 | |