diff --git a/src/browser.c b/src/browser.c index 089ffcfd2a1efabd9f2004946ea2632295c49221..29b40c7deff5e2d09825b8f30b5fe11b5bbc8c6a 100644 --- a/src/browser.c +++ b/src/browser.c @@ -336,13 +336,12 @@ void browse_key_sel(int change) { } - #define toggle(x,y) if(x & y) x -=y; else x |= y int browse_key(int ch) { char tmp[PATH_MAX]; char sort = 0, nonfo = 0; - struct dir *n; + struct dir *n, *r; switch(ch) { /* selecting items */ @@ -450,8 +449,14 @@ int browse_key(int ch) { break; if(n == NULL) break; - delete_init(n); nonfo++; + /* quirky method of getting the next selected dir without actually selecting it */ + browse_key_sel(n->next ? 1 : -1); + for(r=browse_dir; r!=NULL; r=r->next) + if(r->flags & FF_BSEL) + break; + browse_key_sel(n->next ? -1 : 1); + delete_init(n, r); break; } diff --git a/src/delete.c b/src/delete.c index 0cf6fccd4571ae159dee212b94f6687b260e7186..2963f5d4b7cba58167e66108da6bb953b43607bf 100644 --- a/src/delete.c +++ b/src/delete.c @@ -42,7 +42,7 @@ int delete_delay = 100; suseconds_t lastupdate; -struct dir *root; +struct dir *root, *nextsel; char noconfirm = 0, ignoreerr = 0, state, seloption, curfile[PATH_MAX]; @@ -229,28 +229,32 @@ int delete_dir(struct dir *dr) { void delete_process() { - struct dir *n; + /* determine dir to open after successful delete */ + struct dir *n = root->parent->sub != root ? root->parent->sub : root->next ? root->next : root->parent; + /* confirm */ seloption = 1; while(state == DS_CONFIRM && !noconfirm) if(input_handle(0)) return browse_init(root); - n = root->parent->sub != root ? root->parent->sub : root->next ? root->next : root->parent; - /* delete */ lastupdate = 999; seloption = 0; if(delete_dir(root)) browse_init(root); - else + else { browse_init(n); + if(nextsel) + nextsel->flags |= FF_BSEL; + } } -void delete_init(struct dir *dr) { +void delete_init(struct dir *dr, struct dir *s) { state = DS_CONFIRM; root = dr; pstate = ST_DEL; + nextsel = s; } diff --git a/src/delete.h b/src/delete.h index a994854d647f4672cbd3b72e8d4f8630c4b909e1..a5ecc0d7a1737276b1c5b3b612561e69c53f655b 100644 --- a/src/delete.h +++ b/src/delete.h @@ -33,7 +33,7 @@ extern int delete_delay; void delete_process(void); int delete_key(int); int delete_draw(void); -void delete_init(struct dir *); +void delete_init(struct dir *, struct dir *); #endif