# HG changeset patch # User mroi # Date 1047667705 0 # Node ID 87400040e4a4ae576402c072509368e952de2ae1 # Parent e404d210ff918c42d3c809accf6dcdd6574c9687 try-run menu jumps diff -r e404d210ff91 -r 87400040e4a4 searching.c --- a/searching.c Fri Mar 14 18:47:51 2003 +0000 +++ b/searching.c Fri Mar 14 18:48:25 2003 +0000 @@ -344,6 +344,7 @@ } dvdnav_status_t dvdnav_menu_call(dvdnav_t *this, DVDMenuID_t menu) { + vm_t *try_vm; if(!this) { printerr("Passed a NULL pointer."); @@ -357,12 +358,18 @@ return S_ERR; } - if (vm_jump_menu(this->vm, menu)) { + /* make a copy of current VM and try to navigate the copy to the menu */ + try_vm = vm_new_copy(this->vm); + if (vm_jump_menu(try_vm, menu) && !try_vm->stopped) { + /* merge changes on success */ + vm_merge(this->vm, try_vm); + vm_free_copy(try_vm); this->vm->hop_channel++; pthread_mutex_unlock(&this->vm_lock); return S_OK; } else { - printerr("No such menu."); + vm_free_copy(try_vm); + printerr("No such menu or menu not reachable."); pthread_mutex_unlock(&this->vm_lock); return S_ERR; }